๐Ÿ“ฃ New Region Unlocked: You can now send payouts directly to Malawi! ๐Ÿ‡ฒ๐Ÿ‡ผ
Payouts
Create Payout

Payout API

The Payout API allows users to create and process payouts to recipients using different payment channels. This guide explains how to use the API effectively, including request parameters, responses, and error handling.

Endpoint

POST {{baseURL}}/v1/payout

Description: This endpoint processes a payout transaction by transferring funds to a specified beneficiary. The request must include recipient details, bank information, and payout amounts.

Authentication

All requests to the Payout API require:

HeaderValueRequiredDescription
x-api-keyAPI_KEY:YOUR_API_KEYโœ… YesAPI key for authentication
Content-Typemultipart/form-dataโœ… YesRequired for sending form data

Security Notes:

  • API keys can be obtained in your Dashboard โ†’ Developers โ†’ API Keys.
  • Requests must originate from whitelisted IP addresses; non-whitelisted IPs will receive a 403 error.
  • All requests are authenticated via API key โ€” keep your key secure and never expose it in client-side code.

Example Request (NGN to NGN via BANK_TRANSFER)

cURL

curl --location '{{baseURL}}/v1/payout' \
--header 'x-api-key: API_KEY:YOUR_API_KEY' \
--header 'Content-Type: multipart/form-data' \
--form 'transaction={
  "recipient": {
    "name": "CHRIS TIANA",
    "account": {
      "bankName": "Guaranty Trust Bank",
      "sortCode": "05x",
      "accountNumber": "0712617XXX"
    },
    "paymentChannel": "BANK_TRANSFER",
    "country": "NG",
    "stored": false
  },
  "quoteId": "453eeu-567j-6tr3d-xxxxxxxxxxxxx",
  "reason": "Bills",
  "remark": ""
}'

Body Parameters

The request body for the payout endpoint is sent as multipart/form-data with a single form field named transaction containing a JSON string.

transaction Object:

FieldTypeRequiredDescription
recipientObjectโœ… YesDetails of the recipient. See Recipient Object below.
quoteIdStringโœ… YesID of the quote related to the payout.
reasonStringโœ… YesReason for payout (e.g., "Bills").
remarkStringโŒ NoOptional remark or note for the payout.

Recipient Object

FieldTypeRequiredDescription
nameStringโœ… YesFull name of the recipient.
accountObjectโœ… YesBank account details of the recipient. See Recipient Account Object below.
paymentChannelStringโœ… YesPayment method, e.g., BANK_TRANSFER.
countryStringโœ… YesRecipient's 2-letter country code (e.g., NG).
storedBooleanโœ… YesIndicates if recipient info is stored for future use (true/false).

Recipient Account Object

FieldTypeRequiredDescription
bankNameStringโœ… YesName of the recipientโ€™s bank.
sortCodeStringโœ… YesBank sort code (e.g., 058).
accountNumberStringโœ… YesRecipient's bank account number.

Responses

Success Response

response.json
{
    "message": "transaction created successfully",
    "status": "success",
    "data": {
        "id": "c6611ad3-805a-415b-98b7-xxxxxxxxxxxxx",
        "remark": "Testing",
        "reason": "Gift",
        "referenceNumber": "L2TEZEHNXXXXXX",
        "type": "SEND",
        "state": "PENDING",
        "quote": {
            "id": "b2eb702a-3f7c-4781-aa76-xxxxxxxxxxxxx",
            "source": {
                "currency": "NGN",
                "country": "NG",
                "amount": 1000.00
            },
            "target": {
                "currency": "NGN",
                "country": "NG",
                "amount": 1000.00
            },
            "rate": 1.00000000,
            "fee": {
                "amount": 100.00
            },
            "summary": {
                "total": 1100.00
            },
            "settlement": "1hr"
        },
        "recipient": {
            "name": "Nzan Christiana",
            "account": {
                "bankName": "Access Bank",
                "sortCode": "044",
                "accountNumber": "005606XXXXXX"
            },
            "paymentChannel": "BANK_TRANSFER",
            "currency": "NGN",
            "country": "NG"
        },
        "created": "2025-08-11T09:45:11.948586402Z",
        "processed": "2025-08-11T09:45:11.948586402Z"
    }
}

Response Breakdown

General Information

FieldTypeDescription
messageStringTransaction status message
statusStringOperation status (success/error)

Transaction Data

FieldTypeDescription
idStringUnique transaction ID
remarkStringNarration for transaction
reasonStringTransaction purpose (Bills)
referenceNumberStringUnique tracking reference
typeStringTransaction type (SEND)
stateStringCurrent status (COMPLETED)
createdStringISO 8601 creation timestamp
processedStringISO 8601 processing timestamp

Quote Details

FieldTypeDescription
quote.idStringUnique quote identifier
quote.rateNumberFX rate used
quote.expiresInSecondsNumberQuote validity
quote.settlementStringEstimated completion time (1hr)

Source Funds

FieldTypeDescription
quote.source.currencyStringNGN
quote.source.countryStringNG
quote.source.amountNumberOriginal amount

Target Funds

FieldTypeDescription
quote.target.currencyStringNGN
quote.target.countryStringNG
quote.target.amountNumberReceived amount

Fees & Summary

FieldTypeDescription
quote.fee.amountNumberTransaction fee
quote.summary.totalNumberTotal deducted

Recipient Details

FieldTypeDescription
recipient.nameStringAccount holder name
recipient.paymentChannelStringBANK_TRANSFER
recipient.countryStringRecipient country (NG)

Bank Account Details

FieldTypeDescription
recipient.account.bankNameStringBank name
recipient.account.sortCodeStringBank branch code
recipient.account.accountNumberStringBank account number

Best Practices

โœ… Include a valid x-api-key in the request headers for authentication.
โœ… Ensure that all recipient information is accurate and properly formatted.
โœ… Validate that the quoteId is correctly provided and linked to an existing quote.
โœ… Handle errors appropriately to ensure robust API usage.