---
title: "Export Workflow"
method: GET
path: "/api/v1/workflows/{id}/export"
tags: ["Workflows"]
---

# Export Workflow

`GET /api/v1/workflows/{id}/export`

Export a workflow as a portable JSON envelope that POST /api/v1/workflows/import accepts verbatim. Credential and password field values stored on blocks are redacted from the payload, while `{{ENV_VAR}}` references and block positions are preserved. Workflow variables are returned as stored — they are plaintext configuration readable by anyone with workspace read, and secrets belong in environment variables, which travel as unresolved references. Requires read permission on the workflow's workspace. Returns 404 when the workflow does not exist or you do not have access to it. Workspace-scoped bindings (knowledge bases, workspace files, channels, projects, folders, MCP servers) are cleared, since those ids do not resolve in another workspace — an imported copy needs them re-selected.

## Path parameters

- `id` string, required

## Response `200`

The workflow export envelope.

- object
  - `data` WorkflowExport — A portable workflow export envelope. Pass this object straight back to POST /api/v1/workflows/import to recreate the workflow. Credential and password field values stored on blocks are redacted; `{{ENV_VAR}}` references and workflow variables are preserved as stored.
    - `version` '1.0' — Export format version.
    - `exportedAt` string, date-time — ISO 8601 timestamp of when the export was generated.
    - `workflow` object — Identity of the exported workflow at the time of export.
      - `id` string
      - `name` string
      - `description` string, nullable
      - `workspaceId` string, nullable
      - `folderId` string, nullable
    - `state` WorkflowExportState — The workflow graph. Block, edge, loop and parallel identifiers are regenerated on import, so a payload can be imported repeatedly without colliding with its source workflow.
      - `blocks` object — Map of block id to block definition, including canvas position and sub-block values.
      - `edges` object[] — Connections between blocks.
      - `loops` object — Loop container definitions, keyed by loop id.
      - `parallels` object — Parallel container definitions, keyed by parallel id.
      - `metadata` object — The source workflow's name, description and export timestamp.
        - `name` string
        - `description` string
        - `exportedAt` string, date-time
      - `variables` object — Workflow-level variables, keyed by variable id. Emitted as stored — treat as plaintext configuration, not a secret store.
  - `limits` Limits — Rate limit and usage information included in every API response.
    - `workflowExecutionRateLimit` object — Current rate limit status for workflow executions.
      - `sync` RateLimitBucket — Rate limit status for a specific execution type.
        - `requestsPerMinute` integer — Maximum number of requests allowed per minute.
        - `maxBurst` integer — Maximum number of concurrent requests allowed in a burst.
        - `remaining` integer — Number of requests remaining in the current rate limit window.
        - `resetAt` string, date-time — ISO 8601 timestamp when the rate limit window resets.
      - `async` RateLimitBucket — Rate limit status for a specific execution type.
        - `requestsPerMinute` integer — Maximum number of requests allowed per minute.
        - `maxBurst` integer — Maximum number of concurrent requests allowed in a burst.
        - `remaining` integer — Number of requests remaining in the current rate limit window.
        - `resetAt` string, date-time — ISO 8601 timestamp when the rate limit window resets.
    - `usage` object — Current billing period usage and plan limits.
      - `currentPeriodCost` number — Total spend in the current billing period in USD.
      - `limit` number — Maximum allowed spend for the current billing period in USD.
      - `plan` string — Your current subscription plan (e.g., free, pro, team).
      - `isExceeded` boolean — Whether the usage limit has been exceeded. Executions may be blocked when true.

## Other responses

- `400` — Invalid request parameters. Check the details array for specific validation errors.
- `401` — Invalid or missing API key. Ensure the X-API-Key header is set with a valid key.
- `404` — The requested resource was not found. Verify the ID is correct and belongs to your workspace.
- `429` — Rate limit exceeded. Wait for the duration specified in the Retry-After header before retrying. The X-RateLimit-* headers accompany every response from an authenticated v1 request — success and error alike — and are omitted only when the request fails authentication, since no rate-limit bucket is consulted in that case.

---

[API](https://skmtc.dev/simstudioai/apis/sim-api.md) · [All operations](https://skmtc.dev/simstudioai/apis/sim-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/simstudioai/sim-api/revisions/66a471c5b1df/schema)
