Instant Payouts
Payouts to South African bank accounts. In development.
The payout API and batch approvals are built. No payout rail is connected yet: the Paystack transfer client has not been tested with South African bank accounts, and the Stitch adapter (PayShap, RTC) is built but not connected. FinVeil does not offer PayShap or RTC settlement today. When enabled, payouts are funded from FinVeil’s Paystack balance. Push-to-card payouts are on our roadmap.
Settlement SMS
Parties hear when their share settles.
Today this applies to split payments: each connected account with a phone number gets an SMS when its share settles. Money reaches the bank account on Paystack's settlement schedule. Illustrative example below — not customer data.
FinVeil: ZAR 90.00 settled to your account from a ZAR 100.00 customer payment. Ref FV-COL-EXAMPLE.
Illustrative — not customer data
- SMS on split settlement — built and sending
- Sent to connected accounts that have a phone number
- WhatsApp — built, not connected
- Email — not switched on yet
# Set phoneNumber when you create the connected account
POST /api/connect/accounts
{ "name": "...", "phoneNumber": "+27820000000", ... }
# When a split payment settles, that account receives:
FinVeil: ZAR {share} settled to your account from a
ZAR {gross} customer payment. Ref {reference}.How it works
Three steps.
You authorise the payout
POST /v1/payouts with an amount, a recipient ID and an Idempotency-Key.
FinVeil routes it
The routing engine records its choice and fallback order. Live payouts are refused until a rail is connected and the recipient’s bank account is verified.
Receipt minted
A settled payout gets a SHA-256 receipt, batched hourly into a Merkle root held by FinVeil.
Benefits
Why teams choose Instant Payouts.
Sandbox first
In test mode, payouts settle against simulated outcomes, so you can build the integration before a live rail is connected.
Per-rail per-transaction pricing
Per-rail fees are published on the pricing page. Pay only for what you use, never bundled or flat.
Idempotent by default
Pass an Idempotency-Key — retry safely without ever double-paying a recipient.
Two-person approval
On batches over R500,000, the submitter and the approver must be different people.
Who it's for
Developer-friendly
Drop it into your stack.
REST API with an OpenAPI reference, and a test mode on the same API. Sign up for test API keys without a sales call. SDKs are available on request.
Read the docs# /v1 is a paid-plan API. Sandbox (free) keys receive 403 FV-1003.
curl -X POST https://api.finveil.money/v1/payouts \
-H "X-API-Key: fvk_test_..." \
-H "Idempotency-Key: payout-8421" \
-H "Content-Type: application/json" \
-d '{
"amountCents": 500000,
"currency": "ZAR",
"recipientId": "<RECIPIENT_ID>"
}'
# => 202 { "id": "...", "kind": "PAYOUT", "state": "...",
# "isTest": true, "sandboxNote": "...", ... }Works with