Models API
GET /v1/models returns the catalog available to your organization.
curl https://gw.lunaroute.com/v1/models \ -H "LUNAROUTE-API-KEY: $LUNAROUTE_API_KEY"If the request carries an anthropic-version header, the response uses the
Anthropic models shape; otherwise it is OpenAI-shaped.
Each entry carries the model id, context limits, a capabilities map (for
example vision, tools, reasoning), and per-client compatibility
metadata. The catalog is global today — the same entries for every
authenticated caller, not a per-organization entitlement.
Non-chat models are not listed here: an OpenAI-compatible client that auto-selects a model from this response must never pick one it cannot chat with. Find them on their own listings:
Decision models are the exception: they still appear in /v1/models under
their systemone capability until they get their own listing (see
System One).
Claude Desktop variant
Section titled “Claude Desktop variant”A caller that identifies itself with X-LunaRoute-Client: claude-desktop gets an
Anthropic-shaped catalog of Claude-compatible aliases instead of the normal
entry list:
curl https://gw.lunaroute.com/v1/models \ -H "Authorization: Bearer $LUNAROUTE_API_KEY" \ -H "X-LunaRoute-Client: claude-desktop"Each entry’s id is a wire alias (claude-opus-lr29) that LunaRoute translates
back to the catalog model before routing. display_name is the model’s configured
label (falling back to the canonical LunaRoute model id when none is set — note
the fallback is not the entry’s id, which here is the alias itself). Claude Desktop’s picker rejects every normal catalog name, which is why
this variant exists; see Claude Desktop for
the client side.
The header is informational only — it selects which catalog is rendered and
never changes authentication, entitlements, billing, or which models you may
call. Responses vary on it (Vary: accept-encoding, anthropic-version, X-LunaRoute-Client), so a shared cache keeps the two catalogs apart.
Every model has an alias, but this listing is filtered to models usable on
/v1/messages, so a picker entry can always be selected.
See the model catalog for what the entries mean.