Naar de inhoud
Chat Completions

Chat Completions

POST /v1/chat/completions accepteert een gesprek en geeft het volgende bericht van het model terug in het OpenAI Chat Completions-formaat. Gebruik het vanuit elke OpenAI SDK of via gewone HTTP; deze pagina is de referentie per veld.

POST https://api.shannon-ai.com/v1/chat/completions

De kleinste aanvraag bestaat uit een model-id en één gebruikersbericht.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

response = client.chat.completions.create(
    model="shannon-3",
    messages=[{"role": "user", "content": "Say hello in one sentence."}],
)

print(response.choices[0].message.content)

Het antwoord is één JSON-object:

200 JSON
{
  "id": "chatcmpl-5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
  "object": "chat.completion",
  "created": 1791625200,
  "model": "shannon-3",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello, it is good to meet you.",
        "reasoning_content": "The user wants a greeting in one sentence. Keep it short and friendly."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 1184,
    "completion_tokens": 46,
    "total_tokens": 1230
  }
}

Headers

Request-headers

Header Waarde Beschrijving
Authorization Bearer YOUR_API_KEY Je API-sleutel. x-api-key: YOUR_API_KEY wordt op elk endpoint in plaats daarvan geaccepteerd.
Content-Type application/json Verplicht. Elke andere waarde geeft 415 terug.
x-request-id Optioneel. Je eigen id voor de aanvraag. Hij komt ongewijzigd terug in het antwoord.

Antwoordheaders

Header Beschrijving
x-request-id Op elk antwoord, ook bij fouten en streams: de waarde die je hebt meegestuurd, of 12 hexadecimale tekens als je niets hebt meegestuurd. Vermeld hem als je een probleem meldt.
content-type application/json, of text/event-stream als stream true is.

Request-velden

Alleen messages is verplicht. De kolom Toegepast door noemt de modellen waarop een veld het antwoord verandert. De gehoste open-weight modellen zijn de twaalf id's uit de modellijst; de Shannon 3-familie is shannon-3, shannon-3-pro, shannon-3.1 en shannon-3.1-pro. Modellen en prijzen

Veld Type Standaard Beschrijving Toegepast door
model string shannon-1.6-lite Het model dat antwoordt: een id uit de modellijst. Stuur het mee met elke aanvraag. Hoofdletters maken niet uit. Een id dat niet is gepubliceerd, geeft 400 unknown model terug. Alle modellen
messages array Verplicht. Het gesprek, oudste bericht eerst. Zie Berichten hieronder. Alle modellen
stream boolean false true stuurt het antwoord als server-sent events terwijl het wordt geschreven. Alle modellen
max_tokens integer 4096 Bovengrens van het antwoord, in tokens. Een waarde buiten 1 tot 65,536 wordt naar dat bereik verplaatst. Het is ook het bedrag dat van je saldo wordt gereserveerd zolang de aanvraag loopt. Zie Outputlengte hieronder. Gehoste open-weight modellen, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
max_completion_tokens integer Hetzelfde als max_tokens. Als beide worden meegestuurd, wordt max_tokens gebruikt. Gehoste open-weight modellen, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
temperature number Sampling-temperatuur. Op de gehoste open-weight modellen is de standaardwaarde 1 en blijven waarden tussen 0 en 2. Gehoste open-weight modellen, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number 0.95 Nucleus sampling. Waarden blijven tussen 0 en 1. Gehoste open-weight modellen
seed integer Seed van de sampler, een willekeurig geheel getal. Zonder seed wordt hij afgeleid van het model en het gesprek, dus dezelfde aanvraag die twee keer wordt verstuurd, gebruikt dezelfde seed. Gehoste open-weight modellen
stop string | array Een string of een array van strings. Maximaal 4 worden gebruikt. Het antwoord eindigt vóór de eerste die voorkomt; de stoptekst zelf wordt niet teruggegeven. Gehoste open-weight modellen
reasoning_effort string high Hoeveel het model redeneert voordat het antwoordt: off, low, medium of high. none en minimal betekenen off, default betekent medium, max betekent high. Elke andere waarde geeft 400 terug. Gehoste open-weight modellen
reasoning object Dezelfde instelling in objectvorm: {"effort": "low"}. Als beide worden meegestuurd, wordt reasoning_effort gebruikt. Gehoste open-weight modellen
tools array De functies die het model mag aanroepen, elk als {"type": "function", "function": {"name", "description", "parameters"}}. De calls van het model komen terug in tool_calls; jouw code voert ze uit. Alle modellen
tool_choice string | object auto "auto" laat het model beslissen. "required" laat het een tool aanroepen. {"type": "function", "function": {"name": "…"}} laat het die tool aanroepen. Gehoste open-weight modellen
response_format object {"type": "json_object"} voor een JSON-antwoord, of {"type": "json_schema", "json_schema": {…}} voor een antwoord dat jouw schema volgt. Alle Shannon-tiers; gehoste open-weight modellen zoals per id vermeld
web_search boolean false true laat het model het web doorzoeken voordat het antwoordt. shannon-1.6-*, shannon-2-*, Shannon 3-familie

Andere OpenAI-velden, zoals n, user, stream_options, parallel_tool_calls, presence_penalty, frequency_penalty, logit_bias, logprobs, metadata, store en prompt_cache_key, worden geaccepteerd zodat bestaande clientcode ongewijzigd draait. Ze veranderen het antwoord niet: er is altijd één choice, en een stream eindigt altijd met usage.

Een veld met het verkeerde JSON-type, bijvoorbeeld "max_tokens": "100", geeft 422 terug. Een aanvraag zonder messages ook.

Tools, gestructureerde output, reasoning en web search hebben elk een eigen pagina: Function calling, Gestructureerde outputs, Reasoning effort, Ingebouwde webzoekopdracht.

Een aanvraag met opties

Deze aanvraag stelt een systeembericht, de samplingvelden en de reasoning effort in. Ze gebruikt een gehost open-weight model, dat ze allemaal toepast.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

response = client.chat.completions.create(
    model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    messages=[
        {"role": "system", "content": "You are a physics teacher. Answer in two sentences."},
        {"role": "user", "content": "Why is the sky blue?"},
    ],
    max_tokens=512,
    temperature=0.3,
    top_p=0.9,
    seed=7,
    stop=["\n\n"],
    reasoning_effort="low",
)

message = response.choices[0].message
print(message.reasoning_content)  # the reasoning
print(message.content)            # the answer
print(response.usage)

Het antwoord heeft dezelfde vorm als hierboven. De usage ervan voegt op de gehoste open-weight modellen twee details toe: de prompttokens die uit de cache zijn gelezen en de tokens die aan reasoning zijn besteed.

200 JSON
{
  "usage": {
    "prompt_tokens": 31,
    "completion_tokens": 62,
    "total_tokens": 93,
    "prompt_tokens_details": {
      "cached_tokens": 0
    },
    "completion_tokens_details": {
      "reasoning_tokens": 21
    }
  }
}

Outputlengte

max_tokens doet twee dingen. Ten eerste is het het aantal tokens dat van je saldo wordt gereserveerd als de aanvraag begint. Zodra het antwoord compleet is, wordt dat bedrag vervangen door de tokens die de aanvraag heeft gebruikt. Als max_tokens groter is dan wat er van je saldo over is, geeft de aanvraag 429 Quota exceeded terug, ook als het antwoord zelf had gepast. Stuur een lagere max_tokens om minder te reserveren.

shannon-coder-1 wordt op dit endpoint anders geteld: elke aanvraag is een van de Shannon Coder-calls van je plan, en er worden geen tokens voor gereserveerd. Limieten en saldo

Ten tweede beperkt het de lengte van het antwoord op deze modellen:

Modellen Wat max_tokens doet
shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 Het antwoord stopt zodra het de limiet bereikt. Een stream eindigt dan met finish_reason length.
Gehoste open-weight modellen De antwoordtekst stopt bij max_tokens. Reasoning telt hier niet voor mee. Waarden onder 256 werken als 256.

Zonder max_tokens of max_completion_tokens is de waarde 4,096. Op shannon-coder-1 is dat 65,536.

Berichten

Elk bericht is een object met een role en een content. content is een string, of een array van onderdelen als het bericht meer dan tekst bevat.

Rol Beschrijving Toegepast door
system Instructies voor het model. Zet het eerst. Op de Shannon-tiers wordt het eerste system-bericht gebruikt. Gehoste open-weight modellen, shannon-1.6-*, shannon-2-*, shannon-coder-1
developer Wordt gelezen als system. Gehoste open-weight modellen
user Wat je vraagt. Op de Shannon-tiers is het laatste user-bericht de prompt en zijn de berichten ervoor de geschiedenis. Alle modellen
assistant Eerdere antwoorden van het model. Behoud de tool_calls ervan als je daarna een toolresultaat verstuurt. Alle modellen
tool Het resultaat van een toolcall: tool_call_id bevat het id van de call en content het resultaat als string. Alle modellen

Zet bij een id uit de Shannon 3-familie instructies die moeten gelden in het user-bericht.

Op de Shannon-tiers geeft een aanvraag zonder gebruikerstekst en zonder tools 400 No user message provided terug.

Contentonderdelen

Onderdeel Beschrijving Beschikbaar op
{"type": "text", "text": "…"} Gewone tekst. Alle modellen
{"type": "image_url", "image_url": {"url": "…"}} Een afbeelding, als data:-URL met base64-inhoud of als http(s)-URL. Shannon 3-familie, shannon-1.6-lite, shannon-1.6-pro en de gehoste open-weight modellen met afbeeldingen als input
{"type": "file", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Een document (PDF, Word, PowerPoint of Excel), als base64 of via URL. Shannon 3-familie

Groottes, limieten en de volledige lijst met vormen hebben een eigen pagina. Afbeeldingen en bestanden

Het antwoordobject

Veld Type Beschrijving
id string chatcmpl- gevolgd door 32 hexadecimale tekens.
object string Altijd chat.completion.
created integer Tijdstip van het antwoord, in Unix-seconden.
model string Het canonieke id van het model dat antwoordde. De schrijfwijze kan afwijken van het id dat je hebt verstuurd.
choices array Altijd precies één choice, met index 0.
choices[0].message.role string Altijd assistant.
choices[0].message.content string | null De antwoordtekst. Bij tool_calls is hij null op de Shannon-tiers; de gehoste open-weight modellen kunnen tekst naast de calls sturen.
choices[0].message.reasoning_content string | null De reasoning die het model vóór het antwoord schreef, of null als er geen is.
choices[0].message.tool_calls array Alleen aanwezig als het model tools aanroept. Elk item heeft een id, type function en function met de name en de arguments als JSON-string.
choices[0].message.annotations array Alleen bij een aanvraag met web_search: true waarvan de zoekopdracht iets vond. Eén url_citation voor elke bron die een markering in content noemt, met url, title, start_index en end_index (de positie van de markering, geteld in tekens, het einde hoort er niet bij).
choices[0].finish_reason string Waarom het antwoord eindigde. Zie Finish reasons.
usage object De tokens van de aanvraag. Zie Usage.
sources array Alleen bij een aanvraag met web_search: true waarvan de zoekopdracht iets vond: de resultaten die het model kreeg, elk met index, title en url. [1] in het antwoord is het item met index 1.

Finish reasons

finish_reason Beschrijving
stop Het model heeft zijn antwoord afgerond, of een stop-string kwam voor.
tool_calls Het model roept een of meer tools aan. Voer ze uit en stuur de resultaten in tool-berichten.
length Het antwoord is afgekapt bij de outputlimiet. Wordt gemeld in streams van shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 en de Shannon 3-familie.

Een antwoord dat niet wordt gestreamd, meldt stop of tool_calls.

Usage

Veld Type Beschrijving Beschikbaar op
usage.prompt_tokens integer Inputtokens. Alle modellen
usage.completion_tokens integer Outputtokens: reasoning, antwoord en toolcalls samen. Alle modellen
usage.total_tokens integer prompt_tokens plus completion_tokens. Alle modellen
usage.prompt_tokens_details.cached_tokens integer Het deel van prompt_tokens dat uit de prompt cache is gelezen. Gehoste open-weight modellen
usage.completion_tokens_details.reasoning_tokens integer Het deel van completion_tokens dat aan reasoning is besteed. Gehoste open-weight modellen

Op de gehoste open-weight modellen is prompt_tokens je berichten en tooldefinities geteld met de eigen tokenizer van het model, plus de tokens van eventuele afbeeldingen. De endpoints voor tokentelling geven hetzelfde getal terug voordat je verstuurt. Tokens tellen

Op de Shannon-tiers telt prompt_tokens alles wat het model heeft gelezen om het antwoord te schrijven, dus het is groter dan alleen de tekst van je berichten.

Streaming

Met stream op true komt het antwoord binnen als chat.completion.chunk-events en eindigt het met data: [DONE]. De laatste chunk daarvoor bevat finish_reason en usage; stream_options zijn niet nodig. De chunkvormen, keep-alive-regels en fouten binnen een stream hebben een eigen pagina. Streaming

Fouten

Een fout is een JSON-object met een error-lid. De controles verlopen in deze volgorde: API-sleutel, request-body, model-id en daarna saldo. De tabel toont wat dit endpoint het vaakst teruggeeft. De volledige lijst, met wat je opnieuw moet proberen, heeft een eigen pagina. Foutafhandeling

400 JSON
{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Status Type Bericht Wanneer
401 authentication_error Missing authentication
Invalid API key
Er is geen API-sleutel verzonden, of de sleutel is onbekend of ingetrokken.
400 invalid_request_error unknown model: <id> model is geen gepubliceerd id.
400 invalid_request_error No user message provided Shannon-tiers: de aanvraag bevat geen gebruikerstekst en geen tools.
400 invalid_request_error <id> does not accept image input Er is een afbeeldingsonderdeel verzonden naar een gehost open-weight model zonder afbeeldingen als input.
400 invalid_request_error <id> does not accept response_format response_format is verzonden naar een gehost open-weight model zonder gestructureerde output.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning_effort bevat een waarde buiten de lijst.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages ontbreekt, of een veld heeft het verkeerde JSON-type.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens is groter dan wat er van je saldo over is.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: meer dan 120 aanvragen in één minuut op je account.
500 server_error The model backend failed to answer. Please retry. Het model gaf geen antwoord. Verstuur de aanvraag opnieuw.
502 api_error The model backend failed to answer. Please retry. Hetzelfde, op de Shannon 3-familie en de gehoste open-weight modellen.