Before you start
Use a server-side API key withcalls:read to retrieve summaries and
transcripts:read to retrieve transcripts. Grant both scopes only when the
integration needs both resources. Existing keys do not gain transcript access
automatically.
Poll the summary
CallGET /calls/{call_id}/summary. A normal unfinished result is HTTP 200
with status: "processing" and poll_after_seconds: 5. Stop polling when the
status is ready, unavailable, or failed.
Poll the transcript
CallGET /calls/{call_id}/transcript?limit=100. Summary and transcript
readiness are independent, so do not infer one from the other.
Follow the cursor
Whennext_cursor is non-null, send it unchanged on the next request. The
cursor pins the transcript revision. A later reconciliation can publish a new
revision without changing pages already in progress. A page can contain fewer
turns than limit to stay within the response byte budget, so only a null
next_cursor means pagination is complete.
Detect content changes
Storecall_id, endpoint name, and revision. A higher revision means the
sanitized endpoint content changed. Repeating a projection with identical
content does not increment the revision.
Handle terminal states
unavailable means the call cannot produce that result; inspect its stable
reason. failed with processing_failed means safe processing was exhausted.
Neither is an HTTP error.