API documentation, Payouts
Send money
anywhere.
Pay out from your Waychit balance to Wave, Afrimoney, QMoney, Yonna, APS or any bank account with one call.
The Waychit Payouts API sends GMD from a merchant prepaid balance to mobile wallets and bank accounts in The Gambia. The balance is debited amount plus fee when the payout is created.
Base URL
https://api.waychit.comCurrency
Whole GMD amounts only.
Balance debit
amount + fee = totalDebit
Endpoints at a glance
POST /v1/payouts
GET /v1/payouts/:id
GET /v1/payouts?clientReference=Create the payout, store data.id, then follow data.status with a lookup or a webhook.
Authentication
Use your merchant API key with the payouts scope.
Authorization: Bearer <api_key>Important: Call this API from your own servers only. Never expose the key in client-side code. Every payout moves real funds.
Channels
| channel | Recipient | destination |
|---|---|---|
wave | Wave mobile wallet | phoneNumber, name? |
afrimoney | Afrimoney mobile wallet | phoneNumber, name? |
qmoney | QMoney mobile wallet | phoneNumber, name? |
yonna | Yonna wallet | phoneNumber, name? |
aps | APS wallet | phoneNumber, name? |
bank | Bank account | accountNumber, name? |
phoneNumber is +220 followed by 7 or 9 digits.
API Endpoints
/v1/payoutsSend GMD to a wallet or bank account. Returns 201 on the first create and 200 when the same key and body are sent again.
curl --location 'https://api.waychit.com/v1/payouts' \
--header 'Authorization: Bearer {{api_key}}' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: payout-42' \
--data '{
"channel": "wave",
"amount": 500,
"destination": {
"phoneNumber": "+220877700011",
"name": "Fatou Ceesay"
},
"clientReference": "payout-42",
"reason": "refund"
}'Headers
| Key | Type | Description | Required |
|---|---|---|---|
| Idempotency-Key | string | 1 to 255 characters, no control characters. Same key and body return the original payout. A different body returns 409. | Yes |
Body parameters
| Key | Type | Description | Required |
|---|---|---|---|
| channel | string | One of the channels above | Yes |
| amount | integer | Positive whole GMD | Yes |
| destination | object | Fields depend on channel, see the channels table | Yes |
| clientReference | string | Your id for this payout. Unique per merchant when set | No |
| reason | string | Max 40 characters. Returned on the payout | No |
| metadata | object | Up to 20 keys. Not returned | No |
Response, status 201
{
"success": true,
"message": "Payout created successfully.",
"data": {
"id": "643...",
"channel": "wave",
"amount": 500,
"fee": 8,
"totalDebit": 508,
"currency": "GMD",
"status": "succeeded",
"clientReference": "payout-42",
"reason": "refund",
"destination": {
"recipientName": "Fatou Ceesay",
"phoneNumber": "+220877700011"
},
"createdAt": "2026-09-27T00:00:00.000Z",
"completedAt": "2026-09-27T00:00:01.000Z",
"refundedAt": null
}
}Returned attributes
| Key | Type | Description |
|---|---|---|
| id | string | Waychit payout id. Store it |
| status | string | pending, processing, succeeded, failed, or reversed |
| fee / totalDebit | number | totalDebit is amount + fee |
| destination | object | recipientName plus phoneNumber, or accountNumber for bank |
| completedAt | string | null | Set when the recipient was paid |
| refundedAt | string | null | Set when the debit was returned |
Idempotency: send Idempotency-Key on every create. Use a new key for a new payout and reuse the same key to safely retry it.
Payout Statuses
pendingDebited. The payout has not finished.
processingDebited. The payout is still in progress.
succeededThe recipient was paid. completedAt is set.
failedThe payout failed. totalDebit is refunded once.
reversedThe payout was reversed. totalDebit is refunded once.
refundedAt is set when the debit has been returned. While the status is pending or processing, poll the lookup or wait for a webhook.
Webhooks
payout.succeededStatus succeeded
payout.failedStatus failed
payout.reversedStatus reversed
{
"id": "payout.succeeded:643...",
"type": "payout.succeeded",
"data": { "id": "643...", "status": "succeeded", "totalDebit": 508 }
}The body is { id, type, data }, where data is the payout object. The id stays the same for a payout and event, so a repeat delivery can be ignored.
Error Handling
Invalid key or body, amount out of range, duplicate clientReference, or insufficient balance.
Missing or invalid API key.
The API key does not have the payouts scope.
Payout not found.
Idempotency key reused with a different body.
Rate limited.
Changelog
2026-10-25
- Payouts to Wave, Afrimoney, QMoney, Yonna, APS, and bank accounts.
Get started
Start sending
payouts.
Get your API keys, fund your balance, and pay out to any wallet or bank in The Gambia.