---
title: "Data & engine health (freshness view over the pipeline)."
method: GET
path: "/v1/status"
tags: ["operational"]
---

# Data & engine health (freshness view over the pipeline).

`GET /v1/status`

## Request

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

## Response `200`

Status.

- StatusResponse
  - `ok` boolean, required: True when pipeline metrics are loaded AND the served graph is younger than the stale threshold (48 h by default). False is honest, not an outage: routing keeps working on the older graph.
  - `engine` object, required
    - `name` string, required
    - `version` string, required
  - `graph_built_at` string, nullable: When the graph the engine is SERVING was built (its tt.bin), read at request time, so a swap or rollback shows immediately. Before 2026-09-27 this was the pipeline metrics file's mtime, which advances on refreshes whose build then fails.
  - `newest_snapshot` string, nullable
  - `oldest_snapshot` string, nullable
  - `served_countries` string[], nullable: ISO codes actually loaded in the live graph (null if all pipeline countries are served). Countries only: operator units are never listed here, however much data they contribute.
  - `totals` object, required
    - `countries` integer, nullable: Number of countries SERVED, i.e. the length of `served_countries`. Until 2026-09-27 this was the pipeline's country-unit count, which includes countries whose feeds carry no service (now `countries_in_pipeline`).
    - `countries_in_pipeline` integer, nullable: Country units known to the pipeline, served or not.
    - `operators` integer, nullable: Transport operators (GTFS agencies) across everything served. Until 2026-09-27 this held the number of non-country operator units (now `operator_networks`).
    - `operator_networks` integer, nullable: Number of entries in `operators[]` (pan-European networks).
    - `feeds` integer, nullable: Feeds merged into the graph (canonical GTFS). Until 2026-09-27 this also counted licence-quarantined and conversion-pending feeds (now `feeds_in_pipeline`).
    - `feeds_in_pipeline` integer, nullable
    - `stops` integer, nullable
    - `trips` integer, nullable
  - `countries` StatusCountry[], required: One row per country, keyed uniquely by ISO `code`. Until 2026-08-26 this array also carried operator units under their domicile ISO, which put two rows with code "DE" in the response; they now live in `operators`.
    - `code` string, nullable
    - `name` string, nullable
    - `kind` 'country' | 'operator': What this row IS. "country" for every entry of `countries` (its `code` is an ISO 3166-1 alpha-2, plus XK for Kosovo); "operator" for every entry of `operators` (its `code` is non-ISO and longer than two characters, e.g. EU-FLIXBUS). Added 2026-08-26; absent on responses from an older gateway, where it should be read as "country". An operator row has NO country and none is invented for it: there is no `country` field on these rows, and no placeholder code such as "EU" or "ZZ" appears anywhere in this response.
    - `feeds` integer, nullable
    - `stops` integer, nullable
    - `trips` integer, nullable
    - `operators` integer, nullable: Transport operators (GTFS agencies) in this unit's canonical feeds. Added 2026-09-27.
    - `service_start` string, nullable
    - `horizon_end` string, nullable
    - `newest_snapshot` string, nullable
    - `served` boolean: loaded in the live engine graph
  - `operators` StatusCountry[]: Operator/network units that are not a country — a pan-European coach network covers many countries and belongs to none. Same row shape as `countries`; `code` is non-ISO by construction. Their stops/trips are included in `totals`. These units have no country at all in the pipeline (not even a domicile), so nothing in this response maps one to an ISO code. A unit with no publishable `code` is omitted from both arrays and reported in `notices` rather than emitted with a null code.
    - `code` string, nullable
    - `name` string, nullable
    - `kind` 'country' | 'operator': What this row IS. "country" for every entry of `countries` (its `code` is an ISO 3166-1 alpha-2, plus XK for Kosovo); "operator" for every entry of `operators` (its `code` is non-ISO and longer than two characters, e.g. EU-FLIXBUS). Added 2026-08-26; absent on responses from an older gateway, where it should be read as "country". An operator row has NO country and none is invented for it: there is no `country` field on these rows, and no placeholder code such as "EU" or "ZZ" appears anywhere in this response.
    - `feeds` integer, nullable
    - `stops` integer, nullable
    - `trips` integer, nullable
    - `operators` integer, nullable: Transport operators (GTFS agencies) in this unit's canonical feeds. Added 2026-09-27.
    - `service_start` string, nullable
    - `horizon_end` string, nullable
    - `newest_snapshot` string, nullable
    - `served` boolean: loaded in the live engine graph
  - `notices` object[]
    - `level` string
    - `code` string, nullable
    - `message` string
  - `observed` object: Observed operational numbers computed from the gateway's OWN request log over the last 24h. Not an SLA; null fields mean no samples yet.
    - `observed_uptime_24h` number, nullable: fraction of requests that did not 5xx (0–1)
    - `p95_ms_24h` number, nullable
    - `sample_size_24h` integer
    - `note` string
  - `source` string

---

[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)
