SovrGPT Docs
API

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/models therefore 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/completions answer 404 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

FieldTypeDescription
idstringModel ID (use it as model in chat/completions).
objectstringAlways "model".
createdintegerUnix timestamp of model activation.
owned_bystringAlways "sovrgpt".

SovrGPT extensions

FieldTypeDescription
kindenumchat / embedding / rerank / tts / stt — tells you which endpoint addresses this model (/v1/chat/completions, /v1/embeddings, /v1/rerank, /v1/audio/speech, /v1/audio/transcriptions).
tierenumOnly for kind: "chat": default / balanced / reasoning / vision / coder-mini / llama.
display_namestringHuman-friendly name for UIs.
subtitlestringShort subtitle for pickers.
capabilitiesobject1–5 scales for reasoning, coding, vision, speed, german. Picker UIs turn these into stars or bars.
accepts_visionbooleanTrue if the model accepts images in multipart format.
context_windowintegerContext 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.
licensestringLicence label (Apache 2.0, Llama Community License, …).
quality_indexinteger | nullIndependent quality index. null means "not tracked by the source" — we do not estimate a value. See the note below.
quality_index_sourcestringSource of the index. Omitted when quality_index is null.
quality_index_as_ofstringDate the index was retrieved (ISO 8601). Omitted when quality_index is null.
origin_vendorstringThe organisation that published the weights (e.g. Google DeepMind).
origin_countrystringCountry of origin of the weights (ISO 3166 alpha-2, e.g. US).
lifecycleenumactive / legacy / planned — see below.
lifecycle_notestringShort note about the phase-out. Only set when lifecycle: "legacy".
cold_start_hintstringHuman-readable hint about the expected cold-start duration.
accepts_toolsbooleanTrue 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_levelsarrayThe 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_remotebooleanOnly 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)

ValueMeaning
activeThe recommended choice for this role.
legacyStill 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.
plannedDecided, 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 id with the org-model: prefix is the model ID for /v1/chat/completions — exactly like a catalogue ID.
  • owned_by: "org" instead of sovrgpt: 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_tools is false and effort_levels is 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:

  1. 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.
  2. lifecycle: "planned" — decided but not yet provisioned; it never appears in this list.
  3. 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.

GET /v1/models