Chat

Anthropic Messages en Claude Code

Claude-modellen ondersteunen ook de Messages API van Anthropic, dus de SDK's van Anthropic, Claude Code en alles wat daarvoor is gebouwd, werken met een nieuwe basis-URL en sleutel.

POST/v1/messages

Basis-URL https://api.zurelay.com (de SDK's voegen /v1/messages toe). Stuur de sleutel als x-api-key of Authorization: Bearer, met anthropic-version: 2023-06-01. Hier zijn alleen Claude-modellen beschikbaar; andere modellen gebruiken /v1/chat/completions.

Met de SDK's van Anthropic

import os
import anthropic
client = anthropic.Anthropic(
base_url="https://api.zurelay.com",
api_key=os.environ["ZURELAY_API_KEY"],
)
message = client.messages.create(
model="claude-opus-5-5",
max_tokens=1024,
system="You are a careful code reviewer.",
messages=[{"role": "user", "content": "Review this function: def add(a, b): return a - b"}],
)
print(message.content[0].text)

Alles uit de Messages API van Anthropic wordt doorgegeven (behalve metadata, die bij ons blijft): system als string of blokken (met cache_control voor promptcaching), tools, thinking, output_config, stop_sequences, temperature, streaming met dezelfde events en anthropic-beta-headers. Afbeeldingen en PDF's stuur je als image- en document-blokken: zie Afbeeldingen, PDF's, audio en video. Anthropic weigert temperature, top_p en top_k bij Claude vanaf Opus 4.7, dus laten we die bij deze modellen weg uit het verzoek in plaats van het te laten mislukken.

Nadenken

Claude denkt adaptief na: het bepaalt zelf hoeveel denkwerk een verzoek nodig heeft, en output_config.effort bepaalt hoe hard het werkt: low, medium, high, xhigh (extra hoog) of max. Voeg display: "summarized" toe aan thinking om een samenvatting van het denkwerk terug te krijgen in thinking-blokken.

import os
import anthropic
client = anthropic.Anthropic(
base_url="https://api.zurelay.com",
api_key=os.environ["ZURELAY_API_KEY"],
)
message = client.messages.create(
model="claude-opus-5-5",
max_tokens=32000,
thinking={"type": "adaptive", "display": "summarized"},
output_config={"effort": "xhigh"},
messages=[{"role": "user", "content": "How many primes are there below 1,000?"}],
)
for block in message.content:
print(block.thinking if block.type == "thinking" else block.text)
  • Claude Opus 5.5 en de Fable-modellen denken altijd na: Opus 5.5 op medium tenzij je een niveau instelt, Fable op high. Als je vraagt om niet na te denken, werken ze op low.
  • Claude Sonnet 5.5 en Opus 5 denken standaard na op high, en Claude Haiku 5.5 op medium. Opus 4.6 tot 4.8 denken alleen na als je thinking meestuurt. Opus 4.6 heeft geen xhigh en werkt daarom op high.
  • De oudere vorm, thinking: { type: "enabled", budget_tokens }, werkt bij elk Claude-model: modellen die deze weigeren, denken in plaats daarvan adaptief na op het dichtstbijzijnde niveau. Claude Haiku 4.5 accepteert alleen die vorm en krijgt een budget als je adaptief nadenken meestuurt.
  • Denken wordt als outputtokens gefactureerd, dus houd er ruimte voor vrij in max_tokens bij xhigh en max, en stream lange antwoorden. Als je een niveau instelt, geeft de x-zurelay-reasoning-effort-header aan welk niveau is gebruikt.

Promptcaching

Caching werkt net als bij Anthropic: zet cache_control op de blokken die je wilt cachen, of op het hele verzoek, om ze vijf minuten te bewaren. Voeg "ttl": "1h" toe om ze een uur te bewaren. Elk deel van de input wordt op dezelfde manier gefactureerd als bij Anthropic:

InputTariefIn gebruiksgegevens
Uit de cache gelezenHet cachetarief van het modelcache_read_input_tokens
Voor vijf minuten naar de cache geschreven1.25 keer het inputtariefephemeral_5m_input_tokens
Voor een uur naar de cache geschreven2 keer het inputtariefephemeral_1h_input_tokens
Al het overigeHet inputtariefinput_tokens

De twee soorten schrijfacties staan in usage.cache_creation, en cache_creation_input_tokens is het totaal van beide. Op elke modelpagina staan de cachetarieven. Alleen wat je expliciet laat cachen, wordt als schrijfactie gefactureerd: bij een verzoek zonder cache_control betaal je het inputtarief voor alles wat niet uit de cache wordt gelezen, en input die je vijf minuten laat bewaren, wordt nooit tegen het uurtarief gefactureerd.

Claude Code

Stel Claude Code met vijf omgevingsvariabelen in op Zurelay (de basis-URL, je sleutel en de drie modelaliassen) en start het daarna zoals je gewend bent:

Shell
export ANTHROPIC_BASE_URL="https://api.zurelay.com"
export ANTHROPIC_AUTH_TOKEN="$ZURELAY_API_KEY"
export ANTHROPIC_DEFAULT_OPUS_MODEL="claude-opus-5-5"
export ANTHROPIC_DEFAULT_SONNET_MODEL="claude-sonnet-5-5"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="claude-haiku-5-5"
claude

Om dit te bewaren, zet je dezelfde waarden in het env-blok van ~/.claude/settings.json. De volledige handleiding en handleidingen voor Cursor, Cline en andere tools vind je onder Integraties.

De /effort-niveaus van Claude Code komen als output_config.effort bij het model aan, dus xhigh en max werken net als bij Anthropic. Ultracode is een instelling van Claude Code, geen inspanningsniveau: het gebruikt het niveau van de sessie (xhigh als je Claude Code start met --effort ultracode).

Tokens tellen

POST/v1/messages/count_tokens

Accepteert dezelfde body als /v1/messages en retourneert { "input_tokens": 1234 }, een schatting van het aantal tokens dat het verzoek zou gebruiken. Gratis.

Fouten

Fouten worden teruggestuurd in het formaat van Anthropic ({ "type": "error", "error": { "type", "message" } }), met dezelfde betekenis als op de foutenpagina. Ze bevatten geen code: gebruik de HTTP-status en error.type.

Sommige Claude-modellen lezen PDF's alleen via /v1/chat/completions. Stuur je er een naar /v1/messages, dan geeft de foutmelding aan welk endpoint je moet gebruiken. De tabel bij Afbeeldingen, PDF's, audio en video laat zien wat elk model kan lezen.
  • Tip: De tokenteller van Anthropic en die van ons kunnen iets verschillen; het gebruik in de response bepaalt wat je betaalt.

Vragen, of ontbreekt er iets? Vraag het ons supportteam en je krijgt antwoord per e-mail, meestal binnen een minuut.