Export Analytics
The daily rollups matching the `GET /analytics/summary` filters, one row per UTC day x campaign x channel x mailbox with a column per metric. Small exports (up to `EXPORTS_DIRECT_MAX_ROWS`, default 5,000 rows) are the response body (`Content-Disposition: attachment`). Larger ones, or `background=true`, are built by a job: 202 with the export; poll `GET /exports/{export_id}` and fetch its `download_url`. CSV cells that start with `=`, `+`, `-` or `@` get a leading `'` (formula injection).
API key access
exports:write scope with an API key (ro_pat_...). A signed-in session uses the caller's role./api/v1/analytics/exportAccess token from /api/v1/auth/login, or an API key (ro_pat_..., RO-176) from /api/v1/workspaces/current/api-keys: the key implies its workspace and needs the route's scope. MCP connectors (/api/v1/mcp only) may use an OAuth access token (ro_oat_..., RO-284).
In: header
Query Parameters
First UTC day (default: to minus 29 days)
dateLast UTC day (default: today)
dateRepeat to match any of
Repeat to match any of
Repeat to match any of
Default csv
Always build in the background (202), whatever the size
Header Parameters
Id of the workspace to act on (must be a member).
Response Body
curl -X GET "http://localhost:8000/api/v1/analytics/export?from=2019-08-24&to=2019-08-24&sequence_id=497f6eca-6276-4993-bfeb-53cbbbba6f08&channel=email&mailbox_id=497f6eca-6276-4993-bfeb-53cbbbba6f08&background=true" \ -H "X-Workspace-Id: string""string"{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"dataset": "leads",
"format": "csv",
"status": "queued",
"filename": "reachout-leads-20261018-101500.csv",
"row_count": 0,
"byte_size": 0,
"truncated": true,
"error": "string",
"created_at": "2019-08-24T14:15:22Z",
"completed_at": "2019-08-24T14:15:22Z",
"expires_at": "2019-08-24T14:15:22Z",
"download_url": "string"
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Download Export
The built file, streamed. Authenticated by the signed `token` of the export's `download_url` only (no bearer token): 403 for a wrong or expired token, 404 once the export is gone.
Export Calls
Calls matching the `GET /calls` filters, with their leads. Small exports (up to `EXPORTS_DIRECT_MAX_ROWS`, default 5,000 rows) are the response body (`Content-Disposition: attachment`). Larger ones, or `background=true`, are built by a job: 202 with the export; poll `GET /exports/{export_id}` and fetch its `download_url`. CSV cells that start with `=`, `+`, `-` or `@` get a leading `'` (formula injection).