> ## Documentation Index
> Fetch the complete documentation index at: https://docs.telzino.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Compliance Audit Export

> Every outbound attempt in a date range, with its consent basis and outcome, as CSV or JSON

The export is built from outbound call records rather than transcripts, so **every dialled number appears**, including attempts that were never answered. Those have no transcript, but they do carry the consent basis they were placed under — which is what an audit asks about. See [Outbound Compliance](/functions/outbound-compliance#audit-export).

## Query Parameters

<ParamField query="from" type="string" required>Start of the range, inclusive (ISO 8601)</ParamField>
<ParamField query="to" type="string" required>End of the range, inclusive (ISO 8601)</ParamField>

<ParamField query="campaign_id" type="string">
  Only calls whose trigger `metadata.campaign_id` equals this value exactly
</ParamField>

<ParamField query="agent_id" type="string">Only one agent's calls</ParamField>
<ParamField query="status" type="string">Only one [call status](/api-reference/outbound-calls/overview#call-lifecycle)</ParamField>

<ParamField query="format" type="string" default="csv">
  `csv` downloads as an attachment; `json` returns the same columns under `data` with a `row_count`
</ParamField>

## Columns

`call_id`, `campaign_id`, `agent_id`, `agent_name`, `to_number`, `status`, `attempt_number`, `created_at`, `answered_at`, `ended_at`, `duration_seconds`, `consent_basis`, `consent_reference`, `disclosure_delivered`, `disclosure_timestamp`, `opt_out_detected`, `answer_type`, `voicemail_left`, `callee_timezone`, `cancel_reason`.

A CSV with no matching calls still carries its header row, so "nothing matched" is distinguishable from a failed export.

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.telzino.com/v1/outbound-calls/export?from=2026-09-01T00:00:00Z&to=2026-09-30T23:59:59Z&campaign_id=sept-reminders&format=json" \
    -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "row_count": 2,
    "data": [
      {
        "call_id": "0fc6daf8-…", "campaign_id": "sept-reminders", "agent_id": "aadcdc82-…", "agent_name": "Ava",
        "to_number": "+18135551234", "status": "completed", "attempt_number": 1,
        "created_at": "2026-09-12T14:02:10Z", "answered_at": "2026-09-12T14:02:31Z", "ended_at": "2026-09-12T14:05:02Z",
        "duration_seconds": 151, "consent_basis": "ebr", "consent_reference": "crm-88213",
        "disclosure_delivered": null, "disclosure_timestamp": null, "opt_out_detected": false,
        "answer_type": "human", "voicemail_left": false, "callee_timezone": null, "cancel_reason": null
      },
      {
        "call_id": "4c0e7f7e-…", "campaign_id": "sept-reminders", "agent_id": "aadcdc82-…", "agent_name": "Ava",
        "to_number": "+18135555678", "status": "no_answer", "attempt_number": 2,
        "created_at": "2026-09-12T17:02:10Z", "answered_at": null, "ended_at": "2026-09-12T17:02:58Z",
        "duration_seconds": null, "consent_basis": "express_written", "consent_reference": "form-5521",
        "disclosure_delivered": null, "disclosure_timestamp": null, "opt_out_detected": false,
        "answer_type": null, "voicemail_left": false, "callee_timezone": "America/Denver", "cancel_reason": null
      }
    ]
  }
  ```

  ```json 413 theme={null}
  {
    "error": "export_too_large",
    "error_description": "Too many rows for one export; narrow the range or add filters"
  }
  ```
</ResponseExample>

| Code | Meaning |
| - | - |
| `400` | Missing or malformed `from` / `to` |
| `413` | More rows than one export allows — the request is refused rather than truncated, because a partial audit file cannot be told apart from a complete one |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.