Skip to main content
Clients that probe client.models.list() against an OpenAI-compatible base_url hit this route. Auth and the consumer slug are the same as chat.
On a Private data plane, add X-AG-Gateway-Slug as in the chat snippets. GET /v1/models returns { "object": "list", "data": [{ "id", "object": "model", "owned_by" }] }. GET /v1/models/{id} is 200 when that id is in the list, otherwise 404. Non-GET methods are 400. Extra path tails (/models/{id}/extra) are 404. This is not a forward of the provider’s /v1/models and not the admin models catalog. The list is the union of native slugs the consumer can actually call.

What is listed

For each bound registry (plus fallbacks, role policies, and load-balancing member models):
  1. If the consumer (or role) has an allow-list, those ids are candidates.
  2. If the policy is open, TrustGate expands from the provider catalog.
  3. Only native slugs are kept — no auto, no @provider/…, no pool:….
  4. A slug is kept only when the registry’s provider supports that modality (chat always; embeddings / rerank only when the provider advertises them). Catalog flags win; otherwise the slug is inferred (embed → embeddings, rerank → rerank, else chat).
owned_by is the registry provider (for example openai or anthropic). Files have no model ids and are not listed. Images ids appear only when the catalog (or allow-list) includes them and the consumer has an images-capable registry.