Create a payout to send funds to a beneficiary’s bank account via API.
PENDING status| Header | Required | Description |
|---|---|---|
Idempotency-Key | Yes | Client-generated unique key to prevent duplicate payouts. Generate using UUID or order ID before making the request. |
x-api-key | Yes | Your API key |
| Field | Type | Required | Description |
|---|---|---|---|
sourceAmount | number | Yes | Amount to debit from source wallet |
sourceCurrency | string | Yes | Source wallet currency (e.g., “NGN”, “USD”). Debit is always from this currency’s wallet—the system debits the business wallet that matches this currency. |
destinationCurrency | string | Yes | Destination currency (e.g., “CNY”, “NGN”) |
destinationCountryCode | string | Yes | ISO country code (3-letter ISO 3166-1 alpha-3, e.g., “CHN” for China, “NGA” for Nigeria, “USA” for United States) |
method | string | Yes | Payment method (e.g., “ALIPAY”, “SWIFT”, “NIP”) |
beneficiary | object | Yes | Beneficiary details (fields depend on method - see /methods endpoint) |
narration | string | Yes | Payment description |
supportingDocument | string (URL) | Yes | Supporting document URL (HTTPS required). Required: Upload invoices or receipts for every payout to expedite compliance review and faster payment processing. |
accountName and accountCurrency. Required fields vary by payment method and are validated at the service level.
Key Points:
GET /methods endpoint to discover which fields are required for your payment methodbeneficiary.countryCode is not provided, it will be automatically derived from destinationCountryCode in the request bodyaccountName, accountCurrency, and alipayId. All other fields can be omitted.
| Field | Type | Description |
|---|---|---|
id | string (UUID) | Payout identifier - Save this ID to track status via GET /:id or webhook notifications |
payoutRef | string | Human-readable payout reference |
sourceAmount | number | Amount debited from source wallet |
sourceCurrency | string | Source currency |
destinationAmount | number | Amount sent to beneficiary (after FX conversion) |
destinationCurrency | string | Destination currency |
exchangeRate | number | Actual exchange rate used for conversion - This is the rate that was applied at the time of payout initiation. If you previously viewed rates via GET /pairs or GET /methods, those rates were for reference only. Always check this field to confirm the rate that was actually used. |
transactionFees | number | Transaction fees (currently 0) |
status | string | One of: PENDING, PROCESSING, SUCCESSFUL, FAILED, REJECTED |
method | string | Payment method used |
narration | string | Payment description |
createdAt | string (ISO 8601) | Payout creation timestamp |
updatedAt | string (ISO 8601) | Last update timestamp |
409 Conflict (use a new key)400 Bad RequestGET /methods endpoint to get required fields for your payment method. Required fields vary by method:
accountName, alipayIdaccountName, and one of: openId OR wechatUserIdaccountName, ibanaccountName, accountNumber, swiftCode (required), bankName, beneficiaryCountry (required), iban (optional), intermediarySwift (optional), address (optional), city (optional), postCode (optional)accountName, routingNumber, accountNumber, accountType (enum: “checking” or “savings”)accountName, accountNumber, bankCodeaccountName, sortCode, accountNumberaccountName, and one of: fpsId OR phoneNumber OR email OR (accountNumber + bankCode)id so you can track which payout was updated.
To enable webhooks:
payout.status.changed.v1 events when status changespayoutId - The payout ID (use this to match with your records)oldStatus - Previous statusnewStatus - New status (one of PENDING, PROCESSING, SUCCESSFUL, FAILED, REJECTED)changedAt - Timestamp of status changereason - Human-readable reason for the changePOST /initiate, the system fetches the current exchange rate from our rate databaseGET /pairs or GET /methods, those rates were for reference only. The actual rate applied may be different if rates changed between viewing and initiatingexchangeRate field in this response shows the rate that was actually used for your payoutexchangeRate from the /initiate response to your users to show them the actual rate that was applied, rather than relying on rates shown in preview endpoints.
PENDING statusid field from the response to track payout statusexchangeRate field in the response to see the rate that was actually applied"550e8400-e29b-41d4-a716-446655440000"
Unique identifier for the business
"6fd2b69f-c529-4fe4-b680-29256f860553"
Amount in the source currency
1000
Source currency code
"USD"
Destination currency code
"NGN"
Payment method
SWIFT, NIP, HK_FPS, CHINA_WIRE, FASTER_PAYMENTS, WIRE, ACH, SEPA "NIP"
Destination country code
"NGA"
Transaction description
"Andromeda Galaxy"
URL to supporting document
"https://sample.com/doc"
Payout initiated successfully