API Reference
One REST API for payment collections, disbursements, splits, cryptographic receipts, reconciliation, conditional payouts, payment links, tax, rates, and webhooks.
Base URL & authentication
Base URL
https://api.finveil.moneyAuthentication
Every request must include an Authorization: Bearer <API_KEY> header (public endpoints such as /verify/:receiptId are the only exception).
API keys come in two flavours: sk_test_… keys hit the sandbox, sk_live_… keys hit production. Provision them from the dashboard or via POST /api/auth/api-keys.
Authentication
Register, exchange credentials for JWT pairs, and provision API keys.
/api/auth/register/api/auth/login/api/auth/refresh/api/auth/api-keysPayments — Collections
Collect money from customers via card, EFT, instant EFT, or QR. One API over Paystack, Ozow, PayFast, Yoco.
/api/payments/collect/api/payments/:id/api/payments/api/payments/:id/refundPayments — Disbursements
Send money out — single payouts, batched CSV payouts, and cancellations before settlement.
/api/disbursements/api/disbursements/batches/api/disbursements/:id/api/disbursements/:id/cancelFinVeil Connect — Splits
Onboard sub-accounts and split a single collection across multiple beneficiaries atomically.
/api/connect/accounts/api/connect/splits/api/connect/splits/:idTransaction Proof
Cryptographic receipts anchored to the Stellar public ledger. Anyone can verify without a FinVeil account.
/api/receipts/:id/verify/:receiptId/api/receipts/:id/merkle-proofReconciliation
Match settlements across Paystack, Ozow, PayFast, and your bank. Surface discrepancies automatically.
/api/reconciliation/runs/api/reconciliation/runs/api/reconciliation/runs/:id/discrepancies/api/reconciliation/exportsConditional Payouts
Hold funds in escrow. Release when a condition (delivery, milestone, manual sign-off) is met.
/api/conditional-payouts/api/conditional-payouts/:id/release/api/conditional-payouts/:id/cancel/api/conditional-payouts/:idPayment Links
Shareable URLs that accept payment without you writing any frontend code.
/api/payment-links/api/payment-links/:id/api/payment-links/:id/payments/api/payment-links/:idTax
SARS-aligned tax estimation, bracket lookups, and year-over-year comparisons.
/api/tax/estimate/api/tax/brackets/api/tax/year-comparisonRates
Live SARB benchmark rates (repo, prime, CPI) and real-time FX quotes.
/api/rates/repo/api/rates/prime/api/rates/cpi/api/fx/quoteWebhooks
Subscribe to events. Every delivery is signed, retried, and fully replayable.
/api/webhooks/endpoints/api/webhooks/deliveries/api/webhooks/deliveries/:id/replayErrors
FinVeil returns errors as RFC 7807 application/problem+json envelopes. Every envelope carries:
code— stable FinVeil error code (e.g.FV-3002).message— human-readable summary.traceId— correlate with our logs when you file support.timestamp— ISO-8601 when the error was produced.retryable— boolean; whether retrying makes sense.retryAfterSeconds— hint for exponential backoff (null when not applicable).details— error-specific context (provider code, entity id, etc.).
HTTP/1.1 402 Payment Required
Content-Type: application/problem+json
{
"code": "FV-3002",
"message": "Payment declined by issuing bank.",
"traceId": "trc_a8e2c1f0d9b4",
"timestamp": "2026-04-18T09:12:44.091Z",
"retryable": false,
"retryAfterSeconds": null,
"details": {
"provider": "paystack",
"providerReason": "insufficient_funds",
"paymentId": "pay_01HRWXC2YQ..."
}
}