---
title: "Get the webhook delivery contract"
method: GET
path: "/v1/webhooks/events"
tags: ["webhooks"]
---

# Get the webhook delivery contract

`GET /v1/webhooks/events`

## Request

- Base URL: `https://api.cueframe.ai`
- URL: `https://api.cueframe.ai/v1/webhooks/events`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.cueframe.ai/api/auth/mcp/authorize`, token URL `https://api.cueframe.ai/api/auth/mcp/token`, scopes: `webhooks:read`)
  - API key in header `PAYMENT-SIGNATURE`

The machine-readable webhook contract: the delivery envelope, Standard-Webhooks signing (secret format, signed content, how to verify), the synchronous echo-the-token ownership handshake, and every subscribable event with its exact `data` fields. Read this before building a receiver — it answers 'what's the payload shape / how do I verify the signature / how does activation work' without guessing.

## Response `200`

The webhook delivery/signing/verification contract, as data.

- WebhookEventCatalogResponse: The webhook delivery/signing/verification contract, as data. Read this before building a receiver.
  - `delivery` object, required: The shared HTTP envelope + headers + retry semantics.
  - `signing` object, required: Standard Webhooks signing: secret format, signed content, how to verify.
  - `ownershipVerification` object, required: The synchronous echo-the-token activation handshake + recovery.
  - `events` object[], required: Every subscribable event with its exact delivery `data` fields.
    - `event` 'media.transcribed' | 'media.completed' | 'suggest.completed' | 'session.mux.complete' | 'session.mux.failed' | 'render.completed' | 'compose.completed' | 'checkpoint.ready' | 'project.updated' | 'composition.updated' | 'webhook.test', required
    - `when` string, required
    - `data` object, required
  - `sample` object, required: A fully-worked example delivery (headers + body).

## Other responses

- `400`: Bad request — validation_error / invalid_cursor / invalid_query.
- `401`: Missing or invalid Authorization header.
- `402`: Payment required. Returned when the caller presents no API key on a priced operation: the body AND the `Payment-Required` header carry the x402 v2 challenge (accepted scheme, network, USDC asset, amount, payTo). Sign the EIP-3009 authorization and retry with a `PAYMENT-SIGNATURE` header. A KEYED caller sees this status instead when their plan lacks or has exhausted the feature (`billing_required`).
- `403`: Forbidden — permission insufficient.
- `404`: Resource not found.
- `422`: Unprocessable — invalid_composition / media_in_use / session_in_use / render_not_cancellable.
- `429`: Rate limited. Retry-After header present.
- `500`: Internal error.

---

[API](https://skmtc.dev/cueframe/apis/cueframe-api.md) · [All operations](https://skmtc.dev/cueframe/apis/cueframe-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cueframe/apis/cueframe-api/revisions/8f9bfe362b4a?raw)
