Overview of the create_board_export mutation and the export_job_status query, and how they fit together as one export workflow
Only available in API versions
2026-10and later, on Enterprise plans
The platform API exposes create_board_export to export a board's items to a CSV file. Small boards usually finish before the mutation returns; larger boards return a job you poll instead. Both outcomes come back from the same call, so every client has to handle both.
The export workflow is:
- Call
create_board_export. It returnsExportResult, a union of:ExportFile— the export already finished. Downloaddownload_urlbeforeexpires_at.ExportAsyncJob— the export is still running. Go to step 2.
- Poll
export_job_statuswith the job'sjob_iduntilstatusreaches a terminal value —COMPLETED,FAILED, orCANCELLED. - On
COMPLETED, downloaddownload_urlbefore it expires. OnFAILED, readfailure_reason(andfailure_messagewhen present) fromExportFailureReason.
Which branch you get is not part of the contract. The server picks ExportFile or ExportAsyncJob based on board size and current load, and the thresholds can change without notice — the same board can return ExportFile today and ExportAsyncJob tomorrow. Always select both branches.
Comparison
ExportFile (sync) | ExportAsyncJob (async) | |
|---|---|---|
| When it happens | Small boards, export finishes within the request | Larger boards, export keeps running after the request returns |
| What you get back | download_url and expires_at directly on the mutation response | job_id to poll |
| Next call | None — download the file | export_job_status, repeated until terminal |
| Failure surface | A GraphQL error on the mutation itself | A FAILED status on export_job_status, or a GraphQL error if rejected before the job starts |
For the full request/response reference for both operations, see the Board Export API reference. For input objects, result types, and enums, see Board export other types.
