Naar de inhoud
Anthropic‑formaat

Anthropic‑formaat

POST /v1/messages accepteert een aanvraag in het Anthropic Messages-formaat en antwoordt in hetzelfde formaat, gestreamd of niet. Gebruik het met de Anthropic SDK en met tools die erop zijn gebouwd, zoals Claude Code: stel de basis-URL in, gebruik je Shannon API-sleutel en geef een Shannon model-id op.

POST https://api.shannon-ai.com/v1/messages

Wijs de Anthropic SDK naar de Shannon-basis-URL. De SDK voegt /v1/messages toe en stuurt je sleutel mee in de x-api-key-header.

import anthropic

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

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

for block in message.content:
    if block.type == "text":
        print(block.text)

Het antwoord is een bericht waarvan content een lijst met blokken is. Zoek de blokken op hun type: als het model heeft geredeneerd, is het eerste blok thinking en volgt de tekst daarna.

200 JSON
{
  "id": "msg_5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
  "type": "message",
  "role": "assistant",
  "model": "shannon-3",
  "content": [
    {
      "type": "thinking",
      "thinking": "The user wants a greeting in one sentence. Keep it short and friendly."
    },
    {
      "type": "text",
      "text": "Hello, it is good to meet you."
    }
  ],
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 1184,
    "output_tokens": 46
  }
}

Headers

Header Waarde Beschrijving
x-api-key YOUR_API_KEY Je API-sleutel. Authorization: Bearer YOUR_API_KEY wordt in plaats daarvan geaccepteerd.
content-type application/json Verplicht.
anthropic-version 2023-06-01 Geaccepteerd, niet verplicht. De Anthropic SDK stuurt 2023-06-01; het antwoord heeft hetzelfde formaat, ongeacht de waarde.
anthropic-beta Geaccepteerd, niet verplicht.
x-request-id Optioneel. Je eigen id voor de aanvraag. Hij komt ongewijzigd terug in het antwoord; zonder deze header bevat het antwoord een id van 12 hexadecimale tekens.

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 Een Shannon model-id uit de modellijst. Stuur het mee met elke aanvraag. Hoofdletters maken niet uit. Elke andere naam geeft 400 unknown model terug, dus een tool die zijn eigen modelnamen verstuurt, moet op een Shannon-id worden ingesteld. Alle modellen
messages array Verplicht. Het gesprek, oudste bericht eerst, met de rollen user en assistant. Zie Berichten en contentblokken hieronder. Alle modellen
system string | array Instructies voor het model: een string of een array van tekstblokken. Zie Systeemprompt hieronder. Gehoste open-weight modellen, shannon-1.6-*, shannon-2-*, shannon-coder-1
max_tokens integer 4096 Bovengrens van het antwoord, in tokens. Optioneel op dit endpoint; de Anthropic SDK stuurt het altijd mee. 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. Gehoste open-weight modellen, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
stream boolean false true stuurt het antwoord als server-sent events. Zie Streaming hieronder. Alle modellen
temperature number Sampling-temperatuur. Op de gehoste open-weight modellen blijven waarden tussen 0 en 2. Gehoste open-weight modellen, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number Nucleus sampling. Gehoste open-weight modellen
stop_sequences array Maximaal 4 strings. Het antwoord eindigt vóór de eerste die voorkomt. stop_reason blijft end_turn. Gehoste open-weight modellen
tools array De tools die het model mag aanroepen, elk als {"name", "description", "input_schema"}. Zie Tools hieronder. Alle modellen
tool_choice object {"type": "auto"} laat het model beslissen, {"type": "any"} laat het een tool aanroepen, {"type": "tool", "name": "…"} laat het die tool aanroepen. Gehoste open-weight modellen
thinking object Hoeveel het model redeneert voordat het antwoordt. Zie Thinking hieronder. Gehoste open-weight modellen
web_search boolean false Een Shannon-toevoeging aan het formaat: true laat het model het web doorzoeken voordat het antwoordt. shannon-1.6-*, shannon-2-*, Shannon 3-familie

Zonder max_tokens is de waarde 4,096, en 65,536 op shannon-coder-1.

metadata, top_k, service_tier en cache_control-markeringen op blokken worden geaccepteerd, zodat bestaande clientcode ongewijzigd draait. Ze veranderen het antwoord niet; prompt caching op de gehoste open-weight modellen gebeurt automatisch.

Een JSON-antwoord volgens een schema vraag je aan met response_format bij Chat Completions en met text.format bij Responses. Gestructureerde outputs

Een aanvraag met een systeemprompt en thinking

Deze aanvraag stuurt een systeemprompt, een thinking-budget, een temperatuur en een stopsequentie mee. Ze gebruikt een gehost open-weight model, dat ze allemaal toepast.

import anthropic

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

message = client.messages.create(
    model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    max_tokens=4096,
    system="You are a physics teacher. Answer in two sentences.",
    thinking={"type": "enabled", "budget_tokens": 2048},
    temperature=0.3,
    stop_sequences=["\n\n"],
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
)

for block in message.content:
    if block.type == "thinking":
        print("reasoning:", block.thinking)
    elif block.type == "text":
        print("answer:", block.text)
print(message.usage)

Op de gehoste open-weight modellen meldt usage de tokens die uit de prompt cache zijn gelezen apart van de andere inputtokens.

200 JSON
{
  "usage": {
    "input_tokens": 31,
    "cache_read_input_tokens": 0,
    "cache_creation_input_tokens": 0,
    "output_tokens": 62
  }
}

Systeemprompt

system is een string, of een array van tekstblokken in de vorm [{"type": "text", "text": "…"}]. De teksten van de blokken worden samengevoegd met een regeleinde.

Wordt toegepast door de gehoste open-weight modellen, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro en shannon-coder-1. Zet bij een id uit de Shannon 3-familie instructies die moeten gelden in het gebruikersbericht.

Berichten en contentblokken

Een bericht heeft een role, user of assistant, en een content. content is een string of een array van blokken.

Blok Beschrijving Beschikbaar op
{"type": "text", "text": "…"} Tekst. Alle modellen
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "…"}}
{"type": "image", "source": {"type": "url", "url": "…"}}
Een afbeelding in een user-bericht, als base64 of via URL. Shannon 3-familie, shannon-1.6-lite, shannon-1.6-pro en de gehoste open-weight modellen met afbeeldingen als input
{"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Een document (PDF, Word, PowerPoint of Excel) in een user-bericht, als base64 of via URL. Shannon 3-familie
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} In een assistant-bericht: een toolcall die het model in een eerder antwoord deed. Alle modellen
{"type": "tool_result", "tool_use_id": "toolu_…", "content": "…"} In een user-bericht: het resultaat van die call. content is een string of een lijst met tekstblokken. Alle modellen

Je kunt de content van een eerder antwoord ongewijzigd terugsturen: text- en tool_use-blokken worden gelezen, thinking-blokken worden overgeslagen.

Op de Shannon-tiers worden afbeeldingen en documenten uit het laatste user-bericht gelezen. Groottes en limieten hebben een eigen pagina. Afbeeldingen en bestanden

Thinking

De gehoste open-weight modellen koppelen thinking aan een reasoning effort. Zonder het veld is de effort hoog.

Vorm budget_tokens Effect
{"type": "disabled"} Geen reasoning. Het antwoord bevat geen thinking-blok.
{"type": "enabled", "budget_tokens": 2048} ≤ 2,048 Lage effort.
{"type": "enabled", "budget_tokens": 8192} ≤ 8,192 Gemiddelde effort.
{"type": "enabled", "budget_tokens": 16000} > 8,192 Hoge effort.

Een model dat redeneert, geeft zijn reasoning terug als blok {"type": "thinking", "thinking": "…"} vóór de tekst. De Shannon-tiers die redeneren, sturen het ook mee.

De efforts worden beschreven op hun eigen pagina. Reasoning effort

Tools

Een tool is een functie die jouw code uitvoert. Beschrijf elke tool met een name, een description en een input_schema. Als het model een tool wil, bevat het antwoord een tool_use-blok en is stop_reason gelijk aan tool_use.

Een tooldefinitie in tools:

tools
[
  {
    "name": "get_weather",
    "description": "Current weather for a city.",
    "input_schema": {
      "type": "object",
      "properties": {
        "city": {
          "type": "string"
        }
      },
      "required": [
        "city"
      ]
    }
  }
]

De content van een antwoord dat de tool aanroept:

200 content
[
  {
    "type": "text",
    "text": ""
  },
  {
    "type": "tool_use",
    "id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
    "name": "get_weather",
    "input": {
      "city": "Paris"
    }
  }
]

Voer de tool uit en stuur de aanvraag daarna opnieuw, met de call en een tool_result-blok toegevoegd aan messages:

messages
[
  {
    "role": "user",
    "content": "What is the weather in Paris?"
  },
  {
    "role": "assistant",
    "content": [
      {
        "type": "tool_use",
        "id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
        "name": "get_weather",
        "input": {
          "city": "Paris"
        }
      }
    ]
  },
  {
    "role": "user",
    "content": [
      {
        "type": "tool_result",
        "tool_use_id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
        "content": "{\"temperature_c\": 18, \"sky\": \"cloudy\"}"
      }
    ]
  }
]

tool_choice

Vorm Effect Toegepast door
{"type": "auto"} Het model beslist zelf of het een tool aanroept. Dit is de standaard. Alle modellen
{"type": "any"} Het model moet een van de tools aanroepen. Gehoste open-weight modellen
{"type": "tool", "name": "…"} Het model moet de genoemde tool aanroepen. Gehoste open-weight modellen

Alleen tools met een input_schema worden gelezen. Web search is op dit endpoint geen tool: stel het veld web_search in.

De toolloop wordt volledig beschreven op een eigen pagina. Function calling

Het antwoord

Veld Type Beschrijving Verzonden door
id string msg_ gevolgd door 32 hexadecimale tekens. Alle modellen
type string Altijd message. Alle modellen
role string Altijd assistant. Alle modellen
model string Het canonieke id van het model dat antwoordde. Alle modellen
content array De blokken van het antwoord, in deze volgorde: thinking als het model heeft geredeneerd, text, daarna één tool_use per toolcall. Alle modellen
stop_reason string Waarom het antwoord eindigde. Zie de waarden hieronder. Alle modellen
usage object input_tokens en output_tokens. Alle modellen
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. In een stream komt het mee met het event message_delta. shannon-1.6-*, shannon-2-*, Shannon 3-familie
usage.cache_read_input_tokens integer cache_read_input_tokens is het deel van de prompt dat uit de cache is gelezen; input_tokens is de rest. cache_creation_input_tokens is altijd 0. Gehoste open-weight modellen

Antwoordblokken

Blok Beschrijving
{"type": "thinking", "thinking": "…"} De reasoning van het model. Er is geen signature-lid.
{"type": "text", "text": "…"} De antwoordtekst. Kan leeg zijn als het antwoord een toolcall is.
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} Een toolcall. input is een JSON-object. Stuur het resultaat terug met dezelfde id.

stop_reason

stop_reason Beschrijving Verzonden door
end_turn Het model heeft zijn antwoord afgerond, of een van je stop_sequences kwam voor. Alle modellen
tool_use Het antwoord bevat een of meer toolcalls. Alle modellen
max_tokens Het antwoord is afgekapt bij de outputlimiet. Shannon 3-familie, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1, in streams

Streaming

Stel stream in op true voor server-sent events. Elk frame heeft een event:-regel met de naam van het event en een data:-regel met een JSON-object dat de naam herhaalt in type. De stream-helpers van de Anthropic SDK lezen deze events voor je:

import anthropic

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

with client.messages.stream(
    model="shannon-3",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain server-sent events in three sentences."}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
    message = stream.get_final_message()

print()
print(message.stop_reason, message.usage)

De events, in de volgorde waarin ze binnenkomen:

Event Data Wanneer
message_start message Altijd eerst. message bevat het id, de rol, het model, een lege content en een usage die op nul begint.
content_block_start index, content_block Een blok opent. content_block is een leeg text- of thinking-blok, of een tool_use-blok met zijn id en name.
content_block_delta index, delta {"type": "thinking_delta", "thinking"} Een stuk van de reasoning, voor een thinking-blok.
content_block_delta index, delta {"type": "text_delta", "text"} Een stuk van het antwoord, voor een text-blok.
content_block_delta index, delta {"type": "input_json_delta", "partial_json"} De argumenten van een toolcall, compleet in één delta, voor een tool_use-blok.
content_block_stop index Het blok met deze index is compleet.
message_delta delta {stop_reason, stop_sequence}, usage Het einde van het antwoord: delta.stop_reason en de usage van de aanvraag.
message_stop Altijd laatst.

Blokken worden genummerd met index in de volgorde waarin ze openen, en een blok is compleet voordat het volgende opent. Lees elk blok op type, niet op nummer: een stream kan eerst een leeg text-blok openen, dan het thinking-blok, en het antwoord leveren in een later text-blok.

200 text/event-stream
event: message_start
data: {"type":"message_start","message":{"id":"msg_5f0c…","type":"message","role":"assistant","model":"shannon-3","content":[],"usage":{"input_tokens":0,"output_tokens":0}}}

event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}

event: content_block_stop
data: {"type":"content_block_stop","index":0}

event: content_block_start
data: {"type":"content_block_start","index":1,"content_block":{"type":"thinking","thinking":""}}

event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"thinking_delta","thinking":"Three sentences: what it is, how it is framed, why it is used."}}

event: ping
data: {"type": "ping"}

event: content_block_stop
data: {"type":"content_block_stop","index":1}

event: content_block_start
data: {"type":"content_block_start","index":2,"content_block":{"type":"text","text":""}}

event: content_block_delta
data: {"type":"content_block_delta","index":2,"delta":{"type":"text_delta","text":"Server-sent events let a server push text over one HTTP reply."}}

event: content_block_stop
data: {"type":"content_block_stop","index":2}

event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":1190,"output_tokens":84}}

event: message_stop
data: {"type":"message_stop"}

Keep-alive

Verzonden door Beschrijving
Shannon 3-familie, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 Een ping-event met de data {"type": "ping"}, elke 15 seconden.
Gehoste open-weight modellen Een commentaarregel : keepalive, elke 15 seconden terwijl het model werkt.

Een stream die mislukt

Een fout nadat de stream is begonnen, is een error-event met dezelfde body als een foutantwoord: {"type": "error", "error": {"type", "message"}}. De afsluitende events, message_delta en message_stop, volgen nog steeds. Beschouw het antwoord als mislukt en stuur de aanvraag opnieuw.

Fouten

Fouten gebruiken de Anthropic-foutbody: type is error en het object error bevat een type en een message. 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
{
  "type": "error",
  "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 Shannon model-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 afbeelding verzonden naar een gehost open-weight model zonder afbeeldingen als input.
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.
429 rate_limit_error Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan shannon-coder-1: de Shannon Coder-calls van je plan voor het huidige venster van 4 uur zijn op.
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. Het model gaf geen antwoord. Verstuur de aanvraag opnieuw.

Tokens tellen

POST /v1/messages/count_tokens accepteert dezelfde body als een berichtaanvraag (model, system, messages, tools) en geeft {"input_tokens": n} terug: het aantal inputtokens dat voor de aanvraag in rekening zou worden gebracht. Het telt voor de gehoste open-weight modellen, is gratis en wordt niet meegeteld door flood protection.

import anthropic

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

count = client.messages.count_tokens(
    model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    system="You are a physics teacher. Answer in two sentences.",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
)

print(count.input_tokens)

Tellen heeft een eigen pagina, met het plain-text endpoint en de limieten. Tokens tellen