FinVeil Connect
Split payments. Automated payouts. Built for South African marketplaces.
Collect a payment and split it between multiple parties using Paystack subaccounts and split codes, all through one API. Paystack settles each party’s share directly to that party’s Paystack subaccount. Verified end to end in Paystack test mode; live splits are not switched on yet.
How it works
One payment in. Three settlements out.
A customer pays once on Paystack's checkout. Paystack splits the charge at source and settles each share to that party's Paystack subaccount. Illustrative amounts.
Customer pays
R 1,000
via Paystack checkout
FinVeil Connect
Paystack split
Restaurant
Paystack subaccount
R 700
Driver
Paystack subaccount
R 200
Platform
Remainder of the split
R 100
Built for every platform model
From food delivery to ticketing — one Paystack split.
Food delivery
Split each order between restaurant, driver, and platform at checkout.
Freelance marketplaces
Split each project payment between the contractor and your platform fee.
Property rentals
Split a rent payment between landlord, agent, and your service fee.
E-commerce aggregators
Split a checkout between sellers. Each share settles on Paystack’s settlement schedule.
Events & ticketing
Split each ticket sale between the organiser, a partner and your platform fee.
For developers
Create accounts, split, charge.
Create a connected account
curl -X POST https://api.finveil.money/api/connect/accounts \
-H "X-API-Key: fvk_test_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Example Pizza Co.",
"email": "owner@example.co.za",
"bankCode": "<PAYSTACK_BANK_CODE>",
"accountNumber": "<ACCOUNT_NUMBER>",
"payoutSchedule": "DAILY"
}'
# => 201 { "id": "<ACCOUNT_ID>", "subaccountCode": null, ... }
# An ADMIN session then activates it on Paystack:
# POST /api/connect/accounts/<ACCOUNT_ID>/activateCharge against an active split
curl -X POST https://api.finveil.money/api/payment-links \
-H "X-API-Key: fvk_test_..." \
-H "Content-Type: application/json" \
-d '{
"amountCents": 10000,
"currency": "ZAR",
"description": "Order 1042",
"provider": "PAYSTACK",
"expiresInHours": 2,
"splitCode": "SPL_xxxxxxxx"
}'
# => 201 {
# "id": "<LINK_ID>",
# "status": "ACTIVE",
# "paymentUrl": "https://checkout.paystack.com/<ACCESS_CODE>"
# }Pricing
Agreed per platform.
FinVeil's share is the part of each split not assigned to your parties, agreed with each platform before go-live. Paystack's fees are deducted by Paystack. Live splits are not switched on yet.
How it works
Three steps.
Onboard the parties
Create a connected account for every seller or partner, then activate it as a Paystack subaccount.
Collect once
Create a split, then a payment link that charges against it. The customer pays on Paystack’s hosted checkout.
Split at source
Paystack splits the charge per the split code and settles each share on its own settlement schedule.
Benefits
Why teams choose FinVeil Connect.
Split between any number of parties
Up to 50 legs per split, by fixed amount or percentage. Loss-making fee setups are refused before they reach Paystack.
One rail: Paystack
Splits run on Paystack only. Other providers do not support splits in FinVeil.
Refunds and chargebacks
Paystack debits refunds and chargebacks on split payments from FinVeil’s balance. Reversals with each party are handled manually today.
Settlement SMS
Each connected account with a phone number gets an SMS for its share when a split payment settles.
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 docscurl -X POST https://api.finveil.money/api/connect/splits \
-H "X-API-Key: fvk_test_..." \
-H "Content-Type: application/json" \
-d '{
"paymentReference": "order-1042",
"parentAmountCents": 10000,
"splitMode": "PERCENTAGE",
"bearerType": "ALL_PROPORTIONAL",
"splits": [
{ "accountId": "<MERCHANT_ACCOUNT_ID>", "sharePercent": 90 },
{ "accountId": "<PARTNER_ACCOUNT_ID>", "sharePercent": 7 }
]
}'
# => 201 { "id": "<SPLIT_ID>", "splitCode": null, "status": "PENDING", ... }
# An ADMIN session then activates it: POST /api/connect/splits/<SPLIT_ID>/activate