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, 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): Key-value map for additional payout metadata or provider-specific options. Pass
{}if not needed. See the API reference for supported keys per destination.
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.