Catalog
List the models and regions available to your organization — the vocabulary allowlists are written in.
Read-only lists of the models and regions your organization can use.
| Endpoint | Scope | Token owner's role |
|---|---|---|
GET /catalog/models | catalog:read | Any member |
GET /catalog/regions | catalog:read | Any member |
Why this lives on the Management API: it is the vocabulary allowlists are written in. Before a pipeline writes a project's model allowlist, it should validate every id it is about to write against this list. A management client that guesses model ids will guess wrong.
This API reflects the catalog; it never changes it. At inference time,
GET /v1/models lists what one key can
route to.
List models
GET /api/v1/mgmt/catalog/modelsThe live model catalog as the portal's Models page shows it: enabled
models only — disabled and retired models never appear. Each entry is the
public model card, the same object
GET /v1/models returns, priced at the
rate your organization is billed, plus four Management API fields: mode,
status, capabilities and regions. Ordered by id descending (the
catalog has no creation time); paginated
with limit and cursor like every other list.
Warning
Changed in 0.16.1. This response used to carry provider,
max_completion_tokens, input_modalities, output_modalities and a
pricing object of currency plus a per-1M-token rates map. Those fields
are gone, with no deprecation window (the Management API had not reached
production). Read architecture.input_modalities / output_modalities,
max_output and the per-unit pricing strings below instead.
id, name, object, created, owned_by, architecture,
top_provider, mode, status, capabilities and regions are always
present. Every other card field is omitted when the catalog has no value
for that model.
| Field | Type | Notes |
|---|---|---|
id | string | The model name to send as model and to write in allowlists (provider/model). See Models & aliases. |
name | string | Display name set by the operator, else the id. |
object | string | Always model. |
created | integer | Unix time the model was added to the catalog. |
owned_by | string | Always Token Factory. |
canonical_slug, hugging_face_id | string | OpenRouter slug and Hugging Face id, when known. |
description | string | Short model description. |
context_length, context_window | integer | Context window in tokens (the same value under its OpenRouter and product names). |
max_output | integer | Maximum output tokens (same as top_provider.max_completion_tokens). |
architecture | object | input_modalities and output_modalities (text, image, audio, video, file, embeddings) and modality (e.g. "text+image->text"), plus tokenizer / instruct_type when known. |
top_provider | object | The model's limits as served (context_length, max_completion_tokens) and is_moderated. It never names a provider. |
supported_parameters | string[] | Request parameters the model accepts. |
default_parameters | object | Default sampling values. |
supported_voices | string[] | Voices a text-to-speech model accepts. |
knowledge_cutoff | string | As published for the model. |
expiration_date | string | Announced end-of-service date, when one is set. |
pricing | object | What your organization is billed (below). |
mode | string | chat, embedding, image, tts, stt, video, rerank — which endpoints it serves. |
status | string | Provisioning status of the model, e.g. ready. |
capabilities | object | Capability flags, boolean only, e.g. {"vision": true, "tools": true}. |
regions | string[] | Regions the model is served and priced in, e.g. ["default"]. pricing is the default region price. |
pricing is the same object as on
GET /v1/models: every price is a
decimal string in USD per one unit, and unit says what the unit is.
unit | Models | Fields |
|---|---|---|
token | chat, embeddings | prompt (input token), completion (output token), input_cache_read, input_cache_write (prompt-cache tokens) |
character | text-to-speech | prompt (input character) |
image | image generation | image_output (generated image) |
second | speech-to-text | prompt (second of audio) |
second | video | video_output (second of video) |
document | rerank | prompt (document) |
A field appears only when the model has that price: an embedding model has no
completion, and when input_cache_read / input_cache_write are absent,
cached tokens are billed at prompt. A model without pricing has an
unknown price, not a free one. To quote per 1M tokens, multiply prompt
by 1,000,000.
curl -G https://portal.<domain>/api/v1/mgmt/catalog/models \
-H "Authorization: Bearer $TF_PAT" \
-d limit=200{
"data": [
{
"id": "openai/gpt-4o",
"name": "GPT-4o",
"object": "model",
"created": 1715558400,
"owned_by": "Token Factory",
"description": "OpenAI's multimodal flagship.",
"context_length": 128000,
"context_window": 128000,
"max_output": 16384,
"architecture": {
"modality": "text+image->text",
"input_modalities": ["text", "image"],
"output_modalities": ["text"]
},
"pricing": {
"unit": "token",
"prompt": "0.0000025",
"completion": "0.00001",
"input_cache_read": "0.00000125"
},
"top_provider": { "context_length": 128000, "max_completion_tokens": 16384, "is_moderated": false },
"supported_parameters": ["max_tokens", "stop", "temperature", "tool_choice", "tools", "top_p"],
"knowledge_cutoff": "2023-10",
"mode": "chat",
"status": "ready",
"capabilities": { "vision": true, "tools": true },
"regions": ["default"]
}
],
"has_more": false,
"next_cursor": null
}A model with an expiration_date is still callable until that date; plan
the move off it before then.
List regions
GET /api/v1/mgmt/catalog/regionsDerived from the model list: the distinct regions your organization's models are served in, with how many models each serves. Paginated.
| Field | Type | Notes |
|---|---|---|
id | string | The region id. |
model_count | integer | How many of the listed models this region serves. |
curl https://portal.<domain>/api/v1/mgmt/catalog/regions \
-H "Authorization: Bearer $TF_PAT"{
"data": [
{ "id": "default", "model_count": 42 }
],
"has_more": false,
"next_cursor": null
}Errors specific to the catalog
| Status | Code | When |
|---|---|---|
| 403 | insufficient_scope | Token lacks catalog:read. |
| 422 | unsupported_filter | Any query parameter other than limit/cursor. |
| 502 | upstream_unavailable | The model catalog is temporarily unavailable. Retry. |