# Export the filtered call log as CSV (newest first, max 10,000 rows)

Source: https://docs.usetone.ai/reference/calls/exportCsv

> Takes the same filters as the list endpoint and streams a CSV rather than JSON.

`GET /v1/calls/export.csv`
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.

## Parameters

| Name | In | | Meaning |
|---|---|---|---|
| `agent_id` | query | optional | Only calls run by this agent, across every one of its versions. |
| `number_id` | query | optional | Only calls placed from, or received on, this number. |
| `campaign_id` | query | optional | Every call this campaign placed, retries included — which is what the recipient list cannot give you, since a recipient row names only its LAST attempt. |
| `direction` | query | optional | Which way the call went. Open set — handle an unrecognised value rather than throwing. Today: `inbound`, `outbound`. |
| `channel` | query | optional | 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`. |
| `status` | query | optional | Where the call is in its lifecycle. Open set — handle an unrecognised value rather than throwing. Today: `queued`, `in_progress`, `ended`. |
| `disposition` | query | optional | 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`. |
| `environment` | query | optional | 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. |
| `from` | query | optional | Inclusive lower bound on `createdAt`. A bare date (`2026-08-01`) is accepted and read as midnight UTC. |
| `to` | query | optional | Exclusive upper bound on `createdAt`. Must be later than `from`. |
| `include_unstarted` | query | optional | Include rows for calls that never started — an abandoned browser test dialog mints one, so they are hidden by default. |
