Full reference for create_board_export and export_job_status - starting, polling, and downloading a board export
Only available in API versions
2026-10and later
- 🚧 Only available for Enterprise plans
- Required scope:
boards:readfor both operations (notboards:write— the export only reads board data) - The exported file is always CSV
The export workflow:
- Call
create_board_exportwith theboard_id - If the response is
ExportFile, downloaddownload_urlimmediately - If the response is
ExportAsyncJob, pollexport_job_statuswith itsjob_iduntil the job reaches a terminal state
Queries
Get export job status
- 🚧 Only available for Enterprise plans — other accounts receive a
FORBIDDEN_EXCEPTIONerror - Required scope:
boards:read - Returns the current state of an async board export as
ExportJobStatusInfo, ornull - Use it to poll a
job_idreturned bycreate_board_export
query {
export_job_status(job_id: "a1b2c3d4-0000-0000-0000-000000000000") {
status
download_url
failure_reason
failure_message
}
}import { ApiClient } from "@mondaydotcomorg/api";
const mondayApiClient = new ApiClient({ token: myToken });
const query = `query ($job: ID!) { export_job_status (job_id: $job) { status download_url failure_reason failure_message }}`
const variables = {
job: "a1b2c3d4-0000-0000-0000-000000000000"
}
const response = await mondayApiClient.request(query, variables);Arguments
| Argument | Type | Description |
|---|---|---|
| job_id | ID! | The job_id returned by create_board_export. |
Polling
Poll until status is one of the terminal values — COMPLETED, FAILED, or CANCELLED:
COMPLETED— readdownload_url. It can still benullif you poll after the URL has expired, so check before using it.FAILED— readfailure_reason(andfailure_messagewhen present).RUNNING— wait and poll again.
Back off between polls rather than polling in a tight loop; every call counts against your rate limits. Large exports can take minutes, so set a timeout in your own client rather than polling indefinitely.
A
nullresult does not mean the job failed. This query returnsnullfor ajob_idthat does not exist and for one that belongs to a different account — the two are deliberately indistinguishable, so an ID that leaks cannot be used to probe for other accounts' exports. If you getnullfor an ID you just received, check that you are querying with the same account's token.
Mutations
Required scope: boards:read (not boards:write — this mutation only reads board data)
Create board export
- 🚧 Only available for Enterprise plans
- Exports a board to a CSV file and returns
ExportResult - The exported file is always CSV
This mutation returns one of two different types, and your query must handle both.
Small boards usually finish immediately and return
ExportFilewith adownload_url. Larger ones returnExportAsyncJobwith ajob_idyou then poll.Which one you get is not part of the contract. It depends on board size and current server load, and the thresholds can be retuned without notice — so the same board can return
ExportFiletoday andExportAsyncJobtomorrow. A client that selects only one branch will break. Always select both.
mutation {
create_board_export(
board_id: 1234567890
export_options: { include_subitems: true, header_row: COLUMN_ID, columns_order: ["name", "status", "date4"] }
time_zone: "America/New_York"
) {
... on ExportFile {
download_url
expires_at
}
... on ExportAsyncJob {
job_id
}
}
}import { ApiClient } from "@mondaydotcomorg/api";
const mondayApiClient = new ApiClient({ token: myToken });
const query = `mutation ($board: ID!) { create_board_export (board_id: $board) { ... on ExportFile { download_url expires_at } ... on ExportAsyncJob { job_id }}}`
const variables = {
board: 1234567890
}
const response = await mondayApiClient.request(query, variables);
const result = response.create_board_export;
if (result.download_url) {
// Finished synchronously — download it now.
} else {
// Still running — poll export_job_status with result.job_id.
}Arguments
| Argument | Type | Description |
|---|---|---|
| board_id | ID! | The unique identifier of the board to export. |
| export_options | CreateBoardExportOptionsInput | Export configuration (subitems, header format, column order, and so on). Omit for defaults. |
| time_zone | String | IANA time zone used to format date and time values, for example America/New_York. Defaults to the time zone of the user whose token made the request, and to UTC if that user has none set. |
export_options.columns_orderselects columns as well as ordering them. Any column you do not list is left out of the export entirely — it is not appended at the end. To reorder a board without losing columns, list every column ID you want.The item name and subitems columns are the exception: they are always placed first, whether or not you list them.
Returns
ExportResult — a union of:
| Type | When | What to do |
|---|---|---|
ExportFile | The export finished in time | Download download_url before expires_at. |
ExportAsyncJob | The export is still running | Poll export_job_status with job_id until the status is terminal. |
Use __typename if you would rather branch explicitly than infer the branch from which fields came back:
mutation {
create_board_export(board_id: 1234567890) {
__typename
... on ExportFile { download_url }
... on ExportAsyncJob { job_id }
}
}Errors
The result has no error branch. Failures reach you one of two ways:
- As a GraphQL error, if the request is rejected before the export starts — for example an invalid
board_id, missing permissions, or an unsupported combination of export options. Accounts that are not on an Enterprise plan are rejected here with theFORBIDDEN_EXCEPTIONerror code. - As a
FAILEDstatus onexport_job_status, if an async export fails after starting. ReadExportFailureReasonto find out why.
Download URLs
download_url is a presigned URL and expires. Treat it as a secret — anyone who has it can download the file until it expires. It cannot be refreshed: once it expires, call create_board_export again to produce a new file.
See also
- Board Export overview - sync vs. async at a glance
- Board export other types - input objects, result types, and enums
