GET /v1/models
Query every active model.
Lists every model enabled for the calling org.
This list is org-specific. An org owner or admin decides under Settings → Models which models are usable inside their organisation.
GET /v1/modelstherefore returns exactly the models this key may address — two keys belonging to different orgs can see different lists.A model missing here makes
POST /v1/chat/completionsanswer404 model_not_found. There is deliberately no silent downgrade to a different model — otherwise a client could not tell that it received an answer from something else. Reload the list on a 404 instead of hard-wiring model IDs.
curl https://sovrgpt.com/api/v1/models \
-H "Authorization: Bearer $SOVR_KEY"Response
{
"object": "list",
"data": [
{
"id": "gemma-4-12b",
"object": "model",
"created": 1715520000,
"owned_by": "sovrgpt",
"tier": "default",
"display_name": "Gemma 4 12B",
"subtitle": "Fast answers · multimodal-capable",
"capabilities": {
"reasoning": 3,
"coding": 3,
"vision": 3,
"speed": 5,
"german": 4
},
"accepts_vision": true,
"accepts_tools": true,
"context_window": 262144,
"license": "Apache 2.0",
"quality_index": 22,
"quality_index_source": "Artificial Analysis Intelligence Index",
"quality_index_as_of": "2026-08-08",
"origin_vendor": "Alibaba",
"origin_country": "CN",
"lifecycle": "active",
"cold_start_hint": "usually <5 s when warm, cold start measured at ~4 min"
},
{
"id": "qwen3.8-27b",
"object": "model",
"owned_by": "sovrgpt",
"tier": "balanced",
"display_name": "Qwen 3.8 27B",
"subtitle": "More depth, acceptable latency",
"license": "Apache 2.0"
}
/* … further tiers … */
]
}Fields
Standard OpenAI fields
| Field | Type | Description |
|---|---|---|
id | string | Model ID (use it as model in chat/completions). |
object | string | Always "model". |
created | integer | Unix timestamp of model activation. |
owned_by | string | Always "sovrgpt". |
SovrGPT extensions
| Field | Type | Description |
|---|---|---|
kind | enum | chat / embedding / rerank / tts / stt — tells you which endpoint addresses this model (/v1/chat/completions, /v1/embeddings, /v1/rerank, /v1/audio/speech, /v1/audio/transcriptions). |
tier | enum | Only for kind: "chat": default / balanced / reasoning / vision / coder-mini / llama. |
display_name | string | Human-friendly name for UIs. |
subtitle | string | Short subtitle for pickers. |
capabilities | object | 1–5 scales for reasoning, coding, vision, speed, german. Picker UIs turn these into stars or bars. |
accepts_vision | boolean | True if the model accepts images in multipart format. |
context_window | integer | Context window in tokens — the ceiling for input and output combined. Ranges from 16,384 to 262,144 across the catalog, a factor of 16. ⚠️ An over-long request does not fail, it is silently truncated upstream — size max_tokens so that input + max_tokens stays below this value. See the note below. |
license | string | Licence label (Apache 2.0, Llama Community License, …). |
quality_index | integer | null | Independent quality index. null means "not tracked by the source" — we do not estimate a value. See the note below. |
quality_index_source | string | Source of the index. Omitted when quality_index is null. |
quality_index_as_of | string | Date the index was retrieved (ISO 8601). Omitted when quality_index is null. |
origin_vendor | string | The organisation that published the weights (e.g. Google DeepMind). |
origin_country | string | Country of origin of the weights (ISO 3166 alpha-2, e.g. US). |
lifecycle | enum | active / legacy / planned — see below. |
lifecycle_note | string | Short note about the phase-out. Only set when lifecycle: "legacy". |
cold_start_hint | string | Human-readable hint about the expected cold-start duration. |
accepts_tools | boolean | True if the model accepts a tools array. When false, a request carrying tools fails hard (HTTP 400) — it does not fall back to a text answer. Check this before attaching tool definitions. |
effort_levels | array | The reasoning-effort levels measured for this model (low / medium / high) that reasoning_effort accepts in /v1/chat/completions. An empty array means there is no effective control; a value sent anyway is not translated. Not every model offers all three. |
is_remote | boolean | Only on org-owned entries (see below): the endpoint belongs to your organisation and sits outside SovrGPT's EU sovereignty. |
About the context window
This value is the model's hard ceiling for input plus output combined. It is
therefore the one value in this list you need in order to size max_tokens at
all.
🔴 Exceeding it does not announce itself. /v1/chat/completions forwards
your request to the inference server unchanged; if it is too long, it is
silently truncated there — you get HTTP 200 and an answer that never saw the
part of your prompt that was cut off. There is no error code for it. So do the
arithmetic yourself:
input tokens + max_tokens < context_window⚠️ The value differs per model and the spread is wide. Between qwen3.5-9b-deepseek-v4-flash (16,384) and gemma-4-12b (262,144) lies a factor of 16. Switching an integration from one model to another also switches its
context budget — see Migration.
📌 A small window is usually a hardware limit, not a product decision. The larger a model's weights on the card, the less room is left for the KV cache — and that is what sets the window. If you need a lot of context, use qwen3.8-27b (131,072) or gemma-4-12b (262,144).
About the quality index
The source is the Artificial Analysis Intelligence Index. It is meaningful precisely because it measures every model in one test setup — the values are therefore comparable against each other, unlike numbers taken from each vendor's own model card.
⚠️ Two limits that come with it: the index aggregates English-language
tests and says nothing about German language quality. And it is a
snapshot — which is why we always ship quality_index_as_of alongside it.
Not every model is listed there; in that case quality_index is null, and we
deliberately do not substitute a stand-in value.
About the lifecycle (lifecycle)
| Value | Meaning |
|---|---|
active | The recommended choice for this role. |
legacy | Still fully usable and addressable through the API, but no longer the recommended choice and phasing out over the medium term. There is no hard shutdown date — existing integrations keep running unchanged. lifecycle_note usually names the successor. |
planned | Decided, but not yet provisioned. Does not appear in this list and is not addressable. |
If you are planning for the long term, filter on lifecycle instead of
hard-wiring model IDs.
OpenAI clients ignore unknown fields — every extension is additive.
Audio models (TTS/STT) in the list
The speech models appear here too, with kind: "tts" and kind: "stt" — so you
can query programmatically which voice engines are available:
{ "id": "supertonic-3", "kind": "tts", "display_name": "Supertonic 3 — Text-to-Speech" }
{ "id": "cosyvoice-3", "kind": "tts", "display_name": "CosyVoice 3 — Expressive TTS + Voice-Cloning" }
{ "id": "voxtral-mini-transcribe", "kind": "stt", "display_name": "Voxtral Mini Transcribe — Speech-to-Text" }You then pass the matching id as model to POST /v1/audio/speech or
/v1/audio/transcriptions — see the Audio API.
Your organisation's own models
If your organisation registers its own OpenAI-compatible endpoint under Settings → Providers (your own address, your own model name, your own display name), it appears here like any other model — recognisable by:
{
"id": "org-model:8b2f…",
"owned_by": "org",
"kind": "chat",
"tier": "remote",
"is_remote": true,
"accepts_tools": false
}- The
idwith theorg-model:prefix is the model ID for/v1/chat/completions— exactly like a catalogue ID. owned_by: "org"instead ofsovrgpt: the endpoint is yours, not ours.- Requests to such a model leave SovrGPT's EU sovereignty and go straight to the registered address; that provider's privacy policy applies.
accepts_toolsisfalseandeffort_levelsis empty — nothing has been measured across a third-party endpoint, and we do not promise what we have not verified.
Only enabled entries appear. A paused or deleted entry disappears from the
list, and /v1/chat/completions answers HTTP 404 model_not_found for its
ID — not with a silent substitute.
Model not in the list?
Three reasons, to be checked in this order:
- The org has hidden it. An owner or admin curates under Settings → Models which models the team sees. The most common cause — and the only one you cannot see from the outside.
lifecycle: "planned"— decided but not yet provisioned; it never appears in this list.- An org-owned entry is paused or deleted (see above) — or the server has no encryption key configured, in which case org-owned entries are not served at all.
Filters / pagination
Currently no filters. The list is short (10 entries or fewer), so pagination
is unnecessary. Should more than 100 models ever be active, ?limit=/?after=
will arrive in the same shape as OpenAI's.
Caching
Responses change rarely (at most one update per week). We recommend client-side caching with a TTL of one hour. There is no push on model changes — clients should reload the list after a 401 or 404.