# Event types

> Every event Ownrecord emits when something changes, as delivered to your webhook endpoints.

When something changes, Ownrecord records an event in the same transaction as the change and delivers it to your webhook endpoints. Every delivery has this envelope:

```json
{
  "id": "evt_01jz3k2m4n5p6q7r8s9t0v1w2x",
  "type": "customer.created",
  "created": 1791892800,
  "livemode": false,
  "data": {
    "object": {}
  },
  "previous_attributes": {}
}
```

`created` is when the event happened, in Unix seconds (the event feed, `GET /api/v1/events`, returns the same envelope). `data.object` is the object as it is after the change. `previous_attributes` holds the changed fields' old values, on update events only. Events can arrive out of order: use `created`, and fetch the object again when you need its latest state.

## API key

### `api_key.created`

An API key was created. The secret is never part of the event.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field        | Type                                                                                               | Description |
| ------------ | -------------------------------------------------------------------------------------------------- | ----------- |
| `id`         | `key_…` ID                                                                                         |             |
| `object`     | `"api_key"`                                                                                        |             |
| `kind`       | one of `org`, `entity`, `brand`                                                                    |             |
| `livemode`   | boolean                                                                                            |             |
| `name`       | string                                                                                             |             |
| `prefix`     | string                                                                                             |             |
| `scopes`     | array of one of 98 values, e.g. `org:read`, `org:write`, `org:admin` (all in the OpenAPI document) |             |
| `status`     | one of `active`, `expired`, `revoked`                                                              |             |
| `orgId`      | `org_…` ID                                                                                         |             |
| `entityId`   | `ent_…` ID or null                                                                                 |             |
| `brandId`    | `brd_…` ID or null                                                                                 |             |
| `createdBy`  | string                                                                                             |             |
| `createdAt`  | date-time                                                                                          |             |
| `updatedAt`  | date-time                                                                                          |             |
| `expiresAt`  | date-time or null                                                                                  |             |
| `lastUsedAt` | date-time or null                                                                                  |             |
| `revokedAt`  | date-time or null                                                                                  |             |

### `api_key.revoked`

An API key was revoked. It stops working immediately.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field        | Type                                                                                               | Description |
| ------------ | -------------------------------------------------------------------------------------------------- | ----------- |
| `id`         | `key_…` ID                                                                                         |             |
| `object`     | `"api_key"`                                                                                        |             |
| `kind`       | one of `org`, `entity`, `brand`                                                                    |             |
| `livemode`   | boolean                                                                                            |             |
| `name`       | string                                                                                             |             |
| `prefix`     | string                                                                                             |             |
| `scopes`     | array of one of 98 values, e.g. `org:read`, `org:write`, `org:admin` (all in the OpenAPI document) |             |
| `status`     | one of `active`, `expired`, `revoked`                                                              |             |
| `orgId`      | `org_…` ID                                                                                         |             |
| `entityId`   | `ent_…` ID or null                                                                                 |             |
| `brandId`    | `brd_…` ID or null                                                                                 |             |
| `createdBy`  | string                                                                                             |             |
| `createdAt`  | date-time                                                                                          |             |
| `updatedAt`  | date-time                                                                                          |             |
| `expiresAt`  | date-time or null                                                                                  |             |
| `lastUsedAt` | date-time or null                                                                                  |             |
| `revokedAt`  | date-time or null                                                                                  |             |

### `api_key.updated`

An API key was renamed. `previous_attributes` has the old name.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field        | Type                                                                                               | Description |
| ------------ | -------------------------------------------------------------------------------------------------- | ----------- |
| `id`         | `key_…` ID                                                                                         |             |
| `object`     | `"api_key"`                                                                                        |             |
| `kind`       | one of `org`, `entity`, `brand`                                                                    |             |
| `livemode`   | boolean                                                                                            |             |
| `name`       | string                                                                                             |             |
| `prefix`     | string                                                                                             |             |
| `scopes`     | array of one of 98 values, e.g. `org:read`, `org:write`, `org:admin` (all in the OpenAPI document) |             |
| `status`     | one of `active`, `expired`, `revoked`                                                              |             |
| `orgId`      | `org_…` ID                                                                                         |             |
| `entityId`   | `ent_…` ID or null                                                                                 |             |
| `brandId`    | `brd_…` ID or null                                                                                 |             |
| `createdBy`  | string                                                                                             |             |
| `createdAt`  | date-time                                                                                          |             |
| `updatedAt`  | date-time                                                                                          |             |
| `expiresAt`  | date-time or null                                                                                  |             |
| `lastUsedAt` | date-time or null                                                                                  |             |
| `revokedAt`  | date-time or null                                                                                  |             |

## App

### `app.listing_approved`

Ownrecord approved an app's listing: it is listed for every organization, with a verified publisher, for the scopes approved.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field        | Type                                                                           | Description |
| ------------ | ------------------------------------------------------------------------------ | ----------- |
| `id`         | string                                                                         |             |
| `object`     | `"app_listing"`                                                                |             |
| `ownerOrgId` | string                                                                         |             |
| `name`       | string                                                                         |             |
| `status`     | one of `not_submitted`, `pending`, `changes_requested`, `approved`, `rejected` |             |
| `listed`     | boolean                                                                        |             |
| `reason`     | string or null                                                                 |             |

### `app.listing_changes_requested`

Ownrecord asked for changes to an app's listing application. `reason` says what to change; edit and submit it again.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field        | Type                                                                           | Description |
| ------------ | ------------------------------------------------------------------------------ | ----------- |
| `id`         | string                                                                         |             |
| `object`     | `"app_listing"`                                                                |             |
| `ownerOrgId` | string                                                                         |             |
| `name`       | string                                                                         |             |
| `status`     | one of `not_submitted`, `pending`, `changes_requested`, `approved`, `rejected` |             |
| `listed`     | boolean                                                                        |             |
| `reason`     | string or null                                                                 |             |

### `app.listing_rejected`

Ownrecord rejected an app's listing: other organizations can no longer install it. `reason` says why.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field        | Type                                                                           | Description |
| ------------ | ------------------------------------------------------------------------------ | ----------- |
| `id`         | string                                                                         |             |
| `object`     | `"app_listing"`                                                                |             |
| `ownerOrgId` | string                                                                         |             |
| `name`       | string                                                                         |             |
| `status`     | one of `not_submitted`, `pending`, `changes_requested`, `approved`, `rejected` |             |
| `listed`     | boolean                                                                        |             |
| `reason`     | string or null                                                                 |             |

### `app.reinstated`

Ownrecord lifted an app's suspension. Its installations stay paused until each organization resumes its own.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field             | Type                             | Description |
| ----------------- | -------------------------------- | ----------- |
| `object`          | `"app_suspension"`               |             |
| `app`             | object                           |             |
| `app.id`          | string                           |             |
| `app.name`        | string                           |             |
| `app.publisher`   | string                           |             |
| `ownerOrgId`      | string                           |             |
| `ownsApp`         | boolean                          |             |
| `installationId`  | string or null                   |             |
| `status`          | one of `suspended`, `reinstated` |             |
| `reason`          | string                           |             |
| `suspendedAt`     | string                           |             |
| `reinstatedAt`    | string or null                   |             |
| `reinstateReason` | string or null                   |             |

### `app.suspended`

Ownrecord suspended an app everywhere: its tokens are revoked, its installations paused and the agents it owns stopped. `reason` says why.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field             | Type                             | Description |
| ----------------- | -------------------------------- | ----------- |
| `object`          | `"app_suspension"`               |             |
| `app`             | object                           |             |
| `app.id`          | string                           |             |
| `app.name`        | string                           |             |
| `app.publisher`   | string                           |             |
| `ownerOrgId`      | string                           |             |
| `ownsApp`         | boolean                          |             |
| `installationId`  | string or null                   |             |
| `status`          | one of `suspended`, `reinstated` |             |
| `reason`          | string                           |             |
| `suspendedAt`     | string                           |             |
| `reinstatedAt`    | string or null                   |             |
| `reinstateReason` | string or null                   |             |

## Approval

### `approval.requested`

A call needed a person's approval, so an approval request was created instead of running it. Nothing ran yet.

**Scope:** Organization · **Webhooks:** delivered

`data.object`:

| Field                           | Type                                                                     | Description |
| ------------------------------- | ------------------------------------------------------------------------ | ----------- |
| `id`                            | `apr_…` ID                                                               |             |
| `object`                        | `"approval_request"`                                                     |             |
| `status`                        | one of `pending`, `approved`, `rejected`, `expired`, `executed`, `stale` |             |
| `operationId`                   | string                                                                   |             |
| `summary`                       | string                                                                   |             |
| `orgId`                         | `org_…` ID                                                               |             |
| `entityId`                      | `ent_…` ID or null                                                       |             |
| `brandId`                       | `brd_…` ID or null                                                       |             |
| `livemode`                      | boolean                                                                  |             |
| `requestedBy`                   | object                                                                   |             |
| `requestedBy.type`              | one of `user`, `api_key`, `agent`, `app`, `system`, `public`, `customer` |             |
| `requestedBy.id`                | string                                                                   |             |
| `requestedBy.via`               | one of `console`, `api`, `mcp`, `assistant`, `portal`, `job` or null     |             |
| `requestedBy.clientId`          | string or null                                                           |             |
| `requestedBy.onBehalfOfUserId`  | string or null                                                           |             |
| `requestedBy.appInstallationId` | string or null                                                           |             |
| `amount`                        | money or null                                                            |             |
| `input`                         | any                                                                      |             |
| `dryRun`                        | object                                                                   |             |
| `dryRun.output`                 | any                                                                      |             |
| `dryRun.events`                 | array of string                                                          |             |
| `diff`                          | object or null                                                           |             |
| `requiredApprovals`             | integer (1 to 2)                                                         |             |
| `approvals`                     | array of object                                                          |             |
| `approvals[].userId`            | `usr_…` ID                                                               |             |
| `approvals[].at`                | date-time                                                                |             |
| `approvals[].comment`           | string or null                                                           |             |
| `rejection`                     | object or null                                                           |             |
| `failure`                       | object or null                                                           |             |
| `resultRef`                     | string or null                                                           |             |
| `approveUrl`                    | string                                                                   |             |
| `expiresAt`                     | date-time                                                                |             |
| `executedAt`                    | date-time or null                                                        |             |
| `createdAt`                     | date-time                                                                |             |
| `updatedAt`                     | date-time                                                                |             |

### `approval.resolved`

An approval request reached its outcome: `executed` (approved and run as requested), `rejected`, `stale` (approved, but it could no longer run as requested) or `expired` (nobody decided within 72 hours). `status` says which.

**Scope:** Organization · **Webhooks:** delivered

`data.object`:

| Field                           | Type                                                                     | Description |
| ------------------------------- | ------------------------------------------------------------------------ | ----------- |
| `id`                            | `apr_…` ID                                                               |             |
| `object`                        | `"approval_request"`                                                     |             |
| `status`                        | one of `pending`, `approved`, `rejected`, `expired`, `executed`, `stale` |             |
| `operationId`                   | string                                                                   |             |
| `summary`                       | string                                                                   |             |
| `orgId`                         | `org_…` ID                                                               |             |
| `entityId`                      | `ent_…` ID or null                                                       |             |
| `brandId`                       | `brd_…` ID or null                                                       |             |
| `livemode`                      | boolean                                                                  |             |
| `requestedBy`                   | object                                                                   |             |
| `requestedBy.type`              | one of `user`, `api_key`, `agent`, `app`, `system`, `public`, `customer` |             |
| `requestedBy.id`                | string                                                                   |             |
| `requestedBy.via`               | one of `console`, `api`, `mcp`, `assistant`, `portal`, `job` or null     |             |
| `requestedBy.clientId`          | string or null                                                           |             |
| `requestedBy.onBehalfOfUserId`  | string or null                                                           |             |
| `requestedBy.appInstallationId` | string or null                                                           |             |
| `amount`                        | money or null                                                            |             |
| `input`                         | any                                                                      |             |
| `dryRun`                        | object                                                                   |             |
| `dryRun.output`                 | any                                                                      |             |
| `dryRun.events`                 | array of string                                                          |             |
| `diff`                          | object or null                                                           |             |
| `requiredApprovals`             | integer (1 to 2)                                                         |             |
| `approvals`                     | array of object                                                          |             |
| `approvals[].userId`            | `usr_…` ID                                                               |             |
| `approvals[].at`                | date-time                                                                |             |
| `approvals[].comment`           | string or null                                                           |             |
| `rejection`                     | object or null                                                           |             |
| `failure`                       | object or null                                                           |             |
| `resultRef`                     | string or null                                                           |             |
| `approveUrl`                    | string                                                                   |             |
| `expiresAt`                     | date-time                                                                |             |
| `executedAt`                    | date-time or null                                                        |             |
| `createdAt`                     | date-time                                                                |             |
| `updatedAt`                     | date-time                                                                |             |

## Brand

### `brand.created`

A brand was created under a legal entity. New brands start in test mode only (`test_only`).

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field      | Type      | Description |
| ---------- | --------- | ----------- |
| `id`       | string    |             |
| `object`   | `"brand"` |             |
| `orgId`    | string    |             |
| `entityId` | string    |             |
| `slug`     | string    |             |
| `name`     | string    |             |
| `status`   | string    |             |

### `brand.updated`

A brand's settings changed. `previous_attributes` has the old values.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field      | Type      | Description |
| ---------- | --------- | ----------- |
| `id`       | string    |             |
| `object`   | `"brand"` |             |
| `orgId`    | string    |             |
| `entityId` | string    |             |
| `slug`     | string    |             |
| `name`     | string    |             |
| `status`   | string    |             |

## Checkout

### `checkout.session.blocked`

The customer's details gave a tax quote Ownrecord can't charge with confidence (for example, the seller isn't registered where a zero threshold applies), so the sale is paused and the hosted page offers the waitlist. `data.blockedReason` is the reason code.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field        | Type                                                          | Description |
| ------------ | ------------------------------------------------------------- | ----------- |
| `id`         | string                                                        |             |
| `object`     | `"checkout.session"`                                          |             |
| `livemode`   | boolean                                                       |             |
| `brandId`    | string                                                        |             |
| `entityId`   | string                                                        |             |
| `mode`       | string                                                        |             |
| `status`     | one of `open`, `processing`, `complete`, `expired`, `blocked` |             |
| `currency`   | string                                                        |             |
| `customerId` | string or null                                                |             |
| `metadata`   | object                                                        |             |

### `checkout.session.completed`

A checkout was paid and fulfilled: the payment is recorded, the sale posted, the invoice issued and credit packs granted, all in one transaction triggered by the processor's webhook. `data` is the session with `paymentId` and `invoiceId`.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field        | Type                                                          | Description |
| ------------ | ------------------------------------------------------------- | ----------- |
| `id`         | string                                                        |             |
| `object`     | `"checkout.session"`                                          |             |
| `livemode`   | boolean                                                       |             |
| `brandId`    | string                                                        |             |
| `entityId`   | string                                                        |             |
| `mode`       | string                                                        |             |
| `status`     | one of `open`, `processing`, `complete`, `expired`, `blocked` |             |
| `currency`   | string                                                        |             |
| `customerId` | string or null                                                |             |
| `metadata`   | object                                                        |             |

### `checkout.session.expired`

A checkout session expired without a payment: its time ran out (24 hours by default) or it was expired through the API.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field        | Type                                                          | Description |
| ------------ | ------------------------------------------------------------- | ----------- |
| `id`         | string                                                        |             |
| `object`     | `"checkout.session"`                                          |             |
| `livemode`   | boolean                                                       |             |
| `brandId`    | string                                                        |             |
| `entityId`   | string                                                        |             |
| `mode`       | string                                                        |             |
| `status`     | one of `open`, `processing`, `complete`, `expired`, `blocked` |             |
| `currency`   | string                                                        |             |
| `customerId` | string or null                                                |             |
| `metadata`   | object                                                        |             |

## Coupon

### `coupon.created`

A coupon (percent or amount off, with a duration) was created in the brand's catalog.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field      | Type                                  | Description |
| ---------- | ------------------------------------- | ----------- |
| `id`       | string                                |             |
| `object`   | `"coupon"`                            |             |
| `brandId`  | string                                |             |
| `livemode` | boolean                               |             |
| `name`     | string                                |             |
| `duration` | one of `once`, `repeating`, `forever` |             |
| `active`   | boolean                               |             |

### `coupon.updated`

A coupon changed: its name, metadata or `active` (archived or reactivated), or, while unused, its terms. `previous_attributes` has the old values.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field      | Type                                  | Description |
| ---------- | ------------------------------------- | ----------- |
| `id`       | string                                |             |
| `object`   | `"coupon"`                            |             |
| `brandId`  | string                                |             |
| `livemode` | boolean                               |             |
| `name`     | string                                |             |
| `duration` | one of `once`, `repeating`, `forever` |             |
| `active`   | boolean                               |             |

## Credit note

### `credit_note.issued`

A credit note was issued for a refund: numbered without gaps in the brand's credit note series, it reverses the original invoice's lines at their original tax rates and jurisdictions. `data` is the credit note (`credit_notes.get`); its PDF is rendered and emailed to the customer right after (`pdf.status` turns `ready`).

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                   | Type            | Description |
| ----------------------- | --------------- | ----------- |
| `id`                    | string          |             |
| `object`                | `"credit_note"` |             |
| `number`                | string          |             |
| `livemode`              | boolean         |             |
| `brandId`               | string          |             |
| `entityId`              | string          |             |
| `originalInvoiceId`     | string          |             |
| `originalInvoiceNumber` | string          |             |
| `refundId`              | string          |             |
| `currency`              | string          |             |
| `issueDate`             | string          |             |
| `totals`                | object          |             |
| `totals.net`            | object          |             |
| `totals.net.amount`     | string          |             |
| `totals.net.currency`   | string          |             |
| `totals.tax`            | object          |             |
| `totals.tax.amount`     | string          |             |
| `totals.tax.currency`   | string          |             |
| `totals.gross`          | object          |             |
| `totals.gross.amount`   | string          |             |
| `totals.gross.currency` | string          |             |

## Customer

### `customer.created`

A customer was created: through the API or the console, or by checkout for a new buyer. Tax IDs given at creation are already checked (`taxIds[].verification`).

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field              | Type                                       | Description |
| ------------------ | ------------------------------------------ | ----------- |
| `id`               | string                                     |             |
| `object`           | `"customer"`                               |             |
| `livemode`         | boolean                                    |             |
| `email`            | string                                     |             |
| `type`             | one of `individual`, `business`, `unknown` |             |
| `taxIds`           | array of object                            |             |
| `taxIds[].id`      | string                                     |             |
| `taxIds[].type`    | string                                     |             |
| `taxIds[].country` | string                                     |             |
| `deletedAt`        | string or null                             |             |

### `customer.credit_balance.updated`

A customer's credit balance changed in one currency: an operator adjusted it (with a reason), an invoice used it at finalization, a voided invoice gave it back, a subscription change credited unused time (proration), or a refund gave back the part of an invoice the balance paid (`refund`, M8). `data.balance` is the new balance and `data.change` the signed change, both in integer micros; `data.reason` says why (`adjustment`, `invoice_applied`, `invoice_voided`, `proration`, `refund`).

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                 | Type                                                                            | Description |
| --------------------- | ------------------------------------------------------------------------------- | ----------- |
| `object`              | `"credit_balance_change"`                                                       |             |
| `customerId`          | string                                                                          |             |
| `currency`            | string                                                                          |             |
| `balance`             | object                                                                          |             |
| `balance.amount`      | string                                                                          |             |
| `balance.currency`    | string                                                                          |             |
| `change`              | object                                                                          |             |
| `change.amount`       | string                                                                          |             |
| `change.currency`     | string                                                                          |             |
| `reason`              | one of `adjustment`, `invoice_applied`, `invoice_voided`, `proration`, `refund` |             |
| `invoiceId`           | string or null                                                                  |             |
| `ledgerTransactionId` | string                                                                          |             |

### `customer.entitlements.updated`

A customer's entitlements changed: a subscription, lifetime purchase or override changed, the brand changed a feature or a product's entitlements, or an override expired or a past-due grace period ended. `changes` lists each feature whose value changed; `previous_attributes.values` has the previous set.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                  | Type                                                     | Description |
| ---------------------- | -------------------------------------------------------- | ----------- |
| `object`               | `"customer_entitlements"`                                |             |
| `customerId`           | string                                                   |             |
| `brandId`              | string                                                   |             |
| `livemode`             | boolean                                                  |             |
| `values`               | object                                                   |             |
| `sources`              | array of object                                          |             |
| `sources[].type`       | one of `override`, `subscription`, `purchase`, `default` |             |
| `sources[].ref`        | string                                                   |             |
| `sources[].featureKey` | string                                                   |             |
| `sources[].value`      | boolean or number or string                              |             |
| `computedAt`           | string                                                   |             |
| `changes`              | array of object                                          |             |
| `changes[].featureKey` | string                                                   |             |
| `changes[].before`     | boolean or number or string or null                      |             |
| `changes[].after`      | boolean or number or string or null                      |             |

### `customer.updated`

A customer changed: profile fields, tax IDs added or removed, the locked tax country set at the first payment or moved by a top-up, or the customer was deleted (`deletedAt`). `previous_attributes` has the old values of the fields that changed.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field              | Type                                       | Description |
| ------------------ | ------------------------------------------ | ----------- |
| `id`               | string                                     |             |
| `object`           | `"customer"`                               |             |
| `livemode`         | boolean                                    |             |
| `email`            | string                                     |             |
| `type`             | one of `individual`, `business`, `unknown` |             |
| `taxIds`           | array of object                            |             |
| `taxIds[].id`      | string                                     |             |
| `taxIds[].type`    | string                                     |             |
| `taxIds[].country` | string                                     |             |
| `deletedAt`        | string or null                             |             |

## Data export

### `data_export.failed`

An accounting export couldn't be built; `failure` says why. Request it again.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field      | Type                                                     | Description |
| ---------- | -------------------------------------------------------- | ----------- |
| `id`       | string                                                   |             |
| `object`   | `"data_export"`                                          |             |
| `entityId` | string                                                   |             |
| `livemode` | boolean                                                  |             |
| `kind`     | `"accounting"`                                           |             |
| `status`   | one of `queued`, `running`, `ready`, `expired`, `failed` |             |
| `from`     | string                                                   |             |
| `to`       | string                                                   |             |

### `data_export.ready`

An accounting export's files (journal, invoice register, credit-note register) are ready to download for 30 days.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field      | Type                                                     | Description |
| ---------- | -------------------------------------------------------- | ----------- |
| `id`       | string                                                   |             |
| `object`   | `"data_export"`                                          |             |
| `entityId` | string                                                   |             |
| `livemode` | boolean                                                  |             |
| `kind`     | `"accounting"`                                           |             |
| `status`   | one of `queued`, `running`, `ready`, `expired`, `failed` |             |
| `from`     | string                                                   |             |
| `to`       | string                                                   |             |

### `data_export.requested`

An accounting export was requested (internal); the data_export job builds its files.

**Scope:** Legal entity · **Webhooks:** not delivered (internal)

`data.object`:

| Field      | Type                                                     | Description |
| ---------- | -------------------------------------------------------- | ----------- |
| `id`       | string                                                   |             |
| `object`   | `"data_export"`                                          |             |
| `entityId` | string                                                   |             |
| `livemode` | boolean                                                  |             |
| `kind`     | `"accounting"`                                           |             |
| `status`   | one of `queued`, `running`, `ready`, `expired`, `failed` |             |
| `from`     | string                                                   |             |
| `to`       | string                                                   |             |

## Discount

### `discount.created`

A coupon was applied to a customer or a subscription (directly or through a promotion code), with the dates it covers.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field            | Type           | Description |
| ---------------- | -------------- | ----------- |
| `id`             | string         |             |
| `object`         | `"discount"`   |             |
| `brandId`        | string         |             |
| `livemode`       | boolean        |             |
| `couponId`       | string         |             |
| `customerId`     | string         |             |
| `subscriptionId` | string or null |             |
| `start`          | string         |             |
| `end`            | string or null |             |

### `discount.deleted`

A discount was ended before its time: it no longer applies to invoices from `end` on. `previous_attributes.end` has the old end (null for forever).

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field            | Type           | Description |
| ---------------- | -------------- | ----------- |
| `id`             | string         |             |
| `object`         | `"discount"`   |             |
| `brandId`        | string         |             |
| `livemode`       | boolean        |             |
| `couponId`       | string         |             |
| `customerId`     | string         |             |
| `subscriptionId` | string or null |             |
| `start`          | string         |             |
| `end`            | string or null |             |

## Dispute

### `dispute.closed`

The processor closed a dispute. `status` is `won` (the withdrawn amount came back, the fee stays; an inquiry closes as `won` with nothing booked) or `lost` (the money stays withdrawn and the customer's risk becomes `elevated`).

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                   | Type                                                                                              | Description |
| ----------------------- | ------------------------------------------------------------------------------------------------- | ----------- |
| `id`                    | `dp_…` ID                                                                                         |             |
| `object`                | `"dispute"`                                                                                       |             |
| `livemode`              | boolean                                                                                           |             |
| `entityId`              | `ent_…` ID                                                                                        |             |
| `brandId`               | `brd_…` ID                                                                                        |             |
| `paymentId`             | `pay_…` ID                                                                                        |             |
| `customerId`            | `cus_…` ID                                                                                        |             |
| `processor`             | one of `stripe`, `mollie`, `fake`                                                                 |             |
| `processorConnectionId` | `pcon_…` ID                                                                                       |             |
| `processorRef`          | string                                                                                            |             |
| `reason`                | string or null                                                                                    |             |
| `processorStatus`       | string or null                                                                                    |             |
| `status`                | one of `needs_response`, `under_review`, `won`, `lost`                                            |             |
| `inquiry`               | boolean                                                                                           |             |
| `fundsWithdrawnAt`      | date-time or null                                                                                 |             |
| `amount`                | money                                                                                             |             |
| `fee`                   | money or null                                                                                     |             |
| `evidenceDueBy`         | date-time or null                                                                                 |             |
| `openedAt`              | date-time                                                                                         |             |
| `closedAt`              | date-time or null                                                                                 |             |
| `ledgerTxnIds`          | array of `txn_…` ID                                                                               |             |
| `walletFreeze`          | object or null                                                                                    |             |
| `walletReversal`        | object or null                                                                                    |             |
| `evidence`              | object or null                                                                                    |             |
| `notes`                 | string or null                                                                                    |             |
| `assignee`              | object or null                                                                                    |             |
| `history`               | array of object                                                                                   |             |
| `history[].at`          | date-time                                                                                         |             |
| `history[].event`       | one of 10 values, e.g. `opened`, `wallet_frozen`, `funds_withdrawn` (all in the OpenAPI document) |             |
| `history[].by`          | string                                                                                            |             |
| `history[].note`        | string or null                                                                                    |             |
| `createdAt`             | date-time                                                                                         |             |
| `updatedAt`             | date-time                                                                                         |             |
| `version`               | integer (at least 1)                                                                              |             |

### `dispute.created`

A customer disputed a payment with their bank. For a chargeback the disputed amount and the dispute fee are booked as withdrawn; an inquiry (`inquiry: true`) takes no money and books nothing until the bank escalates it. The customer's wallets are frozen unless the brand turned that off.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                   | Type                                                                                              | Description |
| ----------------------- | ------------------------------------------------------------------------------------------------- | ----------- |
| `id`                    | `dp_…` ID                                                                                         |             |
| `object`                | `"dispute"`                                                                                       |             |
| `livemode`              | boolean                                                                                           |             |
| `entityId`              | `ent_…` ID                                                                                        |             |
| `brandId`               | `brd_…` ID                                                                                        |             |
| `paymentId`             | `pay_…` ID                                                                                        |             |
| `customerId`            | `cus_…` ID                                                                                        |             |
| `processor`             | one of `stripe`, `mollie`, `fake`                                                                 |             |
| `processorConnectionId` | `pcon_…` ID                                                                                       |             |
| `processorRef`          | string                                                                                            |             |
| `reason`                | string or null                                                                                    |             |
| `processorStatus`       | string or null                                                                                    |             |
| `status`                | one of `needs_response`, `under_review`, `won`, `lost`                                            |             |
| `inquiry`               | boolean                                                                                           |             |
| `fundsWithdrawnAt`      | date-time or null                                                                                 |             |
| `amount`                | money                                                                                             |             |
| `fee`                   | money or null                                                                                     |             |
| `evidenceDueBy`         | date-time or null                                                                                 |             |
| `openedAt`              | date-time                                                                                         |             |
| `closedAt`              | date-time or null                                                                                 |             |
| `ledgerTxnIds`          | array of `txn_…` ID                                                                               |             |
| `walletFreeze`          | object or null                                                                                    |             |
| `walletReversal`        | object or null                                                                                    |             |
| `evidence`              | object or null                                                                                    |             |
| `notes`                 | string or null                                                                                    |             |
| `assignee`              | object or null                                                                                    |             |
| `history`               | array of object                                                                                   |             |
| `history[].at`          | date-time                                                                                         |             |
| `history[].event`       | one of 10 values, e.g. `opened`, `wallet_frozen`, `funds_withdrawn` (all in the OpenAPI document) |             |
| `history[].by`          | string                                                                                            |             |
| `history[].note`        | string or null                                                                                    |             |
| `createdAt`             | date-time                                                                                         |             |
| `updatedAt`             | date-time                                                                                         |             |
| `version`               | integer (at least 1)                                                                              |             |

### `dispute.updated`

The processor withdrew the funds of an inquiry (it became a chargeback: `inquiry: false`, `fundsWithdrawnAt`, the chargeback posted), or the evidence pack was built or submitted, or the notes or assignee changed. `previous_attributes` has the old values.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                   | Type                                                                                              | Description |
| ----------------------- | ------------------------------------------------------------------------------------------------- | ----------- |
| `id`                    | `dp_…` ID                                                                                         |             |
| `object`                | `"dispute"`                                                                                       |             |
| `livemode`              | boolean                                                                                           |             |
| `entityId`              | `ent_…` ID                                                                                        |             |
| `brandId`               | `brd_…` ID                                                                                        |             |
| `paymentId`             | `pay_…` ID                                                                                        |             |
| `customerId`            | `cus_…` ID                                                                                        |             |
| `processor`             | one of `stripe`, `mollie`, `fake`                                                                 |             |
| `processorConnectionId` | `pcon_…` ID                                                                                       |             |
| `processorRef`          | string                                                                                            |             |
| `reason`                | string or null                                                                                    |             |
| `processorStatus`       | string or null                                                                                    |             |
| `status`                | one of `needs_response`, `under_review`, `won`, `lost`                                            |             |
| `inquiry`               | boolean                                                                                           |             |
| `fundsWithdrawnAt`      | date-time or null                                                                                 |             |
| `amount`                | money                                                                                             |             |
| `fee`                   | money or null                                                                                     |             |
| `evidenceDueBy`         | date-time or null                                                                                 |             |
| `openedAt`              | date-time                                                                                         |             |
| `closedAt`              | date-time or null                                                                                 |             |
| `ledgerTxnIds`          | array of `txn_…` ID                                                                               |             |
| `walletFreeze`          | object or null                                                                                    |             |
| `walletReversal`        | object or null                                                                                    |             |
| `evidence`              | object or null                                                                                    |             |
| `notes`                 | string or null                                                                                    |             |
| `assignee`              | object or null                                                                                    |             |
| `history`               | array of object                                                                                   |             |
| `history[].at`          | date-time                                                                                         |             |
| `history[].event`       | one of 10 values, e.g. `opened`, `wallet_frozen`, `funds_withdrawn` (all in the OpenAPI document) |             |
| `history[].by`          | string                                                                                            |             |
| `history[].note`        | string or null                                                                                    |             |
| `createdAt`             | date-time                                                                                         |             |
| `updatedAt`             | date-time                                                                                         |             |
| `version`               | integer (at least 1)                                                                              |             |

## Einvoice

### `einvoice.accepted`

The receiver accepted the e-invoice.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field            | Type                            | Description |
| ---------------- | ------------------------------- | ----------- |
| `id`             | string                          |             |
| `object`         | `"einvoice"`                    |             |
| `livemode`       | boolean                         |             |
| `brandId`        | string                          |             |
| `entityId`       | string                          |             |
| `documentKind`   | one of `invoice`, `credit_note` |             |
| `documentId`     | string                          |             |
| `documentNumber` | string                          |             |
| `provider`       | string                          |             |
| `format`         | string                          |             |
| `status`         | string                          |             |
| `externalId`     | string or null                  |             |

### `einvoice.delivered`

The e-invoicing provider delivered the e-invoice to the buyer's access point or platform.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field            | Type                            | Description |
| ---------------- | ------------------------------- | ----------- |
| `id`             | string                          |             |
| `object`         | `"einvoice"`                    |             |
| `livemode`       | boolean                         |             |
| `brandId`        | string                          |             |
| `entityId`       | string                          |             |
| `documentKind`   | one of `invoice`, `credit_note` |             |
| `documentId`     | string                          |             |
| `documentNumber` | string                          |             |
| `provider`       | string                          |             |
| `format`         | string                          |             |
| `status`         | string                          |             |
| `externalId`     | string or null                  |             |

### `einvoice.failed`

The e-invoice couldn't be generated or sent, for a reason retrying alone won't fix (`error.code`, `error.message`): for example a buyer without an electronic address. Retry it with `einvoices.retry` once the cause is fixed.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field            | Type                            | Description |
| ---------------- | ------------------------------- | ----------- |
| `id`             | string                          |             |
| `object`         | `"einvoice"`                    |             |
| `livemode`       | boolean                         |             |
| `brandId`        | string                          |             |
| `entityId`       | string                          |             |
| `documentKind`   | one of `invoice`, `credit_note` |             |
| `documentId`     | string                          |             |
| `documentNumber` | string                          |             |
| `provider`       | string                          |             |
| `format`         | string                          |             |
| `status`         | string                          |             |
| `externalId`     | string or null                  |             |

### `einvoice.rejected`

The receiver rejected the e-invoice; `error.message` gives its reason. The invoice itself stands: correct it with a credit note or fix the buyer's details and retry the e-invoice.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field            | Type                            | Description |
| ---------------- | ------------------------------- | ----------- |
| `id`             | string                          |             |
| `object`         | `"einvoice"`                    |             |
| `livemode`       | boolean                         |             |
| `brandId`        | string                          |             |
| `entityId`       | string                          |             |
| `documentKind`   | one of `invoice`, `credit_note` |             |
| `documentId`     | string                          |             |
| `documentNumber` | string                          |             |
| `provider`       | string                          |             |
| `format`         | string                          |             |
| `status`         | string                          |             |
| `externalId`     | string or null                  |             |

### `einvoice.sent`

An issued invoice's or credit note's e-invoice was generated (EN 16931 UBL, Peppol BIS Billing 3.0) and the entity's e-invoicing provider took it for delivery. `status` is `queued` and `externalId` is the provider's ID.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field            | Type                            | Description |
| ---------------- | ------------------------------- | ----------- |
| `id`             | string                          |             |
| `object`         | `"einvoice"`                    |             |
| `livemode`       | boolean                         |             |
| `brandId`        | string                          |             |
| `entityId`       | string                          |             |
| `documentKind`   | one of `invoice`, `credit_note` |             |
| `documentId`     | string                          |             |
| `documentNumber` | string                          |             |
| `provider`       | string                          |             |
| `format`         | string                          |             |
| `status`         | string                          |             |
| `externalId`     | string or null                  |             |

## Feature

### `feature.created`

A feature (an entitlement definition such as `seats.max`) was created for the brand.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field      | Type                              | Description |
| ---------- | --------------------------------- | ----------- |
| `id`       | string                            |             |
| `object`   | `"feature"`                       |             |
| `brandId`  | string                            |             |
| `livemode` | boolean                           |             |
| `key`      | string                            |             |
| `type`     | one of `boolean`, `limit`, `enum` |             |

### `feature.updated`

A feature's name, combine rule, default value or enum values changed. `previous_attributes` has the old values.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field      | Type                              | Description |
| ---------- | --------------------------------- | ----------- |
| `id`       | string                            |             |
| `object`   | `"feature"`                       |             |
| `brandId`  | string                            |             |
| `livemode` | boolean                           |             |
| `key`      | string                            |             |
| `type`     | one of `boolean`, `limit`, `enum` |             |

## Filing period

### `filing_period.created`

A filing period was created for a regime the entity is registered in (or in a grace period for), from the regime's filing rules: its dates and due date.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field         | Type                                                                       | Description |
| ------------- | -------------------------------------------------------------------------- | ----------- |
| `id`          | string                                                                     |             |
| `object`      | `"filing_period"`                                                          |             |
| `entityId`    | string                                                                     |             |
| `livemode`    | boolean                                                                    |             |
| `regimeId`    | string                                                                     |             |
| `periodKey`   | string                                                                     |             |
| `periodStart` | string                                                                     |             |
| `periodEnd`   | string                                                                     |             |
| `dueDate`     | string                                                                     |             |
| `dueAt`       | string                                                                     |             |
| `status`      | one of `open`, `locked`, `prepared`, `submitted`, `paid`                   |             |
| `reportKind`  | one of `eu_oss`, `eu_domestic`, `uk_vat`, `ch_mwst`, `generic`, `us_state` |             |

### `filing_period.due_soon`

A return is due in 14, 7 or 2 days and isn't filed yet (`reminder` is the alert code, `daysBefore` the days left).

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field         | Type                                                                       | Description |
| ------------- | -------------------------------------------------------------------------- | ----------- |
| `id`          | string                                                                     |             |
| `object`      | `"filing_period"`                                                          |             |
| `entityId`    | string                                                                     |             |
| `livemode`    | boolean                                                                    |             |
| `regimeId`    | string                                                                     |             |
| `periodKey`   | string                                                                     |             |
| `periodStart` | string                                                                     |             |
| `periodEnd`   | string                                                                     |             |
| `dueDate`     | string                                                                     |             |
| `dueAt`       | string                                                                     |             |
| `status`      | one of `open`, `locked`, `prepared`, `submitted`, `paid`                   |             |
| `reportKind`  | one of `eu_oss`, `eu_domestic`, `uk_vat`, `ch_mwst`, `generic`, `us_state` |             |
| `reminder`    | one of `FILING_DUE_14`, `FILING_DUE_7`, `FILING_DUE_2`                     |             |
| `daysBefore`  | integer                                                                    |             |

### `filing_period.locked`

A filing period that is over was locked, ready for its report.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field         | Type                                                                       | Description |
| ------------- | -------------------------------------------------------------------------- | ----------- |
| `id`          | string                                                                     |             |
| `object`      | `"filing_period"`                                                          |             |
| `entityId`    | string                                                                     |             |
| `livemode`    | boolean                                                                    |             |
| `regimeId`    | string                                                                     |             |
| `periodKey`   | string                                                                     |             |
| `periodStart` | string                                                                     |             |
| `periodEnd`   | string                                                                     |             |
| `dueDate`     | string                                                                     |             |
| `dueAt`       | string                                                                     |             |
| `status`      | one of `open`, `locked`, `prepared`, `submitted`, `paid`                   |             |
| `reportKind`  | one of `eu_oss`, `eu_domestic`, `uk_vat`, `ch_mwst`, `generic`, `us_state` |             |

### `filing_period.paid`

The tax of the period was paid: the payment reference is recorded and the ledger moved the tax payable to the bank.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field         | Type                                                                       | Description |
| ------------- | -------------------------------------------------------------------------- | ----------- |
| `id`          | string                                                                     |             |
| `object`      | `"filing_period"`                                                          |             |
| `entityId`    | string                                                                     |             |
| `livemode`    | boolean                                                                    |             |
| `regimeId`    | string                                                                     |             |
| `periodKey`   | string                                                                     |             |
| `periodStart` | string                                                                     |             |
| `periodEnd`   | string                                                                     |             |
| `dueDate`     | string                                                                     |             |
| `dueAt`       | string                                                                     |             |
| `status`      | one of `open`, `locked`, `prepared`, `submitted`, `paid`                   |             |
| `reportKind`  | one of `eu_oss`, `eu_domestic`, `uk_vat`, `ch_mwst`, `generic`, `us_state` |             |

### `filing_period.prepared`

The period's report was generated (again) and it reconciles with the ledger: the report files and totals are on the period.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field         | Type                                                                       | Description |
| ------------- | -------------------------------------------------------------------------- | ----------- |
| `id`          | string                                                                     |             |
| `object`      | `"filing_period"`                                                          |             |
| `entityId`    | string                                                                     |             |
| `livemode`    | boolean                                                                    |             |
| `regimeId`    | string                                                                     |             |
| `periodKey`   | string                                                                     |             |
| `periodStart` | string                                                                     |             |
| `periodEnd`   | string                                                                     |             |
| `dueDate`     | string                                                                     |             |
| `dueAt`       | string                                                                     |             |
| `status`      | one of `open`, `locked`, `prepared`, `submitted`, `paid`                   |             |
| `reportKind`  | one of `eu_oss`, `eu_domestic`, `uk_vat`, `ch_mwst`, `generic`, `us_state` |             |

### `filing_period.ready`

A filing period is over and its return isn't filed yet: it can now be locked and its report prepared. Once per period, when its lock date (`lockableAt`) has passed.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field         | Type                                                                       | Description |
| ------------- | -------------------------------------------------------------------------- | ----------- |
| `id`          | string                                                                     |             |
| `object`      | `"filing_period"`                                                          |             |
| `entityId`    | string                                                                     |             |
| `livemode`    | boolean                                                                    |             |
| `regimeId`    | string                                                                     |             |
| `periodKey`   | string                                                                     |             |
| `periodStart` | string                                                                     |             |
| `periodEnd`   | string                                                                     |             |
| `dueDate`     | string                                                                     |             |
| `dueAt`       | string                                                                     |             |
| `status`      | one of `open`, `locked`, `prepared`, `submitted`, `paid`                   |             |
| `reportKind`  | one of `eu_oss`, `eu_domestic`, `uk_vat`, `ch_mwst`, `generic`, `us_state` |             |

### `filing_period.submitted`

The return was filed with the tax authority; the period has its reference.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field         | Type                                                                       | Description |
| ------------- | -------------------------------------------------------------------------- | ----------- |
| `id`          | string                                                                     |             |
| `object`      | `"filing_period"`                                                          |             |
| `entityId`    | string                                                                     |             |
| `livemode`    | boolean                                                                    |             |
| `regimeId`    | string                                                                     |             |
| `periodKey`   | string                                                                     |             |
| `periodStart` | string                                                                     |             |
| `periodEnd`   | string                                                                     |             |
| `dueDate`     | string                                                                     |             |
| `dueAt`       | string                                                                     |             |
| `status`      | one of `open`, `locked`, `prepared`, `submitted`, `paid`                   |             |
| `reportKind`  | one of `eu_oss`, `eu_domestic`, `uk_vat`, `ch_mwst`, `generic`, `us_state` |             |

## Invitation

### `invitation.created`

Someone was invited to the organization. The invitation email is a separate effect; the event never contains the invitation token.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field       | Type                                                                                                         | Description |
| ----------- | ------------------------------------------------------------------------------------------------------------ | ----------- |
| `id`        | string                                                                                                       |             |
| `object`    | `"invitation"`                                                                                               |             |
| `orgId`     | string                                                                                                       |             |
| `email`     | string                                                                                                       |             |
| `role`      | one of `org_owner`, `org_admin`, `billing_admin`, `finance`, `tax_manager`, `support`, `developer`, `viewer` |             |
| `scope`     | object                                                                                                       |             |
| `expiresAt` | string                                                                                                       |             |
| `invitedBy` | string                                                                                                       |             |

### `invitation.revoked`

A pending invitation was revoked. Its link stops working immediately.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field       | Type                                                                                                         | Description |
| ----------- | ------------------------------------------------------------------------------------------------------------ | ----------- |
| `id`        | string                                                                                                       |             |
| `object`    | `"invitation"`                                                                                               |             |
| `orgId`     | string                                                                                                       |             |
| `email`     | string                                                                                                       |             |
| `role`      | one of `org_owner`, `org_admin`, `billing_admin`, `finance`, `tax_manager`, `support`, `developer`, `viewer` |             |
| `scope`     | object                                                                                                       |             |
| `expiresAt` | string                                                                                                       |             |
| `invitedBy` | string                                                                                                       |             |

## Invoice

### `invoice.finalized`

A draft invoice was finalized: it got its number and a fresh tax quote, and the customer's credit balance was applied. `status` is `open` (amount due in `amountDue`), or `paid` when the credit balance covered it. `invoice.issued` is emitted with it.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                   | Type                        | Description |
| ----------------------- | --------------------------- | ----------- |
| `id`                    | string                      |             |
| `object`                | `"invoice"`                 |             |
| `number`                | string                      |             |
| `kind`                  | one of `invoice`, `receipt` |             |
| `status`                | string                      |             |
| `livemode`              | boolean                     |             |
| `brandId`               | string                      |             |
| `entityId`              | string                      |             |
| `quoteId`               | string                      |             |
| `currency`              | string                      |             |
| `issueDate`             | string                      |             |
| `totals`                | object                      |             |
| `totals.net`            | object                      |             |
| `totals.net.amount`     | string                      |             |
| `totals.net.currency`   | string                      |             |
| `totals.tax`            | object                      |             |
| `totals.tax.amount`     | string                      |             |
| `totals.tax.currency`   | string                      |             |
| `totals.gross`          | object                      |             |
| `totals.gross.amount`   | string                      |             |
| `totals.gross.currency` | string                      |             |

### `invoice.issued`

An invoice or receipt was issued: numbered without gaps in the brand's series and its content fixed (a paid checkout, or a finalized draft). `data` is the invoice (`invoices.get`); its PDF is rendered right after (`pdf.status` turns `ready`). A `pending_registration` invoice was charged before a registration number existed: the receipt goes out now, the formal invoice once the number exists.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                   | Type                        | Description |
| ----------------------- | --------------------------- | ----------- |
| `id`                    | string                      |             |
| `object`                | `"invoice"`                 |             |
| `number`                | string                      |             |
| `kind`                  | one of `invoice`, `receipt` |             |
| `status`                | string                      |             |
| `livemode`              | boolean                     |             |
| `brandId`               | string                      |             |
| `entityId`              | string                      |             |
| `quoteId`               | string                      |             |
| `currency`              | string                      |             |
| `issueDate`             | string                      |             |
| `totals`                | object                      |             |
| `totals.net`            | object                      |             |
| `totals.net.amount`     | string                      |             |
| `totals.net.currency`   | string                      |             |
| `totals.tax`            | object                      |             |
| `totals.tax.amount`     | string                      |             |
| `totals.tax.currency`   | string                      |             |
| `totals.gross`          | object                      |             |
| `totals.gross.amount`   | string                      |             |
| `totals.gross.currency` | string                      |             |

### `invoice.overdue`

An open send_invoice invoice is overdue: its due date plus the brand's grace days have passed. A subscription invoice also puts the subscription in `past_due`.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                   | Type        | Description |
| ----------------------- | ----------- | ----------- |
| `id`                    | string      |             |
| `object`                | `"invoice"` |             |
| `number`                | string      |             |
| `status`                | string      |             |
| `livemode`              | boolean     |             |
| `brandId`               | string      |             |
| `entityId`              | string      |             |
| `currency`              | string      |             |
| `collectionMethod`      | string      |             |
| `totals`                | object      |             |
| `totals.gross`          | object      |             |
| `totals.gross.amount`   | string      |             |
| `totals.gross.currency` | string      |             |

### `invoice.paid`

An invoice was paid in full: marked paid with the bank transfer's date and reference, paid by card, or covered by the customer's credit balance at finalization. `payment` says how.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                   | Type                        | Description |
| ----------------------- | --------------------------- | ----------- |
| `id`                    | string                      |             |
| `object`                | `"invoice"`                 |             |
| `number`                | string                      |             |
| `kind`                  | one of `invoice`, `receipt` |             |
| `status`                | string                      |             |
| `livemode`              | boolean                     |             |
| `brandId`               | string                      |             |
| `entityId`              | string                      |             |
| `quoteId`               | string                      |             |
| `currency`              | string                      |             |
| `issueDate`             | string                      |             |
| `totals`                | object                      |             |
| `totals.net`            | object                      |             |
| `totals.net.amount`     | string                      |             |
| `totals.net.currency`   | string                      |             |
| `totals.tax`            | object                      |             |
| `totals.tax.amount`     | string                      |             |
| `totals.tax.currency`   | string                      |             |
| `totals.gross`          | object                      |             |
| `totals.gross.amount`   | string                      |             |
| `totals.gross.currency` | string                      |             |

### `invoice.payment_failed`

A charge of an open invoice was declined: the first charge, a dunning retry, or the retry after a payment-method update. The invoice stays open; `payment.failed` has the declined payment.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                   | Type        | Description |
| ----------------------- | ----------- | ----------- |
| `id`                    | string      |             |
| `object`                | `"invoice"` |             |
| `number`                | string      |             |
| `status`                | string      |             |
| `livemode`              | boolean     |             |
| `brandId`               | string      |             |
| `entityId`              | string      |             |
| `currency`              | string      |             |
| `collectionMethod`      | string      |             |
| `totals`                | object      |             |
| `totals.gross`          | object      |             |
| `totals.gross.amount`   | string      |             |
| `totals.gross.currency` | string      |             |

### `invoice.upcoming`

A subscription renews in 7 days: `data` is the invoice the renewal will issue as known now (licensed items in advance, metered usage so far, pending items, discounts, tax at today's rates), without a number. Add invoice items or warn the customer now.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field            | Type           | Description |
| ---------------- | -------------- | ----------- |
| `id`             | string         |             |
| `object`         | `"invoice"`    |             |
| `number`         | null           |             |
| `status`         | string         |             |
| `livemode`       | boolean        |             |
| `brandId`        | string         |             |
| `subscriptionId` | string or null |             |
| `currency`       | string         |             |
| `totals`         | object or null |             |

### `invoice.voided`

A draft or an open invoice was voided. A voided open invoice keeps its number (numbers are never reused) and its ledger posting is reversed, including credit balance it used; a voided draft never had a number.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field      | Type           | Description |
| ---------- | -------------- | ----------- |
| `id`       | string         |             |
| `object`   | `"invoice"`    |             |
| `number`   | string or null |             |
| `status`   | `"void"`       |             |
| `livemode` | boolean        |             |
| `brandId`  | string         |             |
| `entityId` | string         |             |
| `currency` | string         |             |

## Lease

### `lease.expired`

A lease reached its TTL without a closing settle and its expiry policy was applied: `release` returned the remaining funds to the wallet, `capture` charged them, and `hold_for_late_settle` keeps them reserved until `data.lateSettleUntil` (status `expired_pending`). Sent once per lease.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field               | Type                                                | Description |
| ------------------- | --------------------------------------------------- | ----------- |
| `id`                | string                                              |             |
| `object`            | `"lease"`                                           |             |
| `walletId`          | string                                              |             |
| `status`            | one of `expired`, `expired_pending`                 |             |
| `expiryPolicy`      | one of `release`, `capture`, `hold_for_late_settle` |             |
| `amount`            | object                                              |             |
| `amount.amount`     | string                                              |             |
| `amount.currency`   | string                                              |             |
| `captured`          | object                                              |             |
| `captured.amount`   | string                                              |             |
| `captured.currency` | string                                              |             |
| `expiresAt`         | string                                              |             |
| `lateSettleUntil`   | string or null                                      |             |

## Legal entity

### `legal_entity.created`

A legal entity (seller of record) was added to the organization. It starts unverified and onboarding.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field       | Type             | Description |
| ----------- | ---------------- | ----------- |
| `id`        | string           |             |
| `object`    | `"legal_entity"` |             |
| `orgId`     | string           |             |
| `slug`      | string           |             |
| `legalName` | string           |             |

### `legal_entity.updated`

A legal entity's details changed. `previous_attributes` has the old values.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field       | Type             | Description |
| ----------- | ---------------- | ----------- |
| `id`        | string           |             |
| `object`    | `"legal_entity"` |             |
| `orgId`     | string           |             |
| `slug`      | string           |             |
| `legalName` | string           |             |

## Membership

### `membership.removed`

A member was removed from the organization (or from one entity or brand).

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field            | Type                                                                                                         | Description |
| ---------------- | ------------------------------------------------------------------------------------------------------------ | ----------- |
| `id`             | string                                                                                                       |             |
| `object`         | `"membership"`                                                                                               |             |
| `orgId`          | string                                                                                                       |             |
| `userId`         | string                                                                                                       |             |
| `role`           | one of `org_owner`, `org_admin`, `billing_admin`, `finance`, `tax_manager`, `support`, `developer`, `viewer` |             |
| `scope`          | object                                                                                                       |             |
| `livemodeAccess` | boolean                                                                                                      |             |

### `membership.updated`

A member's role, scope or live-mode access changed. `previous_attributes` has the old values.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field            | Type                                                                                                         | Description |
| ---------------- | ------------------------------------------------------------------------------------------------------------ | ----------- |
| `id`             | string                                                                                                       |             |
| `object`         | `"membership"`                                                                                               |             |
| `orgId`          | string                                                                                                       |             |
| `userId`         | string                                                                                                       |             |
| `role`           | one of `org_owner`, `org_admin`, `billing_admin`, `finance`, `tax_manager`, `support`, `developer`, `viewer` |             |
| `scope`          | object                                                                                                       |             |
| `livemodeAccess` | boolean                                                                                                      |             |

## Organization

### `organization.closed`

The organization is closed: read-only and still exportable. Personal data not needed for financial records was pseudonymised.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field           | Type                             | Description |
| --------------- | -------------------------------- | ----------- |
| `object`        | `"organization_closure"`         |             |
| `orgId`         | string                           |             |
| `status`        | one of `closing`, `closed`       |             |
| `subscriptions` | one of `period_end`, `immediate` |             |

### `organization.closing`

An owner started closing the organization: live checkouts stop and its subscriptions are being cancelled. It closes once open invoices, refunds and the final filing periods are done.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field           | Type                             | Description |
| --------------- | -------------------------------- | ----------- |
| `object`        | `"organization_closure"`         |             |
| `orgId`         | string                           |             |
| `status`        | one of `closing`, `closed`       |             |
| `subscriptions` | one of `period_end`, `immediate` |             |

### `organization.created`

An organization was created. Ownrecord then creates its billing account on the platform brand, starts it on the free `sandbox` plan, and emails the person who created it the welcome with the next steps.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field                 | Type                                                                  | Description |
| --------------------- | --------------------------------------------------------------------- | ----------- |
| `id`                  | string                                                                |             |
| `object`              | `"organization"`                                                      |             |
| `slug`                | string                                                                |             |
| `status`              | one of `active`, `restricted`, `suspended`, `closing`, `closed`       |             |
| `platformCustomerId`  | string or null                                                        |             |
| `plan`                | object                                                                |             |
| `plan.status`         | one of `trialing`, `active`, `past_due`, `unpaid`, `canceled`, `none` |             |
| `plan.subscriptionId` | string or null                                                        |             |
| `plan.productId`      | string or null                                                        |             |
| `plan.entitlements`   | object                                                                |             |

### `organization.export_failed`

The organization export couldn't be built; `failure` says why. Request it again.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field    | Type                    | Description |
| -------- | ----------------------- | ----------- |
| `id`     | string                  |             |
| `object` | `"organization_export"` |             |
| `status` | string                  |             |

### `organization.export_ready`

The organization export (a ZIP of JSON files and PDFs) is ready to download for 7 days.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field    | Type                    | Description |
| -------- | ----------------------- | ----------- |
| `id`     | string                  |             |
| `object` | `"organization_export"` |             |
| `status` | string                  |             |

### `organization.export_requested`

An export of the whole organization was requested (internal); the organization_export job builds it.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field    | Type                    | Description |
| -------- | ----------------------- | ----------- |
| `id`     | string                  |             |
| `object` | `"organization_export"` |             |
| `status` | string                  |             |

### `organization.onboarding_updated`

Someone skipped, resumed or confirmed an onboarding step. `data` is the checklist with every step's state.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field      | Type                     | Description |
| ---------- | ------------------------ | ----------- |
| `object`   | `"onboarding_checklist"` |             |
| `orgId`    | string                   |             |
| `complete` | boolean                  |             |

### `organization.ownership_offer_cancelled`

An open offer of ownership was cancelled before it was accepted.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field        | Type                   | Description |
| ------------ | ---------------------- | ----------- |
| `object`     | `"ownership_transfer"` |             |
| `orgId`      | string                 |             |
| `fromUserId` | string                 |             |
| `toUserId`   | string                 |             |
| `expiresAt`  | string                 |             |

### `organization.ownership_offered`

An owner offered ownership of the organization to another member, who has 7 days to accept. They were emailed.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field        | Type                   | Description |
| ------------ | ---------------------- | ----------- |
| `object`     | `"ownership_transfer"` |             |
| `orgId`      | string                 |             |
| `fromUserId` | string                 |             |
| `toUserId`   | string                 |             |
| `expiresAt`  | string                 |             |

### `organization.plan_updated`

The organization's Ownrecord plan changed: its subscription, status, period end or entitlements (spec §37.4). `previous_attributes.plan` has the old values.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field                 | Type                                                                  | Description |
| --------------------- | --------------------------------------------------------------------- | ----------- |
| `id`                  | string                                                                |             |
| `object`              | `"organization"`                                                      |             |
| `slug`                | string                                                                |             |
| `status`              | one of `active`, `restricted`, `suspended`, `closing`, `closed`       |             |
| `platformCustomerId`  | string or null                                                        |             |
| `plan`                | object                                                                |             |
| `plan.status`         | one of `trialing`, `active`, `past_due`, `unpaid`, `canceled`, `none` |             |
| `plan.subscriptionId` | string or null                                                        |             |
| `plan.productId`      | string or null                                                        |             |
| `plan.entitlements`   | object                                                                |             |

### `organization.reactivated`

A restricted or suspended organization is active again: its open Ownrecord invoices were paid, a platform admin held the escalation, or a platform admin lifted a suspension for abuse of an organization that is paid up.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field                 | Type                                                                  | Description |
| --------------------- | --------------------------------------------------------------------- | ----------- |
| `id`                  | string                                                                |             |
| `object`              | `"organization"`                                                      |             |
| `slug`                | string                                                                |             |
| `status`              | one of `active`, `restricted`, `suspended`, `closing`, `closed`       |             |
| `platformCustomerId`  | string or null                                                        |             |
| `plan`                | object                                                                |             |
| `plan.status`         | one of `trialing`, `active`, `past_due`, `unpaid`, `canceled`, `none` |             |
| `plan.subscriptionId` | string or null                                                        |             |
| `plan.productId`      | string or null                                                        |             |
| `plan.entitlements`   | object                                                                |             |

### `organization.reinstated`

A platform admin lifted the organization's suspension for abuse. Its status is what its Ownrecord subscription says: `active` when paid, otherwise the stage that is due for how long it has been unpaid. `previous_attributes.status` is `suspended`.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field                 | Type                                                                  | Description |
| --------------------- | --------------------------------------------------------------------- | ----------- |
| `id`                  | string                                                                |             |
| `object`              | `"organization"`                                                      |             |
| `slug`                | string                                                                |             |
| `status`              | one of `active`, `restricted`, `suspended`, `closing`, `closed`       |             |
| `platformCustomerId`  | string or null                                                        |             |
| `plan`                | object                                                                |             |
| `plan.status`         | one of `trialing`, `active`, `past_due`, `unpaid`, `canceled`, `none` |             |
| `plan.subscriptionId` | string or null                                                        |             |
| `plan.productId`      | string or null                                                        |             |
| `plan.entitlements`   | object                                                                |             |

### `organization.restricted`

The organization's Ownrecord subscription has been unpaid for 14 days (by default): nothing new can be created in live mode until it is paid. Existing checkouts, renewals and webhooks keep running.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field                 | Type                                                                  | Description |
| --------------------- | --------------------------------------------------------------------- | ----------- |
| `id`                  | string                                                                |             |
| `object`              | `"organization"`                                                      |             |
| `slug`                | string                                                                |             |
| `status`              | one of `active`, `restricted`, `suspended`, `closing`, `closed`       |             |
| `platformCustomerId`  | string or null                                                        |             |
| `plan`                | object                                                                |             |
| `plan.status`         | one of `trialing`, `active`, `past_due`, `unpaid`, `canceled`, `none` |             |
| `plan.subscriptionId` | string or null                                                        |             |
| `plan.productId`      | string or null                                                        |             |
| `plan.entitlements`   | object                                                                |             |

### `organization.suspended`

The organization's Ownrecord subscription has been unpaid for 30 days (by default): new live checkouts are refused. Renewals, refunds, the customer portal and filings continue.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field                 | Type                                                                  | Description |
| --------------------- | --------------------------------------------------------------------- | ----------- |
| `id`                  | string                                                                |             |
| `object`              | `"organization"`                                                      |             |
| `slug`                | string                                                                |             |
| `status`              | one of `active`, `restricted`, `suspended`, `closing`, `closed`       |             |
| `platformCustomerId`  | string or null                                                        |             |
| `plan`                | object                                                                |             |
| `plan.status`         | one of `trialing`, `active`, `past_due`, `unpaid`, `canceled`, `none` |             |
| `plan.subscriptionId` | string or null                                                        |             |
| `plan.productId`      | string or null                                                        |             |
| `plan.entitlements`   | object                                                                |             |

### `organization.updated`

The organization's name or slug changed. `previous_attributes` has the old values. A slug change moves the console URLs.

**Scope:** Organization · **Webhooks:** not delivered (internal)

`data.object`:

| Field    | Type             | Description |
| -------- | ---------------- | ----------- |
| `id`     | string           |             |
| `object` | `"organization"` |             |
| `slug`   | string           |             |
| `name`   | string           |             |

## Payment

### `payment.failed`

A payment attempt failed at the processor (for example, the card was declined). The checkout stays open, so the customer can try another payment method. `data` is the failed attempt.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field               | Type           | Description |
| ------------------- | -------------- | ----------- |
| `id`                | string         |             |
| `object`            | `"payment"`    |             |
| `livemode`          | boolean        |             |
| `brandId`           | string         |             |
| `status`            | string         |             |
| `amount`            | object         |             |
| `amount.amount`     | string         |             |
| `amount.currency`   | string         |             |
| `checkoutSessionId` | string or null |             |

### `payment.succeeded`

A payment succeeded and was recorded with its checkout session, ledger transactions and invoice. `data` is the payment.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field               | Type           | Description |
| ------------------- | -------------- | ----------- |
| `id`                | string         |             |
| `object`            | `"payment"`    |             |
| `livemode`          | boolean        |             |
| `brandId`           | string         |             |
| `status`            | string         |             |
| `amount`            | object         |             |
| `amount.amount`     | string         |             |
| `amount.currency`   | string         |             |
| `checkoutSessionId` | string or null |             |

## Payment method

### `payment_method.attached`

A payment method was saved for a customer (a subscription checkout or a setup checkout), for off-session charges.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field        | Type               | Description |
| ------------ | ------------------ | ----------- |
| `id`         | string             |             |
| `object`     | `"payment_method"` |             |
| `brandId`    | string             |             |
| `livemode`   | boolean            |             |
| `customerId` | string             |             |
| `type`       | string             |             |
| `isDefault`  | boolean            |             |

### `payment_method.detached`

A payment method was removed from a customer; it is no longer charged.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field        | Type               | Description |
| ------------ | ------------------ | ----------- |
| `id`         | string             |             |
| `object`     | `"payment_method"` |             |
| `brandId`    | string             |             |
| `livemode`   | boolean            |             |
| `customerId` | string             |             |
| `type`       | string             |             |
| `isDefault`  | boolean            |             |

### `payment_method.updated`

A payment method became (or stopped being) the customer's default. `previous_attributes.isDefault` has the old value.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field        | Type               | Description |
| ------------ | ------------------ | ----------- |
| `id`         | string             |             |
| `object`     | `"payment_method"` |             |
| `brandId`    | string             |             |
| `livemode`   | boolean            |             |
| `customerId` | string             |             |
| `type`       | string             |             |
| `isDefault`  | boolean            |             |

## Payout

### `payout.failed`

A processor payout came back to the processor balance: the payout posting was reversed.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field                   | Type                                  | Description |
| ----------------------- | ------------------------------------- | ----------- |
| `object`                | `"payout"`                            |             |
| `itemId`                | string                                |             |
| `processorConnectionId` | string                                |             |
| `payoutRef`             | string                                |             |
| `status`                | one of `in_transit`, `paid`, `failed` |             |
| `amount`                | object                                |             |
| `amount.amount`         | string                                |             |
| `amount.currency`       | string                                |             |

### `payout.paid`

A processor payout reached the legal entity's bank: Dr bank / Cr processor clearing is in the ledger.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field                   | Type                                  | Description |
| ----------------------- | ------------------------------------- | ----------- |
| `object`                | `"payout"`                            |             |
| `itemId`                | string                                |             |
| `processorConnectionId` | string                                |             |
| `payoutRef`             | string                                |             |
| `status`                | one of `in_transit`, `paid`, `failed` |             |
| `amount`                | object                                |             |
| `amount.amount`         | string                                |             |
| `amount.currency`       | string                                |             |

## Price

### `price.created`

A price was created for one of the brand's products.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field       | Type                                          | Description |
| ----------- | --------------------------------------------- | ----------- |
| `id`        | string                                        |             |
| `object`    | `"price"`                                     |             |
| `brandId`   | string                                        |             |
| `livemode`  | boolean                                       |             |
| `productId` | string                                        |             |
| `type`      | one of `one_time`, `recurring`, `credit_pack` |             |
| `currency`  | string                                        |             |
| `lookupKey` | string or null                                |             |
| `active`    | boolean                                       |             |

### `price.updated`

A price changed: its nickname, lookup key (set, removed or moved to another price), metadata, `active`, or, while unused, its amounts. `previous_attributes` has the old values.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field       | Type                                          | Description |
| ----------- | --------------------------------------------- | ----------- |
| `id`        | string                                        |             |
| `object`    | `"price"`                                     |             |
| `brandId`   | string                                        |             |
| `livemode`  | boolean                                       |             |
| `productId` | string                                        |             |
| `type`      | one of `one_time`, `recurring`, `credit_pack` |             |
| `currency`  | string                                        |             |
| `lookupKey` | string or null                                |             |
| `active`    | boolean                                       |             |

## Processor connection

### `processor_connection.created`

A processor was connected to a legal entity: the key was tested and stored encrypted, and the webhook endpoint was set up.

**Scope:** Legal entity · **Webhooks:** not delivered (internal)

`data.object`:

| Field       | Type                                        | Description |
| ----------- | ------------------------------------------- | ----------- |
| `id`        | string                                      |             |
| `object`    | `"processor_connection"`                    |             |
| `entityId`  | string                                      |             |
| `livemode`  | boolean                                     |             |
| `processor` | one of `stripe`, `mollie`, `fake`           |             |
| `label`     | string                                      |             |
| `status`    | one of `active`, `degraded`, `disconnected` |             |
| `keyHint`   | string                                      |             |

### `processor_connection.disconnected`

A processor connection was disconnected: its API key was destroyed and it can't be used for payments any more.

**Scope:** Legal entity · **Webhooks:** not delivered (internal)

`data.object`:

| Field       | Type                                        | Description |
| ----------- | ------------------------------------------- | ----------- |
| `id`        | string                                      |             |
| `object`    | `"processor_connection"`                    |             |
| `entityId`  | string                                      |             |
| `livemode`  | boolean                                     |             |
| `processor` | one of `stripe`, `mollie`, `fake`           |             |
| `label`     | string                                      |             |
| `status`    | one of `active`, `degraded`, `disconnected` |             |
| `keyHint`   | string                                      |             |

### `processor_connection.updated`

A processor connection changed: its key was rotated, its label changed, or it was marked degraded or active. `previous_attributes` has the old status, label or key hint.

**Scope:** Legal entity · **Webhooks:** not delivered (internal)

`data.object`:

| Field       | Type                                        | Description |
| ----------- | ------------------------------------------- | ----------- |
| `id`        | string                                      |             |
| `object`    | `"processor_connection"`                    |             |
| `entityId`  | string                                      |             |
| `livemode`  | boolean                                     |             |
| `processor` | one of `stripe`, `mollie`, `fake`           |             |
| `label`     | string                                      |             |
| `status`    | one of `active`, `degraded`, `disconnected` |             |
| `keyHint`   | string                                      |             |

## Product

### `product.created`

A product was created in the brand's catalog.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field           | Type                      | Description |
| --------------- | ------------------------- | ----------- |
| `id`            | string                    |             |
| `object`        | `"product"`               |             |
| `brandId`       | string                    |             |
| `livemode`      | boolean                   |             |
| `name`          | string                    |             |
| `kind`          | one of `standard`, `plan` |             |
| `taxCategoryId` | string                    |             |
| `active`        | boolean                   |             |

### `product.updated`

A product changed: its name, description, tax category, kind, entitlements, images, metadata or `active` (archived or reactivated). `previous_attributes` has the old values.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field           | Type                      | Description |
| --------------- | ------------------------- | ----------- |
| `id`            | string                    |             |
| `object`        | `"product"`               |             |
| `brandId`       | string                    |             |
| `livemode`      | boolean                   |             |
| `name`          | string                    |             |
| `kind`          | one of `standard`, `plan` |             |
| `taxCategoryId` | string                    |             |
| `active`        | boolean                   |             |

## Promotion code

### `promotion_code.created`

A customer-facing promotion code was created for one of the brand's coupons.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| `id`       | string             |             |
| `object`   | `"promotion_code"` |             |
| `brandId`  | string             |             |
| `livemode` | boolean            |             |
| `couponId` | string             |             |
| `code`     | string             |             |
| `active`   | boolean            |             |

### `promotion_code.updated`

A promotion code's metadata or `active` changed (archived or reactivated). `previous_attributes` has the old values.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field      | Type               | Description |
| ---------- | ------------------ | ----------- |
| `id`       | string             |             |
| `object`   | `"promotion_code"` |             |
| `brandId`  | string             |             |
| `livemode` | boolean            |             |
| `couponId` | string             |             |
| `code`     | string             |             |
| `active`   | boolean            |             |

## Rate

### `rate.changed`

A tax rate the entity charges changed: a knowledge base update added, changed or retired a rate this mode uses, in a jurisdiction where one of the entity's registrations is registered or in grace. `changes` lists them with the regimes concerned; a future `validFrom` takes effect on that date.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field                      | Type                                 | Description                                                               |
| -------------------------- | ------------------------------------ | ------------------------------------------------------------------------- |
| `object`                   | `"rate_change"`                      |                                                                           |
| `entityId`                 | string                               |                                                                           |
| `livemode`                 | boolean                              |                                                                           |
| `knowledgeCommit`          | string                               | The tax knowledge version that made the change.                           |
| `previousCommit`           | string or null                       | The version loaded before.                                                |
| `changes`                  | array of object                      | The changed rates, at most 100.                                           |
| `changes[].change`         | one of `added`, `changed`, `retired` |                                                                           |
| `changes[].jurisdictionId` | string                               | The jurisdiction, e.g. `FI` or `US-TX`.                                   |
| `changes[].taxCategoryId`  | string                               | The tax category, or `*` for the jurisdiction's default rate.             |
| `changes[].kind`           | string                               | The rate kind, e.g. `standard` or `reduced`.                              |
| `changes[].subdivision`    | string or null                       |                                                                           |
| `changes[].rate`           | object or null                       | The rate as this mode uses it now (null when retired).                    |
| `changes[].previous`       | object or null                       | The rate this mode used before (null when added).                         |
| `changes[].regimeIds`      | array of string                      | The entity's registrations (regimes) that charge this jurisdiction's tax. |
| `changeCount`              | integer (at least 1)                 | How many rates changed.                                                   |
| `truncated`                | boolean                              | True when `changes` doesn't list them all.                                |

## Reconciliation

### `reconciliation.item.ignored`

A person took an open reconciliation item out of the queue, with a note; nothing was posted.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field             | Type                                | Description |
| ----------------- | ----------------------------------- | ----------- |
| `id`              | string                              |             |
| `object`          | `"reconciliation_item"`             |             |
| `entityId`        | string                              |             |
| `livemode`        | boolean                             |             |
| `source`          | one of `processor`, `bank`          |             |
| `kind`            | string                              |             |
| `status`          | one of `open`, `matched`, `ignored` |             |
| `amount`          | object                              |             |
| `amount.amount`   | string                              |             |
| `amount.currency` | string                              |             |

### `reconciliation.item.resolved`

A person resolved an open reconciliation item, with a note (and for a bank line, the payout it confirms).

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field             | Type                                | Description |
| ----------------- | ----------------------------------- | ----------- |
| `id`              | string                              |             |
| `object`          | `"reconciliation_item"`             |             |
| `entityId`        | string                              |             |
| `livemode`        | boolean                             |             |
| `source`          | one of `processor`, `bank`          |             |
| `kind`            | string                              |             |
| `status`          | one of `open`, `matched`, `ignored` |             |
| `amount`          | object                              |             |
| `amount.amount`   | string                              |             |
| `amount.currency` | string                              |             |

### `reconciliation.run.completed`

A reconciliation run of a processor connection finished: the balance transactions it read, matched and queued, and the fees and payouts it posted.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field                   | Type                        | Description |
| ----------------------- | --------------------------- | ----------- |
| `object`                | `"reconciliation_run"`      |             |
| `processorConnectionId` | string                      |             |
| `entityId`              | string                      |             |
| `livemode`              | boolean                     |             |
| `trigger`               | one of `schedule`, `manual` |             |

### `reconciliation.run.requested`

A person or agent asked for a reconciliation run of one processor connection now (internal).

**Scope:** Legal entity · **Webhooks:** not delivered (internal)

`data.object`:

| Field                   | Type                        | Description |
| ----------------------- | --------------------------- | ----------- |
| `object`                | `"reconciliation_run"`      |             |
| `processorConnectionId` | string                      |             |
| `entityId`              | string                      |             |
| `livemode`              | boolean                     |             |
| `trigger`               | one of `schedule`, `manual` |             |

## Refund

### `refund.failed`

The processor refused or failed a refund. The credit note stands and the amount stays owed to the customer (`refunds_payable`) until an operator resolves it; the `REFUND_FAILED` alert says so. `data.failure` has the processor's code.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field             | Type                                    | Description |
| ----------------- | --------------------------------------- | ----------- |
| `id`              | string                                  |             |
| `object`          | `"refund"`                              |             |
| `type`            | string                                  |             |
| `status`          | one of `pending`, `succeeded`, `failed` |             |
| `livemode`        | boolean                                 |             |
| `brandId`         | string                                  |             |
| `entityId`        | string                                  |             |
| `paymentId`       | string                                  |             |
| `invoiceId`       | string                                  |             |
| `creditNoteId`    | string                                  |             |
| `amount`          | object                                  |             |
| `amount.amount`   | string                                  |             |
| `amount.currency` | string                                  |             |

### `refund.succeeded`

The processor confirmed a refund: the money is on its way back to the customer. `data` is the refund (`refunds.get`) with `processorRefundRef`.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field             | Type                                    | Description |
| ----------------- | --------------------------------------- | ----------- |
| `id`              | string                                  |             |
| `object`          | `"refund"`                              |             |
| `type`            | string                                  |             |
| `status`          | one of `pending`, `succeeded`, `failed` |             |
| `livemode`        | boolean                                 |             |
| `brandId`         | string                                  |             |
| `entityId`        | string                                  |             |
| `paymentId`       | string                                  |             |
| `invoiceId`       | string                                  |             |
| `creditNoteId`    | string                                  |             |
| `amount`          | object                                  |             |
| `amount.amount`   | string                                  |             |
| `amount.currency` | string                                  |             |

## Registration

### `registration.deadline_escalated`

The grace deadline came closer and an escalation alert was raised: half or 80% of the time to register has passed, or a daily reminder in the last three days before new consumer sales stop automatically. `previous_attributes.escalationLevel` is the level before.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field               | Type                                                                                                           | Description |
| ------------------- | -------------------------------------------------------------------------------------------------------------- | ----------- |
| `id`                | string                                                                                                         |             |
| `object`            | `"registration"`                                                                                               |             |
| `entityId`          | string                                                                                                         |             |
| `livemode`          | boolean                                                                                                        |             |
| `regimeId`          | string                                                                                                         |             |
| `jurisdictionIds`   | array of string                                                                                                |             |
| `state`             | one of `not_applicable`, `monitored`, `pre_registration`, `grace`, `registered`, `blocked_b2c`, `deregistered` |             |
| `stateReason`       | string                                                                                                         |             |
| `armed`             | boolean                                                                                                        |             |
| `deadlineAt`        | string or null                                                                                                 |             |
| `escalationLevel`   | integer (0 to 3)                                                                                               |             |
| `prerequisitesDone` | boolean                                                                                                        |             |

### `registration.state_changed`

A registration's state, its reason or `armed` changed: an operator armed it, marked the application submitted, marked it registered or deregistered it; a sale crossed a threshold (grace or blocked); the deadline passed (automatic block); or the counters reached the pre-registration level. `previous_attributes` has the old `state`, `stateReason` and `armed`.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field               | Type                                                                                                           | Description |
| ------------------- | -------------------------------------------------------------------------------------------------------------- | ----------- |
| `id`                | string                                                                                                         |             |
| `object`            | `"registration"`                                                                                               |             |
| `entityId`          | string                                                                                                         |             |
| `livemode`          | boolean                                                                                                        |             |
| `regimeId`          | string                                                                                                         |             |
| `jurisdictionIds`   | array of string                                                                                                |             |
| `state`             | one of `not_applicable`, `monitored`, `pre_registration`, `grace`, `registered`, `blocked_b2c`, `deregistered` |             |
| `stateReason`       | string                                                                                                         |             |
| `armed`             | boolean                                                                                                        |             |
| `deadlineAt`        | string or null                                                                                                 |             |
| `escalationLevel`   | integer (0 to 3)                                                                                               |             |
| `prerequisitesDone` | boolean                                                                                                        |             |

### `registration.updated`

A registration changed without a state change, e.g. a prerequisite's status, notes, owner or attachments.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field               | Type                                                                                                           | Description |
| ------------------- | -------------------------------------------------------------------------------------------------------------- | ----------- |
| `id`                | string                                                                                                         |             |
| `object`            | `"registration"`                                                                                               |             |
| `entityId`          | string                                                                                                         |             |
| `livemode`          | boolean                                                                                                        |             |
| `regimeId`          | string                                                                                                         |             |
| `jurisdictionIds`   | array of string                                                                                                |             |
| `state`             | one of `not_applicable`, `monitored`, `pre_registration`, `grace`, `registered`, `blocked_b2c`, `deregistered` |             |
| `stateReason`       | string                                                                                                         |             |
| `armed`             | boolean                                                                                                        |             |
| `deadlineAt`        | string or null                                                                                                 |             |
| `escalationLevel`   | integer (0 to 3)                                                                                               |             |
| `prerequisitesDone` | boolean                                                                                                        |             |

## Reservation

### `reservation.expired`

A single reservation reached its `expiresAt` without being captured or released: the `reservation_expiry` job released its funds back to the wallet. `data` is the reservation as `reservations.get` returns it.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field               | Type            | Description |
| ------------------- | --------------- | ----------- |
| `id`                | string          |             |
| `object`            | `"reservation"` |             |
| `walletId`          | string          |             |
| `status`            | `"expired"`     |             |
| `amount`            | object          |             |
| `amount.amount`     | string          |             |
| `amount.currency`   | string          |             |
| `captured`          | object          |             |
| `captured.amount`   | string          |             |
| `captured.currency` | string          |             |

## Risk

### `risk.review.approved`

Someone approved a held payment: the wallets the hold froze are unfrozen (unless another review or a dispute holds them) and the customer's risk goes back to what it was.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                       | Type                                                                                                            | Description |
| --------------------------- | --------------------------------------------------------------------------------------------------------------- | ----------- |
| `id`                        | `rsk_…` ID                                                                                                      |             |
| `object`                    | `"risk_evaluation"`                                                                                             |             |
| `livemode`                  | boolean                                                                                                         |             |
| `brandId`                   | `brd_…` ID                                                                                                      |             |
| `subject`                   | object                                                                                                          |             |
| `subject.type`              | one of `checkout_session`, `auto_reload`                                                                        |             |
| `subject.checkoutSessionId` | `cs_…` ID or null                                                                                               |             |
| `subject.walletId`          | `wal_…` ID or null                                                                                              |             |
| `customerId`                | `cus_…` ID or null                                                                                              |             |
| `paymentId`                 | `pay_…` ID or null                                                                                              |             |
| `stage`                     | one of `intent`, `payment_method`, `confirm`, `off_session`                                                     |             |
| `decision`                  | one of `allow`, `require_3ds`, `review`, `block`                                                                |             |
| `score`                     | integer                                                                                                         |             |
| `reasons`                   | array of object                                                                                                 |             |
| `reasons[].code`            | one of 21 values, e.g. `customer_blocked`, `customer_elevated`, `blocklist_email` (all in the OpenAPI document) |             |
| `reasons[].action`          | one of `block`, `review`, `require_3ds`, `score`                                                                |             |
| `reasons[].points`          | integer or null                                                                                                 |             |
| `reasons[].detail`          | string                                                                                                          |             |
| `signals`                   | object                                                                                                          |             |
| `signals.emailDomain`       | string or null                                                                                                  |             |
| `signals.ipNetwork`         | string or null                                                                                                  |             |
| `signals.ipCountry`         | string or null                                                                                                  |             |
| `signals.billingCountry`    | string or null                                                                                                  |             |
| `signals.cardCountry`       | string or null                                                                                                  |             |
| `signals.cardFingerprint`   | string or null                                                                                                  |             |
| `signals.amount`            | money or null                                                                                                   |             |
| `signals.topup`             | boolean                                                                                                         |             |
| `signals.newCustomer`       | boolean                                                                                                         |             |
| `signals.firstPayment`      | boolean                                                                                                         |             |
| `signals.disposableEmail`   | boolean                                                                                                         |             |
| `history`                   | array of object                                                                                                 |             |
| `history[].at`              | date-time                                                                                                       |             |
| `history[].stage`           | one of `intent`, `payment_method`, `confirm`, `off_session`                                                     |             |
| `history[].decision`        | one of `allow`, `require_3ds`, `review`, `block`                                                                |             |
| `history[].score`           | integer                                                                                                         |             |
| `review`                    | object or null                                                                                                  |             |
| `createdAt`                 | date-time                                                                                                       |             |
| `updatedAt`                 | date-time                                                                                                       |             |

### `risk.review.opened`

A payment the brand's risk rules held went through: it is recorded and invoiced as usual, and waits in the review queue. The customer's wallet that took its credits is frozen until the review is decided. Hold the delivery of your own goods until `risk.review.approved`.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                       | Type                                                                                                            | Description |
| --------------------------- | --------------------------------------------------------------------------------------------------------------- | ----------- |
| `id`                        | `rsk_…` ID                                                                                                      |             |
| `object`                    | `"risk_evaluation"`                                                                                             |             |
| `livemode`                  | boolean                                                                                                         |             |
| `brandId`                   | `brd_…` ID                                                                                                      |             |
| `subject`                   | object                                                                                                          |             |
| `subject.type`              | one of `checkout_session`, `auto_reload`                                                                        |             |
| `subject.checkoutSessionId` | `cs_…` ID or null                                                                                               |             |
| `subject.walletId`          | `wal_…` ID or null                                                                                              |             |
| `customerId`                | `cus_…` ID or null                                                                                              |             |
| `paymentId`                 | `pay_…` ID or null                                                                                              |             |
| `stage`                     | one of `intent`, `payment_method`, `confirm`, `off_session`                                                     |             |
| `decision`                  | one of `allow`, `require_3ds`, `review`, `block`                                                                |             |
| `score`                     | integer                                                                                                         |             |
| `reasons`                   | array of object                                                                                                 |             |
| `reasons[].code`            | one of 21 values, e.g. `customer_blocked`, `customer_elevated`, `blocklist_email` (all in the OpenAPI document) |             |
| `reasons[].action`          | one of `block`, `review`, `require_3ds`, `score`                                                                |             |
| `reasons[].points`          | integer or null                                                                                                 |             |
| `reasons[].detail`          | string                                                                                                          |             |
| `signals`                   | object                                                                                                          |             |
| `signals.emailDomain`       | string or null                                                                                                  |             |
| `signals.ipNetwork`         | string or null                                                                                                  |             |
| `signals.ipCountry`         | string or null                                                                                                  |             |
| `signals.billingCountry`    | string or null                                                                                                  |             |
| `signals.cardCountry`       | string or null                                                                                                  |             |
| `signals.cardFingerprint`   | string or null                                                                                                  |             |
| `signals.amount`            | money or null                                                                                                   |             |
| `signals.topup`             | boolean                                                                                                         |             |
| `signals.newCustomer`       | boolean                                                                                                         |             |
| `signals.firstPayment`      | boolean                                                                                                         |             |
| `signals.disposableEmail`   | boolean                                                                                                         |             |
| `history`                   | array of object                                                                                                 |             |
| `history[].at`              | date-time                                                                                                       |             |
| `history[].stage`           | one of `intent`, `payment_method`, `confirm`, `off_session`                                                     |             |
| `history[].decision`        | one of `allow`, `require_3ds`, `review`, `block`                                                                |             |
| `history[].score`           | integer                                                                                                         |             |
| `review`                    | object or null                                                                                                  |             |
| `createdAt`                 | date-time                                                                                                       |             |
| `updatedAt`                 | date-time                                                                                                       |             |

### `risk.review.rejected`

Someone rejected a held payment: it is refunded (a credit note is issued and `refund.succeeded` follows when the processor confirms), the customer's email and card are on the brand's blocklist and the customer's risk is `blocked`. Wallets stay frozen.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                       | Type                                                                                                            | Description |
| --------------------------- | --------------------------------------------------------------------------------------------------------------- | ----------- |
| `id`                        | `rsk_…` ID                                                                                                      |             |
| `object`                    | `"risk_evaluation"`                                                                                             |             |
| `livemode`                  | boolean                                                                                                         |             |
| `brandId`                   | `brd_…` ID                                                                                                      |             |
| `subject`                   | object                                                                                                          |             |
| `subject.type`              | one of `checkout_session`, `auto_reload`                                                                        |             |
| `subject.checkoutSessionId` | `cs_…` ID or null                                                                                               |             |
| `subject.walletId`          | `wal_…` ID or null                                                                                              |             |
| `customerId`                | `cus_…` ID or null                                                                                              |             |
| `paymentId`                 | `pay_…` ID or null                                                                                              |             |
| `stage`                     | one of `intent`, `payment_method`, `confirm`, `off_session`                                                     |             |
| `decision`                  | one of `allow`, `require_3ds`, `review`, `block`                                                                |             |
| `score`                     | integer                                                                                                         |             |
| `reasons`                   | array of object                                                                                                 |             |
| `reasons[].code`            | one of 21 values, e.g. `customer_blocked`, `customer_elevated`, `blocklist_email` (all in the OpenAPI document) |             |
| `reasons[].action`          | one of `block`, `review`, `require_3ds`, `score`                                                                |             |
| `reasons[].points`          | integer or null                                                                                                 |             |
| `reasons[].detail`          | string                                                                                                          |             |
| `signals`                   | object                                                                                                          |             |
| `signals.emailDomain`       | string or null                                                                                                  |             |
| `signals.ipNetwork`         | string or null                                                                                                  |             |
| `signals.ipCountry`         | string or null                                                                                                  |             |
| `signals.billingCountry`    | string or null                                                                                                  |             |
| `signals.cardCountry`       | string or null                                                                                                  |             |
| `signals.cardFingerprint`   | string or null                                                                                                  |             |
| `signals.amount`            | money or null                                                                                                   |             |
| `signals.topup`             | boolean                                                                                                         |             |
| `signals.newCustomer`       | boolean                                                                                                         |             |
| `signals.firstPayment`      | boolean                                                                                                         |             |
| `signals.disposableEmail`   | boolean                                                                                                         |             |
| `history`                   | array of object                                                                                                 |             |
| `history[].at`              | date-time                                                                                                       |             |
| `history[].stage`           | one of `intent`, `payment_method`, `confirm`, `off_session`                                                     |             |
| `history[].decision`        | one of `allow`, `require_3ds`, `review`, `block`                                                                |             |
| `history[].score`           | integer                                                                                                         |             |
| `review`                    | object or null                                                                                                  |             |
| `createdAt`                 | date-time                                                                                                       |             |
| `updatedAt`                 | date-time                                                                                                       |             |

## Subscription

### `subscription.cancel_scheduled`

A subscription will end at the end of its current period (`cancelAtPeriodEnd`); it can be reactivated until then.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field              | Type                                                                                                        | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------------- | ----------- |
| `id`               | string                                                                                                      |             |
| `object`           | `"subscription"`                                                                                            |             |
| `brandId`          | string                                                                                                      |             |
| `livemode`         | boolean                                                                                                     |             |
| `customerId`       | string                                                                                                      |             |
| `status`           | one of `incomplete`, `incomplete_expired`, `trialing`, `active`, `past_due`, `unpaid`, `paused`, `canceled` |             |
| `items`            | array of object                                                                                             |             |
| `items[].id`       | string                                                                                                      |             |
| `items[].priceId`  | string                                                                                                      |             |
| `items[].quantity` | number                                                                                                      |             |

### `subscription.canceled`

A subscription ended: canceled now, at the end of its period, after its trial, or after unsuccessful dunning.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field              | Type                                                                                                        | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------------- | ----------- |
| `id`               | string                                                                                                      |             |
| `object`           | `"subscription"`                                                                                            |             |
| `brandId`          | string                                                                                                      |             |
| `livemode`         | boolean                                                                                                     |             |
| `customerId`       | string                                                                                                      |             |
| `status`           | one of `incomplete`, `incomplete_expired`, `trialing`, `active`, `past_due`, `unpaid`, `paused`, `canceled` |             |
| `items`            | array of object                                                                                             |             |
| `items[].id`       | string                                                                                                      |             |
| `items[].priceId`  | string                                                                                                      |             |
| `items[].quantity` | number                                                                                                      |             |

### `subscription.created`

A subscription was created (API, console or checkout), trialing, active or incomplete until its first payment.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field              | Type                                                                                                        | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------------- | ----------- |
| `id`               | string                                                                                                      |             |
| `object`           | `"subscription"`                                                                                            |             |
| `brandId`          | string                                                                                                      |             |
| `livemode`         | boolean                                                                                                     |             |
| `customerId`       | string                                                                                                      |             |
| `status`           | one of `incomplete`, `incomplete_expired`, `trialing`, `active`, `past_due`, `unpaid`, `paused`, `canceled` |             |
| `items`            | array of object                                                                                             |             |
| `items[].id`       | string                                                                                                      |             |
| `items[].priceId`  | string                                                                                                      |             |
| `items[].quantity` | number                                                                                                      |             |

### `subscription.past_due`

A renewal payment failed (or a send_invoice invoice is overdue): the subscription is past due and dunning runs.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field              | Type                                                                                                        | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------------- | ----------- |
| `id`               | string                                                                                                      |             |
| `object`           | `"subscription"`                                                                                            |             |
| `brandId`          | string                                                                                                      |             |
| `livemode`         | boolean                                                                                                     |             |
| `customerId`       | string                                                                                                      |             |
| `status`           | one of `incomplete`, `incomplete_expired`, `trialing`, `active`, `past_due`, `unpaid`, `paused`, `canceled` |             |
| `items`            | array of object                                                                                             |             |
| `items[].id`       | string                                                                                                      |             |
| `items[].priceId`  | string                                                                                                      |             |
| `items[].quantity` | number                                                                                                      |             |

### `subscription.paused`

A subscription was paused: collection stops (`pause.behavior`) until it resumes, at `pause.resumesAt` or on request.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field              | Type                                                                                                        | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------------- | ----------- |
| `id`               | string                                                                                                      |             |
| `object`           | `"subscription"`                                                                                            |             |
| `brandId`          | string                                                                                                      |             |
| `livemode`         | boolean                                                                                                     |             |
| `customerId`       | string                                                                                                      |             |
| `status`           | one of `incomplete`, `incomplete_expired`, `trialing`, `active`, `past_due`, `unpaid`, `paused`, `canceled` |             |
| `items`            | array of object                                                                                             |             |
| `items[].id`       | string                                                                                                      |             |
| `items[].priceId`  | string                                                                                                      |             |
| `items[].quantity` | number                                                                                                      |             |

### `subscription.recovered`

A past-due or unpaid subscription's open invoice was paid: it is active again.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field              | Type                                                                                                        | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------------- | ----------- |
| `id`               | string                                                                                                      |             |
| `object`           | `"subscription"`                                                                                            |             |
| `brandId`          | string                                                                                                      |             |
| `livemode`         | boolean                                                                                                     |             |
| `customerId`       | string                                                                                                      |             |
| `status`           | one of `incomplete`, `incomplete_expired`, `trialing`, `active`, `past_due`, `unpaid`, `paused`, `canceled` |             |
| `items`            | array of object                                                                                             |             |
| `items[].id`       | string                                                                                                      |             |
| `items[].priceId`  | string                                                                                                      |             |
| `items[].quantity` | number                                                                                                      |             |

### `subscription.renewed`

A subscription moved into its next billing period and its renewal invoice was issued.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field              | Type                                                                                                        | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------------- | ----------- |
| `id`               | string                                                                                                      |             |
| `object`           | `"subscription"`                                                                                            |             |
| `brandId`          | string                                                                                                      |             |
| `livemode`         | boolean                                                                                                     |             |
| `customerId`       | string                                                                                                      |             |
| `status`           | one of `incomplete`, `incomplete_expired`, `trialing`, `active`, `past_due`, `unpaid`, `paused`, `canceled` |             |
| `items`            | array of object                                                                                             |             |
| `items[].id`       | string                                                                                                      |             |
| `items[].priceId`  | string                                                                                                      |             |
| `items[].quantity` | number                                                                                                      |             |

### `subscription.resumed`

A paused subscription is active again.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field              | Type                                                                                                        | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------------- | ----------- |
| `id`               | string                                                                                                      |             |
| `object`           | `"subscription"`                                                                                            |             |
| `brandId`          | string                                                                                                      |             |
| `livemode`         | boolean                                                                                                     |             |
| `customerId`       | string                                                                                                      |             |
| `status`           | one of `incomplete`, `incomplete_expired`, `trialing`, `active`, `past_due`, `unpaid`, `paused`, `canceled` |             |
| `items`            | array of object                                                                                             |             |
| `items[].id`       | string                                                                                                      |             |
| `items[].priceId`  | string                                                                                                      |             |
| `items[].quantity` | number                                                                                                      |             |

### `subscription.trial_will_end`

A subscription's trial ends in 3 days (or sooner, for a shorter trial): remind the customer before the first charge.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field              | Type                                                                                                        | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------------- | ----------- |
| `id`               | string                                                                                                      |             |
| `object`           | `"subscription"`                                                                                            |             |
| `brandId`          | string                                                                                                      |             |
| `livemode`         | boolean                                                                                                     |             |
| `customerId`       | string                                                                                                      |             |
| `status`           | one of `incomplete`, `incomplete_expired`, `trialing`, `active`, `past_due`, `unpaid`, `paused`, `canceled` |             |
| `items`            | array of object                                                                                             |             |
| `items[].id`       | string                                                                                                      |             |
| `items[].priceId`  | string                                                                                                      |             |
| `items[].quantity` | number                                                                                                      |             |

### `subscription.updated`

A subscription changed: items or quantities, a scheduled change, a discount, the payment method, metadata, or its status (activated after the first payment, expired unpaid, a cancellation withdrawn). `previous_attributes` has the old values.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field              | Type                                                                                                        | Description |
| ------------------ | ----------------------------------------------------------------------------------------------------------- | ----------- |
| `id`               | string                                                                                                      |             |
| `object`           | `"subscription"`                                                                                            |             |
| `brandId`          | string                                                                                                      |             |
| `livemode`         | boolean                                                                                                     |             |
| `customerId`       | string                                                                                                      |             |
| `status`           | one of `incomplete`, `incomplete_expired`, `trialing`, `active`, `past_due`, `unpaid`, `paused`, `canceled` |             |
| `items`            | array of object                                                                                             |             |
| `items[].id`       | string                                                                                                      |             |
| `items[].priceId`  | string                                                                                                      |             |
| `items[].quantity` | number                                                                                                      |             |

## Task

### `task.claimed`

A person, an agent or an app claimed a task with a lease (`assignee`, `claimedUntil`): nobody else can change it until the lease ends.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field                | Type                                                                                                                             | Description |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `id`                 | `task_…` ID                                                                                                                      |             |
| `object`             | `"task"`                                                                                                                         |             |
| `type`               | one of 12 values, e.g. `registration.prerequisites`, `registration.prepare`, `registration.submit` (all in the OpenAPI document) |             |
| `entityId`           | `ent_…` ID                                                                                                                       |             |
| `livemode`           | boolean                                                                                                                          |             |
| `regimeId`           | string or null                                                                                                                   |             |
| `registrationId`     | `regn_…` ID or null                                                                                                              |             |
| `filingPeriodId`     | `fp_…` ID or null                                                                                                                |             |
| `prerequisiteCode`   | string or null                                                                                                                   |             |
| `title`              | string                                                                                                                           |             |
| `description`        | string or null                                                                                                                   |             |
| `priority`           | one of `low`, `normal`, `high`, `urgent`                                                                                         |             |
| `status`             | one of `open`, `claimed`, `in_progress`, `awaiting_approval`, `done`, `failed`, `cancelled`                                      |             |
| `reason`             | one of 11 values, e.g. `auto_blocked`, `existing_customer_sale`, `prerequisite_open` (all in the OpenAPI document) or null       |             |
| `dueAt`              | date-time or null                                                                                                                |             |
| `overdue`            | boolean                                                                                                                          |             |
| `assignee`           | object or null                                                                                                                   |             |
| `claimedUntil`       | date-time or null                                                                                                                |             |
| `leaseActive`        | boolean                                                                                                                          |             |
| `completeWith`       | one of `tasks.complete`, `tasks.submit`                                                                                          |             |
| `needsAuthorization` | boolean                                                                                                                          |             |
| `inputs`             | array of object                                                                                                                  |             |
| `inputs[].kind`      | string                                                                                                                           |             |
| `inputs[].fileId`    | `file_…` ID or null                                                                                                              |             |
| `inputs[].data`      | object or null                                                                                                                   |             |
| `outputs`            | object or null                                                                                                                   |             |
| `authorizationId`    | `atz_…` ID or null                                                                                                               |             |
| `approvalRequestId`  | `apr_…` ID or null                                                                                                               |             |
| `failure`            | object or null                                                                                                                   |             |
| `checklist`          | array of object                                                                                                                  |             |
| `checklist[].text`   | string                                                                                                                           |             |
| `checklist[].done`   | boolean                                                                                                                          |             |
| `createdAt`          | date-time                                                                                                                        |             |
| `updatedAt`          | date-time                                                                                                                        |             |
| `completedAt`        | date-time or null                                                                                                                |             |
| `completedBy`        | string or null                                                                                                                   |             |
| `version`            | integer (at least 1)                                                                                                             |             |

### `task.completed`

A task was completed or submitted, with its outputs (reference numbers, submission time, receipt files, notes), or finished by the registration or filing period it belongs to.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field                | Type                                                                                                                             | Description |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `id`                 | `task_…` ID                                                                                                                      |             |
| `object`             | `"task"`                                                                                                                         |             |
| `type`               | one of 12 values, e.g. `registration.prerequisites`, `registration.prepare`, `registration.submit` (all in the OpenAPI document) |             |
| `entityId`           | `ent_…` ID                                                                                                                       |             |
| `livemode`           | boolean                                                                                                                          |             |
| `regimeId`           | string or null                                                                                                                   |             |
| `registrationId`     | `regn_…` ID or null                                                                                                              |             |
| `filingPeriodId`     | `fp_…` ID or null                                                                                                                |             |
| `prerequisiteCode`   | string or null                                                                                                                   |             |
| `title`              | string                                                                                                                           |             |
| `description`        | string or null                                                                                                                   |             |
| `priority`           | one of `low`, `normal`, `high`, `urgent`                                                                                         |             |
| `status`             | one of `open`, `claimed`, `in_progress`, `awaiting_approval`, `done`, `failed`, `cancelled`                                      |             |
| `reason`             | one of 11 values, e.g. `auto_blocked`, `existing_customer_sale`, `prerequisite_open` (all in the OpenAPI document) or null       |             |
| `dueAt`              | date-time or null                                                                                                                |             |
| `overdue`            | boolean                                                                                                                          |             |
| `assignee`           | object or null                                                                                                                   |             |
| `claimedUntil`       | date-time or null                                                                                                                |             |
| `leaseActive`        | boolean                                                                                                                          |             |
| `completeWith`       | one of `tasks.complete`, `tasks.submit`                                                                                          |             |
| `needsAuthorization` | boolean                                                                                                                          |             |
| `inputs`             | array of object                                                                                                                  |             |
| `inputs[].kind`      | string                                                                                                                           |             |
| `inputs[].fileId`    | `file_…` ID or null                                                                                                              |             |
| `inputs[].data`      | object or null                                                                                                                   |             |
| `outputs`            | object or null                                                                                                                   |             |
| `authorizationId`    | `atz_…` ID or null                                                                                                               |             |
| `approvalRequestId`  | `apr_…` ID or null                                                                                                               |             |
| `failure`            | object or null                                                                                                                   |             |
| `checklist`          | array of object                                                                                                                  |             |
| `checklist[].text`   | string                                                                                                                           |             |
| `checklist[].done`   | boolean                                                                                                                          |             |
| `createdAt`          | date-time                                                                                                                        |             |
| `updatedAt`          | date-time                                                                                                                        |             |
| `completedAt`        | date-time or null                                                                                                                |             |
| `completedBy`        | string or null                                                                                                                   |             |
| `version`            | integer (at least 1)                                                                                                             |             |

### `task.created`

Ownrecord raised a compliance task for a legal entity, e.g. submitting a registration, a registration prerequisite, or preparing, filing and paying a return.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field                | Type                                                                                                                             | Description |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `id`                 | `task_…` ID                                                                                                                      |             |
| `object`             | `"task"`                                                                                                                         |             |
| `type`               | one of 12 values, e.g. `registration.prerequisites`, `registration.prepare`, `registration.submit` (all in the OpenAPI document) |             |
| `entityId`           | `ent_…` ID                                                                                                                       |             |
| `livemode`           | boolean                                                                                                                          |             |
| `regimeId`           | string or null                                                                                                                   |             |
| `registrationId`     | `regn_…` ID or null                                                                                                              |             |
| `filingPeriodId`     | `fp_…` ID or null                                                                                                                |             |
| `prerequisiteCode`   | string or null                                                                                                                   |             |
| `title`              | string                                                                                                                           |             |
| `description`        | string or null                                                                                                                   |             |
| `priority`           | one of `low`, `normal`, `high`, `urgent`                                                                                         |             |
| `status`             | one of `open`, `claimed`, `in_progress`, `awaiting_approval`, `done`, `failed`, `cancelled`                                      |             |
| `reason`             | one of 11 values, e.g. `auto_blocked`, `existing_customer_sale`, `prerequisite_open` (all in the OpenAPI document) or null       |             |
| `dueAt`              | date-time or null                                                                                                                |             |
| `overdue`            | boolean                                                                                                                          |             |
| `assignee`           | object or null                                                                                                                   |             |
| `claimedUntil`       | date-time or null                                                                                                                |             |
| `leaseActive`        | boolean                                                                                                                          |             |
| `completeWith`       | one of `tasks.complete`, `tasks.submit`                                                                                          |             |
| `needsAuthorization` | boolean                                                                                                                          |             |
| `inputs`             | array of object                                                                                                                  |             |
| `inputs[].kind`      | string                                                                                                                           |             |
| `inputs[].fileId`    | `file_…` ID or null                                                                                                              |             |
| `inputs[].data`      | object or null                                                                                                                   |             |
| `outputs`            | object or null                                                                                                                   |             |
| `authorizationId`    | `atz_…` ID or null                                                                                                               |             |
| `approvalRequestId`  | `apr_…` ID or null                                                                                                               |             |
| `failure`            | object or null                                                                                                                   |             |
| `checklist`          | array of object                                                                                                                  |             |
| `checklist[].text`   | string                                                                                                                           |             |
| `checklist[].done`   | boolean                                                                                                                          |             |
| `createdAt`          | date-time                                                                                                                        |             |
| `updatedAt`          | date-time                                                                                                                        |             |
| `completedAt`        | date-time or null                                                                                                                |             |
| `completedBy`        | string or null                                                                                                                   |             |
| `version`            | integer (at least 1)                                                                                                             |             |

### `task.due_soon`

An unfinished task is due within 72 hours.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field                | Type                                                                                                                             | Description |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `id`                 | `task_…` ID                                                                                                                      |             |
| `object`             | `"task"`                                                                                                                         |             |
| `type`               | one of 12 values, e.g. `registration.prerequisites`, `registration.prepare`, `registration.submit` (all in the OpenAPI document) |             |
| `entityId`           | `ent_…` ID                                                                                                                       |             |
| `livemode`           | boolean                                                                                                                          |             |
| `regimeId`           | string or null                                                                                                                   |             |
| `registrationId`     | `regn_…` ID or null                                                                                                              |             |
| `filingPeriodId`     | `fp_…` ID or null                                                                                                                |             |
| `prerequisiteCode`   | string or null                                                                                                                   |             |
| `title`              | string                                                                                                                           |             |
| `description`        | string or null                                                                                                                   |             |
| `priority`           | one of `low`, `normal`, `high`, `urgent`                                                                                         |             |
| `status`             | one of `open`, `claimed`, `in_progress`, `awaiting_approval`, `done`, `failed`, `cancelled`                                      |             |
| `reason`             | one of 11 values, e.g. `auto_blocked`, `existing_customer_sale`, `prerequisite_open` (all in the OpenAPI document) or null       |             |
| `dueAt`              | date-time or null                                                                                                                |             |
| `overdue`            | boolean                                                                                                                          |             |
| `assignee`           | object or null                                                                                                                   |             |
| `claimedUntil`       | date-time or null                                                                                                                |             |
| `leaseActive`        | boolean                                                                                                                          |             |
| `completeWith`       | one of `tasks.complete`, `tasks.submit`                                                                                          |             |
| `needsAuthorization` | boolean                                                                                                                          |             |
| `inputs`             | array of object                                                                                                                  |             |
| `inputs[].kind`      | string                                                                                                                           |             |
| `inputs[].fileId`    | `file_…` ID or null                                                                                                              |             |
| `inputs[].data`      | object or null                                                                                                                   |             |
| `outputs`            | object or null                                                                                                                   |             |
| `authorizationId`    | `atz_…` ID or null                                                                                                               |             |
| `approvalRequestId`  | `apr_…` ID or null                                                                                                               |             |
| `failure`            | object or null                                                                                                                   |             |
| `checklist`          | array of object                                                                                                                  |             |
| `checklist[].text`   | string                                                                                                                           |             |
| `checklist[].done`   | boolean                                                                                                                          |             |
| `createdAt`          | date-time                                                                                                                        |             |
| `updatedAt`          | date-time                                                                                                                        |             |
| `completedAt`        | date-time or null                                                                                                                |             |
| `completedBy`        | string or null                                                                                                                   |             |
| `version`            | integer (at least 1)                                                                                                             |             |

### `task.failed`

Whoever worked on a task couldn't do it: `failure.reason` says why, and `failure.retryAt` when it opens again (if set).

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field                | Type                                                                                                                             | Description |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `id`                 | `task_…` ID                                                                                                                      |             |
| `object`             | `"task"`                                                                                                                         |             |
| `type`               | one of 12 values, e.g. `registration.prerequisites`, `registration.prepare`, `registration.submit` (all in the OpenAPI document) |             |
| `entityId`           | `ent_…` ID                                                                                                                       |             |
| `livemode`           | boolean                                                                                                                          |             |
| `regimeId`           | string or null                                                                                                                   |             |
| `registrationId`     | `regn_…` ID or null                                                                                                              |             |
| `filingPeriodId`     | `fp_…` ID or null                                                                                                                |             |
| `prerequisiteCode`   | string or null                                                                                                                   |             |
| `title`              | string                                                                                                                           |             |
| `description`        | string or null                                                                                                                   |             |
| `priority`           | one of `low`, `normal`, `high`, `urgent`                                                                                         |             |
| `status`             | one of `open`, `claimed`, `in_progress`, `awaiting_approval`, `done`, `failed`, `cancelled`                                      |             |
| `reason`             | one of 11 values, e.g. `auto_blocked`, `existing_customer_sale`, `prerequisite_open` (all in the OpenAPI document) or null       |             |
| `dueAt`              | date-time or null                                                                                                                |             |
| `overdue`            | boolean                                                                                                                          |             |
| `assignee`           | object or null                                                                                                                   |             |
| `claimedUntil`       | date-time or null                                                                                                                |             |
| `leaseActive`        | boolean                                                                                                                          |             |
| `completeWith`       | one of `tasks.complete`, `tasks.submit`                                                                                          |             |
| `needsAuthorization` | boolean                                                                                                                          |             |
| `inputs`             | array of object                                                                                                                  |             |
| `inputs[].kind`      | string                                                                                                                           |             |
| `inputs[].fileId`    | `file_…` ID or null                                                                                                              |             |
| `inputs[].data`      | object or null                                                                                                                   |             |
| `outputs`            | object or null                                                                                                                   |             |
| `authorizationId`    | `atz_…` ID or null                                                                                                               |             |
| `approvalRequestId`  | `apr_…` ID or null                                                                                                               |             |
| `failure`            | object or null                                                                                                                   |             |
| `checklist`          | array of object                                                                                                                  |             |
| `checklist[].text`   | string                                                                                                                           |             |
| `checklist[].done`   | boolean                                                                                                                          |             |
| `createdAt`          | date-time                                                                                                                        |             |
| `updatedAt`          | date-time                                                                                                                        |             |
| `completedAt`        | date-time or null                                                                                                                |             |
| `completedBy`        | string or null                                                                                                                   |             |
| `version`            | integer (at least 1)                                                                                                             |             |

### `task.overdue`

An unfinished task passed its due date.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field                | Type                                                                                                                             | Description |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `id`                 | `task_…` ID                                                                                                                      |             |
| `object`             | `"task"`                                                                                                                         |             |
| `type`               | one of 12 values, e.g. `registration.prerequisites`, `registration.prepare`, `registration.submit` (all in the OpenAPI document) |             |
| `entityId`           | `ent_…` ID                                                                                                                       |             |
| `livemode`           | boolean                                                                                                                          |             |
| `regimeId`           | string or null                                                                                                                   |             |
| `registrationId`     | `regn_…` ID or null                                                                                                              |             |
| `filingPeriodId`     | `fp_…` ID or null                                                                                                                |             |
| `prerequisiteCode`   | string or null                                                                                                                   |             |
| `title`              | string                                                                                                                           |             |
| `description`        | string or null                                                                                                                   |             |
| `priority`           | one of `low`, `normal`, `high`, `urgent`                                                                                         |             |
| `status`             | one of `open`, `claimed`, `in_progress`, `awaiting_approval`, `done`, `failed`, `cancelled`                                      |             |
| `reason`             | one of 11 values, e.g. `auto_blocked`, `existing_customer_sale`, `prerequisite_open` (all in the OpenAPI document) or null       |             |
| `dueAt`              | date-time or null                                                                                                                |             |
| `overdue`            | boolean                                                                                                                          |             |
| `assignee`           | object or null                                                                                                                   |             |
| `claimedUntil`       | date-time or null                                                                                                                |             |
| `leaseActive`        | boolean                                                                                                                          |             |
| `completeWith`       | one of `tasks.complete`, `tasks.submit`                                                                                          |             |
| `needsAuthorization` | boolean                                                                                                                          |             |
| `inputs`             | array of object                                                                                                                  |             |
| `inputs[].kind`      | string                                                                                                                           |             |
| `inputs[].fileId`    | `file_…` ID or null                                                                                                              |             |
| `inputs[].data`      | object or null                                                                                                                   |             |
| `outputs`            | object or null                                                                                                                   |             |
| `authorizationId`    | `atz_…` ID or null                                                                                                               |             |
| `approvalRequestId`  | `apr_…` ID or null                                                                                                               |             |
| `failure`            | object or null                                                                                                                   |             |
| `checklist`          | array of object                                                                                                                  |             |
| `checklist[].text`   | string                                                                                                                           |             |
| `checklist[].done`   | boolean                                                                                                                          |             |
| `createdAt`          | date-time                                                                                                                        |             |
| `updatedAt`          | date-time                                                                                                                        |             |
| `completedAt`        | date-time or null                                                                                                                |             |
| `completedBy`        | string or null                                                                                                                   |             |
| `version`            | integer (at least 1)                                                                                                             |             |

### `task.updated`

A task's assignee, due date, priority, checklist or status changed (released, lease expired, waiting for approval, reopened, `cancelled`). `previous_attributes` has the old values.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field                | Type                                                                                                                             | Description |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `id`                 | `task_…` ID                                                                                                                      |             |
| `object`             | `"task"`                                                                                                                         |             |
| `type`               | one of 12 values, e.g. `registration.prerequisites`, `registration.prepare`, `registration.submit` (all in the OpenAPI document) |             |
| `entityId`           | `ent_…` ID                                                                                                                       |             |
| `livemode`           | boolean                                                                                                                          |             |
| `regimeId`           | string or null                                                                                                                   |             |
| `registrationId`     | `regn_…` ID or null                                                                                                              |             |
| `filingPeriodId`     | `fp_…` ID or null                                                                                                                |             |
| `prerequisiteCode`   | string or null                                                                                                                   |             |
| `title`              | string                                                                                                                           |             |
| `description`        | string or null                                                                                                                   |             |
| `priority`           | one of `low`, `normal`, `high`, `urgent`                                                                                         |             |
| `status`             | one of `open`, `claimed`, `in_progress`, `awaiting_approval`, `done`, `failed`, `cancelled`                                      |             |
| `reason`             | one of 11 values, e.g. `auto_blocked`, `existing_customer_sale`, `prerequisite_open` (all in the OpenAPI document) or null       |             |
| `dueAt`              | date-time or null                                                                                                                |             |
| `overdue`            | boolean                                                                                                                          |             |
| `assignee`           | object or null                                                                                                                   |             |
| `claimedUntil`       | date-time or null                                                                                                                |             |
| `leaseActive`        | boolean                                                                                                                          |             |
| `completeWith`       | one of `tasks.complete`, `tasks.submit`                                                                                          |             |
| `needsAuthorization` | boolean                                                                                                                          |             |
| `inputs`             | array of object                                                                                                                  |             |
| `inputs[].kind`      | string                                                                                                                           |             |
| `inputs[].fileId`    | `file_…` ID or null                                                                                                              |             |
| `inputs[].data`      | object or null                                                                                                                   |             |
| `outputs`            | object or null                                                                                                                   |             |
| `authorizationId`    | `atz_…` ID or null                                                                                                               |             |
| `approvalRequestId`  | `apr_…` ID or null                                                                                                               |             |
| `failure`            | object or null                                                                                                                   |             |
| `checklist`          | array of object                                                                                                                  |             |
| `checklist[].text`   | string                                                                                                                           |             |
| `checklist[].done`   | boolean                                                                                                                          |             |
| `createdAt`          | date-time                                                                                                                        |             |
| `updatedAt`          | date-time                                                                                                                        |             |
| `completedAt`        | date-time or null                                                                                                                |             |
| `completedBy`        | string or null                                                                                                                   |             |
| `version`            | integer (at least 1)                                                                                                             |             |

## Test clock

### `test_clock.advancing`

A test clock started advancing: its subscriptions' due steps (trial ends, renewals, cancellations, notices) run in time order at their own times.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field        | Type                                            | Description |
| ------------ | ----------------------------------------------- | ----------- |
| `id`         | string                                          |             |
| `object`     | `"test_clock"`                                  |             |
| `livemode`   | `false`                                         |             |
| `brandId`    | string                                          |             |
| `name`       | string                                          |             |
| `frozenTime` | string                                          |             |
| `status`     | one of `ready`, `advancing`, `internal_failure` |             |

### `test_clock.created`

A test clock was created (test mode).

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field        | Type                                            | Description |
| ------------ | ----------------------------------------------- | ----------- |
| `id`         | string                                          |             |
| `object`     | `"test_clock"`                                  |             |
| `livemode`   | `false`                                         |             |
| `brandId`    | string                                          |             |
| `name`       | string                                          |             |
| `frozenTime` | string                                          |             |
| `status`     | one of `ready`, `advancing`, `internal_failure` |             |

### `test_clock.deleted`

A test clock was deleted, with its customers (deleted) and their subscriptions (canceled).

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field        | Type                                            | Description |
| ------------ | ----------------------------------------------- | ----------- |
| `id`         | string                                          |             |
| `object`     | `"test_clock"`                                  |             |
| `livemode`   | `false`                                         |             |
| `brandId`    | string                                          |             |
| `name`       | string                                          |             |
| `frozenTime` | string                                          |             |
| `status`     | one of `ready`, `advancing`, `internal_failure` |             |

### `test_clock.internal_failure`

A test clock's advance stopped on an error (`advance.error`): the clock stayed at the time of the last step that ran. Fix the cause and advance again.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field        | Type                                            | Description |
| ------------ | ----------------------------------------------- | ----------- |
| `id`         | string                                          |             |
| `object`     | `"test_clock"`                                  |             |
| `livemode`   | `false`                                         |             |
| `brandId`    | string                                          |             |
| `name`       | string                                          |             |
| `frozenTime` | string                                          |             |
| `status`     | one of `ready`, `advancing`, `internal_failure` |             |

### `test_clock.ready`

A test clock finished advancing: `frozenTime` is the new time and its subscriptions are up to date.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field        | Type                                            | Description |
| ------------ | ----------------------------------------------- | ----------- |
| `id`         | string                                          |             |
| `object`     | `"test_clock"`                                  |             |
| `livemode`   | `false`                                         |             |
| `brandId`    | string                                          |             |
| `name`       | string                                          |             |
| `frozenTime` | string                                          |             |
| `status`     | one of `ready`, `advancing`, `internal_failure` |             |

## Threshold

### `threshold.crossed`

A sale took the entity's sales over a regime's registration threshold (all brands of the entity count together). The registration moved to grace or was blocked: see the `registration.state_changed` event of the same sale.

**Scope:** Legal entity · **Webhooks:** delivered

`data.object`:

| Field                  | Type            | Description |
| ---------------------- | --------------- | ----------- |
| `object`               | `"threshold"`   |             |
| `entityId`             | string          |             |
| `livemode`             | boolean         |             |
| `regimeId`             | string          |             |
| `registrationId`       | string          |             |
| `window`               | string          |             |
| `threshold`            | object or null  |             |
| `transactionThreshold` | integer or null |             |
| `counted`              | object or null  |             |
| `transactionCount`     | integer or null |             |
| `crossedAt`            | string          |             |
| `ref`                  | string or null  |             |

## Wallet

### `wallet.auto_reload_due`

Internal: a wallet with auto-reload enabled fell below its reload threshold (`autoReload.below`). The `auto_reload` job charges the saved payment method off-session and credits the wallet. One at a time per wallet (`autoReload.pendingSince`).

**Scope:** Brand · **Webhooks:** not delivered (internal)

`data.object`:

| Field                 | Type                                | Description |
| --------------------- | ----------------------------------- | ----------- |
| `id`                  | string                              |             |
| `object`              | `"wallet"`                          |             |
| `customerId`          | string                              |             |
| `currency`            | string                              |             |
| `status`              | one of `active`, `frozen`, `closed` |             |
| `available`           | object                              |             |
| `available.amount`    | string                              |             |
| `available.currency`  | string                              |             |
| `promo`               | object                              |             |
| `promo.amount`        | string                              |             |
| `promo.currency`      | string                              |             |
| `reserved`            | object                              |             |
| `reserved.amount`     | string                              |             |
| `reserved.currency`   | string                              |             |
| `balance`             | object                              |             |
| `balance.amount`      | string                              |             |
| `balance.currency`    | string                              |             |
| `lowBalanceThreshold` | object or null                      |             |

### `wallet.credited`

Credits were added to a wallet: a top-up or credit pack (with its bonus credits), a subscription's included credits, or an operator's promo or adjustment grant. `data.credit` lists the new grants (`grants[].id`, `source`, `amount`, `expiresAt`) and their total; the balances are the new ones.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                             | Type                                | Description |
| --------------------------------- | ----------------------------------- | ----------- |
| `id`                              | string                              |             |
| `object`                          | `"wallet"`                          |             |
| `customerId`                      | string                              |             |
| `currency`                        | string                              |             |
| `status`                          | one of `active`, `frozen`, `closed` |             |
| `available`                       | object                              |             |
| `available.amount`                | string                              |             |
| `available.currency`              | string                              |             |
| `promo`                           | object                              |             |
| `promo.amount`                    | string                              |             |
| `promo.currency`                  | string                              |             |
| `reserved`                        | object                              |             |
| `reserved.amount`                 | string                              |             |
| `reserved.currency`               | string                              |             |
| `balance`                         | object                              |             |
| `balance.amount`                  | string                              |             |
| `balance.currency`                | string                              |             |
| `lowBalanceThreshold`             | object or null                      |             |
| `credit`                          | object                              |             |
| `credit.amount`                   | object                              |             |
| `credit.amount.amount`            | string                              |             |
| `credit.amount.currency`          | string                              |             |
| `credit.grants`                   | array of object                     |             |
| `credit.grants[].id`              | string                              |             |
| `credit.grants[].source`          | string                              |             |
| `credit.grants[].amount`          | object                              |             |
| `credit.grants[].amount.amount`   | string                              |             |
| `credit.grants[].amount.currency` | string                              |             |

### `wallet.depleted`

A wallet's last credits were spent or expired: its balance is zero. Sent once until credits arrive again.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                 | Type                                | Description |
| --------------------- | ----------------------------------- | ----------- |
| `id`                  | string                              |             |
| `object`              | `"wallet"`                          |             |
| `customerId`          | string                              |             |
| `currency`            | string                              |             |
| `status`              | one of `active`, `frozen`, `closed` |             |
| `available`           | object                              |             |
| `available.amount`    | string                              |             |
| `available.currency`  | string                              |             |
| `promo`               | object                              |             |
| `promo.amount`        | string                              |             |
| `promo.currency`      | string                              |             |
| `reserved`            | object                              |             |
| `reserved.amount`     | string                              |             |
| `reserved.currency`   | string                              |             |
| `balance`             | object                              |             |
| `balance.amount`      | string                              |             |
| `balance.currency`    | string                              |             |
| `lowBalanceThreshold` | object or null                      |             |

### `wallet.frozen`

A wallet was frozen (`wallets.update` with `status: frozen`): it takes no new reservations or leases until it is unfrozen. `data.statusReason` says why.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                 | Type                                | Description |
| --------------------- | ----------------------------------- | ----------- |
| `id`                  | string                              |             |
| `object`              | `"wallet"`                          |             |
| `customerId`          | string                              |             |
| `currency`            | string                              |             |
| `status`              | one of `active`, `frozen`, `closed` |             |
| `available`           | object                              |             |
| `available.amount`    | string                              |             |
| `available.currency`  | string                              |             |
| `promo`               | object                              |             |
| `promo.amount`        | string                              |             |
| `promo.currency`      | string                              |             |
| `reserved`            | object                              |             |
| `reserved.amount`     | string                              |             |
| `reserved.currency`   | string                              |             |
| `balance`             | object                              |             |
| `balance.amount`      | string                              |             |
| `balance.currency`    | string                              |             |
| `lowBalanceThreshold` | object or null                      |             |

### `wallet.low_balance`

A wallet's balance fell below its `lowBalanceThreshold`. Sent once per dip: not again until the balance has risen back to the threshold (a credit, or a lower threshold) and falls below it again.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field                 | Type                                | Description |
| --------------------- | ----------------------------------- | ----------- |
| `id`                  | string                              |             |
| `object`              | `"wallet"`                          |             |
| `customerId`          | string                              |             |
| `currency`            | string                              |             |
| `status`              | one of `active`, `frozen`, `closed` |             |
| `available`           | object                              |             |
| `available.amount`    | string                              |             |
| `available.currency`  | string                              |             |
| `promo`               | object                              |             |
| `promo.amount`        | string                              |             |
| `promo.currency`      | string                              |             |
| `reserved`            | object                              |             |
| `reserved.amount`     | string                              |             |
| `reserved.currency`   | string                              |             |
| `balance`             | object                              |             |
| `balance.amount`      | string                              |             |
| `balance.currency`    | string                              |             |
| `lowBalanceThreshold` | object or null                      |             |

## Webhook endpoint

### `webhook_endpoint.created`

A webhook endpoint was created. The signing secret is never part of the event.

**Scope:** Brand · **Webhooks:** not delivered (internal)

`data.object`:

| Field                     | Type                               | Description |
| ------------------------- | ---------------------------------- | ----------- |
| `id`                      | `we_…` ID                          |             |
| `object`                  | `"webhook_endpoint"`               |             |
| `brandId`                 | `brd_…` ID                         |             |
| `livemode`                | boolean                            |             |
| `url`                     | string                             |             |
| `description`             | string or null                     |             |
| `events`                  | array of string                    |             |
| `enabled`                 | boolean                            |             |
| `disabledReason`          | one of `manual`, `failing` or null |             |
| `disabledAt`              | date-time or null                  |             |
| `failingSince`            | date-time or null                  |             |
| `secretRotatedAt`         | date-time or null                  |             |
| `previousSecretExpiresAt` | date-time or null                  |             |
| `metadata`                | object                             |             |
| `createdAt`               | date-time                          |             |
| `updatedAt`               | date-time                          |             |

### `webhook_endpoint.deleted`

A webhook endpoint was deleted, together with its signing secret.

**Scope:** Brand · **Webhooks:** not delivered (internal)

`data.object`:

| Field                     | Type                               | Description |
| ------------------------- | ---------------------------------- | ----------- |
| `id`                      | `we_…` ID                          |             |
| `object`                  | `"webhook_endpoint"`               |             |
| `brandId`                 | `brd_…` ID                         |             |
| `livemode`                | boolean                            |             |
| `url`                     | string                             |             |
| `description`             | string or null                     |             |
| `events`                  | array of string                    |             |
| `enabled`                 | boolean                            |             |
| `disabledReason`          | one of `manual`, `failing` or null |             |
| `disabledAt`              | date-time or null                  |             |
| `failingSince`            | date-time or null                  |             |
| `secretRotatedAt`         | date-time or null                  |             |
| `previousSecretExpiresAt` | date-time or null                  |             |
| `metadata`                | object                             |             |
| `createdAt`               | date-time                          |             |
| `updatedAt`               | date-time                          |             |

### `webhook_endpoint.test`

A test delivery sent with `POST /webhook_endpoints/{id}/test`, to that endpoint only. Signed like every delivery; not in the event feed, and endpoints can't subscribe to it.

**Scope:** Brand · **Webhooks:** delivered

`data.object`:

| Field     | Type                 | Description |
| --------- | -------------------- | ----------- |
| `id`      | `we_…` ID            |             |
| `object`  | `"webhook_endpoint"` |             |
| `url`     | string               |             |
| `message` | string               |             |

### `webhook_endpoint.updated`

A webhook endpoint's URL, event types, description, metadata or enabled state changed, or its signing secret was rotated. `previous_attributes` has the old values.

**Scope:** Brand · **Webhooks:** not delivered (internal)

`data.object`:

| Field                     | Type                               | Description |
| ------------------------- | ---------------------------------- | ----------- |
| `id`                      | `we_…` ID                          |             |
| `object`                  | `"webhook_endpoint"`               |             |
| `brandId`                 | `brd_…` ID                         |             |
| `livemode`                | boolean                            |             |
| `url`                     | string                             |             |
| `description`             | string or null                     |             |
| `events`                  | array of string                    |             |
| `enabled`                 | boolean                            |             |
| `disabledReason`          | one of `manual`, `failing` or null |             |
| `disabledAt`              | date-time or null                  |             |
| `failingSince`            | date-time or null                  |             |
| `secretRotatedAt`         | date-time or null                  |             |
| `previousSecretExpiresAt` | date-time or null                  |             |
| `metadata`                | object                             |             |
| `createdAt`               | date-time                          |             |
| `updatedAt`               | date-time                          |             |
