Skip to main content

Send money (payout)

A payout sends money from your MoyaPay balance to a beneficiary's mobile money account.

POST /payout

Requires a Bearer token.

Request body​

FieldTypeRequiredDescription
refercence_clstringyesYour merchant reference. Must match the account of the token
business_codestringyesBusiness code provided by MoyaPay. Must belong to your account
country_codestringyesCountry of the transaction: CI, SN, BF, CM, BN, RDC, CB, GMB
payment_methodstringyesPayout code of the payment method, see Payment methods
merchant_transaction_idstringyesYour transaction identifier, unique
amountnumberyesAmount, as a JSON number. See Limits
currencystringyesCurrency of the transaction's country, for example XOF. Choose it from the Currencies by country table
telephonestringyesBeneficiary phone number, as a string. See Limits
successUrlstringyesRedirect URL after a successful payout (redirect-based methods, such as Wave)
failedUrlstringyesRedirect URL after a failed payout
notifyUrlstringyesYour notification URL (see the note in Collect a payment)

Example​

curl -X POST https://services.moya-pay.com/service/api/v1/payout \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"refercence_cl": "CL-123456",
"business_code": "MYP-000000-ABCDEF",
"country_code": "CI",
"payment_method": "WAVE_CI",
"merchant_transaction_id": "PAYOUT-2026-000045",
"amount": 5000,
"currency": "XOF",
"telephone": "0505000000",
"successUrl": "https://shop.example.com/payment/success",
"failedUrl": "https://shop.example.com/payment/failed",
"notifyUrl": "https://shop.example.com/api/moyapay/notify"
}'

Response​

{
"status": 201,
"success": true,
"code": 200,
"message": "TRANSACTION IS INITIATED SUSSESSFULLY",
"data": {
"status": "PENDING",
"transaction_id": "PAYOUT-2026-000045"
}
}

The response has the same shape as for a payin: test success, then read data.status. The final result arrives by callback or through the status endpoint.

Same precautions as a payin

A merchant_transaction_id must stay unique, and an identical transaction (same amount, same number) still in progress for less than a minute is rejected. On a 500 error, check the status before sending again.