Verser de l'argent (payout)
Un payout envoie de l'argent depuis votre solde MoyaPay vers le compte mobile money d'un bénéficiaire.
POST /payout
Requiert un jeton Bearer.
Corps de la requête
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
refercence_cl | string | oui | Votre référence marchand. Doit correspondre au compte du jeton |
business_code | string | oui | Code business fourni par MoyaPay. Doit appartenir à votre compte |
country_code | string | oui | Pays de la transaction : CI, SN, BF, CM, BN, RDC, CB, GMB |
payment_method | string | oui | Code payout du moyen de paiement, voir Moyens de paiement |
merchant_transaction_id | string | oui | Votre identifiant de transaction, unique |
amount | number | oui | Montant, en nombre JSON. Voir Limites |
currency | string | oui | Devise du pays de la transaction, par exemple XOF. À choisir dans le tableau Devises par pays |
telephone | string | oui | Numéro du bénéficiaire, en chaîne. Voir Limites |
successUrl | string | oui | URL de redirection après un versement réussi (moyens avec redirection, comme Wave) |
failedUrl | string | oui | URL de redirection après un versement échoué |
notifyUrl | string | oui | Votre URL de notification (voir la note de Encaisser) |
Exemple
- cURL
- Node.js
- PHP
- Python
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": "VERSEMENT-2026-000045",
"amount": 5000,
"currency": "XOF",
"telephone": "0505000000",
"successUrl": "https://boutique.example.com/paiement/succes",
"failedUrl": "https://boutique.example.com/paiement/echec",
"notifyUrl": "https://boutique.example.com/api/moyapay/notify"
}'
const res = await fetch('https://services.moya-pay.com/service/api/v1/payout', {
method: 'POST',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
refercence_cl: 'CL-123456',
business_code: 'MYP-000000-ABCDEF',
country_code: 'CI',
payment_method: 'WAVE_CI',
merchant_transaction_id: 'VERSEMENT-2026-000045',
amount: 5000,
currency: 'XOF',
telephone: '0505000000',
successUrl: 'https://boutique.example.com/paiement/succes',
failedUrl: 'https://boutique.example.com/paiement/echec',
notifyUrl: 'https://boutique.example.com/api/moyapay/notify',
}),
});
const body = await res.json();
if (!body.success) throw new Error(body.description || body.message);
<?php
$payload = [
'refercence_cl' => 'CL-123456',
'business_code' => 'MYP-000000-ABCDEF',
'country_code' => 'CI',
'payment_method' => 'WAVE_CI',
'merchant_transaction_id' => 'VERSEMENT-2026-000045',
'amount' => 5000,
'currency' => 'XOF',
'telephone' => '0505000000',
'successUrl' => 'https://boutique.example.com/paiement/succes',
'failedUrl' => 'https://boutique.example.com/paiement/echec',
'notifyUrl' => 'https://boutique.example.com/api/moyapay/notify',
];
$ch = curl_init('https://services.moya-pay.com/service/api/v1/payout');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);
import requests
resp = requests.post(
"https://services.moya-pay.com/service/api/v1/payout",
headers={"Authorization": f"Bearer {token}"},
json={
"refercence_cl": "CL-123456",
"business_code": "MYP-000000-ABCDEF",
"country_code": "CI",
"payment_method": "WAVE_CI",
"merchant_transaction_id": "VERSEMENT-2026-000045",
"amount": 5000,
"currency": "XOF",
"telephone": "0505000000",
"successUrl": "https://boutique.example.com/paiement/succes",
"failedUrl": "https://boutique.example.com/paiement/echec",
"notifyUrl": "https://boutique.example.com/api/moyapay/notify",
},
timeout=30,
)
body = resp.json()
Réponse
{
"status": 201,
"success": true,
"code": 200,
"message": "TRANSACTION IS INITIATED SUSSESSFULLY",
"data": {
"status": "PENDING",
"transaction_id": "VERSEMENT-2026-000045"
}
}
La réponse a la même forme que pour un payin : testez success, puis lisez data.status. Le résultat final arrive par callback ou via le statut.
Mêmes précautions qu'un payin
Un merchant_transaction_id doit rester unique, et une transaction identique (même montant, même numéro) encore en cours depuis moins d'une minute est refusée. En cas d'erreur 500, consultez le statut avant de renvoyer.