Cette page est le catalogue de référence des événements webhook. Pour la mise en place (signature, retry, idempotence), voir le guide Webhooks.

Enveloppe commune

Tout webhook partage la même enveloppe. Le contenu spécifique est dans data :
{
  "event": "payment_intent.completed",
  "timestamp": 1731843299,
  "data": { }
}
ChampTypeSens
eventstringLe type d’événement (voir ci-dessous).
timestampnumberHorodatage Unix de l’émission. Sert à l’anti-replay, jamais à décider d’une action.
dataobjectLes données de la ressource concernée.
Deux headers accompagnent chaque livraison : X-IziPay-Signature et X-IziPay-Timestamp. Vérifiez toujours la signature avant de traiter.

Payment Intents

payment_intent.completed

Déclenché quand un payment intent atteint le montant attendu, dans la plage acceptée.
{
  "event": "payment_intent.completed",
  "timestamp": 1731843299,
  "data": {
    "intentId": "pi_3kf8a2",
    "merchantId": "mrc_91xz",
    "merchantReference": "order_42",
    "status": "completed",
    "amountRequested": "50000",
    "currencyRequested": "XOF",
    "totalAmountReceived": "76.42",
    "assetCode": "USDT.TRC20",
    "amountNetMerchant": "75.66",
    "source": "api"
  }
}

payment_intent.expired

Déclenché quand le timer s’écoule avant qu’un montant suffisant ne soit reçu.
{
  "event": "payment_intent.expired",
  "timestamp": 1731843299,
  "data": {
    "intentId": "pi_3kf8a2",
    "merchantId": "mrc_91xz",
    "merchantReference": "order_42",
    "status": "expired",
    "totalAmountReceived": "0",
    "expiresAt": "2026-05-20T14:00:00Z"
  }
}

Payouts

payout.confirmed

Déclenché quand un payout est confirmé on-chain.
{
  "event": "payout.confirmed",
  "timestamp": 1731843299,
  "data": {
    "payoutId": "po_5d9e2",
    "merchantId": "mrc_91xz",
    "type": "standard",
    "assetCode": "USDT.TRC20",
    "amount": "500.00",
    "destinationAddress": "TXxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "txHash": "1c7d4f...ab90"
  }
}

payout.failed

Déclenché quand un payout échoue après tous les réessais.
{
  "event": "payout.failed",
  "timestamp": 1731843299,
  "data": {
    "payoutId": "po_5d9e2",
    "merchantId": "mrc_91xz",
    "type": "standard",
    "assetCode": "USDT.TRC20",
    "amount": "500.00",
    "failureReason": "broadcast_error"
  }
}

Settlements

settlement.completed

Déclenché quand le provider confirme la réception de la monnaie locale.
{
  "event": "settlement.completed",
  "timestamp": 1731843299,
  "data": {
    "settlementId": "stl_8a3b6",
    "merchantId": "mrc_91xz",
    "assetCode": "USDT.TRC20",
    "amountCrypto": "100.00",
    "amountFiat": "58610",
    "currency": "XOF",
    "effectiveRate": "598.00"
  }
}

settlement.failed

Déclenché quand le reversement (settlement) a échoué.
{
  "event": "settlement.failed",
  "timestamp": 1731843299,
  "data": {
    "settlementId": "stl_8a3b6",
    "merchantId": "mrc_91xz",
    "assetCode": "USDT.TRC20",
    "amountCrypto": "100.00",
    "failureReason": "settlement_failed"
  }
}

Invoices

invoice.paid

Déclenché quand le payment intent rattaché à une facture est complété.
{
  "event": "invoice.paid",
  "timestamp": 1731843299,
  "data": {
    "invoiceId": "inv_2f6a9",
    "merchantId": "mrc_91xz",
    "intentId": "pi_3kf8a2",
    "amount": "25000",
    "currency": "XOF",
    "clientEmail": "client@example.com"
  }
}

invoice.expired

Déclenché quand l’échéance d’une facture est dépassée sans paiement.
{
  "event": "invoice.expired",
  "timestamp": 1731843299,
  "data": {
    "invoiceId": "inv_2f6a9",
    "merchantId": "mrc_91xz",
    "amount": "25000",
    "currency": "XOF",
    "dueDate": "2026-05-20"
  }
}

Récapitulatif

ÉvénementDéclenché quand
payment_intent.completedMontant reçu dans la plage acceptée.
payment_intent.expiredTimer écoulé sans paiement suffisant.
payout.confirmedPayout confirmé on-chain.
payout.failedPayout en échec après réessais.
settlement.completedProvider a confirmé le transfert fiat.
settlement.failedReversement (settlement) échoué.
invoice.paidFacture réglée.
invoice.expiredÉchéance dépassée sans paiement.
Les payloads ci-dessus sont représentatifs. La liste exacte des champs est fournie par l’enveloppe réelle au moment de la livraison. Codez défensivement et ne dépendez que des champs que vous utilisez.

Voir aussi

Guide Webhooks

Signature, retry, idempotence côté receveur, debugging.

Codes d'erreur

Le catalogue des erreurs API.