List Schedule Run execution records.
GET /api/v1/forward/schedule_runs
Lists Schedule Runs for an Identity. Pass schedule_id to narrow results to one Schedule.
Headers
| Header | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <PAT or SAT> |
Query parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
identity_id | string | Yes | - | Forward Identity ID that owns the runs. |
schedule_id | string | No | - | Filter by Schedule ID. |
status | string | No | - | Filter by pending, running, completed, failed, or skipped. |
trigger_type | string | No | - | Filter by schedule or manual. |
has_error | boolean | No | - | Filter to runs with or without an error. |
limit | integer | No | 20 | Items per page. Maximum 100. |
after_id | string | No | - | Cursor for records after the given Run ID. |
before_id | string | No | - | Cursor for records before the given Run ID. |
sort_by | string | No | created_at | Sort field: created_at or triggered_at. |
order | string | No | desc | Sort direction: asc or desc. |
Example request
Example response
HTTP 200 OK
Response fields
| Field | Type | Description |
|---|---|---|
data | Array of Schedule Run object | Records on the current page. |
first_id | string|null | ID of the first run on this page. |
last_id | string|null | ID of the last run on this page. |
has_more | boolean | Whether more records remain. |
Errors
| HTTP | Type | Code | Trigger |
|---|---|---|---|
| 400 | invalid_request_error | invalid_identity | identity_id is missing or invalid. |
| 400 | invalid_request_error | invalid_request | sort_by or order is invalid, both after_id and before_id are supplied, or a cursor contains unsupported control characters. |
| 400 | invalid_request_error | invalid_limit | limit is not an integer from 1 through 100. |
| 401 | authentication_error | authentication_required | PAT or SAT invalid or expired. |
Notes
- Schedule Runs are independent resources.
- By default, results are sorted by
(created_at, run_id)in descending order. Withsort_by=triggered_at, results use(triggered_at, run_id)as a stable sort key. - Do not supply
after_idandbefore_idtogether. Cursors are interpreted under the currentsort_byandorder; restart pagination when changing the sort. - For v1 compatibility, a non-empty cursor without control characters that cannot be found under the current owner or Identity is ignored and the first page for the current filters and sort is returned. Do not depend on this fallback. Replay only
first_idorlast_idreturned for the same owner or Identity,sort_by, andorder. completed,failed, andskippedare terminal statuses.push_statusdescribes IM streaming delivery and is independent from the main runstatus.

