Plan runs V5 (beta)
Check whether each scheduled run of a plan happened on time.
For every promised time (run) of a plan, see whether it ran, was skipped, was missed or is still upcoming. It uses the same basis as the "Plan runs" view on screen. This path is available only to accounts where multiple plans are open (otherwise 404 PLAN_NOT_FOUND).
Endpoints
-
GET
/v5/api/plans/{plan_id}/runsRuns (newest first) with counts per state
Run list
Query: state (ran, skipped, missed, upcoming), from and to (scheduled time range, ISO 8601 or YYYY-MM-DD), cursor and limit. The default range is the last 14 days and a range is at most 31 days. Newest first, with upcoming runs at the front. next_cursor is the scheduled time (epoch seconds); pass it as cursor to get earlier runs. counts covers the whole range regardless of filtering.
curl 'https://www.hashscraper.com/v5/api/plans/512/runs?from=2026-09-01&to=2026-10-04&state=skipped&limit=50' \
-H 'Authorization: Bearer YOUR_API_KEY'{
"result": "success",
"version": "v5",
"request_id": "req_5a8c1f1c-9b2d-4e7c-9abf-3f7e0a4d1b21",
"elapsed_sec": 0.0123,
"count": 5,
"next_cursor": null,
"data": {
"plan_id": "512",
"source": "ledger",
"from": "2026-09-01T00:00:00+09:00",
"to": "2026-10-04T23:59:59+09:00",
"counts": {
"ran": 1,
"skipped": 1,
"missed": 1,
"upcoming": 2
},
"runs": [
{
"scheduled_at": "2026-10-12T09:00:00+09:00",
"state": "upcoming",
"reason": null,
"dataset_id": null
},
{
"scheduled_at": "2026-10-05T09:00:00+09:00",
"state": "upcoming",
"reason": null,
"dataset_id": null
},
{
"scheduled_at": "2026-09-28T09:00:00+09:00",
"state": "ran",
"reason": null,
"dataset_id": 239758028
},
{
"scheduled_at": "2026-09-21T09:00:00+09:00",
"state": "skipped",
"reason": "insufficient_credit",
"dataset_id": null
},
{
"scheduled_at": "2026-09-14T09:00:00+09:00",
"state": "missed",
"reason": "expired",
"dataset_id": null
}
]
}
}States and reasons
| state | reason | Meaning |
|---|---|---|
ran | — | It ran. dataset_id is that collection. |
skipped | already_running | Skipped because the previous collection was still running. |
skipped | insufficient_credit | Skipped because of insufficient credits. |
skipped | ticket_expired, no_service_ticket, service_ticket_invalid | Skipped because of a ticket problem. |
missed | expired | Closed because it was too late. |
missed | not_recorded | The runner did not record it. |
upcoming | — | Not yet. Includes future runs and runs that just passed and are waiting for a result (about 10 minutes). |
Basis of the judgment: source
source in the response tells you what the plan was judged on.
| source | Meaning |
|---|---|
ledger | A plan run by the plan runner. Read from the run records. A past scheduled time without a record is missed. |
screen | Plan 1 running the old way. Judged by matching dataset times. There is no basis for why a run was skipped, so skipped never appears. |
none | A plan without runs (its conditions are set separately but the runner is not running it yet). runs is an empty array. |
Limits to know
- The evidence for a run skipped because it overlapped a previous collection is kept for only 2 days. After two days the same run shows as
missedinstead ofskipped. - A run skipped for maintenance leaves no evidence and shows as
missed(expired). - Only runs after the plan was turned on or last edited are counted. The time it was off cannot be known.