This page lists every event type you can subscribe to via webhook. Each event follows the same envelope (id, type, created_at, data) and is signed for authentication.
Webhooks are signed with HMAC-SHA256 — see Signature verification for details.

Transaction events

End-to-end lifecycle of a transaction.
EventDescription
transaction.createdA transaction has been initiated
transaction.completedThe transaction succeeded
transaction.failedThe transaction failed (operator refusal, insufficient funds, etc.)
transaction.expiredThe transaction expired (customer did not confirm in time)
transaction.cancelledThe transaction was cancelled

Refund events

EventDescription
refund.createdA refund has been initiated
refund.completedThe refund has reached the customer
refund.failedThe refund could not be finalized

Recurring payment events

Lifecycle of a one-off recurring payment schedule (see also Subscription events for continuous billing cycles).
EventDescription
recurring.createdA recurring payment has been scheduled
recurring.executedA recurring payment occurrence has been executed successfully
recurring.failedAn occurrence failed
recurring.pausedThe recurring payment has been paused
recurring.cancelledThe recurring payment has been cancelled

Payout events

Lifecycle of an outbound transfer to a Mobile Money or bank account.
EventDescription
payout.initiatedThe payout has been started by the partner
payout.completedThe payout has reached the destination account
payout.failedThe payout could not be finalized

Subscription events

For SaaS subscriptions (continuous billing cycles — see Recurring payments).
EventDescription
subscription.createdA subscription has been created
subscription.activatedA subscription has been activated
subscription.trial_endingThe trial period is ending soon
subscription.renewedThe subscription has renewed successfully
subscription.past_dueA subscription payment is past due
subscription.payment_failedA renewal payment attempt failed
subscription.cancelledThe subscription has been cancelled
EventDescription
payment_link.paidA payment link was paid

Checkout events

EventDescription
checkout.completedA checkout session was completed
checkout.expiredA checkout session expired

Payload examples

{
  "id": "evt_abc123",
  "type": "transaction.completed",
  "created_at": "2026-05-25T10:30:00Z",
  "data": {
    "id": "tx_xyz789",
    "object": "transaction",
    "amount": 5000,
    "currency": "XAF",
    "status": "COMPLETED",
    "payment_method": "ORANGE_MONEY",
    "payer": {
      "phone": "+237690000001",
      "name": "John Doe"
    },
    "description": "Order #12345",
    "reference": "ORDER-123",
    "metadata": {
      "order_id": "123"
    },
    "created_at": "2026-05-25T10:28:00Z",
    "completed_at": "2026-05-25T10:30:00Z"
  }
}
{
  "id": "evt_def456",
  "type": "transaction.failed",
  "created_at": "2026-05-25T10:30:00Z",
  "data": {
    "id": "tx_xyz789",
    "object": "transaction",
    "amount": 5000,
    "currency": "XAF",
    "status": "FAILED",
    "payment_method": "MTN_MOMO",
    "failure_reason": "INSUFFICIENT_FUNDS",
    "failure_message": "Payer balance is insufficient",
    "created_at": "2026-05-25T10:28:00Z",
    "failed_at": "2026-05-25T10:30:00Z"
  }
}
{
  "id": "evt_ghi789",
  "type": "payout.completed",
  "created_at": "2026-05-25T14:00:00Z",
  "data": {
    "id": "po_abc123",
    "object": "payout",
    "amount": 250000,
    "currency": "XAF",
    "status": "COMPLETED",
    "destination": {
      "type": "MOBILE_MONEY",
      "provider": "ORANGE_MONEY",
      "phone": "+237699000001"
    },
    "created_at": "2026-05-25T13:55:00Z",
    "completed_at": "2026-05-25T14:00:00Z"
  }
}
{
  "id": "evt_jkl012",
  "type": "subscription.renewed",
  "created_at": "2026-05-25T08:00:00Z",
  "data": {
    "id": "sub_abc123",
    "object": "subscription",
    "status": "ACTIVE",
    "current_period_start": "2026-05-25T00:00:00Z",
    "current_period_end": "2026-06-25T00:00:00Z",
    "latest_transaction_id": "tx_renewal_001"
  }
}

Best practices

  • Idempotency: use event.id to deduplicate deliveries (Simiz may resend the same event if your endpoint fails)
  • Fast 2xx response: reply within 5 seconds, process asynchronously if needed
  • Verify the signature before trusting the payload — see Signature verification
  • Subscribe only to what you need — each endpoint can filter the event types it cares about from Settings → Webhooks