Webhook endpoints
List webhook endpoints, newest first
GET /v1/webhook-endpoints webhooks:read
Query
limitintegercursorstring
Responses
- 200
A page of webhook endpoints
Fields
-
dataWebhookEndpoint[] requiredFields
-
idstring required -
urlstring required -
descriptionstring | null required -
eventTypesstring[] required -
enabledboolean required -
createdAtstring | null required
-
-
nextCursorstring | null required
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
Create a webhook endpoint (returns its signing secret once)
POST /v1/webhook-endpoints webhooks:write
Live keys only: an endpoint receives Events from both environments.
Headers
Idempotency-KeystringMakes the request safe to retry. For 24h, a request with the same key and body replays the stored response (with
Idempotent-Replayed: true); the same key with a different request is a 422idempotency_key_reused, and while the first request is still running a 409idempotency_key_in_use. Server errors, 409s and 429s are not stored.
Body
-
urlstring required -
eventTypes"call.initiated" | "call.ringing" | "call.answered" | "call.status.changed" | "call.completed" | "call.gather.completed" | "call.recording.ready" | "call.recording.started" | "call.recording.paused" | "call.recording.resumed" | "call.recording.stopped" | "call.transcript.ready" | "call.transcript.failed" | "call.flow.fallback" | "call.transfer.started" | "call.transfer.completed" | "call.transfer.failed" | "call.participant.joined" | "call.participant.left" | "call.participant.held" | "call.participant.unheld" | "rep.state.changed" | "rep.help.requested" | "rep.offer.missed" | "rep.phone.verified" | "queue.call.entered" | "queue.call.answered" | "queue.call.abandoned" | "queue.call.reassigned" | "call.monitor.started" | "call.monitor.changed" | "call.monitor.ended" | "call.monitor.took_over" | "call.consult.started" | "call.consult.connected" | "call.consult.merged" | "call.consult.ended" | "billing.dials_stopped" | "billing.dials_resumed" | "billing.payment_failed" | "campaign.paused" | "campaign.lead_exited" | "lead.consent.recorded" | "lead.consent.revoked" | "disposition.recorded" | "call.ai_summary.set" | "conversation.transcript.ready" | "webhook.test"[]Default
[]. -
descriptionstring | null
Responses
- 201
Webhook endpoint created
Fields
-
dataany required
-
- 400
Invalid request
- 401
Missing or invalid API key
- 403
A test key (
live_mode_only): this change needs a live API key - 404
Not found
- 409
idempotency_key_in_use: a request with this key is still running - 422
idempotency_key_reused: this key was used with a different request - 429
rate_limited, or another limit named byerror.code
Delete a webhook endpoint
DELETE /v1/webhook-endpoints/{id} webhooks:write
Live keys only.
Path
idstring required
Responses
- 204
Deleted
- 400
Invalid request
- 401
Missing or invalid API key
- 403
A test key (
live_mode_only): this change needs a live API key - 404
Not found
- 429
rate_limited, or another limit named byerror.code