Anthropic-Messages-API
/ API-Doku← API-SchnellstartAls Markdown anzeigen
POST https://api.opencheese.dev/v1/messages ist die Anthropic-Messages-API, die Claude Code,
Claude Desktop und die Anthropic-SDKs sprechen. Ihre Basis-URL ist https://api.opencheese.dev,
ohne /v1: Die SDKs hängen /v1/messages selbst an.
Eine erste Anfrage
curl https://api.opencheese.dev/v1/messages \
-H "x-api-key: $OPENCHEESE_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{"model": "MODEL_ID", "max_tokens": 1024, "system": "Answer in one sentence.", "messages": [{"role": "user", "content": "What is a gateway?"}]}'
Statt x-api-key funktioniert auch Authorization: Bearer. Die Antwort hat das Anthropic-Format:
{
"id": "msg_01AbCdEf",
"type": "message",
"role": "assistant",
"model": "MODEL_ID",
"content": [{ "type": "text", "text": "A gateway passes your requests on to the models behind it." }],
"stop_reason": "end_turn",
"usage": { "input_tokens": 24, "output_tokens": 13, "cache_read_input_tokens": 0, "cache_creation_input_tokens": 0 }
}
Parameter
| Feld | Hinweise |
|---|---|
model |
Pflichtfeld. Eine id aus /v1/models; datierte Claude-IDs wie ...-20251001 verweisen auf das Modell ohne Datum. |
messages |
Pflichtfeld. Nachrichten von user und assistant mit Text-, Bild-, tool_use- und tool_result-Blöcken. |
system |
Ein String oder Textblöcke. |
stream |
true für Server-Sent Events. |
tools, tool_choice |
Tool-Nutzung, sofern das Modell Tools unterstützt. |
output_config.effort |
Eine Stufe aus den supported_reasoning_levels des Modells. |
max_tokens, temperature, top_p, thinking |
Optional. Wenn du sie nicht setzt, gelten die Standardwerte des Modells. |
Reasoning-Stufe
Wie gründlich das Modell nachdenkt, wählst du mit Anthropics output_config.effort (oder mit
reasoning_effort, das ebenfalls gelesen wird). Setzt du keine Stufe, gilt die Standardstufe des
Modells.
curl https://api.opencheese.dev/v1/messages \
-H "x-api-key: $OPENCHEESE_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{"model": "MODEL_ID", "max_tokens": 4096, "output_config": {"effort": "high"}, "messages": [{"role": "user", "content": "Plan a three-day trip to Lyon."}]}'
Eine Stufe, die das Modell nicht anbietet, wird mit unsupported_reasoning_effort abgelehnt, und
supported_reasoning_levels im Fehler listet die Stufen auf, die es anbietet. Die Denkschritte
kommen, sofern das Modell sie zurückgibt, als thinking-Inhaltsblöcke.
Streaming
Mit "stream": true kommt die Antwort als Anthropic-Events: message_start,
content_block_start, content_block_delta (Text in delta.text), content_block_stop,
message_delta mit dem stop_reason und dem Tokenverbrauch sowie message_stop. Ein Fehler nach
dem Start des Streams kommt als error-Event.
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"One, two"}}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":6}}
Bilder und Tools
Bilder sendest du an Modelle, deren modalities.input den Wert image enthält, als
image-Blöcke mit einer base64-source oder einer url-Quelle. Tools folgen dem Anthropic-Format:
tools mit einem input_schema, ein tool_use-Block in der Antwort und dein tool_result-Block
in der nächsten Nachricht des Nutzers.
{
"model": "MODEL_ID",
"max_tokens": 1024,
"tools": [
{
"name": "get_weather",
"description": "Current weather for a city",
"input_schema": { "type": "object", "properties": { "city": { "type": "string" } }, "required": ["city"] }
}
],
"messages": [{ "role": "user", "content": "What is the weather in Paris?" }]
}
Tokens zählen
POST /v1/messages/count_tokens nimmt denselben Body entgegen und gibt eine Schätzung seiner
Eingabe-Tokens zurück. Das ist kostenlos: Es wird nichts berechnet und keine Transaktion erfasst.
curl https://api.opencheese.dev/v1/messages/count_tokens \
-H "x-api-key: $OPENCHEESE_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{"model": "MODEL_ID", "messages": [{"role": "user", "content": "How many tokens is this?"}]}'
{ "input_tokens": 9 }
SDKs
Python:
import anthropic
client = anthropic.Anthropic(base_url="https://api.opencheese.dev", api_key="YOUR_OPENCHEESE_API_KEY")
message = client.messages.create(
model="MODEL_ID",
max_tokens=1024,
messages=[{"role": "user", "content": "Write a haiku about cheese."}],
)
print(message.content[0].text)
JavaScript:
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({ baseURL: "https://api.opencheese.dev", apiKey: process.env.OPENCHEESE_API_KEY });
const message = await client.messages.create({
model: "MODEL_ID",
max_tokens: 1024,
messages: [{ role: "user", content: "Write a haiku about cheese." }]
});
console.log(message.content[0].text);
Fehler kommen im Anthropic-Format, {"type": "error", "error": {...}}; siehe
Fehler und Ratenlimits. Füge den Header
opencheese-session-uuid hinzu, um eine Unterhaltung zusammenzuhalten.