Action API
POST/exportBundleAPI v2

Export bundle

3 min readBundlesView as Markdown

POST /exportBundle

Export a space as a JSON bundle

Base URL: https://www.taskade.com/api/v2

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.

Http
Authorization: Bearer tskdp_your_token_here

Request body

application/json

Field Type Required Description
spaceId string Yes The space (subspace / app) ID to export.

Example request

Bash
curl -X POST "https://www.taskade.com/api/v2/exportBundle" \
  -H "Authorization: Bearer $TASKADE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"spaceId":"<spaceId>"}'

Responses

200 — Default response

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.

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.

Json
{ "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. If you need sustained throughput, prefer batching (operations like /createTask accept arrays) over tightening polling loops. See Rate limits.