Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.sahelpay.ml/llms.txt

Use this file to discover all available pages before exploring further.

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