Skip to content
Loading keys…
Authorization<token>

A public key (pk./pk_test.) is accepted on /payments, /customers, /links, /invoices and the catalogue reads (/channels, /providers, /countries, /currencies); anything that moves money out, reads the balance or manages the account answers 406 to it. It is an identifier, never an authorization. Use a secret key (sk./sk_test.) for sensitive operations (transfers, refunds, balance), or a restricted key (rk./rk_test.) scoped to specific permissions. The _test. variant of any key selects the sandbox environment, there is no separate sandbox URL. Never expose your secret key in client-side code.

In: header

Header Parameters

Idempotency-Keystring

Your key for this request, 1 to 128 characters of letters, digits and `. _ : -`. The same request sent again with the same key returns the first answer instead of doing the work twice. See [Idempotency](/api/idempotency).

Request Body

application/json

beneficiarystring | objectrequired

The recipient. Either the `id` of a saved beneficiary, sent as a string, or the recipient's details inline, as the object described below. An inline recipient is saved as a beneficiary by the call. There is no `bank_code` field.

variant 1string

The `id` of a saved beneficiary.

variant 2object

The recipient inline, saved as a beneficiary by the call.

amountnumberrequired

Amount to send in the major currency unit.

currencystring | null

ISO 4217 code. Required from API version 2026-10-12. Before it, a payout without `currency` is sent in XAF, whatever your account's currency: always send it.

descriptionstring | null

Descriptive label for the transfer.

reasonstring | null

Why you pay, up to 255 characters, kept with the transfer.

referencestring | null

Your own reference, up to 255 characters. Stored and returned as is, never checked for uniqueness: it does not protect against a repeated request, only the `Idempotency-Key` header does.

metadataobject | null

Free-form key-value data.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://api.wajub.com/transfers" \  -H "Idempotency-Key: payout-invoice-4172" \  -H "Content-Type: application/json" \  -d '{    "beneficiary": "ben_Fw8Qa3Zr6Ty1Np5Jd2Lv",    "amount": 10000  }'
POST
/transfers
{  "code": 201,  "status": "Created",  "message": "Transfer initiated",  "transfer": {    "id": "po_Gv2Ks9Lp4Xr7Mw1Qt8Zn",    "reference": "payout-892",    "provider_reference": null,    "amount": 10000,    "currency": "XAF",    "description": "Supplier payment #892",    "reason": null,    "metadata": {      "vendor_id": "v_892"    },    "ledger_balance_currency": "XAF",    "sandbox": false,    "status": "processing",    "complete": false,    "source": "api",    "succeeded_at": null,    "created_at": "2026-01-15T14:00:00+00:00",    "updated_at": "2026-01-15T14:00:00+00:00",    "provider": {      "slug": "mtn_momo",      "name": "MTN MoMo"    },    "beneficiary": {      "id": "ben_Fw8Qa3Zr6Ty1Np5Jd2Lv",      "name": "Jean Dupont",      "phone": "+237670000000",      "email": null,      "deleted": false    },    "payment_method": {      "id": "pm_Hx3Lq8Vn2Rt6Ky9Wb4Zd",      "account_number": null,      "phone": "+237670000000"    }  }}

Transfer initiated

What did you think of this content?