Skip to main content

Payouts (Envoi d’argent)

Les Payouts permettent d’envoyer de l’argent depuis votre compte SahelPay vers un compte Mobile Money (Orange Money, Wave, Moov).

Cas d’usage

  • Paiement fournisseurs : Régler vos fournisseurs via Mobile Money
  • Salaires : Payer vos employés
  • Commissions : Verser des commissions à vos partenaires
  • Remboursements : Rembourser vos clients
  • Retraits marchands : Retirer vos fonds vers votre compte Mobile Money

Créer un payout

const payout = await sahelpay.payouts.create({
  amount: 50000,
  provider: 'ORANGE_MONEY', // ou WAVE, MOOV
  recipient_phone: '+22370123456',
  recipient_name: 'Mamadou Diallo',
  description: 'Paiement fournisseur #123',
  type: 'SUPPLIER_PAYMENT',
  idempotency_key: 'supplier-123' // Optionnel
});

console.log(payout.reference); // PAY_xxx
console.log(payout.status);    // PENDING

Limites

LimiteValeur
Montant minimum100 FCFA
Montant maximum5,000,000 FCFA
Providers supportésOrange Money, Wave, Moov

Types de payouts

TypeDescription
MERCHANT_WITHDRAWALRetrait marchand vers votre compte
SUPPLIER_PAYMENTPaiement fournisseur
SALARYSalaire employé
COMMISSIONCommission partenaire
REFUNDRemboursement client
MARKETPLACE_SPLITSplit marketplace
OTHERAutre (défaut)

Statuts

StatutDescription
PENDINGEn attente de traitement
PROCESSINGEn cours de traitement
COMPLETEDPaiement effectué avec succès
FAILEDÉchec du paiement
CANCELLEDAnnulé

Vérifier le statut

const payout = await sahelpay.payouts.retrieve('PAY_xxx');

if (payout.status === 'COMPLETED') {
  console.log('Payout réussi !');
} else if (payout.status === 'FAILED') {
  console.error('Erreur:', payout.error_message);
}

Polling

Pour attendre la fin d’un payout :
const payout = await sahelpay.payouts.poll('PAY_xxx', {
  timeout: 120000, // 2 minutes
  onStatus: (status, payout) => {
    console.log(`Status: ${status}`);
  }
});

console.log('Payout final:', payout.status);

Lister les payouts

const { payouts, pagination } = await sahelpay.payouts.list({
  limit: 20,
  page: 1,
  status: 'COMPLETED', // Optionnel
  type: 'SUPPLIER_PAYMENT' // Optionnel
});

Annuler un payout

Un payout en statut PENDING peut être annulé :
const payout = await sahelpay.payouts.cancel('PAY_xxx');

Statistiques

const stats = await sahelpay.payouts.stats();

console.log(stats.total);        // Nombre total
console.log(stats.completed);    // Réussis
console.log(stats.failed);       // Échoués
console.log(stats.success_rate); // Taux de succès

Webhooks

Les événements webhook pour les payouts :
  • payout.completed : Payout réussi
  • payout.failed : Payout échoué
if (event === 'payout.completed') {
  await updateSupplierPayment(data.metadata.supplier_id, { paid: true });
}

Vérification des fonds

Avant de créer un payout, vérifiez que vous avez suffisamment de fonds :
const balance = await sahelpay.withdrawals.balance();

if (balance.available < amount + fee) {
  throw new Error('Fonds insuffisants');
}
Les payouts sont débités de votre solde SahelPay. Assurez-vous d’avoir suffisamment de fonds disponibles avant de créer un payout.

Idempotence

Utilisez idempotency_key pour éviter les doublons :
const payout = await sahelpay.payouts.create({
  amount: 50000,
  provider: 'ORANGE_MONEY',
  recipient_phone: '+22370123456',
  idempotency_key: 'supplier-123' // Unique par fournisseur
});

// Si appelé deux fois avec la même clé, retourne le même payout