Dokumentation

Dokumentation

Messages API

Die native Anthropic Messages API für die Claude-Familie. Senden Sie das echte Anthropic-Anfrageformat — cache_control, tools und extended thinking werden unverändert durchgereicht.

Endpunkt: POST /v1/messages. Anfrage und Antwort entsprechen exakt der Anthropic Messages API. Daher funktioniert das Anthropic SDK — oder jedes Tool, das dieses Format unterstützt — mit Kunavo, wenn Sie lediglich Basis-URL und Schlüssel ändern.

Welchen Endpunkt sollte ich verwenden?

Kunavo stellt die Claude-Familie auf zwei Arten bereit. Die Abrechnung ist identisch; wählen Sie je nachdem, welches Anfrageformat Ihr Code bereits verwendet.

EndpunktStrukturVerwenden Sie es, wenn
/v1/chat/completionsOpenAI-ChatSie bereits das OpenAI SDK verwenden oder einen gemeinsamen Codepfad für Claude und GPT möchten.
/v1/messagesAnthropic MessagesSie das Anthropic SDK / Claude Code verwenden oder cache_control, tools und thinking nativ und ohne Übersetzungsschicht nutzen möchten.

Authentifizierung

Setzen Sie die Basis-URL auf https://api.kunavo.com — das Anthropic SDK fügt /v1/messages selbst an. Übergeben Sie Ihren Kunavo-Schlüssel (sk-kn-...) als API-Schlüssel. Der Endpunkt akzeptiert ihn entweder über den Header x-api-key (Standard des Anthropic SDK) oder über Authorization: Bearer.

from anthropic import Anthropic

client = Anthropic(
    api_key="sk-kn-...",                  # your Kunavo key
    base_url="https://api.kunavo.com",    # SDK appends /v1/messages
)

msg = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    system="You are a senior staff engineer.",
    messages=[
        {"role": "user", "content": "Pros and cons of event sourcing?"},
    ],
)
print(msg.content[0].text)

Prompt-Caching

Dies ist der wichtigste Grund, den nativen Endpunkt zu verwenden. Fügen Sie einen cache_control-Breakpoint zu einem beliebigen Systemblock, Nachrichteninhaltsblock oder einer Tool-Definition hinzu. Das markierte Präfix wird einmal in den Cache geschrieben und bei späteren Aufrufen, die es gemeinsam nutzen, erneut abgerufen.

Für das Caching selbst ist dieser Endpunkt nicht nötig: Über /v1/chat/completions und /v1/responses setzt Kunavo die Breakpoints für Claude-Modelle selbst, wenn der Prompt lang ist. Dieser Endpunkt unterscheidet sich darin, dass er keine hinzufügt: Ihr Request-Body wird so weitergegeben, wie Sie ihn gesendet haben, jeder Breakpoint darin ist also einer, den Sie gesetzt haben.

# Mark a large, stable prefix with cache_control. The first call writes that
# span to cache at 1.25× the input token price; later calls that reuse it read
# it back at ~10%.
msg = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": LONG_STYLE_GUIDE,            # tens of thousands of tokens
            "cache_control": {"type": "ephemeral"},
        },
    ],
    messages=[{"role": "user", "content": "Review this PR against the guide."}],
)
u = msg.usage
print(u.cache_creation_input_tokens, u.cache_read_input_tokens)

Preise für die Claude-Familie bei Kunavo:

  • cache_read_input_tokens — aus dem Cache bereitgestellt, abgerechnet zum 0.10× des Eingabetarifs (Rabatt von 90 %); 0,025× bei Claude Fable 5.1, 0,05× bei Claude Opus 5.5.
  • cache_creation_input_tokens — in den Cache geschrieben, abgerechnet zum 1.25-Fachen des Eingabetarifs. Kunavo berechnet Schreibvorgänge mit einer TTL von 1 Stunde ebenfalls zum 1.25-Fachen und liegt damit unter dem 2-Fachen von Anthropic.
Kunavo hält Ihren Cache automatisch warm: Anfragen mit gemeinsamem Prompt-Präfix werden an dasselbe Upstream-Konto geleitet, ohne dass Sie etwas konfigurieren müssen.

Streaming

Setzen Sie stream: true (oder verwenden Sie den SDK-Helfer stream()). Kunavo leitet den nativen Ereignisstrom von Anthropic — message_start, content_block_delta, message_delta, message_stop — unverändert weiter.

with client.messages.stream(
    model="claude-sonnet-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain CRDTs in one paragraph."}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

Bilder

Senden Sie Bilder als Quellen vom Typ base64 oder url. Eine Quelle vom Typ url ist der einzige Teil des Bodys, den Kunavo umschreibt: Kunavo lädt ein HTTPS-Bild selbst herunter (oder entpackt einen data:-URI) und leitet es als base64 weiter, da der Upstream eine Quelle vom Typ url ignoriert und antworten würde, als wäre kein Bild gesendet worden. Bilder innerhalb eines tool_result werden genauso behandelt. Grenzen: 16 Bilder pro Anfrage, 5 MB pro Bild, insgesamt 20 MB; kann ein Bild nicht abgerufen werden, wird ein Fehler zurückgegeben, statt das Bild zu überspringen.

Nutzungsobjekt

Jede Antwort (und die Streaming-Ereignisse message_delta / message_start) enthält ein natives Anthropic-Objekt usage:

FeldBedeutung
input_tokensFrische (nicht zwischengespeicherte) Eingabe-Token.
cache_read_input_tokensAus dem Cache bereitgestellte Token, abgerechnet mit 0.10× des Eingabetarifs (0,025× bei Claude Fable 5.1, 0,05× bei Claude Opus 5.5).
cache_creation_input_tokensToken, die bei diesem Aufruf in den Cache geschrieben wurden (abgerechnet zum 1,25-Fachen des Eingabetarifs).
output_tokensAusgabe-Token einschließlich extended thinking.

Server-Tools

Die Server-Tools von Anthropic (web_search, web_fetch, code_execution) werden als gewöhnliche Tool-Definitionen durchgereicht. Die Inhalte, die sie zur Unterhaltung beitragen (Suchergebnisse, abgerufene Seite, Programmausgabe), werden in usage als Token zurückgegeben und zu den obigen Tarifen abgerechnet.

Websuche wird zusätzlich zu diesen Token pro Suche abgerechnet: Anthropic gibt dafür 10 $ pro 1.000 Suchanfragen an, und Kunavo berechnet diesen Betrag mit dem individuellen Rabatt des jeweiligen Modells. Die Anzahl steht in usage.server_tool_use.web_search_requests — in der Antwort oder im letzten message_delta eines Streams. Eine Suche, die einen Fehler zurückgibt (etwa max_uses_exceeded), wird nicht gezählt. Für Web Fetch und Codeausführung fallen außer den Token keine Kosten an.

Pro 1.000 WebsuchenModelle
$7.00claude-fable-5-1, claude-fable-5, claude-opus-5-5, claude-opus-5, claude-opus-4-8, claude-opus-4-7, claude-opus-4-6, claude-sonnet-5, claude-sonnet-4-6, claude-haiku-4-5

Unterstützte Modelle

Jedes aktivierte Claude-Modell akzeptiert /v1/messages. Senden Sie den Kunavo-Slug als model:

  • claude-fable-5, claude-sonnet-5
  • claude-opus-5, claude-opus-4-7, claude-opus-4-6
  • claude-sonnet-4-6, claude-haiku-4-5

GPT-Modelle sind hier nicht verfügbar — rufen Sie sie über /v1/chat/completions auf.

Rohes HTTP

Kein SDK erforderlich — der Endpunkt ist ein einfacher JSON-POST:

curl https://api.kunavo.com/v1/messages \
  -H "x-api-key: sk-kn-..." \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Hello, Claude"}]
  }'

Nächste Schritte