---
title: "Undeploy Workflow"
method: DELETE
path: "/api/v1/workflows/{id}/deploy"
tags: ["Workflows"]
---

# Undeploy Workflow

`DELETE /api/v1/workflows/{id}/deploy`

Take the workflow offline. API execution stops and schedules, webhooks, and other deployment side effects are removed. Deployment versions are retained, so the workflow can be deployed again later. Requires admin permission on the workflow's workspace. Returns 404 when the workflow does not exist or you do not have access to it.

## Path parameters

- `id` string, required

## Response `200`

Workflow undeployed successfully.

- object
  - `data` WorkflowDeployment — Deployment state of a workflow after a deploy, undeploy, or rollback operation.
    - `id` string — Unique workflow identifier.
    - `isDeployed` boolean — Whether the workflow is deployed and available for API execution after the operation.
    - `deployedAt` string, date-time, nullable — ISO 8601 timestamp of the active deployment. null after an undeploy.
    - `version` integer — The deployment version that is now active. Omitted for undeploy.
    - `warnings` string[] — Non-fatal warnings. Present when trigger, schedule, or MCP side-effect sync is still in progress or needs a redeploy.
  - `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.
- `423` — The workflow is locked and cannot be modified.
- `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)
