---
updatedAt: 2026-09-30T17:50:34.123Z
---

Fetch the complete documentation index at: https://docs.avvio.xyz/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# Webhook events

All 22 event types, each with a complete delivery body built by the code that records the event, so `data` has exactly the keys a delivery carries (ids, amounts and times are samples). `GET /events` returns the same object for the same `id`. [Webhooks](/webhooks/) covers verifying, retrying and ordering deliveries.

## Headers

| Header | Description |
| --- | --- |
| `svix-id` | The event id. Stable across retries; equals the body's `id` and the feed row's `id`. Dedupe on it. |
| `svix-timestamp` | Unix seconds when this attempt was signed. Reject a delivery more than five minutes from your clock. |
| `svix-signature` | Space-separated `v1,<base64>` values: HMAC-SHA256 of `${svix-id}.${svix-timestamp}.${raw body}` with the base64-decoded secret minus its `whsec_` prefix. During a secret rotation it carries two; accept the delivery if any one verifies. |
| `Avvio-Webhook-Version` | The shape of `data`; equals the body's `apiVersion` (`1` today). |

## Envelope

| Field | Description |
| --- | --- |
| `id` | The event id. Equals the `svix-id` header and the feed row's `id`. Dedupe on it. |
| `sequence` | The feed cursor for this event, as a decimal string. Pass it as `since` to read everything after it. |
| `type` | The event type: one of the events below. |
| `createdAt` | When the event was recorded, ISO 8601 UTC. |
| `apiVersion` | Which body shape `data` is. Also sent as the `Avvio-Webhook-Version` header, so you can branch before parsing. |
| `livemode` | False for a sandbox organization's endpoint. |
| `data` | The payload. Its shape depends on the event family, and is shown in full for each event below. |

## Every event

| Event | When it fires |
| --- | --- |
| [`payout.pending`](#payoutpending) | The payout was accepted and is not moving yet. On a routing that waits for your funds, `requiresFunding: true` says it is waiting on you. |
| [`payout.processing`](#payoutprocessing) | The payment network is carrying it. Not every payout passes through this state. |
| [`payout.completed`](#payoutcompleted) | The recipient has been paid. A later bank return is still possible (`payout.returned`). |
| [`payout.failed`](#payoutfailed) | It will not be paid. Read `failureCode`, and `fundsReturned` before you change your ledger. |
| [`payout.returned`](#payoutreturned) | It completed, then the receiving bank sent it back, sometimes days later. `failureCode` is `returned_by_bank` and `fundsReturned` is `true`. |
| [`payout.canceled`](#payoutcanceled) | It was stopped before any money moved. A decision, not a failure: do not re-send. |
| [`payout_approval.pending`](#payout_approvalpending) | A payout or batch is waiting for your approvers. Nothing is priced or sent yet. |
| [`payout_approval.approved`](#payout_approvalapproved) | Enough approvers said yes; execution follows. |
| [`payout_approval.rejected`](#payout_approvalrejected) | An approver said no. Nothing will be sent. |
| [`payout_approval.expired`](#payout_approvalexpired) | Nobody decided within 24 hours. Nothing will be sent. |
| [`payout_approval.executed`](#payout_approvalexecuted) | The approved instruction became a payout. `payoutId` names it: this is how a `202` joins to its payout. |
| [`payout_approval.execution_failed`](#payout_approvalexecution_failed) | Approved, but creating the payout was refused. `approval.error` carries the error `type`. |
| [`payout_batch.awaiting_confirmation`](#payout_batchawaiting_confirmation) | Every line was validated and the run is holding for you to confirm or cancel. |
| [`payout_batch.completed`](#payout_batchcompleted) | Every line is resolved at the creation level; read `counts`. Each payout then reports on its own `payout.*` events. |
| [`payout_batch.canceled`](#payout_batchcanceled) | The run was stopped before any payout was created. |
| [`payout_batch.failed`](#payout_batchfailed) | The run itself broke, not one of its lines. |
| [`checkout_payment.paid`](#checkout_paymentpaid) | The money is in your balance. Fulfill on this. Not final: a refund or chargeback can follow. |
| [`checkout_payment.failed`](#checkout_paymentfailed) | A card attempt failed. |
| [`checkout_payment.refunded`](#checkout_paymentrefunded) | Refunded in full, from the API or the dashboard. |
| [`checkout_payment.reversed`](#checkout_paymentreversed) | A chargeback: the acceptor took the money back. |
| [`checkout_payment.partially_refunded`](#checkout_paymentpartially_refunded) | Part of the payment went back. `refund` is the piece, `refunded` the running total; `status` stays `paid`. |
| [`webhook_endpoint.disabled`](#webhook_endpointdisabled) | One of your endpoints was switched off after repeated dead deliveries. Sent to your other endpoints. |

## `payout.*`

### payout.pending

The payout was accepted and is not moving yet. On a routing that waits for your funds, `requiresFunding: true` says it is waiting on you.

Example delivery

```json title="payout.pending"
{
  "id": "cmf3n0000q8b7c1s9m4rw",
  "sequence": "48213",
  "type": "payout.pending",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "payoutId": "cmf3k2xb20002q8b7c1s9m4rw",
    "status": "pending",
    "sourceCurrency": "USD",
    "sourceAmount": "200.00",
    "destinationCurrency": "MXN",
    "destinationAmount": "3368.32",
    "destinationAccountId": "cmf3jz81k0001q8b7a4d2e6xy",
    "fee": {
      "currency": "USD",
      "amount": "1.02"
    },
    "rate": "16.841600",
    "reference": "payroll-2026-09-05-emp42",
    "endUser": {
      "id": "customer_42"
    },
    "endUserId": "customer_42",
    "createdAt": "2026-09-03T10:00:00.000Z",
    "completedAt": null
  }
}
```

### payout.processing

The payment network is carrying it. Not every payout passes through this state.

Example delivery

```json title="payout.processing"
{
  "id": "cmf3n0001q8b7c1s9m4rw",
  "sequence": "48214",
  "type": "payout.processing",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "payoutId": "cmf3k2xb20002q8b7c1s9m4rw",
    "status": "processing",
    "sourceCurrency": "USD",
    "sourceAmount": "200.00",
    "destinationCurrency": "MXN",
    "destinationAmount": "3368.32",
    "destinationAccountId": "cmf3jz81k0001q8b7a4d2e6xy",
    "fee": {
      "currency": "USD",
      "amount": "1.02"
    },
    "rate": "16.841600",
    "reference": "payroll-2026-09-05-emp42",
    "endUser": {
      "id": "customer_42"
    },
    "endUserId": "customer_42",
    "createdAt": "2026-09-03T10:00:00.000Z",
    "completedAt": null
  }
}
```

### payout.completed

The recipient has been paid. A later bank return is still possible (`payout.returned`).

Example delivery

```json title="payout.completed"
{
  "id": "cmf3n0002q8b7c1s9m4rw",
  "sequence": "48215",
  "type": "payout.completed",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "payoutId": "cmf3k2xb20002q8b7c1s9m4rw",
    "status": "completed",
    "sourceCurrency": "USD",
    "sourceAmount": "200.00",
    "destinationCurrency": "MXN",
    "destinationAmount": "3368.32",
    "destinationAccountId": "cmf3jz81k0001q8b7a4d2e6xy",
    "fee": {
      "currency": "USD",
      "amount": "1.02"
    },
    "rate": "16.841600",
    "reference": "payroll-2026-09-05-emp42",
    "endUser": {
      "id": "customer_42"
    },
    "endUserId": "customer_42",
    "createdAt": "2026-09-03T10:00:00.000Z",
    "completedAt": "2026-09-03T10:04:00.000Z"
  }
}
```

### payout.failed

It will not be paid. Read `failureCode`, and `fundsReturned` before you change your ledger.

Example delivery

```json title="payout.failed"
{
  "id": "cmf3n0003q8b7c1s9m4rw",
  "sequence": "48216",
  "type": "payout.failed",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "payoutId": "cmf3k2xb20002q8b7c1s9m4rw",
    "status": "failed",
    "failureCode": "account_invalid",
    "fundsReturned": true,
    "sourceCurrency": "USD",
    "sourceAmount": "200.00",
    "destinationCurrency": "MXN",
    "destinationAmount": "3368.32",
    "destinationAccountId": "cmf3jz81k0001q8b7a4d2e6xy",
    "fee": {
      "currency": "USD",
      "amount": "1.02"
    },
    "rate": "16.841600",
    "reference": "payroll-2026-09-05-emp42",
    "endUser": {
      "id": "customer_42"
    },
    "endUserId": "customer_42",
    "createdAt": "2026-09-03T10:00:00.000Z",
    "completedAt": null
  }
}
```

### payout.returned

It completed, then the receiving bank sent it back, sometimes days later. `failureCode` is `returned_by_bank` and `fundsReturned` is `true`.

Example delivery

```json title="payout.returned"
{
  "id": "cmf3n0004q8b7c1s9m4rw",
  "sequence": "48217",
  "type": "payout.returned",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "payoutId": "cmf3k2xb20002q8b7c1s9m4rw",
    "status": "failed",
    "failureCode": "returned_by_bank",
    "fundsReturned": true,
    "sourceCurrency": "USD",
    "sourceAmount": "200.00",
    "destinationCurrency": "MXN",
    "destinationAmount": "3368.32",
    "destinationAccountId": "cmf3jz81k0001q8b7a4d2e6xy",
    "fee": {
      "currency": "USD",
      "amount": "1.02"
    },
    "rate": "16.841600",
    "reference": "payroll-2026-09-05-emp42",
    "endUser": {
      "id": "customer_42"
    },
    "endUserId": "customer_42",
    "createdAt": "2026-09-03T10:00:00.000Z",
    "completedAt": "2026-09-03T10:04:00.000Z"
  }
}
```

### payout.canceled

It was stopped before any money moved. A decision, not a failure: do not re-send.

Example delivery

```json title="payout.canceled"
{
  "id": "cmf3n0005q8b7c1s9m4rw",
  "sequence": "48218",
  "type": "payout.canceled",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "payoutId": "cmf3k2xb20002q8b7c1s9m4rw",
    "status": "canceled",
    "fundsReturned": true,
    "sourceCurrency": "USD",
    "sourceAmount": "200.00",
    "destinationCurrency": "MXN",
    "destinationAmount": "3368.32",
    "destinationAccountId": "cmf3jz81k0001q8b7a4d2e6xy",
    "fee": {
      "currency": "USD",
      "amount": "1.02"
    },
    "rate": "16.841600",
    "reference": "payroll-2026-09-05-emp42",
    "endUser": {
      "id": "customer_42"
    },
    "endUserId": "customer_42",
    "createdAt": "2026-09-03T10:00:00.000Z",
    "completedAt": null
  }
}
```

## `payout_approval.*`

### payout_approval.pending

A payout or batch is waiting for your approvers. Nothing is priced or sent yet.

Example delivery

```json title="payout_approval.pending"
{
  "id": "cmf3n0006q8b7c1s9m4rw",
  "sequence": "48219",
  "type": "payout_approval.pending",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "approval": {
      "id": "cmf3l9c2d0004q8b7e5r8t2uv",
      "kind": "payout",
      "status": "pending",
      "requiredApprovals": 2,
      "approvals": 0,
      "amount": "200.00",
      "currency": "USD",
      "destinationAccountId": "cmf3jz81k0001q8b7a4d2e6xy",
      "createdAt": "2026-09-03T10:00:00.000Z",
      "expiresAt": "2026-09-04T10:00:00.000Z",
      "updatedAt": "2026-09-03T10:09:00.000Z"
    }
  }
}
```

### payout_approval.approved

Enough approvers said yes; execution follows.

Example delivery

```json title="payout_approval.approved"
{
  "id": "cmf3n0007q8b7c1s9m4rw",
  "sequence": "48220",
  "type": "payout_approval.approved",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "approval": {
      "id": "cmf3l9c2d0004q8b7e5r8t2uv",
      "kind": "payout",
      "status": "approved",
      "requiredApprovals": 2,
      "approvals": 2,
      "amount": "200.00",
      "currency": "USD",
      "destinationAccountId": "cmf3jz81k0001q8b7a4d2e6xy",
      "createdAt": "2026-09-03T10:00:00.000Z",
      "expiresAt": "2026-09-04T10:00:00.000Z",
      "updatedAt": "2026-09-03T10:09:00.000Z"
    }
  }
}
```

### payout_approval.rejected

An approver said no. Nothing will be sent.

Example delivery

```json title="payout_approval.rejected"
{
  "id": "cmf3n0008q8b7c1s9m4rw",
  "sequence": "48221",
  "type": "payout_approval.rejected",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "approval": {
      "id": "cmf3l9c2d0004q8b7e5r8t2uv",
      "kind": "payout",
      "status": "rejected",
      "requiredApprovals": 2,
      "approvals": 1,
      "amount": "200.00",
      "currency": "USD",
      "destinationAccountId": "cmf3jz81k0001q8b7a4d2e6xy",
      "createdAt": "2026-09-03T10:00:00.000Z",
      "expiresAt": "2026-09-04T10:00:00.000Z",
      "updatedAt": "2026-09-03T10:09:00.000Z"
    }
  }
}
```

### payout_approval.expired

Nobody decided within 24 hours. Nothing will be sent.

Example delivery

```json title="payout_approval.expired"
{
  "id": "cmf3n0009q8b7c1s9m4rw",
  "sequence": "48222",
  "type": "payout_approval.expired",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "approval": {
      "id": "cmf3l9c2d0004q8b7e5r8t2uv",
      "kind": "payout",
      "status": "expired",
      "requiredApprovals": 2,
      "approvals": 0,
      "amount": "200.00",
      "currency": "USD",
      "destinationAccountId": "cmf3jz81k0001q8b7a4d2e6xy",
      "createdAt": "2026-09-03T10:00:00.000Z",
      "expiresAt": "2026-09-04T10:00:00.000Z",
      "updatedAt": "2026-09-03T10:09:00.000Z"
    }
  }
}
```

### payout_approval.executed

The approved instruction became a payout. `payoutId` names it: this is how a `202` joins to its payout.

Example delivery

```json title="payout_approval.executed"
{
  "id": "cmf3n0010q8b7c1s9m4rw",
  "sequence": "48223",
  "type": "payout_approval.executed",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "approval": {
      "id": "cmf3l9c2d0004q8b7e5r8t2uv",
      "kind": "payout",
      "status": "executed",
      "requiredApprovals": 2,
      "approvals": 2,
      "payoutId": "cmf3k2xb20002q8b7c1s9m4rw",
      "amount": "200.00",
      "currency": "USD",
      "destinationAccountId": "cmf3jz81k0001q8b7a4d2e6xy",
      "createdAt": "2026-09-03T10:00:00.000Z",
      "expiresAt": "2026-09-04T10:00:00.000Z",
      "updatedAt": "2026-09-03T10:09:00.000Z"
    },
    "payoutId": "cmf3k2xb20002q8b7c1s9m4rw"
  }
}
```

### payout_approval.execution_failed

Approved, but creating the payout was refused. `approval.error` carries the error `type`.

Example delivery

```json title="payout_approval.execution_failed"
{
  "id": "cmf3n0011q8b7c1s9m4rw",
  "sequence": "48224",
  "type": "payout_approval.execution_failed",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "approval": {
      "id": "cmf3l9c2d0004q8b7e5r8t2uv",
      "kind": "payout",
      "status": "execution_failed",
      "requiredApprovals": 2,
      "approvals": 2,
      "amount": "200.00",
      "currency": "USD",
      "destinationAccountId": "cmf3jz81k0001q8b7a4d2e6xy",
      "error": "INSUFFICIENT_BALANCE",
      "createdAt": "2026-09-03T10:00:00.000Z",
      "expiresAt": "2026-09-04T10:00:00.000Z",
      "updatedAt": "2026-09-03T10:09:00.000Z"
    }
  }
}
```

## `payout_batch.*`

### payout_batch.awaiting_confirmation

Every line was validated and the run is holding for you to confirm or cancel.

Example delivery

```json title="payout_batch.awaiting_confirmation"
{
  "id": "cmf3n0012q8b7c1s9m4rw",
  "sequence": "48225",
  "type": "payout_batch.awaiting_confirmation",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "batchId": "cmf3m0v4q0005q8b7f2g7h1pz",
    "externalReferenceId": "payroll-2026-09-05",
    "status": "awaiting_confirmation",
    "autoCommit": false,
    "counts": {
      "received": 0,
      "invalid": 1,
      "validated": 49,
      "creating": 0,
      "created": 0,
      "create_failed": 0,
      "canceled": 0,
      "requires_review": 0
    },
    "estimatedSourceTotal": "10250.00",
    "createdAt": "2026-09-03T10:00:00.000Z",
    "updatedAt": "2026-09-03T10:03:00.000Z",
    "completedAt": null
  }
}
```

### payout_batch.completed

Every line is resolved at the creation level; read `counts`. Each payout then reports on its own `payout.*` events.

Example delivery

```json title="payout_batch.completed"
{
  "id": "cmf3n0013q8b7c1s9m4rw",
  "sequence": "48226",
  "type": "payout_batch.completed",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "batchId": "cmf3m0v4q0005q8b7f2g7h1pz",
    "externalReferenceId": "payroll-2026-09-05",
    "status": "completed",
    "autoCommit": false,
    "counts": {
      "received": 0,
      "invalid": 1,
      "validated": 0,
      "creating": 0,
      "created": 48,
      "create_failed": 1,
      "canceled": 0,
      "requires_review": 0
    },
    "estimatedSourceTotal": "10250.00",
    "createdAt": "2026-09-03T10:00:00.000Z",
    "updatedAt": "2026-09-03T10:03:00.000Z",
    "completedAt": "2026-09-03T10:03:00.000Z"
  }
}
```

### payout_batch.canceled

The run was stopped before any payout was created.

Example delivery

```json title="payout_batch.canceled"
{
  "id": "cmf3n0014q8b7c1s9m4rw",
  "sequence": "48227",
  "type": "payout_batch.canceled",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "batchId": "cmf3m0v4q0005q8b7f2g7h1pz",
    "externalReferenceId": "payroll-2026-09-05",
    "status": "canceled",
    "autoCommit": false,
    "counts": {
      "received": 0,
      "invalid": 1,
      "validated": 0,
      "creating": 0,
      "created": 0,
      "create_failed": 0,
      "canceled": 49,
      "requires_review": 0
    },
    "estimatedSourceTotal": "10250.00",
    "createdAt": "2026-09-03T10:00:00.000Z",
    "updatedAt": "2026-09-03T10:03:00.000Z",
    "completedAt": "2026-09-03T10:03:00.000Z"
  }
}
```

### payout_batch.failed

The run itself broke, not one of its lines.

Example delivery

```json title="payout_batch.failed"
{
  "id": "cmf3n0015q8b7c1s9m4rw",
  "sequence": "48228",
  "type": "payout_batch.failed",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "batchId": "cmf3m0v4q0005q8b7f2g7h1pz",
    "externalReferenceId": "payroll-2026-09-05",
    "status": "failed",
    "autoCommit": false,
    "counts": {
      "received": 0,
      "invalid": 0,
      "validated": 50,
      "creating": 0,
      "created": 0,
      "create_failed": 0,
      "canceled": 0,
      "requires_review": 0
    },
    "estimatedSourceTotal": "10250.00",
    "error": {
      "type": "INTERNAL_ERROR",
      "message": "The run could not be started"
    },
    "createdAt": "2026-09-03T10:00:00.000Z",
    "updatedAt": "2026-09-03T10:03:00.000Z",
    "completedAt": "2026-09-03T10:03:00.000Z"
  }
}
```

## `checkout_payment.*`

Opt-in: an endpoint receives these only when its `events` list names them.

### checkout_payment.paid

The money is in your balance. Fulfill on this. Not final: a refund or chargeback can follow.

Example delivery

```json title="checkout_payment.paid"
{
  "id": "cmf3n0016q8b7c1s9m4rw",
  "sequence": "48229",
  "type": "checkout_payment.paid",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "paymentId": "cmf9x1b2c0003q8b7h6j8k0lm",
    "linkId": "4f1c2a9e-8f7d-4c3b-9a2e-6b5d4c3f2a10",
    "linkSlug": "7e2a9c4b1d0f",
    "productId": "2a7b8c9d-1e2f-4a5b-8c9d-0e1f2a3b4c5d",
    "clientReferenceId": "order_1042",
    "metadata": {
      "plan": "consulting-60min"
    },
    "status": "paid",
    "failureCode": null,
    "kind": "card",
    "amount": "150.00",
    "currency": "USD",
    "fee": "4.35",
    "net": "145.65",
    "refunded": null,
    "paidAt": "2026-09-03T10:02:00.000Z",
    "createdAt": "2026-09-03T10:00:00.000Z",
    "linkExpiredAt": null
  }
}
```

### checkout_payment.failed

A card attempt failed.

Example delivery

```json title="checkout_payment.failed"
{
  "id": "cmf3n0017q8b7c1s9m4rw",
  "sequence": "48230",
  "type": "checkout_payment.failed",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "paymentId": "cmf9x1b2c0003q8b7h6j8k0lm",
    "linkId": "4f1c2a9e-8f7d-4c3b-9a2e-6b5d4c3f2a10",
    "linkSlug": "7e2a9c4b1d0f",
    "productId": "2a7b8c9d-1e2f-4a5b-8c9d-0e1f2a3b4c5d",
    "clientReferenceId": "order_1042",
    "metadata": {
      "plan": "consulting-60min"
    },
    "status": "failed",
    "failureCode": "card_declined",
    "kind": "card",
    "amount": "150.00",
    "currency": "USD",
    "fee": "4.35",
    "net": "145.65",
    "refunded": null,
    "paidAt": null,
    "createdAt": "2026-09-03T10:00:00.000Z",
    "linkExpiredAt": null
  }
}
```

### checkout_payment.refunded

Refunded in full, from the API or the dashboard.

Example delivery

```json title="checkout_payment.refunded"
{
  "id": "cmf3n0018q8b7c1s9m4rw",
  "sequence": "48231",
  "type": "checkout_payment.refunded",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "paymentId": "cmf9x1b2c0003q8b7h6j8k0lm",
    "linkId": "4f1c2a9e-8f7d-4c3b-9a2e-6b5d4c3f2a10",
    "linkSlug": "7e2a9c4b1d0f",
    "productId": "2a7b8c9d-1e2f-4a5b-8c9d-0e1f2a3b4c5d",
    "clientReferenceId": "order_1042",
    "metadata": {
      "plan": "consulting-60min"
    },
    "status": "refunded",
    "failureCode": null,
    "kind": "card",
    "amount": "150.00",
    "currency": "USD",
    "fee": "4.35",
    "net": "145.65",
    "refunded": "150.00",
    "paidAt": "2026-09-03T10:02:00.000Z",
    "createdAt": "2026-09-03T10:00:00.000Z",
    "linkExpiredAt": null,
    "refund": {
      "id": "cmfa2r7s80006q8b7j3k4l5mn",
      "amount": "150.00",
      "reason": "requested_by_customer",
      "note": null,
      "source": "api",
      "at": "2026-09-06T10:00:00.000Z"
    }
  }
}
```

### checkout_payment.reversed

A chargeback: the acceptor took the money back.

Example delivery

```json title="checkout_payment.reversed"
{
  "id": "cmf3n0019q8b7c1s9m4rw",
  "sequence": "48232",
  "type": "checkout_payment.reversed",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "paymentId": "cmf9x1b2c0003q8b7h6j8k0lm",
    "linkId": "4f1c2a9e-8f7d-4c3b-9a2e-6b5d4c3f2a10",
    "linkSlug": "7e2a9c4b1d0f",
    "productId": "2a7b8c9d-1e2f-4a5b-8c9d-0e1f2a3b4c5d",
    "clientReferenceId": "order_1042",
    "metadata": {
      "plan": "consulting-60min"
    },
    "status": "reversed",
    "failureCode": null,
    "kind": "card",
    "amount": "150.00",
    "currency": "USD",
    "fee": "4.35",
    "net": "145.65",
    "refunded": null,
    "paidAt": "2026-09-03T10:02:00.000Z",
    "createdAt": "2026-09-03T10:00:00.000Z",
    "linkExpiredAt": null
  }
}
```

### checkout_payment.partially_refunded

Part of the payment went back. `refund` is the piece, `refunded` the running total; `status` stays `paid`.

Example delivery

```json title="checkout_payment.partially_refunded"
{
  "id": "cmf3n0020q8b7c1s9m4rw",
  "sequence": "48233",
  "type": "checkout_payment.partially_refunded",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "paymentId": "cmf9x1b2c0003q8b7h6j8k0lm",
    "linkId": "4f1c2a9e-8f7d-4c3b-9a2e-6b5d4c3f2a10",
    "linkSlug": "7e2a9c4b1d0f",
    "productId": "2a7b8c9d-1e2f-4a5b-8c9d-0e1f2a3b4c5d",
    "clientReferenceId": "order_1042",
    "metadata": {
      "plan": "consulting-60min"
    },
    "status": "paid",
    "failureCode": null,
    "kind": "card",
    "amount": "150.00",
    "currency": "USD",
    "fee": "4.35",
    "net": "145.65",
    "refunded": "50.00",
    "paidAt": "2026-09-03T10:02:00.000Z",
    "createdAt": "2026-09-03T10:00:00.000Z",
    "linkExpiredAt": null,
    "refund": {
      "id": "cmfa2r7s80006q8b7j3k4l5mn",
      "amount": "50.00",
      "reason": "requested_by_customer",
      "note": null,
      "source": "api",
      "at": "2026-09-06T10:00:00.000Z"
    }
  }
}
```

## `webhook_endpoint.*`

### webhook_endpoint.disabled

One of your endpoints was switched off after repeated dead deliveries. Sent to your other endpoints.

Example delivery

```json title="webhook_endpoint.disabled"
{
  "id": "cmf3n0021q8b7c1s9m4rw",
  "sequence": "48234",
  "type": "webhook_endpoint.disabled",
  "createdAt": "2026-09-03T10:05:00.000Z",
  "apiVersion": 1,
  "livemode": true,
  "data": {
    "endpointId": "cmf2w1a9s0001p9c6d3k4l5mn",
    "url": "https://example.com/webhooks/avvio",
    "reason": "auto_disabled_after_failures",
    "consecutiveFailures": 3,
    "lastSuccessAt": "2026-08-28T10:00:00.000Z",
    "disabledAt": "2026-09-03T10:00:00.000Z"
  }
}
```

