Why read the catalog
The Models page is a snapshot of the catalog at the time it was generated. The endpoint is the catalog. Models are added, retired and repriced without an API version bump (Reliability), so anything that picks a model at runtime — a router, a model-picker UI, a capability check before sending an image — should read it here rather than ship a copy. This endpoint is unauthenticated and cacheable (cache-control: public, max-age=300).
Every SDK calls it at client-init; it costs you nothing and draws no usage.
List
Response (OpenAI shape)
Fields
Providers and upstream deployment names are never in the response. One row is one
logical model; which backend serves it is an implementation detail that can change
mid-flight, which is exactly what makes continuity possible.
Anthropic shape
Send ananthropic-version header — as every Anthropic SDK does — and the same endpoint
answers in Anthropic’s list envelope instead, so client.models.list() type-checks:
Filtering
?wire=native|anthropic|openai|responses keeps only the models served on that wire
(native means the wire of the endpoint you are calling). An unknown value is a 400.
In PAYG mode
Withx-sideren-payment-mode: payg (see Headers) the list
requires authentication, is not cached (cache-control: private, no-store), keeps only
exactly-delivered models, and shows the rates that apply in PAYG mode.
Retrieve one
@sdn/gpt-oss-120b, sdn-gpt-oss-120b,
gpt-oss-120b and any other alias all resolve. The @ and / in a public id can go in the
path raw or URL-encoded (%40sdn%2Fgpt-oss-120b). Returns the same entry shape as the list
(or the Anthropic per-item shape with anthropic-version set).
404:
Retrieve is a validity check, so it is deliberately stricter than the chat endpoints:
the foreign-name compatibility handles that let
gpt-4o work in a chat request are not
resolved here. If you need to know what a foreign id maps to, send it to a chat endpoint
and read the model back off the response.