Single Payouts
Single payouts allow you to send funds to one recipient at a time. This is ideal for one-off transactions, refunds, or when you need to process payouts individually.
When to Use Single Payouts
- One-time payments to individual recipients
- Refunds or customer disbursements
- Small-scale operations
- Testing and development
Creating a Single Payout
To create a single payout, you’ll need:
- merchantId: Your merchant identifier
- merchantReference: Your internal reference for tracking and idempotency
- destinationValue: Object with:
minorAmount: Amount in minor units (integer, e.g.,10000= 100.00 NGN). See Amount Format below.currency: Must be a supported payout currency (NGN, XOF, XAF, GHS, KES, ZAR, AED, EGP, SAR, USDT, USDC)
- paymentMethodId:
"banktransfer","mobilemoney", or"crypto" - paymentLocation: 3-letter ISO country code (e.g., NGA, KEN, EGY)
- Recipient Details:
- For bank accounts:
type: "bank_account",accountNumber,bankCode,accountHolderName,country, optionalphoneNumber - For mobile wallets:
type: "mobile_money",phoneNumber,country,operator, optionalname - For crypto wallets:
type: "crypto_wallet",address,network(ERC20orTRC20), optionalmemo
- For bank accounts:
- sender (optional): Sender details with KYC fields (required for some destinations)
- attributes (optional): Additional payout attributes as key-value pairs
Amount Format
Amounts are specified in minor units (the smallest currency unit, like cents). The minorAmount field is an integer.
Examples:
10000minorAmount = 100.00 NGN (Nigerian Naira)5000minorAmount = 50.00 KES (Kenyan Shillings)10000minorAmount = 100.00 EGP (Egyptian Pounds)1000000minorAmount = 1.000000 USDT
Important: Fiat currencies use 2 decimal places (multiply by 100). USDT/USDC use 6 decimal places (multiply by 1,000,000).
Request Examples
Bank Account Payout
Note: minorAmount: 1000000 = 10,000.00 NGN (multiply by 100 to convert from major to minor units).
Mobile Wallet Payout
Note: minorAmount: 500000 = 5,000.00 KES.
Crypto Wallet Payout
Note: minorAmount: 1250000 = 1.250000 USDT.
Response Structure
Successful Response
A successful payout response (HTTP 201) includes:
Response fields:
status: Current status (PENDING,PROCESSING,COMPLETED,FAILED,CANCELLED)transactionId: Unique transaction identifiermessage: Status messagemerchantReference: Your provided merchant reference (if supplied)sessionId: Session ID (if applicable)identifiers: Additional identifiers related to the transactionpaymentAttributes: Payment-specific attributes and metadatapaymentMethodId: Payment method identifierprocessorName: Payment processor nameprocessorReference: Payment processor referencefinancialTransactionReference: Financial transaction reference from the processorcurrentAttemptId: Current attempt identifierbatchPayoutId: Batch payout identifier, if part of a bulk payout
Payout Statuses
- PENDING: Payout has been created and is awaiting processing
- PROCESSING: Payout is currently being processed
- COMPLETED: Payout has been successfully completed
- FAILED: Payout has failed (check
message,identifiers, andpaymentAttributesfor details) - CANCELLED: Payout was cancelled
Error Handling
The API returns standard HTTP status codes:
201: Payout transaction initiated successfully400: Bad Request - Invalid payout parameters or insufficient balance401: Unauthorized - Invalid or missing authentication422: Request validation failed500: Internal server error
Error Response Structure
Error responses (HTTP 400, 401, 422) include an error object with code and message fields:
Example error responses:
Insufficient Balance (400):
Invalid Parameters (400):
Unauthorized (401):
Common error codes:
INSUFFICIENT_BALANCE: Not enough funds in the payout currencyINVALID_REQUEST: Invalid request parameters (e.g., invalid currency, missing required fields)INVALID_RECIPIENT: Invalid recipient details (e.g., invalid account number, phone number)UNAUTHORIZED: Invalid or expired access tokenRATE_LIMIT_EXCEEDED: Too many requests (see Rate Limiting)
Example Use Cases
- Refund Processing: Send refunds to customers who returned products
- Vendor Payments: Pay individual suppliers or service providers
- Customer Rewards: Distribute loyalty rewards or cashback
- One-off Disbursements: Send individual payments as needed
Idempotency
The merchantReference field enables idempotency. If you send a payout request with a merchantReference that was used in a previous successful request, the API will return the original payout instead of creating a duplicate. This prevents accidental duplicate payouts if a request is retried.
Best practice: Use unique, meaningful references for each payout (e.g., PAYOUT-2024-001, REFUND-ORDER-12345).
Best Practices
- Always verify recipient details before initiating payouts
- Use unique, meaningful references for idempotency and easy tracking
- Monitor payout status through the history endpoints or webhooks
- Ensure sufficient balance before initiating payouts
- Handle failed payouts by checking
status,message, and any returnedidentifiersorpaymentAttributes - Store payout IDs and references for reconciliation and tracking
- Implement retry logic with exponential backoff for transient failures
For detailed API documentation, see the Payouts API Reference.