# Event catalogue

Event types are named `{product}.{resource}.{action}` in the past tense. Each one is delivered to your webhook endpoints in the [event envelope](https://docs.vabu.live/concepts/webhooks.md#event-envelope) and is listed by `GET /v1/events` for 30 days.

## access.entitlement.expired



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `customer` | string or null | no |  |
| `contact_hash` | string or null | no |  |
| `resource` | object | yes |  |
| `resource.type` | string | yes |  |
| `resource.id` | string | yes |  |
| `resource.variant` | string or null | yes |  |
| `source` | `payment`, `tenant_grant`, `comp`, `subscription`, `membership_tier`, `ticket`, `promotion` | yes |  |
| `source_ref` | string or null | no |  |
| `starts_at` | string or null (date-time) | no |  |
| `ends_at` | string or null (date-time) | no |  |
| `limits` | object | yes |  |
| `limits.max_devices` | integer | no |  |
| `limits.max_concurrent_sessions` | integer | no |  |
| `limits.max_views` | integer | no |  |
| `limits.allowed_countries` | array of string | no |  |
| `limits.allowed_domains` | array of string | no |  |
| `limits.concurrency_policy` | `reject_new`, `replace_oldest` | no |  |
| `status` | `active`, `suspended`, `revoked`, `expired` | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | no |  |
| `livemode` | boolean | yes |  |
| `created_at` | string or null (date-time) | no |  |

## access.entitlement.extended



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `customer` | string or null | no |  |
| `contact_hash` | string or null | no |  |
| `resource` | object | yes |  |
| `resource.type` | string | yes |  |
| `resource.id` | string | yes |  |
| `resource.variant` | string or null | yes |  |
| `source` | `payment`, `tenant_grant`, `comp`, `subscription`, `membership_tier`, `ticket`, `promotion` | yes |  |
| `source_ref` | string or null | no |  |
| `starts_at` | string or null (date-time) | no |  |
| `ends_at` | string or null (date-time) | no |  |
| `limits` | object | yes |  |
| `limits.max_devices` | integer | no |  |
| `limits.max_concurrent_sessions` | integer | no |  |
| `limits.max_views` | integer | no |  |
| `limits.allowed_countries` | array of string | no |  |
| `limits.allowed_domains` | array of string | no |  |
| `limits.concurrency_policy` | `reject_new`, `replace_oldest` | no |  |
| `status` | `active`, `suspended`, `revoked`, `expired` | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | no |  |
| `livemode` | boolean | yes |  |
| `created_at` | string or null (date-time) | no |  |

## access.entitlement.granted



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `customer` | string or null | no |  |
| `contact_hash` | string or null | no |  |
| `resource` | object | yes |  |
| `resource.type` | string | yes |  |
| `resource.id` | string | yes |  |
| `resource.variant` | string or null | yes |  |
| `source` | `payment`, `tenant_grant`, `comp`, `subscription`, `membership_tier`, `ticket`, `promotion` | yes |  |
| `source_ref` | string or null | no |  |
| `starts_at` | string or null (date-time) | no |  |
| `ends_at` | string or null (date-time) | no |  |
| `limits` | object | yes |  |
| `limits.max_devices` | integer | no |  |
| `limits.max_concurrent_sessions` | integer | no |  |
| `limits.max_views` | integer | no |  |
| `limits.allowed_countries` | array of string | no |  |
| `limits.allowed_domains` | array of string | no |  |
| `limits.concurrency_policy` | `reject_new`, `replace_oldest` | no |  |
| `status` | `active`, `suspended`, `revoked`, `expired` | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | no |  |
| `livemode` | boolean | yes |  |
| `created_at` | string or null (date-time) | no |  |

## access.entitlement.resumed



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `customer` | string or null | no |  |
| `contact_hash` | string or null | no |  |
| `resource` | object | yes |  |
| `resource.type` | string | yes |  |
| `resource.id` | string | yes |  |
| `resource.variant` | string or null | yes |  |
| `source` | `payment`, `tenant_grant`, `comp`, `subscription`, `membership_tier`, `ticket`, `promotion` | yes |  |
| `source_ref` | string or null | no |  |
| `starts_at` | string or null (date-time) | no |  |
| `ends_at` | string or null (date-time) | no |  |
| `limits` | object | yes |  |
| `limits.max_devices` | integer | no |  |
| `limits.max_concurrent_sessions` | integer | no |  |
| `limits.max_views` | integer | no |  |
| `limits.allowed_countries` | array of string | no |  |
| `limits.allowed_domains` | array of string | no |  |
| `limits.concurrency_policy` | `reject_new`, `replace_oldest` | no |  |
| `status` | `active`, `suspended`, `revoked`, `expired` | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | no |  |
| `livemode` | boolean | yes |  |
| `created_at` | string or null (date-time) | no |  |

## access.entitlement.revoked



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `customer` | string or null | no |  |
| `contact_hash` | string or null | no |  |
| `resource` | object | yes |  |
| `resource.type` | string | yes |  |
| `resource.id` | string | yes |  |
| `resource.variant` | string or null | yes |  |
| `source` | `payment`, `tenant_grant`, `comp`, `subscription`, `membership_tier`, `ticket`, `promotion` | yes |  |
| `source_ref` | string or null | no |  |
| `starts_at` | string or null (date-time) | no |  |
| `ends_at` | string or null (date-time) | no |  |
| `limits` | object | yes |  |
| `limits.max_devices` | integer | no |  |
| `limits.max_concurrent_sessions` | integer | no |  |
| `limits.max_views` | integer | no |  |
| `limits.allowed_countries` | array of string | no |  |
| `limits.allowed_domains` | array of string | no |  |
| `limits.concurrency_policy` | `reject_new`, `replace_oldest` | no |  |
| `status` | `active`, `suspended`, `revoked`, `expired` | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | no |  |
| `livemode` | boolean | yes |  |
| `created_at` | string or null (date-time) | no |  |

## access.entitlement.suspended



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `customer` | string or null | no |  |
| `contact_hash` | string or null | no |  |
| `resource` | object | yes |  |
| `resource.type` | string | yes |  |
| `resource.id` | string | yes |  |
| `resource.variant` | string or null | yes |  |
| `source` | `payment`, `tenant_grant`, `comp`, `subscription`, `membership_tier`, `ticket`, `promotion` | yes |  |
| `source_ref` | string or null | no |  |
| `starts_at` | string or null (date-time) | no |  |
| `ends_at` | string or null (date-time) | no |  |
| `limits` | object | yes |  |
| `limits.max_devices` | integer | no |  |
| `limits.max_concurrent_sessions` | integer | no |  |
| `limits.max_views` | integer | no |  |
| `limits.allowed_countries` | array of string | no |  |
| `limits.allowed_domains` | array of string | no |  |
| `limits.concurrency_policy` | `reject_new`, `replace_oldest` | no |  |
| `status` | `active`, `suspended`, `revoked`, `expired` | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | no |  |
| `livemode` | boolean | yes |  |
| `created_at` | string or null (date-time) | no |  |

## events.order.paid



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string (uuid) | yes |  |
| `object` | any | yes |  |
| `code` | string | yes |  |
| `status` | `paid` | yes |  |
| `event_id` | string (uuid) | yes |  |
| `ticket_id` | string or null (uuid) | no |  |
| `quantity` | integer | yes |  |
| `amount` | integer | yes | Cents. |
| `currency` | string | yes |  |
| `channel` | string | yes |  |
| `checkout_id` | string or null | no |  |
| `promoter_id` | string or null | no |  |

## platform.webhook_endpoint.created



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string (uuid) | yes |  |
| `object` | any | yes |  |
| `url` | string | yes |  |
| `description` | string or null | no |  |
| `enabled_events` | array of string | yes |  |
| `api_version` | string or null | no |  |
| `status` | `enabled`, `disabled` | yes |  |
| `disabled_reason` | string or null | no |  |
| `livemode` | boolean | yes |  |
| `metadata` | object | no |  |
| `secret_previous_expires_at` | string or null (date-time) | no |  |
| `created_at` | string or null (date-time) | no |  |

## platform.webhook_endpoint.deleted



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string (uuid) | yes |  |
| `object` | any | yes |  |
| `url` | string | yes |  |
| `description` | string or null | no |  |
| `enabled_events` | array of string | yes |  |
| `api_version` | string or null | no |  |
| `status` | `enabled`, `disabled` | yes |  |
| `disabled_reason` | string or null | no |  |
| `livemode` | boolean | yes |  |
| `metadata` | object | no |  |
| `secret_previous_expires_at` | string or null (date-time) | no |  |
| `created_at` | string or null (date-time) | no |  |

## platform.webhook_endpoint.disabled



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string (uuid) | yes |  |
| `object` | any | yes |  |
| `url` | string | yes |  |
| `description` | string or null | no |  |
| `enabled_events` | array of string | yes |  |
| `api_version` | string or null | no |  |
| `status` | `enabled`, `disabled` | yes |  |
| `disabled_reason` | string or null | no |  |
| `livemode` | boolean | yes |  |
| `metadata` | object | no |  |
| `secret_previous_expires_at` | string or null (date-time) | no |  |
| `created_at` | string or null (date-time) | no |  |

## platform.webhook_endpoint.secret_rolled



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string (uuid) | yes |  |
| `object` | any | yes |  |
| `url` | string | yes |  |
| `description` | string or null | no |  |
| `enabled_events` | array of string | yes |  |
| `api_version` | string or null | no |  |
| `status` | `enabled`, `disabled` | yes |  |
| `disabled_reason` | string or null | no |  |
| `livemode` | boolean | yes |  |
| `metadata` | object | no |  |
| `secret_previous_expires_at` | string or null (date-time) | no |  |
| `created_at` | string or null (date-time) | no |  |

## platform.webhook_endpoint.updated



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string (uuid) | yes |  |
| `object` | any | yes |  |
| `url` | string | yes |  |
| `description` | string or null | no |  |
| `enabled_events` | array of string | yes |  |
| `api_version` | string or null | no |  |
| `status` | `enabled`, `disabled` | yes |  |
| `disabled_reason` | string or null | no |  |
| `livemode` | boolean | yes |  |
| `metadata` | object | no |  |
| `secret_previous_expires_at` | string or null (date-time) | no |  |
| `created_at` | string or null (date-time) | no |  |

## streams.asset.created



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `source` | `upload`, `url`, `clip`, `recording` | yes |  |
| `status` | `preparing`, `ready`, `errored` | yes |  |
| `duration` | number or null | no |  |
| `audio_only` | boolean | yes |  |
| `error` | string or null | no |  |
| `playback_ids` | array of object | yes |  |
| `playback_ids[].id` | string | yes |  |
| `playback_ids[].object` | any | yes |  |
| `playback_ids[].playback_id` | string | yes |  |
| `playback_ids[].policy` | `public`, `signed` | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |

## streams.asset.deleted



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `source` | `upload`, `url`, `clip`, `recording` | yes |  |
| `status` | `preparing`, `ready`, `errored` | yes |  |
| `duration` | number or null | no |  |
| `audio_only` | boolean | yes |  |
| `error` | string or null | no |  |
| `playback_ids` | array of object | yes |  |
| `playback_ids[].id` | string | yes |  |
| `playback_ids[].object` | any | yes |  |
| `playback_ids[].playback_id` | string | yes |  |
| `playback_ids[].policy` | `public`, `signed` | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |

## streams.asset.errored



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `source` | `upload`, `url`, `clip`, `recording` | yes |  |
| `status` | `preparing`, `ready`, `errored` | yes |  |
| `duration` | number or null | no |  |
| `audio_only` | boolean | yes |  |
| `error` | string or null | no |  |
| `playback_ids` | array of object | yes |  |
| `playback_ids[].id` | string | yes |  |
| `playback_ids[].object` | any | yes |  |
| `playback_ids[].playback_id` | string | yes |  |
| `playback_ids[].policy` | `public`, `signed` | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |

## streams.asset.ready



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `source` | `upload`, `url`, `clip`, `recording` | yes |  |
| `status` | `preparing`, `ready`, `errored` | yes |  |
| `duration` | number or null | no |  |
| `audio_only` | boolean | yes |  |
| `error` | string or null | no |  |
| `playback_ids` | array of object | yes |  |
| `playback_ids[].id` | string | yes |  |
| `playback_ids[].object` | any | yes |  |
| `playback_ids[].playback_id` | string | yes |  |
| `playback_ids[].policy` | `public`, `signed` | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |

## streams.asset.updated



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `source` | `upload`, `url`, `clip`, `recording` | yes |  |
| `status` | `preparing`, `ready`, `errored` | yes |  |
| `duration` | number or null | no |  |
| `audio_only` | boolean | yes |  |
| `error` | string or null | no |  |
| `playback_ids` | array of object | yes |  |
| `playback_ids[].id` | string | yes |  |
| `playback_ids[].object` | any | yes |  |
| `playback_ids[].playback_id` | string | yes |  |
| `playback_ids[].policy` | `public`, `signed` | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |

## streams.clip.created



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `source_asset` | string | yes |  |
| `asset` | string | yes |  |
| `start_time` | number | yes |  |
| `end_time` | number | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |

## streams.content.purchased



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string (uuid) | yes |  |
| `object` | any | yes |  |
| `content_id` | string (uuid) | yes |  |
| `content_item_id` | string or null (uuid) | no |  |
| `booking_id` | string (uuid) | yes |  |
| `purchase_type` | string | yes |  |
| `amount` | integer | yes | Cents. |
| `currency` | string | yes |  |
| `access_expires_at` | string or null (date-time) | no |  |

## streams.live_stream.active



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `status` | `idle`, `connecting`, `active`, `disconnected`, `disabled` | yes |  |
| `latency_mode` | `low`, `standard` | yes |  |
| `reconnect_window` | integer | yes |  |
| `audio_only` | boolean | yes |  |
| `ingest` | object | yes |  |
| `playback_ids` | array of object | yes |  |
| `playback_ids[].id` | string | yes |  |
| `playback_ids[].object` | any | yes |  |
| `playback_ids[].playback_id` | string | yes |  |
| `playback_ids[].policy` | `public`, `signed` | yes |  |
| `simulcast_targets` | array of object | yes |  |
| `simulcast_targets[].id` | string | yes |  |
| `simulcast_targets[].object` | any | yes |  |
| `simulcast_targets[].url` | string | yes |  |
| `simulcast_targets[].status` | string | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |

## streams.live_stream.created



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `status` | `idle`, `connecting`, `active`, `disconnected`, `disabled` | yes |  |
| `latency_mode` | `low`, `standard` | yes |  |
| `reconnect_window` | integer | yes |  |
| `audio_only` | boolean | yes |  |
| `ingest` | object | yes |  |
| `playback_ids` | array of object | yes |  |
| `playback_ids[].id` | string | yes |  |
| `playback_ids[].object` | any | yes |  |
| `playback_ids[].playback_id` | string | yes |  |
| `playback_ids[].policy` | `public`, `signed` | yes |  |
| `simulcast_targets` | array of object | yes |  |
| `simulcast_targets[].id` | string | yes |  |
| `simulcast_targets[].object` | any | yes |  |
| `simulcast_targets[].url` | string | yes |  |
| `simulcast_targets[].status` | string | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |

## streams.live_stream.deleted



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `status` | `idle`, `connecting`, `active`, `disconnected`, `disabled` | yes |  |
| `latency_mode` | `low`, `standard` | yes |  |
| `reconnect_window` | integer | yes |  |
| `audio_only` | boolean | yes |  |
| `ingest` | object | yes |  |
| `playback_ids` | array of object | yes |  |
| `playback_ids[].id` | string | yes |  |
| `playback_ids[].object` | any | yes |  |
| `playback_ids[].playback_id` | string | yes |  |
| `playback_ids[].policy` | `public`, `signed` | yes |  |
| `simulcast_targets` | array of object | yes |  |
| `simulcast_targets[].id` | string | yes |  |
| `simulcast_targets[].object` | any | yes |  |
| `simulcast_targets[].url` | string | yes |  |
| `simulcast_targets[].status` | string | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |

## streams.live_stream.disconnected



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `status` | `idle`, `connecting`, `active`, `disconnected`, `disabled` | yes |  |
| `latency_mode` | `low`, `standard` | yes |  |
| `reconnect_window` | integer | yes |  |
| `audio_only` | boolean | yes |  |
| `ingest` | object | yes |  |
| `playback_ids` | array of object | yes |  |
| `playback_ids[].id` | string | yes |  |
| `playback_ids[].object` | any | yes |  |
| `playback_ids[].playback_id` | string | yes |  |
| `playback_ids[].policy` | `public`, `signed` | yes |  |
| `simulcast_targets` | array of object | yes |  |
| `simulcast_targets[].id` | string | yes |  |
| `simulcast_targets[].object` | any | yes |  |
| `simulcast_targets[].url` | string | yes |  |
| `simulcast_targets[].status` | string | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |

## streams.live_stream.idle



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `status` | `idle`, `connecting`, `active`, `disconnected`, `disabled` | yes |  |
| `latency_mode` | `low`, `standard` | yes |  |
| `reconnect_window` | integer | yes |  |
| `audio_only` | boolean | yes |  |
| `ingest` | object | yes |  |
| `playback_ids` | array of object | yes |  |
| `playback_ids[].id` | string | yes |  |
| `playback_ids[].object` | any | yes |  |
| `playback_ids[].playback_id` | string | yes |  |
| `playback_ids[].policy` | `public`, `signed` | yes |  |
| `simulcast_targets` | array of object | yes |  |
| `simulcast_targets[].id` | string | yes |  |
| `simulcast_targets[].object` | any | yes |  |
| `simulcast_targets[].url` | string | yes |  |
| `simulcast_targets[].status` | string | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |

## streams.live_stream.recovered



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `status` | `idle`, `connecting`, `active`, `disconnected`, `disabled` | yes |  |
| `latency_mode` | `low`, `standard` | yes |  |
| `reconnect_window` | integer | yes |  |
| `audio_only` | boolean | yes |  |
| `ingest` | object | yes |  |
| `playback_ids` | array of object | yes |  |
| `playback_ids[].id` | string | yes |  |
| `playback_ids[].object` | any | yes |  |
| `playback_ids[].playback_id` | string | yes |  |
| `playback_ids[].policy` | `public`, `signed` | yes |  |
| `simulcast_targets` | array of object | yes |  |
| `simulcast_targets[].id` | string | yes |  |
| `simulcast_targets[].object` | any | yes |  |
| `simulcast_targets[].url` | string | yes |  |
| `simulcast_targets[].status` | string | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |
| `health` | object | yes |  |
| `health.status` | `healthy`, `degraded`, `down` | yes |  |
| `health.plane` | string | yes |  |
| `health.reason` | string or null | yes |  |
| `health.since` | string (date-time) | yes |  |
| `standby` | `none`, `auto`, `mux`, `cloudflare_stream` | yes |  |
| `standby_state` | `none`, `ready`, `failed` | yes |  |

## streams.live_stream.unhealthy



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `status` | `idle`, `connecting`, `active`, `disconnected`, `disabled` | yes |  |
| `latency_mode` | `low`, `standard` | yes |  |
| `reconnect_window` | integer | yes |  |
| `audio_only` | boolean | yes |  |
| `ingest` | object | yes |  |
| `playback_ids` | array of object | yes |  |
| `playback_ids[].id` | string | yes |  |
| `playback_ids[].object` | any | yes |  |
| `playback_ids[].playback_id` | string | yes |  |
| `playback_ids[].policy` | `public`, `signed` | yes |  |
| `simulcast_targets` | array of object | yes |  |
| `simulcast_targets[].id` | string | yes |  |
| `simulcast_targets[].object` | any | yes |  |
| `simulcast_targets[].url` | string | yes |  |
| `simulcast_targets[].status` | string | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |
| `health` | object | yes |  |
| `health.status` | `healthy`, `degraded`, `down` | yes |  |
| `health.plane` | string | yes |  |
| `health.reason` | string or null | yes |  |
| `health.since` | string (date-time) | yes |  |
| `standby` | `none`, `auto`, `mux`, `cloudflare_stream` | yes |  |
| `standby_state` | `none`, `ready`, `failed` | yes |  |

## streams.live_stream.updated



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `status` | `idle`, `connecting`, `active`, `disconnected`, `disabled` | yes |  |
| `latency_mode` | `low`, `standard` | yes |  |
| `reconnect_window` | integer | yes |  |
| `audio_only` | boolean | yes |  |
| `ingest` | object | yes |  |
| `playback_ids` | array of object | yes |  |
| `playback_ids[].id` | string | yes |  |
| `playback_ids[].object` | any | yes |  |
| `playback_ids[].playback_id` | string | yes |  |
| `playback_ids[].policy` | `public`, `signed` | yes |  |
| `simulcast_targets` | array of object | yes |  |
| `simulcast_targets[].id` | string | yes |  |
| `simulcast_targets[].object` | any | yes |  |
| `simulcast_targets[].url` | string | yes |  |
| `simulcast_targets[].status` | string | yes |  |
| `external_id` | string or null | no |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |

## streams.moment.cancelled

Sent once, the first time a moment is cancelled. Cancelling it again sends nothing.

| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `live_stream` | string | yes |  |
| `type` | `shoutout`, `request`, `dedication`, `poll`, `product`, `sponsor`, `highlight`, `custom` | yes |  |
| `label` | string | yes |  |
| `payload` | object or null | yes |  |
| `customer` | string or null | yes | The tenant's own reference for the fan behind the moment. Private to the tenant: it is in webhooks, never in the viewer feed. |
| `amount` | integer or null | yes | Cents. |
| `currency` | string or null | yes |  |
| `occurred_at` | string (date-time) | yes | The server's clock to the millisecond. A player shows the moment when the playhead's program date time reaches it. |
| `display_ms` | integer | yes |  |
| `visibility` | `public`, `private` | yes |  |
| `clip_before_s` | integer or null | no |  |
| `clip_after_s` | integer or null | no |  |
| `status` | any | yes |  |
| `cancelled_at` | string or null (date-time) | yes |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | yes |  |

## streams.moment.clip_failed

Sent once when no clip could be made for a moment. clip_error says why. The moment itself is unaffected.

| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `live_stream` | string | yes |  |
| `type` | `shoutout`, `request`, `dedication`, `poll`, `product`, `sponsor`, `highlight`, `custom` | yes |  |
| `label` | string | yes |  |
| `payload` | object or null | yes |  |
| `customer` | string or null | yes | The tenant's own reference for the fan behind the moment. Private to the tenant: it is in webhooks, never in the viewer feed. |
| `amount` | integer or null | yes | Cents. |
| `currency` | string or null | yes |  |
| `occurred_at` | string (date-time) | yes | The server's clock to the millisecond. A player shows the moment when the playhead's program date time reaches it. |
| `display_ms` | integer | yes |  |
| `visibility` | `public`, `private` | yes |  |
| `clip_before_s` | integer or null | no |  |
| `clip_after_s` | integer or null | no |  |
| `status` | `active`, `cancelled` | yes |  |
| `cancelled_at` | string or null (date-time) | yes |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | yes |  |
| `clip_status` | any | yes |  |
| `clip_error` | string or null | yes | Why the clip failed: no_recording, recording_not_ready, recording_errored, outside_recording, clip_errored or live_stream_gone. |
| `clip` | string or null | yes |  |
| `clip_asset` | string or null | yes | The clip as an asset: play it, or sell it. The fan is in customer. |

## streams.moment.clip_ready

Sent once when the clip cut around a moment can be played. Send the fan their clip: customer is your own reference for them, clip_asset is the clip.

| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `live_stream` | string | yes |  |
| `type` | `shoutout`, `request`, `dedication`, `poll`, `product`, `sponsor`, `highlight`, `custom` | yes |  |
| `label` | string | yes |  |
| `payload` | object or null | yes |  |
| `customer` | string or null | yes | The tenant's own reference for the fan behind the moment. Private to the tenant: it is in webhooks, never in the viewer feed. |
| `amount` | integer or null | yes | Cents. |
| `currency` | string or null | yes |  |
| `occurred_at` | string (date-time) | yes | The server's clock to the millisecond. A player shows the moment when the playhead's program date time reaches it. |
| `display_ms` | integer | yes |  |
| `visibility` | `public`, `private` | yes |  |
| `clip_before_s` | integer or null | no |  |
| `clip_after_s` | integer or null | no |  |
| `status` | `active`, `cancelled` | yes |  |
| `cancelled_at` | string or null (date-time) | yes |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | yes |  |
| `clip_status` | any | yes |  |
| `clip_error` | string or null | yes | Why the clip failed: no_recording, recording_not_ready, recording_errored, outside_recording, clip_errored or live_stream_gone. |
| `clip` | string or null | yes |  |
| `clip_asset` | string or null | yes | The clip as an asset: play it, or sell it. The fan is in customer. |

## streams.moment.created

Something to show viewers in step with the video, such as a paid shoutout. The event carries the customer and amount; the viewer feed never does.

| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `live_stream` | string | yes |  |
| `type` | `shoutout`, `request`, `dedication`, `poll`, `product`, `sponsor`, `highlight`, `custom` | yes |  |
| `label` | string | yes |  |
| `payload` | object or null | yes |  |
| `customer` | string or null | yes | The tenant's own reference for the fan behind the moment. Private to the tenant: it is in webhooks, never in the viewer feed. |
| `amount` | integer or null | yes | Cents. |
| `currency` | string or null | yes |  |
| `occurred_at` | string (date-time) | yes | The server's clock to the millisecond. A player shows the moment when the playhead's program date time reaches it. |
| `display_ms` | integer | yes |  |
| `visibility` | `public`, `private` | yes |  |
| `clip_before_s` | integer or null | no |  |
| `clip_after_s` | integer or null | no |  |
| `status` | any | yes |  |
| `cancelled_at` | string or null (date-time) | yes |  |
| `metadata` | object | yes |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | yes |  |

## streams.upload.asset_created



| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes |  |
| `object` | any | yes |  |
| `provider` | string | yes |  |
| `status` | string | yes |  |
| `cors_origin` | string or null | no |  |
| `asset` | string or null | no |  |
| `expires_at` | string (date-time) | no |  |
| `livemode` | boolean | yes |  |
| `created_at` | string (date-time) | no |  |
