# Run Workflow

> Trigger a workflow run manually

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

---

## Overview

Queue a manual run of a workflow. The run executes asynchronously; the response returns immediately with a `runId` you can poll via the [run detail endpoint](https://orshot.com/docs/api-reference/workflow-run-get).

Each successful run uses one automation credit.```markdown tab="Endpoint"
https://api.orshot.com/v1/workflows/:id/run
```## Path Parameters

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

## Request```js
await fetch("https://api.orshot.com/v1/workflows/44/run", {
  method: "POST",
  headers: {
    Authorization: "Bearer <ORSHOT_API_KEY>",
  },
});
```</Tab>```json
{
  "runId": 5121,
  "status": "queued"
}
```</Tab>
</Tabs>

Returns `202 Accepted`. Poll `GET /v1/workflows/:id/runs/:runId` for progress and per-step results.

## Error Responses

### Workflow Not Runnable (400)```json
{
  "error": "Workflow is not runnable",
  "details": ["no_destination"],
  "hints": ["Add a destination step so every render is delivered somewhere."]
}
```### Plan Gated Steps (403)```json
{
  "error": "Some steps in this workflow require a higher plan",
  "code": "plan_gated"
}
```### Run Already Queued (409)```json
{
  "error": "A run is already queued"
}
```### Workflow Not Found (404)```json
{
  "error": "Not found"
}
```## Notes

- The workflow does not need to be active for a manual run; a complete draft runs fine.
- A manual run of a polling workflow reads and advances the poll cursor, exactly like a scheduled run.

## Rate Limits

- 60 requests per minute per workspace