Skip to main content

Before you start

Use a server-side API key with calls: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

Call GET /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

Call GET /calls/{call_id}/transcript?limit=100. Summary and transcript readiness are independent, so do not infer one from the other.

Follow the cursor

When next_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

Store call_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.