# Update Workflow

> Update a workflow's steps, status or details

- **URL**: https://orshot.com/docs/api-reference/workflow-update

---

## Overview

Update any part of a workflow: rename it, replace its steps, or change its status (this is also how you activate, pause and archive). Only the fields you send are changed. `PUT` works identically to `PATCH`.

Scheduling is server-managed: when steps or status change, the next run time is recomputed for you.```markdown tab="Endpoint"
https://api.orshot.com/v1/workflows/:id
```## Path Parameters

| Parameter | Type    | Required | Description                   |
| --------- | ------- | -------- | ----------------------------- |
| `id`      | Integer | Yes      | The unique ID of the workflow |

## Request Body

All fields are optional.

| Parameter     | Type   | Description                                                                                   |
| ------------- | ------ | ---------------------------------------------------------------------------------------------- |
| `name`        | String | New name, up to 200 characters                                                                  |
| `description` | String | New description                                                                                 |
| `steps`       | Array  | Full replacement steps array (validated the same way as create)                                 |
| `status`      | String | `draft`, `active`, `paused` or `archived`. Activating enforces the same rules as create         |
| `metadata`    | Object | Merged into the stored metadata. Server-managed keys (`health`, `poll`, `share`) are ignored    |

## Request```js
await fetch("https://api.orshot.com/v1/workflows/44", {
  method: "PATCH",
  headers: {
    "Content-Type": "application/json",
    Authorization: "Bearer <ORSHOT_API_KEY>",
  },
  body: JSON.stringify({
    status: "active",
  }),
});
```</Tab>```json
{
  "workflow": {
    "id": 44,
    "name": "Renders from Google Sheets",
    "status": "active",
    "next_run_at": "2026-07-11T09:10:00.000Z",
    "...": "..."
  },
  "warnings": []
}
```</Tab>
</Tabs>

## Error Responses

### Invalid Workflow (400)```json
{
  "error": "Invalid workflow",
  "details": ["Step 2 (render): templateId is required"]
}
```### Missing Connection (400)

Returned when activating a workflow whose provider connections are not connected yet.```json
{
  "error": "Connect your Google Drive account before activating this workflow",
  "code": "missing_connection"
}
```### Active Workflow Limit (403)```json
{
  "error": "Active workflow limit reached: your plan allows 5 active workflows across your workspaces. Pause another workflow or upgrade to activate this one."
}
```### Workflow Not Found (404)```json
{
  "error": "Not found"
}
```## Notes

- Edits to an already-active workflow (a rename, a step tweak) are never blocked by activation rules; only the flip from another status to `active` is gated.
- Sharing cannot be changed here; use the [Update Workflow Sharing](https://orshot.com/docs/api-reference/workflow-sharing-post) endpoint.

## Rate Limits

- 60 requests per minute per workspace