Skip to content

Export

Export your tasks to JSON or Markdown with one click. Compatible with your existing workflow.

Open the export page, select a workspace, choose JSON or Markdown, and click Download. The backend returns the file as a download: JSON as an array of tasks, Markdown with one section per story. An empty workspace downloads a valid JSON array ([]) or a Markdown document with only the # Tasks Export heading.

These are the only two formats available — CSV and XML are not supported. The format is a query parameter that defaults to json, and any other value is refused with HTTP 400 and the error code UNSUPPORTED_EXPORT_FORMAT.

An export is whole-workspace and unfiltered:

  • there is no project filter and no story filter, and no date range;
  • the response is not paginated — every task the workspace’s current versions hold is in one file;
  • the endpoint is GET /api/v1/workspaces/{workspace_id}/export/tasks, and any member of the workspace may call it.

The JSON export is a pretty-printed array of task objects, one per exported task, served as application/json with UTF-8. Each object carries exactly these fields:

FieldMeaning
idThe task’s identifier
user_story_idThe story the task belongs to
titleThe task’s title
descriptionThe task’s description
statusThe task’s Kanban state
priorityThe task’s priority
labelsThe task’s labels
dependenciesThe task’s dependencies
created_atWhen the task was created
updated_atWhen the task was last updated

The Markdown export, served as text/markdown with UTF-8, starts with a # Tasks Export heading and has one ## {story} section per story, where {story} is the story’s raw text — or Untitled story when it has none. Inside a section, every task is one bullet built as - **{title}** — {description}, with the task’s labels appended as #label markers and its dependencies appended as → {resolved title}.

A dependency reference is resolved in two passes: first against the exported tasks’ ids, then against their titles compared case-insensitively and trimmed. When neither matches, the raw reference is written out unchanged.

The response carries a Content-Disposition: attachment header, so the browser downloads the file instead of rendering it: tasks-export-{workspace_id}.json for JSON and tasks-export-{workspace_id}.md for Markdown.

Only tasks that belong to a completed extraction run are exported: a run that is still pending, or that failed, contributes nothing to the file. Of a story’s completed runs, only the highest-numbered one is included — its current version, the one the story page’s version selector marks as current. Tasks produced by superseded versions never reach the file. The export always takes the current version: picking another one in the story page does not change what a workspace export contains.