WebhooksEvents

invoice.paid

Invoice fulfilment and durable webhook processing.

Use invoice.paid for invoice fulfilment. Inspect the full schema before handling the payload.

Example payload

This fixture comes from the public specification, not a live delivery.

{
  "id": "evt_4d5e6f7g8h9i",
  "type": "invoice.paid",
  "created": 1789914600,
  "livemode": true,
  "data": {
    "object": {
      "id": "inv_abc123",
      "object": "invoice",
      "customer_id": "cus_xyz789",
      "invoice_number": "INV-2026-0042",
      "total_minor": 9900,
      "currency": "gbp",
      "status": "paid",
      "due_date": "2026-10-19T00:00:00Z",
      "paid_at": "2026-09-20T14:30:00Z"
    }
  }
}

Handler contract

  1. Verify the raw signature and validate the envelope.
  2. Commit a unique inbox entry for the merchant and event ID before acknowledging.
  3. Resolve truncated references and reconcile the current resource state.
  4. Apply business changes using a business idempotency key.
  5. Record completion durably; retry worker failures independently.

Use the complete receiver. A check-then-fulfil-then-mark sequence can duplicate effects during concurrent delivery or after a crash.

Choose one fulfilment operation per invoice. Confirm the invoice is paid and reconcile the subscription before changing access. A payment notification must not cause a second fulfilment.

Browse related events.

Owner: david · Reviewed 30 Sep 2026 · Next review 30 Oct 2026

On this page