Skip to main content
Every inbound call to your phone numbers, every call triggered from POST /v1/call, every browser mic session, and every widget call produces a call log record. These endpoints let you enumerate and inspect them, fetch recordings and transcripts, record AI quality grades, file issue reports, and export history.

Endpoints

Call object


List calls

Query parameters

Paginated response

Use offset + limit to page forward; check total to know when you’ve reached the end.

Export calls

Bulk-download up to 1,000 of the most recent calls as either CSV (metadata only) or JSON (includes transcripts). The export honors the same filter parameters as List calls, so what you export matches what you filtered.

Query parameters

limit/offset are not accepted — the export always returns the most recent matches up to its fixed cap.

Response

The response includes a Content-Disposition: attachment header with a dated filename (calls-export-YYYY-MM-DD.csv). Exports cap at the 1,000 most recent calls matching the filters. When more calls match than the cap allows, the response carries truncation signals so you can detect an incomplete export: For a truncated window, narrow the date range (start_date/end_date) and export in slices, or use the list endpoint with offset pagination.

Retrieve a call

Returns 200 OK with a Call object, or 404 if the call does not belong to your organization.

Get recording audio

Returns a short-lived signed URL to the MP3 recording on Google Cloud Storage. Stream the URL directly to your audio player — do not store it (it expires).
Response

Get caller span audio

GET /v1/calls/{call_id}/span-audio?ref={ref} Streams the caller’s actual speech for one turn of the conversation. ref comes from a transcript entry’s audio_span_refs — user turns carry them when span audio was captured for the call. The dashboard uses this for the play-on-hover control on caller turns.

Get transcript

Simplified, user-facing transcript (role-tagged speech only; no system events). For the full structured history including function calls, interruptions, and latency metrics use /history.
Response

Get history

Full structured turn history. Use this when you need raw function-call arguments, interruption markers, ack-prompt annotations, or first-byte latencies.
Returns an array of typed entries. See the ThunderPhone call-history schema reference for the full shape — the top-level entries include span, completion, patch, function_call, function_response, interrupt, and acknowledgement.

AI call grading

Get latest grade

Response
Returns 200 OK with the latest grade row, or 404 if the call has not been graded.

Run grading

Grade the call. Grading runs synchronously within the request. If a completed grade already exists it is returned as-is unless you pass force=true. Any request that would invoke the grader — a forced regrade, or a request whose latest grade is missing, pending, or failed — must first claim a per-call cooldown. The standard cooldown is 15 minutes. If the latest grade is a retryable failure, the cooldown is 90 seconds so a retry can recover sooner. At most one new grading run can be claimed per window.
A request inside the active cooldown returns 429 Too Many Requests. The Retry-After response header and retryAfterSeconds body field contain the same number of seconds to wait:

Issue reports

Issue reports let your team (or automated grading) flag specific calls for review. Reports have a severity and optional title/description and appear in the org-wide Issue Reports feed.

List reports for a call

Returns an array of Issue Report objects — see Issue Reports.

File a report

Returns 201 Created with the Issue Report object. To update a report’s status later, use the issue-reports endpoints (reports are addressed by trace_id).

Live call supervision

Both endpoints work only while status="in_progress"; once the call ends they return 409 Conflict with {"detail": "Call is not live."}. The dashboard’s Live page is built on the same primitives.

Listen in

Mints a hidden, subscribe-only token for the call’s media room. The listener is invisible: the agent, the caller, and the recording are unaffected.
Response
Connect to server_url with a LiveKit client SDK using token and subscribe to the room’s audio. The token is valid for up to 2 hours; the session ends when the call’s room closes.

Whisper to the agent

Sends private text guidance that only the agent hears — the caller is never aware of it. The agent weaves the guidance into its next turns. Use it to coach an agent through an unusual situation mid-call.
Response (202 Accepted)

Outbound Calls

Trigger a new outbound call via POST /v1/call.

Mic Sessions

Test an agent live from a browser.

Issue Reports

Org-wide feed of issue reports across calls.

Simulations

Programmatic batched simulations against an agent.