Start an export
Queue a CSV or NDJSON export and return immediately.
The 202 carries the job id and its queued status — never the data. Poll GET /exports/{exportId}, or the poll_url on the response, until status is completed, then download download.url within the hour.
A 400 means the request is wrong and retrying it unchanged will fail the same way: an unknown type or format, a missing or reversed date range, a range over 366 days, or a filter this export type does not support. A 429 with code: too_many_exports means five jobs are already queued or running for this workspace; wait for one to finish. A 503 means the export service could not accept the job — nothing was created, so retrying is safe.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
events mirrors GET /events; users mirrors GET /users at person grain; attribution is the channel-grain summary from GET /attribution.
events, users, attribution ndjson is one JSON object per line, keyed by the same columns as the CSV.
csv, ndjson Response
Accepted. The export is queued; poll poll_url for its status. The Location header carries the same path.
Only completed carries a download. expired means expires_at has passed and the file has been deleted.
queued, running, completed, failed, expired events, users, attribution csv, ndjson When the file is deleted — seven days after creation. After this the export must be re-run.
The range and filters this export was created with.
Rows written. Null until the export finishes.
True when the export reached the row cap. The file is valid but does not cover the whole requested range; narrow the range or the filters.
Why it failed. Null unless status is failed.
Present only on a completed, unexpired job. Generated at poll time, never stored. null alongside download_error means the artifact exists but could not be signed — retry the poll.
Set only when download is null on a completed job.
Where to poll for this job.