Chat

Anthropic Messages und Claude Code

Claude-Modelle unterstützen auch die Messages API von Anthropic. Die SDKs von Anthropic, Claude Code und alles, was dafür gebaut wurde, funktionieren also mit einer neuen Base-URL und einem neuen Key.

POST/v1/messages

Base-URL https://api.zurelay.com (die SDKs ergänzen /v1/messages). Sende den Key als x-api-key oder Authorization: Bearer, mit anthropic-version: 2023-06-01. Hier werden nur Claude-Modelle bereitgestellt; andere Modelle nutzen /v1/chat/completions.

Mit den SDKs von 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 aus der Messages API von Anthropic wird durchgereicht (außer metadata, das bei uns bleibt): system als String oder Blöcke (mit cache_control für Prompt-Caching), tools, thinking, output_config, stop_sequences, temperature, Streaming mit denselben Events und anthropic-beta-Header. Bilder und PDFs sendest du als image- und document-Blöcke: siehe Bilder, PDFs, Audio und Video. Anthropic lehnt temperature, top_p und top_k bei Claude ab Opus 4.7 ab. Bei diesen Modellen lassen wir sie deshalb aus der Anfrage weg, statt sie fehlschlagen zu lassen.

Thinking

Claude denkt adaptiv: Es entscheidet selbst, wie viel eine Anfrage braucht, und output_config.effort legt fest, wie intensiv es arbeitet: low, medium, high, xhigh (extra hoch) oder max. Füge display: "summarized" zu thinking hinzu, um eine Zusammenfassung der Gedanken in thinking-Blöcken zurückzubekommen.

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 und die Fable-Modelle denken immer: Opus 5.5 auf medium, sofern du keine Stufe festlegst, Fable auf high. Wenn du sie bittest, nicht zu denken, laufen sie auf low.
  • Claude Sonnet 5.5 und Opus 5 denken standardmäßig auf high, Claude Haiku 5.5 auf medium. Opus 4.6 bis 4.8 denken nur, wenn du thinking sendest. Opus 4.6 hat kein xhigh und läuft deshalb auf high.
  • Die ältere Form, thinking: { type: "enabled", budget_tokens }, funktioniert bei jedem Claude-Modell: Modelle, die sie ablehnen, denken stattdessen adaptiv auf der nächstgelegenen Stufe. Claude Haiku 4.5 unterstützt nur diese Form und erhält ein Budget, wenn du adaptives Denken sendest.
  • Thinking wird als Output-Tokens berechnet. Lass daher bei xhigh und max in max_tokens Platz dafür und streame lange Antworten. Wenn du eine Stufe festlegst, zeigt der x-zurelay-reasoning-effort-Header, welche verwendet wurde.

Prompt-Caching

Caching funktioniert wie bei Anthropic: Setze cache_control auf die Blöcke, die du cachen möchtest, oder auf die gesamte Anfrage, um sie fünf Minuten zu speichern. Mit "ttl": "1h" bleiben sie eine Stunde gespeichert. Jeder Teil der Eingabe wird wie bei Anthropic berechnet:

InputBerechnet zumIn der Nutzungsübersicht
Aus dem Cache gelesenCache-Preis des Modellscache_read_input_tokens
Für fünf Minuten in den Cache geschrieben1.25-mal der Eingabepreisephemeral_5m_input_tokens
Für eine Stunde in den Cache geschrieben2-mal der Eingabepreisephemeral_1h_input_tokens
Alles andereDer Eingabepreisinput_tokens

Die beiden Arten von Schreibvorgängen stehen in usage.cache_creation, und cache_creation_input_tokens fasst beide zusammen. Die Cache-Preise findest du auf der jeweiligen Modellseite. Nur das, was du ausdrücklich cachen möchtest, wird als Schreibvorgang berechnet: Ohne cache_control zahlst du für alles, was nicht aus dem Cache gelesen wird, den Eingabepreis. Eingaben, die du fünf Minuten speichern möchtest, werden nie zum Stundentarif berechnet.

Claude Code

Verbinde Claude Code über fünf Umgebungsvariablen mit Zurelay (die Base-URL, deinen Key und die drei Modell-Aliasse) und starte es dann wie gewohnt:

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

Um die Einstellungen dauerhaft zu speichern, trage dieselben Werte in den env-Block von ~/.claude/settings.json ein. Die vollständige Anleitung sowie Anleitungen für Cursor, Cline und andere findest du unter Integrationen.

Die /effort-Stufen von Claude Code kommen beim Modell als output_config.effort an. xhigh und max funktionieren also wie bei Anthropic. Ultracode ist eine Einstellung von Claude Code, keine Effort-Stufe: Es läuft auf der Stufe der Session (xhigh, wenn du Claude Code mit --effort ultracode startest).

Tokens zählen

POST/v1/messages/count_tokens

Akzeptiert denselben Body wie /v1/messages und gibt mit { "input_tokens": 1234 } eine Schätzung der Tokens zurück, die für die Anfrage gezählt würden. Kostenlos.

Fehler

Fehler kommen im Format von Anthropic zurück ({ "type": "error", "error": { "type", "message" } }) und haben dieselbe Bedeutung wie auf der Fehlerseite. Sie enthalten kein code: Nutze den HTTP-Status und error.type.

Einige Claude-Modelle lesen PDFs nur über /v1/chat/completions. Wenn du eines an /v1/messages sendest, zeigt dir die Fehlermeldung, welchen Endpoint du verwenden musst. Die Tabelle unter Bilder, PDFs, Audio und Video zeigt, was jedes Modell lesen kann.
  • Tipp: Der Token-Zähler von Anthropic und unserer können leicht voneinander abweichen; abgerechnet wird die Nutzung, die in der Antwort steht.

Fragen oder fehlt etwas? Frag unser Support-Team und wir antworten per E-Mail, meist innerhalb einer Minute.