Payouts
Send money from your Saukipay wallet to any bank account.
Sending a payout takes four steps:
- List banks to get the recipient's
bankCode. - Verify the account name so you know the money is going to the right person.
- Add the payout recipient. Saukipay returns a
recipientCode. - Initiate the payout to that
recipientCode.
You only need to add a recipient once. Store the recipientCode and reuse it
for later payouts to the same account.
Payouts must be signed
Payout requests must carry an HMAC-SHA512 signature of the payload, in addition to your bearer token. See Authentication.
List banks
GET /config/bank-listReturns every bank you can pay out to, with the bankCode you need for the
other payout calls.
{
"status": "success",
"message": "Bank list retrieved",
"data": {
"statusCode": "00",
"currency": "NGN",
"banks": [
{
"bankName": "Access bank",
"bankCode": "044",
"logo": "https://cdn-icons-png.freepik.com/256/2830/2830155.png"
},
{
"bankName": "PAYCOM (OPAY)",
"bankCode": "305",
"logo": "https://cdn-icons-png.freepik.com/256/2830/2830155.png"
}
]
}
}Verify an account name
POST /config/account-name-verifyLooks up the name on a bank account. Show it to your user to confirm before you add them as a recipient.
| Field | Type | Required | Description |
|---|---|---|---|
accountNumber | string | Yes | The bank account number. |
bankCode | string | Yes | From List banks. |
currency | string | Yes | For example NGN. |
{
"accountNumber": "0123456789",
"bankCode": "058",
"currency": "NGN"
}{
"status": "success",
"message": "Account name retrieved.",
"data": {
"statusCode": "00",
"banks": "JOHN DOE"
}
}The account name is returned in data.banks.
Add a payout recipient
POST /transaction/add-payout-recipient| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Account type. Use nuban for Nigerian bank accounts. |
name | string | Yes | The account holder's name. |
accountNumber | string | Yes | The bank account number. |
bankCode | string | Yes | From List banks. |
bankName | string | Yes | From List banks. |
currency | string | Yes | NGN, USD or GBP. Defaults to your integration currency. |
{
"type": "nuban",
"name": "John Doe",
"accountNumber": "0123456789",
"bankCode": "305",
"bankName": "PAYCOM (OPAY)",
"currency": "NGN"
}{
"status": "success",
"message": "Invoice created successfully",
"data": {
"statusCode": "00",
"data": {
"recipientCode": "SW-JTEQBHESCV-RECIPIENT"
}
}
}Save the recipientCode. You need it to initiate a payout.
Initiate a payout
POST /transaction/init-payout| Field | Type | Required | Description |
|---|---|---|---|
source | string | Yes | Where the funds come from. Use wallet. |
recipientCode | string | Yes | From Add a payout recipient. |
reason | string | Yes | A description of the payout. |
amount | number | Yes | Amount to send. |
reference | string | Yes | Your unique reference for this payout. |
currency | string | Yes | NGN, USD or GBP. Defaults to your integration currency. |
{
"source": "wallet",
"recipientCode": "SW-JTEQBHESCV-RECIPIENT",
"reason": "Vendor withdrawal",
"amount": 500,
"reference": "PAYOUT-20045",
"currency": "NGN"
}{
"status": "success",
"message": "Transfer successfully logged and Processing",
"data": {
"statusCode": "00"
}
}A successful response means the payout was accepted for processing, not
that it has arrived. Listen for the transfer.success and transfer.failed
webhooks to learn the final result.
Use a unique reference
Every payout needs its own reference. Reusing one is rejected as a
duplicate, which protects you from paying out twice on a retry.