Skip to main content
Every webhook body has a type field whose value is one of the event types on this page. When you subscribe to an endpoint, the events array must contain the event types you want (or be empty to subscribe to everything). Two delivery styles carry these events: Example payloads below show the endpoint envelope in its wire order (keys sorted alphabetically: data, event_id, type); legacy deliveries carry the same data without event_id.

Call events

telephony.incoming

Sent when an inbound call reaches one of your phone numbers. Endpoint deliveries are fire-and-forget notifications sent for every inbound call, whether the number is agent-configured or webhook-configured. Numbers without an assigned agent additionally receive the blocking configuration request on the legacy webhook — see telephony.incoming / web.incoming for the full request / response schema.

telephony.complete

Sent when an inbound or outbound telephony call ends. Non-blocking. Includes the full transcript, recording URL, and billing summary. See telephony.complete / web.complete for the payload schema.

telephony.tool

Sent after a telephony call invokes a function tool. Non-blocking audit notification — the tool has already executed when this event is delivered; it covers your own function tools (not built-in, knowledge-base, app-connection, or MCP tools).
response is the executed result: {"status": <http status>, "response": <your endpoint's JSON>} on success, or {"status": <status>, "error": "<message>"} on failure.

web.incoming

The web-channel equivalent of telephony.incoming, sent when a web widget session or a builder mic test call starts. Endpoint deliveries are fire-and-forget for every web session. Publishable keys in mode="webhook" additionally receive the blocking configuration request on the legacy webhook — that blocking request has a different shape (origin_domain, publishable_key_prefix; no phone numbers). See telephony.incoming / web.incoming.
from_number is always the literal "web". For webhook-mode widget sessions to_number is empty (the session’s agent number is assigned after configuration); for builder mic test calls origin_domain and publishable_key_prefix are empty.

web.complete

The web-channel equivalent of telephony.complete, covering web widget calls (direction: "web") and builder mic test calls (direction: "test"). Non-blocking. Same payload shape as telephony.complete, plus origin_domain, with from_number set to "web".
On the legacy single-URL webhook, builder mic test calls historically report as telephony.complete — only direction: "web" calls use the web.complete type there. The endpoint system maps both web and test calls to web.*. Historical payloads may contain the legacy direction values widget or mic.

web.tool

The web-channel equivalent of telephony.tool. The data carries origin_domain instead of from_number / to_number.

Quality events

call.graded

Sent whenever an AI grading run completes for a call. Non-blocking.
A call can be graded more than once — a fast heuristic grade is often followed by a full model grade once the recording is available, and manual regrades are possible. Each completed run emits its own call.graded event; treat the latest graded_at as authoritative.

issue.reported

Sent when an issue report is created — either filed by a user from the dashboard (source: "user") or automatically by call grading (source: "system"). Non-blocking.
Regrading a call rebuilds its system-generated issue reports, which re-emits issue.reported for the recreated reports. Dedup on call_id + title if you only want one notification per underlying problem.

Test call events

test-call.completed

Sent when a test-call run reaches a terminal status — completed or failed, including runs that failed at launch and never produced a call. Non-blocking. Useful for wiring batch CI runs into your chat/notifications systems.

Alert events

alert.triggered

Sent when an alert rule with the Deliver to developer webhooks channel enabled crosses its threshold. Non-blocking. A rule fires once and then respects its cooldown, so a sustained breach produces one event per cooldown window.
See the Alerts guide for creating rules, metrics, cooldowns, and the email / Slack channels.

telephony.incoming / web.incoming

The blocking inbound-call payload you must respond to.

telephony.complete / web.complete

Post-call transcript and metrics.

Webhook endpoints

Subscribe a URL to a subset of these events.

Function Tools

How telephony.tool / web.tool events are generated.