Skip to main content
A completion event fires after every call ends — inbound telephony, outbound telephony, web call, or test call (builder mic session). It is non-blocking: respond with any 2xx. The event is delivered on both paths:

Request payload (endpoint deliveries)

End reasons

Transcript format

Each entry in transcripts is one conversational turn. Roles are user (caller speech), model (agent speech and tool calls), tool (tool results), and system (call events such as language switches).
For the fully structured turn history (with interruption markers, ack-prompts, and raw positions), use GET /v1/calls/{call_id}/history.

Legacy payload differences

The legacy single-URL webhook envelope is {"type": "telephony.complete" | "web.complete", "data": {…}} with no event_id, and its data differs from the endpoint payload:
  • The turn array is under history, not transcripts (same turn schema as above).
  • The field set is the raw end-of-call report and can include additional internal fields beyond the table above — treat unknown fields as informational.
  • Web calls (direction: "web") omit from_number / to_number and add origin_domain.
  • Builder mic test calls report as telephony.complete on the legacy path (the endpoint system maps them to web.complete).
  • Transfer coordination: when a call ends in a transfer, the legacy webhook is called synchronously and may answer {"transfer_ready": false} to signal the handoff target isn’t ready. Any other response (or no legacy webhook) lets the transfer proceed. Endpoint deliveries are never consulted for this.

Example handler


Common use cases

CRM integration

Persist each call’s transcript + recording URL alongside your customer records.

Analytics

Stream transcripts to a pipeline for topic modeling, CSAT signal extraction, or transfer-rate monitoring.

Quality review

Open calls in a QA tool for human review, or run them through your own evaluation model.

Notifications

Trigger a human teammate on transfer / failure.

telephony.incoming / web.incoming

The blocking counterpart that runs at call start.

Events catalog

Other event types you can subscribe to.

Call history API

Same data accessible via REST for backfill / replay.