Bulk payout lifecycle
How it works
Send all payout orders in one request to
POST /v1/bulk/payout. Each item includes a unique referenceNumber, amount, reason, and full recipient bank details.A
202 Accepted response means the batch has been queued — not yet processed. Orders are settled asynchronously. Listen for payout.completed and payout.failed webhooks to track individual transfer outcomes.Poll for results using the
batchId returned from Step 1. This is useful if you want to check overall progress without waiting for individual webhooks.Every individual payout in the batch triggers its own separate webhook — so a batch with 15 orders will fire 15 individual webhook events. Each webhook is either
payout.completed or payout.failed, depending on the outcome of that specific transfer.Use the
referenceNumber from each order to correlate incoming webhook events with specific transfers in your system.Your webhook endpoint must be able to handle multiple concurrent deliveries. For a large batch, many webhooks may arrive in quick succession as transfers are settled.
See Webhook Signature Verification to secure your endpoint.
Request body breakdown
| Field | Type | Required | Description |
|---|---|---|---|
items | Array | ✅ | List of individual payout orders (see below). |
items[].referenceNumber | String | ✅ | Your unique reference for this specific order. |
items[].targetAmount | String | ✅ | Amount to send to the recipient. |
items[].reason | String | ✅ | Purpose of the transfer (e.g. Salary payment). |
items[].recipient.name | String | ✅ | Full name of the recipient. |
items[].recipient.account.bankName | String | ✅ | Name of the recipient’s bank. |
items[].recipient.account.sortCode | String | ✅ | Bank sort code / bank code. |
items[].recipient.account.accountNumber | String | ✅ | Recipient’s bank account number. |
items[].recipient.paymentChannel | String | ✅ | Payment method (e.g. BANK_TRANSFER). |
items[].recipient.currency | String | ✅ | Target currency code (e.g. NGN). |
items[].recipient.country | String | ✅ | Target country code (e.g. NG). |
paymentChannel | String | ✅ | Top-level payment channel for the batch. |
remark | String | ❌ | A general note for the entire batch submission. |
Response breakdown
| Field | Type | Description |
|---|---|---|
message | String | Confirmation message from the API. |
status | String | Overall request status (success or failed). |
data.state | String | The processing state of the batch (e.g. pending, completed). |
data.batchId | String | Unique identifier for the batch submission. |
data.startTimestamp | String | ISO 8601 timestamp of when processing began. |
data.endTimestamp | String | ISO 8601 timestamp of when processing finished (null if pending). |
data.batchTotal | Number | Total number of payout orders in the batch. |
data.totalSuccessful | Number | Total orders that have reached a final success state. |
data.totalFailed | Number | Total orders that have failed processing. |
data.totalPending | Number | Total orders still in the queue or being processed. |
data.items | Array | A list of all individual payout orders and their specific statuses. |
Key behaviors
| Behavior | Description |
|---|---|
| Independent processing | Each transfer is validated and processed separately. A single failure does not block other orders. |
| Balance pre-check | The system validates that your wallet balance covers the total amount plus all fees before processing any orders. |
| Individual transaction records | Every order generates its own referenceNumber. Use the Get Transaction API to fetch full traceability details. |
| Rate limits | The bulk endpoint enforces payload size limits. Contact support for your account’s maximum orders per request. |
| Audit trail | Both the bulk request reference and individual transaction references are logged for compliance and reconciliation. |
Use cases
Payroll
Disburse salaries to all employees in one API call instead of hundreds of individual transfers.
Vendor Payments
Pay multiple suppliers and vendors across different banks simultaneously.
Commission Payouts
Distribute commissions or rewards to agents, affiliates, or partners at once.
Next steps
Create Bulk Payout API
Full OpenAPI reference for
POST /v1/bulk/payout.Fetch Batch Status API
Check processing status via
GET /v1/bulk/payout/{batchId}/status.Single Payout Guide
Need to send to just one recipient? Use the standard payout flow.

