Every page has a JSON twin

The API behind the console, and the one rule it follows.

Every read in this console has a JSON endpoint behind it, under /api. They exist so the console is not the only way to ask, and because a page whose data you cannot fetch is a page you cannot check.

GET/api/projectsrun it →

Every project the platform knows about.

GET/api/deploymentsrun it →

The delivery index: what is deployed, where, at which commit.

GET/api/environmentsrun it →

The environment axis — each environment and what runs in it.

GET/api/buildsrun it →

Every build the platform remembers, newest first.

GET/api/platformrun it →

The construct catalogue: resource types, component types, traits, workflows.

GET/api/upgradesrun it →

What is behind, what is held on purpose and why.

note

A summary endpoint returns a summary. /api/builds/<run>/tests deliberately omits every captured output line — it is the cheap answer to "did the tests pass", and it once returned ten complete case objects because slowest was passed through whole.

The full generated reference lives at /api-docs, which is where FastAPI's Swagger UI was moved to when /docs became the documentation section.