Funds Payout
Outbound money transfers from your merchant account to bank accounts or compatible mobile money channels are known as payouts.
This API supports funds payout via a number of methods e.g. Mobile Money, Bank Transfer and many other methods will be supported along the way enabling you to send payments via a simple, secure process that requires only the bank/phone information of the recipients. Please visit this page to learn more about request headers.
Single Transfer - Mobile Money Payout
curl --location 'https://transfer.dev.mypaygate.co/api/v1/transactions/transfer/single' --header 'x-api-key: Base_64(MerchantPublicKey)' --header 'Content-Type: application/json' --data-raw '{
"transactionReference": "PYG-TST-SUCC-6271184009",
"country": "Kenya",
"currency": "KES",
"channel": "Mobile Money",
"transactionType": "1",
"beneficiary": {
"accountName": "John Doe",
"accountNumber": "254710000000",
"phoneNumber": "254710000000",
"accountType": "",
"identificationType": "",
"identificationNumber": "",
"nationalIdNumber": "",
"bankCode": "KESAF",
"amount": 250,
"narration": "Test transaction"
},
"sender": {
"name": "Test Agent",
"phoneNumber": "08137271515",
"email": "daramolatoye@gmail.com",
"countryCode": "KEN",
"currencyCode": "KES"
}
}'
Sample Request - Bank Payout
{
"transactionReference": "PYG-TST-SUCC-\{\{timestampBasedRef\}\}",
"country": "Nigeria",
"currency": "NGN",
"channel": "Bank Transfer",
"transactionType": "1",
"beneficiary": {
"accountName": "Godwin Abbey",
"accountNumber": "0000000000",
"phoneNumber": "254710000000",
"accountType": "",
"identificationType": "",
"identificationNumber": "",
"nationalIdNumber": "",
"bankCode": "100004",
"amount": 100,
"narration": "Test transaction"
},
"sender": {
"name": "Godwin Electrical",
"phoneNumber": "08137179447",
"email": "bolajivictorawosik@gmail.com",
"countryCode": "NGA",
"currencyCode": "NGN"
}
}
Single Transfer - Request Body Parameters
| Field | Data Type | Description | Mandatory |
|---|---|---|---|
| transactionReference | String | Yes | |
| country | String | Yes | |
| currency | String | - | Yes |
| channel | String | This must be one of these: "Bank Transfer" or "Mobile Money" | Yes |
| transactionType | String | For some markets Cameroon - CM; Kenya - KE, it is important to indicate the type of transaction whether it is: 1 (high risk - betting) 2 (low risk - remittance) 3 (crypto) | No (Yes, if KES or XAF) |
| beneficiary.accountName | String | - | Yes |
| beneficiary.accountNumber | String | - | Yes |
| beneficiary.phoneNumber | String | - | No (Yes if request is a low-risk KES payout) |
| beneficiary.accountType | String | Required for South Africa | No (Yes if ZAF) |
| beneficiary.identificationType | String | Required for South Africa | No (Yes if ZAF) |
| beneficiary.identificationNumber | String | Required for South Africa | No (Yes if ZAF) |
| beneficiary.nationalIdNumber | String | Required for Egypt | No (Yes if EGP) |
| beneficiary.bankCode | String | This can be obtained by calling the Get Banks API | Yes |
| beneficiary.amount | Decimal | - | Yes |
| beneficiary.narration | String | - | No |
| sender.name | String | - | Yes |
| sender.phoneNumber | String | - | No (Yes, if XAF) |
| sender.email | String | - | Yes |
| sender.countryCode | String | - | No (Yes, if KES or XAF) |
| sender.currencyCode | String | - | No (Yes, if KES or XAF) |
Single Transfer - Sample Response
- PENDING - SUCCESSFUL INITIATION
- TRANSACTION EXISTS
- Failed - Invalid Authentication
{
"isSuccessful": true,
"responseCode": "09",
"responseMessage": "Transaction successfully submitted",
"responseData": {
"transactionStatus": "INITIALIZED",
"merchantReference": "PYG-17050521-1713252829",
"transactionReference": "PYG-1754037844441048",
"amount": 1,
"feeAmount": 50.00
}
}
{
"isSuccessful": true,
"responseCode": "94",
"responseMessage": "Transaction already exists",
"responseData": {
"transactionStatus": "COMPLETED",
"merchantReference": "PYG-17050521-1713252829",
"transactionReference": "PYG-1754037844441048",
"amount": 1.00,
"feeAmount": 50.00,
"valueAmount": 1.00,
"statusReason": "SUCCESS"
}
}
{
"isSuccessful": false,
"responseCode": "58",
"responseMessage": "Kindly ensure that your x-api-key was properly encoded"
}
Sample Webhooks
- Succesful
- Failed
{
"data": {
"transactionStatus": "COMPLETED",
"merchantReference": "PYG-17050521-TST-SUCC-1752581420",
"transactionReference": "PYG-1752581428835494",
"amount": 3,
"feeAmount": 0.1,
"valueAmount": 3
"statusReason": "Successful"
}
}
{
"data": {
"transactionStatus": "FAILED",
"merchantReference": "TAN00040",
"transactionReference": "PG-P-175433137363970",
"amount": 1.00,
"feeAmount": 0.03,
"valueAmount": 1.00,
"statusReason": "FAILED"
}
}
Bulk Transfer - Sample Request (POST)
curl --location 'https://transfer.dev.mypaygate.co/api/v1/transactions/transfer/bulk' --header 'Content-Type: application/json' --header 'x-api-key: {{BASE64(MERCHANT_PUBLIC_KEY)
}}' --data-raw '{
"transactionReference": "PYG-BCH-17050521-1755771213",
"currency": "NGN",
"country": "Nigeria",
"totalAmount": 1000.0,
"channel": "Bank Transfer",
"transactionType": "1",
"beneficiaries": [
{
"accountName": "John Doe",
"accountNumber": "0000000000",
"bankCode": "000017",
"amount": 300.0,
"narration": "Salary Payment",
"saveBeneficiary": false,
"transactionReference": "PYG-TST-SUCC-752c8243-a9ef-4ee6-9231-f9b9f8a735e0"
},
{
"accountName": "Jane Doe",
"accountNumber": "0000000000",
"bankCode": "000016",
"amount": 1200.0,
"narration": "Salary Payment",
"saveBeneficiary": false,
"transactionReference": "PYG-TST-SUCC-c2f0bcff-afff-4443-a063-dbe4338bdf8a"
},
{
"accountName": "Not Doe",
"accountNumber": "0000000000",
"bankCode": "000013",
"amount": 500.0,
"narration": "Salary Payment",
"saveBeneficiary": false,
"transactionReference": "PYG-TST-FAIL-8676594e-5c4b-4503-b907-ee3e3afaed0f"
}
],
"sender": {
"name": "Merryweather Securities Inc",
"phoneNumber": "",
"email": "adesuyiayo@rocketmail.com"
}
}'
Bulk Transfer - Request Body Parameters
| Field | Data Type | Description | Mandatory |
|---|---|---|---|
| transactionReference | String | Yes | |
| currency | String | Yes | |
| country | String | Yes | |
| totalAmount | Decimal | Yes | |
| channel | String | Yes | |
| beneficiaries.[0].accountName | String | Yes | |
| beneficiaries.[0].accountNumber | String | Yes | |
| beneficiaries.[0].bankCode | String | Yes | |
| beneficiaries.[0].amount | Decimal | Yes | |
| beneficiaries.[0].transactionReference | String | Yes | |
| sender.name | String | Yes | |
| sender.phoneNumber | String | Yes | |
| sender.email | String | Yes |
Bulk Transfer - Sample Response
- 200 - SUCCESSFUL INITIATION
- 400 - TRANSACTION EXISTS
- 400 - INVALID AUTHENTICATION
- 400 - Invalid Request
{
"isSuccessful": true,
"responseCode": "09",
"responseMessage": "Transactions successfully submitted"
}
{
"isSuccessful": false,
"responseCode": "58",
"responseMessage": "Batch reference already exists for this business"
}
{
"isSuccessful": false,
"responseCode": "58",
"responseMessage": "Kindly ensure that your x-api-key was properly encoded"
}
{
"isSuccessful": false,
"responseCode": "58",
"responseMessage": "Total amount does not match sum of beneficiaries' amounts"
}
Sample Webhooks
- Successful
- Failed Transfer
{
"data": {
"transactionStatus": "COMPLETED",
"merchantReference": "PYG-TST-SUCC-6347219788",
"transactionReference": "PG-P-17557806359485D",
"amount": 250,
"feeAmount": 5,
"valueAmount": 250,
"statusReason": "Successful"
}
}
{
"data": {
"transactionStatus": "FAILED",
"merchantReference": "PYG-TST-FAIL-5407443502",
"transactionReference": "PG-P-17557805411228L",
"amount": 500,
"feeAmount": 10,
"valueAmount": 500,
"statusReason": "Failed"
}
}
Base URLs
note
DEVELOPMENT: - https://transfer.dev.mypaygate.co
PRODUCTION: - https://transfer.prod.mypaygate.co