GET /bundles/{spaceId}/export
Export a space (subspace / app) as a JSON bundle (SpaceBundleData v1). Returns all agents, automations, projects, templates, and apps. Media items are excluded — use the ZIP export or download media separately via the media endpoints.
Base URL: https://www.taskade.com/api/v1
Authentication
Send a personal access token or an OAuth 2.0 access token as a bearer token. Create a personal access token at taskade.com/settings/api.
Authorization: Bearer tskdp_your_token_here
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
spaceId |
path | string |
Yes | The space (subspace / app) ID to export. |
Example request
curl -X GET "https://www.taskade.com/api/v1/bundles/<spaceId>/export" \
-H "Authorization: Bearer $TASKADE_TOKEN"
Responses
200 — Exported workspace bundle
| Field | Type | Required | Description |
|---|---|---|---|
ok |
boolean |
Yes | — |
item |
object |
Yes | SpaceBundleData v1 — Workspace DNA bundle. |
item.version |
string |
Yes | Bundle format version. Allowed values: 1. |
item.items |
object |
Yes | Map of bundle items keyed by ID. Each item has a type field: space-bundle-flow-item, space-bundle-project-item, space-bundle-agent-item, space-bundle-template-item, space-bundle-media-item, space-bundle-app-item, space-bundle-agent-team-item. Agent-team items name their members by SOURCE agent id in agentIds; the importer remaps them and drops any member whose agent is not also in the bundle. |
A nested field marked Yes is required whenever its parent object is present.
402 — Payment required: the workspace plan does not include app bundle export. The body carries code "PAYMENT_REQUIRED" and featureId "space.bundle.export".
| Field | Type | Required | Description |
|---|---|---|---|
ok |
boolean |
Yes | — |
message |
string |
Yes | — |
code |
string |
Yes | — |
statusMessage |
string |
Yes | — |
featureId |
string |
No | The plan entitlement the request needs, set on some PAYMENT_REQUIRED errors. |
4XX — Error description
| Field | Type | Required | Description |
|---|---|---|---|
ok |
boolean |
Yes | — |
message |
string |
Yes | — |
code |
string |
Yes | — |
statusMessage |
string |
Yes | — |
featureId |
string |
No | The plan entitlement the request needs, set on some PAYMENT_REQUIRED errors. |
Errors
Errors return an ok: false envelope. Rate limiting returns 429 with x-rate-limit-limit, x-rate-limit-remaining and x-rate-limit-reset headers. x-rate-limit-reset is the number of seconds until the window reopens. Retry-After is not sent, so schedule retries from x-rate-limit-reset; retrying sooner will fail again.
{ "ok": false, "message": "Unauthorized", "code": "UNAUTHORIZED" }
Rate limits for this version: enforced per endpoint; ceilings are not published and can change without notice. A 429 response carries x-rate-limit-limit, x-rate-limit-remaining, and x-rate-limit-reset (seconds until the window reopens). Back off from those headers rather than hardcoding numbers. Bundle import and export run under tighter limits than regular reads and writes, so schedule bulk transfers accordingly. See Rate limits.