SovrGPT Docs
API

GET /v1/models

Query the SovrGPT model list: model IDs, context windows, tool and image support, reasoning levels, provenance and lifecycle for every model.

Lists every model the calling key may use: chat, embeddings, re-ranking, speech and decisions. The response follows the OpenAI schema and adds fields that help you pick a suitable model.

The list is per organisation. Owners and admins decide under Settings → Models which chat models are usable, so two keys from different organisations can see different lists. A catalogue model your organisation has hidden answers POST /v1/chat/completions with 404 model_not_found, and so does an unknown ID (see headers). 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",

      "kind": "chat",
      "tier": "default",
      "display_name": "Gemma 4 12B",
      "subtitle": "Alltag – mit sehr großem Kontext",
      "capabilities": {
        "reasoning": 3,
        "coding": 3,
        "vision": 4,
        "speed": 4,
        "german": 4
      },
      "accepts_vision": true,
      "accepts_tools": true,
      "effort_levels": [],
      "context_window": 262144,
      "license": "Apache 2.0",
      "attribution": "Powered by Gemma",
      "quality_index": 22,
      "quality_index_source": "Artificial Analysis Intelligence Index",
      "quality_index_as_of": "2026-08-08",
      "origin_vendor": "Google DeepMind",
      "origin_country": "US",
      "lifecycle": "active",
      "cold_start_hint": "warm <10 s, Cold-Start gemessen ~5,5–9,5 min (332–574 s)"
    },
    {
      "id": "stackit-qwen3.8-27b",
      "object": "model",
      "owned_by": "sovrgpt",
      "tier": "hosted",
      "display_name": "Qwen 3.8 27B",
      "subtitle": "Ohne Kaltstart · Betrieb in Deutschland",
      "license": "Apache 2.0"
    }
    /* … further models … */
  ]
}

Fields

Standard OpenAI fields

FieldTypeDescription
idstringModel ID; use it as model in chat/completions.
objectstringAlways "model".
createdintegerTime of the request (Unix seconds). Required by the OpenAI schema, carries no further meaning.
owned_bystring"sovrgpt"; "org" for your organisation's own models.

SovrGPT extensions

FieldTypeDescription
kindenumchat / embedding / rerank / tts / stt / decision: which endpoint addresses the model (/v1/chat/completions, /v1/embeddings, /v1/rerank, /v1/audio/speech, /v1/audio/transcriptions, /v1/decisions).
tierenumOnly for kind: "chat": default / balanced / reasoning / vision / coder-mini / llama for self-hosted models, hosted for partner-operated models, remote for your organisation's own models.
display_namestringDisplay name.
subtitlestringShort subtitle for pickers.
descriptionstringLonger description.
capabilitiesobject1–5 scales for reasoning, coding, vision, speed, german.
accepts_visionbooleantrue if the model accepts images (image_url in the content array).
accepts_audiobooleantrue if the model accepts audio as input.
accepts_toolsbooleantrue if the model handles tool calls (tools). When false, this has not been verified: a request carrying tools may fail with HTTP 400, or the model may not call any tools. Check before attaching tools.
effort_levelsarrayThe reasoning levels measured for this model (low / medium / high) for reasoning_effort in /v1/chat/completions. An empty array means no effective control; a value sent anyway is not translated.
context_windowintegerContext window in tokens: the ceiling for input and output combined. Ranges from 16,384 to 1,000,000 across the catalogue. An over-long request does not fail; it is silently truncated, see below.
licensestringLicence (Apache 2.0, MIT, Llama CL, …).
attributionstringRequired notice or operation, e.g. Built with Llama, or the data centre for partner-operated models.
quality_indexinteger | nullIndependent quality index. null means "not tracked by the source"; we do not estimate a value.
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_vendorstringWho published the weights (e.g. Google DeepMind).
origin_countrystringCountry of origin of the weights (ISO 3166 alpha-2, e.g. US).
lifecycleenumactive / legacy, see below.
lifecycle_notestringNote about the phase-out. Only set when lifecycle: "legacy".
cold_start_hintstringExpected cold-start duration as text.
betabooleanOnly present (true) while the model is still being trialled.
pricingobjectSales price in euros (net) per 1M units, { "currency": "EUR", "unit": "token", "input_per_million": 5.3, "output_per_million": 26.1 }. unit is token (chat, embeddings, rerank), second (transcription) or character (speech). null values: no price on file, or no output billed. Absent for the Decision Engine (it costs the price of its runtime) and while the price list is not published. The full list: GET /v1/pricing.
dimensionsintegerOnly for kind: "embedding": default vector length (e.g. 1024 for bge-m3, 4096 for the STACKIT embedders). Which shorter lengths a model returns through the dimensions parameter is listed below.
is_remotebooleanOnly on your organisation's own models, see below.

The text fields (subtitle, description, cold_start_hint) are returned in German. OpenAI clients ignore unknown fields; every extension is additive.

About the context window

This value is the model's hard ceiling for input plus output. You need it to size max_tokens sensibly.

Exceeding it does not announce itself. /v1/chat/completions forwards your request to the model 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 spread is wide: from 16,384 (qwen3.5-9b-deepseek-v4, llama-3.1-8b) to 1,000,000 (tensorx-deepseek-v4.1-flash). Switching an integration to another model also switches its context budget, see Migration. Models with a lot of context include gemma-4-12b (262,144), stackit-qwen3.8-27b (262,144) and tensorx-deepseek-v4.1-flash (1,000,000).

About the quality index

The source is the Artificial Analysis Intelligence Index. It measures every model in the same test setup, so the values are comparable with each other, unlike figures from vendors' own model cards.

Two limits: the index is based on 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. Models it does not list have quality_index: null.

About the lifecycle (lifecycle)

ValueMeaning
activeThe recommended choice for this role.
legacyStill fully usable, but no longer recommended and phasing out over the medium term. There is no fixed shutdown date; lifecycle_note usually names the successor.

When a model is withdrawn, it disappears from the list and /v1/chat/completions answers 404 model_withdrawn with the successor. If you plan for the long term, filter on lifecycle instead of hard-wiring model IDs.

Embedding, audio and decision models

These models are in the list too, with the matching kind: bge-m3, nomic-embed-code, stackit-qwen3-vl-embedding-8b and stackit-e5-mistral-7b (embedding), bge-reranker-base (rerank), sovr-decision-v1 and sovr-decision-v2 (decision), and the speech models.

The embedding models compared (POST /v1/embeddings):

Model IDOperationDefault lengthdimensions parameterInput per text
bge-m3 (default)self-operated, EU1024ignored–
nomic-embed-codeself-operated, EU3584ignored–
stackit-qwen3-vl-embedding-8b🇩🇪 STACKIT, no cold start4096256, 384, 768, 1024 or 1536 (truncated and re-normalised); 4096 or omit it for the full lengthup to 32,000 tokens
stackit-e5-mistral-7b🇩🇪 STACKIT, no cold start4096only 4096 or omittedtrained for up to 4,096 tokens according to the model card

Without model, and for the OpenAI names (text-embedding-3-small etc.), bge-m3 keeps doing the work, so your existing vectors stay in their space. Any other dimensions value than those in the table ends in a 400 (param: "dimensions") for the STACKIT embedders. They accept at most 2,048 texts per request. With stackit-e5-mistral-7b, prefix search queries with a task line (Instruct: … Query: …) and leave documents as they are. The STACKIT embedders only appear when they are set up on the server; otherwise /v1/embeddings answers 503 model_not_available for them.

The speech models:

{ "id": "supertonic-3",  "kind": "tts", "display_name": "Supertonic 3 — Text-to-Speech" }
{ "id": "cosyvoice-3",   "kind": "tts", "display_name": "CosyVoice 3 — Ausdrucksstarkes TTS + Stimmklon" }
{ "id": "voxtral-mini-tts", "kind": "tts", "display_name": "Voxtral Mini TTS — Stimmenkatalog" }
{ "id": "voxtral-mini-transcribe", "kind": "stt", "display_name": "Voxtral Mini Transcribe — Speech-to-Text" }

Pass the id as model to POST /v1/audio/speech or /v1/audio/transcriptions; see the Audio API. These entries do not depend on the organisation's model selection.

Your organisation's own models

If your organisation registers its own OpenAI-compatible endpoint under Settings → Provider keys (your own address, model name and display name), it appears here like this:

{
  "id": "org-model:8b2f…",
  "owned_by": "org",
  "kind": "chat",
  "tier": "remote",
  "is_remote": true,
  "accepts_tools": false
}
  • Use the id with the org-model: prefix in /v1/chat/completions like a catalogue ID.
  • owned_by: "org": the endpoint is yours.
  • Requests to such a model go straight to the registered address, outside our operation. The privacy policy of that provider applies.
  • accepts_tools is false; effort_levels and context_window are absent. We make no promises about third-party endpoints we have not verified.

Only enabled entries appear. A paused or deleted entry disappears from the list, and /v1/chat/completions answers 404 model_not_found for its ID.

Model not in the list?

Possible reasons, to be checked in this order:

  1. The organisation has hidden it. Owners and admins choose under Settings → Models which models the team sees. This is the most common reason, and you cannot see it from the outside.
  2. It is planned (lifecycle: "planned") but not yet provisioned. Such models never appear in the list.
  3. It has been withdrawn. /v1/chat/completions then answers 404 model_withdrawn and names the successor.
  4. One of the organisation's own models is paused or deleted, or the server lacks the encryption key. In that case, own models are not served at all.

Filters and pagination

There are no filters and no pagination; the list currently has about 30 entries. If pagination arrives, it will follow the OpenAI pattern (?limit=/?after=).

Caching

The list changes rarely. Cache it on the client for about an hour. We do not push changes; reload the list after a 404 (model_not_found, model_withdrawn).

GET /v1/models