Passer au contenu principal
Les événements payout sont livrés via le même mécanisme de Pulse (webhook) que les paiements. Enregistrez un endpoint webhook de projet dans le dashboard et abonnez-le aux déclencheurs payout. Contrairement aux payment intents, les payouts n’ont pas de champ webhook_url par payout ; la livraison se configure au niveau du projet. Pour les mécaniques de livraison complètes — nouvelles tentatives, sémantique at-least-once, livraison signée ou non signée, et comment vérifier l’authenticité — voir Webhooks paiements. Tout ce qui y est décrit s’applique également aux événements payout.

Événements

ÉvénementDescription
payout.completedLe payout a été réglé avec succès au destinataire.
payout.failedLe payout a échoué et le montant n’a pas été livré.

Charge utile

{
  "event": "payout.completed",
  "payout": {
    "id": "po_...",
    "amount": { "value": 5000, "formatted": "5,000 XOF", "short": "5K", "currency": "XOF" },
    "method": "momo_mtn",
    "status": "completed",
    "reference": "PO-2026-0001",
    "description": "Salary payout",
    "customer": { "id": "cus_...", "first_name": "Jane", "last_name": "Doe", "email": "[email protected]" },
    "instrument": { "id": "poi_...", "type": "phone", "phone_number": "+22990000000", "country": "BJ" },
    "gateway": { "transaction": { "id": "gw_tx_123", "reference": "po_ref_generated", "external_id": null } },
    "fee_amount": 0,
    "failure": { "code": null, "message": null },
    "initiated_at": "2026-06-14T10:00:00+00:00",
    "completed_at": "2026-06-14T12:00:00+00:00",
    "failed_at": null,
    "created_at": "2026-06-14T10:00:00+00:00"
  }
}

Patron de handler

PHP handler
$event = json_decode(file_get_contents('php://input'), true);

// Re-récupérez pour obtenir le statut autoritaire — ne faites pas confiance au payload seul.
$payout = $orqex->payouts()->retrieve($event['payout']['id']);

if ($payout->status === 'completed') {
    // traitez le payout réussi (de façon idempotente)
}

if ($payout->status === 'failed') {
    // gérez l'échec : inspectez $payout->failure
}

http_response_code(200);

Règles de traitement

  • Répondez avec 2xx rapidement ; faites le travail lent de façon asynchrone.
  • Les événements sont at-least-once — basez votre traitement sur payout.id + event.
  • Re-récupérez toujours le payout depuis l’API et agissez sur ce statut autoritaire.
L’événement payout.completed signale qu’Orqex a vérifié le résultat — pas seulement que la passerelle a accusé réception de la demande. Vous pouvez agir dessus en toute confiance après re-récupération.