Board Export

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-10 and 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:

  1. Call create_board_export. It returns ExportResult, a union of:
    • ExportFile — the export already finished. Download download_url before expires_at.
    • ExportAsyncJob — the export is still running. Go to step 2.
  2. Poll export_job_status with the job's job_id until status reaches a terminal value — COMPLETED, FAILED, or CANCELLED.
  3. On COMPLETED, download download_url before it expires. On FAILED, read failure_reason (and failure_message when present) from ExportFailureReason.

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 happensSmall boards, export finishes within the requestLarger boards, export keeps running after the request returns
What you get backdownload_url and expires_at directly on the mutation responsejob_id to poll
Next callNone — download the fileexport_job_status, repeated until terminal
Failure surfaceA GraphQL error on the mutation itselfA 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.