Interactive API reference

Every endpoint, with its request and response shapes, from the same openapi.json the running control plane serves at GET /openapi.json.

The spec is checked against the router by tests/openapi.rs in both directions — a route with no spec entry fails the build, and so does a spec entry whose route no longer exists — so this cannot drift from the code the way a hand-written endpoint list does.

Against your own deployment

The control plane serves the same two routes, and there Try it out works:

GET /openapi.jsonThe spec
GET /docsSwagger UI

Both sit on the admin listener (:4001) alongside /healthz, and both are outside the session gate — a spec is not a secret and a probe target cannot hold a cookie. Everything they describe under /admin/* still requires a session and a per-route permission.

kubectl -n fastllm port-forward svc/fastllm-control 4001:4001
open https://localhost:4001/docs

Generating a client

npx @openapitools/openapi-generator-cli generate \
  -i https://your-control-plane:4001/openapi.json \
  -g typescript-fetch -o ./fastllm-client

The gateway's own endpoints are OpenAI-shaped, so an OpenAI SDK is the better client for those — see Connecting a client. This is for the admin API, which has no SDK and is where a generated client earns its keep.