Skip to main content
    Developers
    Get the App

    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.com

    Currency

    Whole GMD amounts only.

    Balance debit

    amount + fee = totalDebit

    Endpoints at a glance

    http
    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.

    http
    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

    channelRecipientdestination
    waveWave mobile walletphoneNumber, name?
    afrimoneyAfrimoney mobile walletphoneNumber, name?
    qmoneyQMoney mobile walletphoneNumber, name?
    yonnaYonna walletphoneNumber, name?
    apsAPS walletphoneNumber, name?
    bankBank accountaccountNumber, name?

    phoneNumber is +220 followed by 7 or 9 digits.

    API Endpoints

    POST/v1/payouts

    Send GMD to a wallet or bank account. Returns 201 on the first create and 200 when the same key and body are sent again.

    bash
    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

    KeyTypeDescriptionRequired
    Idempotency-Keystring1 to 255 characters, no control characters. Same key and body return the original payout. A different body returns 409.Yes

    Body parameters

    KeyTypeDescriptionRequired
    channelstringOne of the channels aboveYes
    amountintegerPositive whole GMDYes
    destinationobjectFields depend on channel, see the channels tableYes
    clientReferencestringYour id for this payout. Unique per merchant when setNo
    reasonstringMax 40 characters. Returned on the payoutNo
    metadataobjectUp to 20 keys. Not returnedNo

    Response, status 201

    json
    {
      "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

    KeyTypeDescription
    idstringWaychit payout id. Store it
    statusstringpending, processing, succeeded, failed, or reversed
    fee / totalDebitnumbertotalDebit is amount + fee
    destinationobjectrecipientName plus phoneNumber, or accountNumber for bank
    completedAtstring | nullSet when the recipient was paid
    refundedAtstring | nullSet 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

    pending

    Debited. The payout has not finished.

    processing

    Debited. The payout is still in progress.

    succeeded

    The recipient was paid. completedAt is set.

    failed

    The payout failed. totalDebit is refunded once.

    reversed

    The 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.succeeded

    Status succeeded

    payout.failed

    Status failed

    payout.reversed

    Status reversed

    json
    {
      "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

    400

    Invalid key or body, amount out of range, duplicate clientReference, or insufficient balance.

    401

    Missing or invalid API key.

    403

    The API key does not have the payouts scope.

    404

    Payout not found.

    409

    Idempotency key reused with a different body.

    429

    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.