Export the filtered call log as CSV (newest first, max 10,000 rows)
Takes the same filters as the list endpoint and streams a CSV rather than JSON. The column order is deliberately frozen — new fields are appended, never inserted — so a positional parser keeps working.
Requires the read scope. A key with less gets 403 insufficient_scope.
Authorization: Bearer tone_live_… or tone_test_…. The prefix IS the environment: a test key reaches only the sandbox, and no request field bridges the two.
In: header
Query Parameters
Only calls run by this agent, across every one of its versions.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidOnly calls placed from, or received on, this number.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidEvery call this campaign placed, retries included — which is what the recipient list cannot give you, since a recipient row names only its LAST attempt.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidWhich way the call went. Open set — handle an unrecognised value rather than throwing. Today: inbound, outbound.
Value in
- "inbound"
- "outbound"
How the call was carried. browser is the in-dashboard microphone test only; every dial the API places is pstn. Open set — handle an unrecognised value rather than throwing. Today: browser, pstn.
Value in
- "browser"
- "pstn"
Where the call is in its lifecycle. Open set — handle an unrecognised value rather than throwing. Today: queued, in_progress, ended.
Value in
- "queued"
- "in_progress"
- "ended"
How the call finished. Only set once status is ended. Open set — handle an unrecognised value rather than throwing. Today: answered, no_answer, busy, failed, voicemail, unknown.
Value in
- "answered"
- "no_answer"
- "busy"
- "failed"
- "voicemail"
- "unknown"
Ignored when you authenticate with an API key: the key's own prefix pins the environment, so a tone_test_ key structurally cannot read live calls.
Value in
- "live"
- "test"
Inclusive lower bound on createdAt. A bare date (2026-08-01) is accepted and read as midnight UTC.
Exclusive upper bound on createdAt. Must be later than from.
Include rows for calls that never started — an abandoned browser test dialog mints one, so they are hidden by default.
Value in
- "0"
- "1"
- "true"
- "false"
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/calls/export.csv"Download a call's evidence record as a PDF
The same sealed record GET /v1/calls/{id}/evidence returns, rendered as a human-readable document with the hash-chain seal on page one.
Fetch a single call
The full call detail record: outcome, duration, what was billed, the agent version that ran it, your declared output variables, the evaluation verdicts and the per-call variables it was given.