---
title: "Per-operator timetable freshness and scrape schedule (backs /status)."
method: GET
path: "/v1/status/operators"
tags: ["operational"]
---

# Per-operator timetable freshness and scrape schedule (backs /status).

`GET /v1/status/operators`

## Request

- Base URL: `https://pt-api.internal.example`
- URL: `https://pt-api.internal.example/v1/status/operators`
- Auth: none declared

One row per operator (GTFS agency) in the graph data: stops, routes, trips, trips running in the next 7 days and in the planning window, timetable validity (service_start / service_end, days_left) and a status computed against today — ok | expiring (ends within `expiring_days`) | no_service (valid, but no trip in the next 7 days) | expired | unknown (no calendar). `at_risk` marks a timetable that ends before the next scheduled source check + 7 days. `feeds` carries provenance per feed (source_url, licence, when the file content last changed, quarantine reason); `units` the scrape cadence, last check, its result and the next check; `graph` the last planner rebuild and the earliest next one. On a row that is not ok (or is at_risk), `action` says what the daily freshness watchdog is doing about it — refreshing | update_pending (newer timetable fetched, live after the next rebuild) | superseded (another feed for the same network replaces this copy) | scheduled | no_new_timetable (publisher has released nothing newer) | checked (reviewed, e.g. seasonal) | removing | needs_review — and `watch` summarises the last check.

## Query parameters

- `country` string
- `status` string

## Response `200`

Operator freshness.

- object

## Other responses

- `404`: The pipeline has not produced operator_status.json yet.

---

[API](https://skmtc.dev/alltimetables/apis/european-journey-planner-api.md) · [All operations](https://skmtc.dev/alltimetables/apis/european-journey-planner-api/llms.txt) · [OpenAPI document](https://skmtc.dev/alltimetables/apis/european-journey-planner-api/revisions/3216e9384a8b?raw)
