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:
- Endpoint deliveries are always non-blocking notifications
with retries: respond with
any 2xx; the envelope carries an
event_idto dedup on. - Blocking exchanges run only on the
legacy single-URL webhook: the
telephony.incoming/web.incomingconfiguration request (webhook-mode numbers and widget keys, 10 s timeout) and webhook-mode tool dispatch. Your response shapes the live call.
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.
Related
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.