Skip to main content

Transfers and payouts

SDK availability

The current official Node.js and PHP SDKs do not expose a payout client. Use the REST examples on this page; the SDK hub tracks the supported SDK surfaces.

Use payouts to send money to supported bank accounts. A reliable payout flow validates the recipient before sending, uses one stable reference per business operation, and treats the initial API response as acceptance—not necessarily final settlement.

Engineering flowBuild, verify, then reconcile
Test this flow in sandbox
  1. 01Get bank dataFetch supported banks and refresh your cache deliberately.
  2. 02Validate recipientShow the returned account name before the user confirms.
  3. 03Create payoutSubmit one server-side request with one durable ref.
  4. 04Reconcile outcomeVerify the original ref and deduplicate signed events.

Use a dashboard-issued sandbox API key on your server. Do not enter credentials into this documentation site.

The payout lifecycle

StepYour application doesWhy it matters
1. Get banksFetch and cache supported bank codes.Avoid hardcoded or stale recipient data.
2. Validate recipientLook up the account name with bank code and account number.Lets a user confirm who will receive funds.
3. Create payoutSubmit a unique ref, amount, bank code, and account number.Prevents duplicate financial operations.
4. ReconcileUse the verification endpoint and relevant webhook events.Confirms final status before marking an order paid.

1. Fetch and cache supported banks

Use the bank list when your user chooses a bank. Cache it in your application and refresh it on a schedule appropriate to your product.

curl https://sandbox.payscribe.ng/api/v1/payouts/bank/list \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY"

2. Validate the recipient

Perform account-name lookup immediately before the user confirms a payout. Present the returned name for confirmation; do not silently substitute it.

curl -X POST https://sandbox.payscribe.ng/api/v1/payouts/account/lookup \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"bank":"058","account":"0123456789"}'

3. Create a single payout

Generate ref in your server before creating the request. Keep that reference when recovering from a timeout or an uncertain result.

curl -X POST https://sandbox.payscribe.ng/api/v1/payouts/transfer \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"ref":"payout_order_10021",
"bank_code":"058",
"account_number":"0123456789",
"amount":10000,
"narration":"Invoice settlement"
}'

The API reference defines request-field units, limits, and the current response schema. Before presenting a final amount to a user, retrieve and display the applicable fee when your workflow requires it.

4. Confirm the final state

Do not consider a payout complete solely because its creation request returned successfully. Verify it by reference and handle the relevant signed webhook event.

curl "https://sandbox.payscribe.ng/api/v1/payouts/verify/payout_order_10021" \
-H "Authorization: Bearer $PAYSCRIBE_API_KEY"

Bulk payouts

Use bulk transfers only after validating the recipient data for every row. Keep a batch reference and record each row's outcome separately; a batch is not a substitute for reconciliation.

See the Transfers API reference for the batch payload and response.

Failure and timeout handling

SituationSafe action
Invalid recipient inputAsk the user to correct the bank/account details; do not retry unchanged data.
Insufficient wallet balanceStop the payout and resolve funding before retrying.
Duplicate referenceReconcile the existing operation; do not create a new payout blindly.
Timeout after submissionKeep the same ref, verify the payout, then decide the next action.
Webhook retryVerify its signature and process its event ID once.

Use References and duplicate protection, Webhooks, and Common errors when implementing recovery paths.

Was this page helpful?

Report a docs issue →