> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qoder.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Run a schedule

> Manually trigger one Schedule Run.

`POST /api/v1/forward/schedules/{schedule_id}/run`

Creates a Schedule Run immediately without changing the Schedule's trigger policy. The endpoint returns when the Run record is created, not when execution finishes.

## Headers

| Header            | Required | Description                                   |
| ----------------- | -------- | --------------------------------------------- |
| `Authorization`   | Yes      | `Bearer <PAT>`                                |
| `Content-Type`    | No       | `application/json` if a body is sent.         |
| `Idempotency-Key` | No       | Optional idempotency key for unsafe requests. |

## Path parameters

| Parameter     | Type   | Required | Description          |
| ------------- | ------ | -------- | -------------------- |
| `schedule_id` | string | Yes      | Forward Schedule ID. |

## Example request

```bash theme={null}
curl -s -X POST 'https://api.qoder.com/api/v1/forward/schedules/sched_019f00112233445566778899aabbccdd/run' \
  -H "Authorization: Bearer $QODER_PAT"
```

## Example response

**HTTP 200 OK**

```json theme={null}
{
  "id": "srun_019f00112233445566778899aabbccdd",
  "schedule_id": "sched_019f00112233445566778899aabbccdd",
  "identity_id": "idn_019eabc123",
  "template_id": "tmpl_support",
  "session_id": null,
  "status": "pending",
  "trigger_context": {
    "type": "manual"
  },
  "error": null,
  "result_payload": null,
  "push_sink": null,
  "push_status": "skipped",
  "attempt": 1,
  "triggered_at": "2026-06-22T12:00:00Z",
  "started_at": null,
  "completed_at": null,
  "duration_ms": null,
  "created_at": "2026-06-22T12:00:00Z"
}
```

## Response fields

Returns the created Schedule Run object.

## Errors

| HTTP | Type                    | Code                      | Trigger                  |
| ---- | ----------------------- | ------------------------- | ------------------------ |
| 401  | `authentication_error`  | `authentication_required` | PAT invalid or expired.  |
| 404  | `not_found_error`       | `schedule_not_found`      | Schedule does not exist. |
| 409  | `invalid_request_error` | `schedule_archived`       | Schedule is archived.    |
| 409  | `invalid_request_error` | `schedule_not_active`     | Schedule is paused.      |

## Notes

* If the Schedule has reached `execution.max_concurrent_runs`, Forward still creates a Run with `status=skipped` and `error.type=concurrency_limit_reached`.
* Poll Get Schedule Run until `status` is `completed`, `failed`, or `skipped`.

## Related

<CardGroup cols={2}>
  <Card title="Get schedule run" icon="file-lines" href="/cloud-agents/api/forward/schedule-runs/get" />

  <Card title="List schedule runs" icon="history" href="/cloud-agents/api/forward/schedule-runs/list" />
</CardGroup>
