Lifecycle
- Create Webhook with an HTTPS URL, supported event names, and a long random secret.
- Store the secret immediately. It is shown only in the create response.
- Verify the signature against the raw request body before parsing JSON.
- Return a success response quickly and process durable work asynchronously.
- Update the URL, events, active state, or secret.
- Delete subscriptions that are permanently retired.
Delivery-safe consumer design
- Treat deliveries as at least once and make handlers tolerant of duplicates.
- Do not assume events arrive in business-time order.
- Store an event or resource identifier before triggering downstream work.
- Keep the raw body available for signature verification.
- Use Get Webhook and List Webhooks to confirm configuration.
Event names
The OpenAPI request schema and event catalog are the source of truth for supported event strings. Do not convert dots to underscores or infer new events from payload fields. The current examples usecall.completed and call.failed.