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).
Events fall into two classes:
- Blocking events expect your server to return configuration that
ThunderPhone uses to continue the call. Your server has about two
seconds to respond. Only
call.incomingis blocking. - Non-blocking events are fire-and-forget notifications. Respond with any 2xx; if we don’t see one, we retry with exponential backoff for up to 24 hours.
Call events
telephony.incoming
Sent when an inbound call reaches one of your
phone numbers. Blocking — your
response shapes the call.
For backward compatibility, the blocking payload ThunderPhone delivers
for inbound phone calls is also known as
call.incoming in the
single-URL legacy webhook. See
call.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, billing summary, and
latency metrics. See call.complete.
telephony.tool
Sent when a telephony call invokes a function tool. Non-blocking.
Includes the tool name, arguments, and response (or error). Primarily
used for audit trails; most apps do not need to subscribe.
web.incoming
The widget / mic-session equivalent of telephony.incoming. Blocking
when the publishable key is in mode="webhook" — your response shapes
the web session’s agent.
web.complete
The widget / mic-session equivalent of telephony.complete.
Non-blocking. Same payload shape as call.complete
with direction: "widget" or direction: "mic".
web.tool
The widget / mic-session equivalent of telephony.tool.
Quality events
call.graded
Sent when an AI grading run
completes for a call. Non-blocking.
Example payload:
issue.reported
Sent when an issue report is filed —
either by a user from the dashboard or automatically by call grading.
Non-blocking.
Example payload:
Test call events
test-call.completed
Sent when a
test-call run
finishes (or fails). Non-blocking. Useful for wiring batch CI runs
into your chat/notifications systems.
Example payload:
Deprecated aliases
The single-URL legacy webhook uses a slightly different taxonomy for backward compatibility:Endpoint-system type | Legacy type |
|---|---|
telephony.incoming | call.incoming |
telephony.complete | call.complete |
Related
call.incoming
The blocking inbound-call payload you must respond to.
call.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.