Message erstellen
Natives Anthropic-Messages-Endpoint — eine originalgetreue Teilmenge von Anthropics öffentlichem Messages-Vertrag, sodass die Anthropic-SDKs und Claude Code unverändert funktionieren. Richten Sie sie auf https://api.deutschlandgpt.de/anthropic (selbst gehostet: https://<ihre-domain>/platform-api/api/anthropic) — jedes auf der Plattform gehostete Modell (Claude, GPT, Gemini, Mistral, …) ist über dieses Wire-Format erreichbar, nicht nur Claude. Diese Base URL liegt neben der OpenAI-kompatiblen /v2-Schnittstelle, nicht darin: Das SDK ergänzt /v1/messages selbst, deshalb liefert eine Base URL mit /v2 einen 404.
Authentifizieren Sie sich mit x-api-key: sk_<id>_<secret> (Standard des Anthropic-SDK) oder Authorization: Bearer sk_<id>_<secret>. Antworten tragen anthropic-version: 2023-06-01.
Unterstützt Streaming per SSE (stream: true), Tool-Use, Extended Thinking (thinking), Bilder und Dokumente sowie Prompt-Caching über cache_control-Breakpoints (wirksam auf Anthropic-Hosts, andernfalls ein No-op). Die Breakpoints setzen Sie: dieses Endpoint cacht genau das, was Sie markieren, und ergänzt niemals eigene Breakpoints — eine Anfrage ohne cache_control wird also gar nicht gecacht. ttl: "1h" wird auf diesem Endpoint unterstützt — hier ist es Anthropics eigenes Feld und keine Erweiterung von uns — und darf mit dem Standard 5m in einer Anfrage gemischt werden (Anthropics eigenes Muster aus 1h-Präfix und 5m-Ende), wobei jedes Kontingent zu seinem eigenen Tarif abgerechnet wird. Anthropics Reihenfolge-Regel gilt: 1h-Breakpoints müssen vor jedem 5m-Breakpoint stehen. Dies ist der EINZIGE Endpoint, auf dem ttl: "1h" beachtet wird; /v2/chat/completions und /v2/responses akzeptieren es und fallen auf fünf Minuten zurück. Die Aufteilung nach TTL steht in Anthropics eigenem Feld usage.cache_creation, und prompt_cache.warnings weist jede Markierung aus, die wir nicht genau wie geschrieben platzieren konnten. Siehe Abrechnung → Prompt-Caching.
Nicht unterstützt: Server-Tools (web_search_*, …), die Batches-API und service_tier (wird akzeptiert, aber ignoriert).
https://api.deutschlandgpt.de/anthropic/v1/messagesBeispielaufruf
curl https://api.deutschlandgpt.de/anthropic/v1/messages \
-X POST \
-H "Authorization: Bearer $DGPT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-4.5-sonnet",
"max_tokens": 0,
"messages": [
{
"role": "user",
"content": "string"
}
],
"system": "string",
"tools": [
{
"name": "string"
}
],
"tool_choice": {
"type": "auto"
},
"temperature": 0,
"top_p": 0,
"top_k": 0,
"stop_sequences": [
"string"
],
"stream": false,
"thinking": {
"type": "enabled",
"budget_tokens": 0
},
"metadata": {},
"service_tier": "string"
}'curl https://api.deutschlandgpt.de/anthropic/v1/messages \
-X POST \
-H "Authorization: Bearer $DGPT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-4.5-sonnet",
"max_tokens": 0,
"messages": [
{
"role": "user",
"content": "string"
}
],
"system": "string",
"tools": [
{
"name": "string"
}
],
"tool_choice": {
"type": "auto"
},
"temperature": 0,
"top_p": 0,
"top_k": 0,
"stop_sequences": [
"string"
],
"stream": false,
"thinking": {
"type": "enabled",
"budget_tokens": 0
},
"metadata": {},
"service_tier": "string"
}'import os, requests
response = requests.post(
"https://api.deutschlandgpt.de/anthropic/v1/messages",
headers={"Authorization": f"Bearer {os.environ['DGPT_API_KEY']}"},
json={
"model": "claude-4.5-sonnet",
"max_tokens": 0,
"messages": [
{
"role": "user",
"content": "string"
}
],
"system": "string",
"tools": [
{
"name": "string"
}
],
"tool_choice": {
"type": "auto"
},
"temperature": 0,
"top_p": 0,
"top_k": 0,
"stop_sequences": [
"string"
],
"stream": False,
"thinking": {
"type": "enabled",
"budget_tokens": 0
},
"metadata": {},
"service_tier": "string"
},
)
print(response.json())import os, requests
response = requests.post(
"https://api.deutschlandgpt.de/anthropic/v1/messages",
headers={"Authorization": f"Bearer {os.environ['DGPT_API_KEY']}"},
json={
"model": "claude-4.5-sonnet",
"max_tokens": 0,
"messages": [
{
"role": "user",
"content": "string"
}
],
"system": "string",
"tools": [
{
"name": "string"
}
],
"tool_choice": {
"type": "auto"
},
"temperature": 0,
"top_p": 0,
"top_k": 0,
"stop_sequences": [
"string"
],
"stream": False,
"thinking": {
"type": "enabled",
"budget_tokens": 0
},
"metadata": {},
"service_tier": "string"
},
)
print(response.json())const response = await fetch('https://api.deutschlandgpt.de/anthropic/v1/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.DGPT_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"model": "claude-4.5-sonnet",
"max_tokens": 0,
"messages": [
{
"role": "user",
"content": "string"
}
],
"system": "string",
"tools": [
{
"name": "string"
}
],
"tool_choice": {
"type": "auto"
},
"temperature": 0,
"top_p": 0,
"top_k": 0,
"stop_sequences": [
"string"
],
"stream": false,
"thinking": {
"type": "enabled",
"budget_tokens": 0
},
"metadata": {},
"service_tier": "string"
}),
});
console.log(await response.json());const response = await fetch('https://api.deutschlandgpt.de/anthropic/v1/messages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.DGPT_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"model": "claude-4.5-sonnet",
"max_tokens": 0,
"messages": [
{
"role": "user",
"content": "string"
}
],
"system": "string",
"tools": [
{
"name": "string"
}
],
"tool_choice": {
"type": "auto"
},
"temperature": 0,
"top_p": 0,
"top_k": 0,
"stop_sequences": [
"string"
],
"stream": false,
"thinking": {
"type": "enabled",
"budget_tokens": 0
},
"metadata": {},
"service_tier": "string"
}),
});
console.log(await response.json());Anfrage-Body
modelstringerforderlichRegistry-Modellname (z. B. claude-4.5-sonnet, gpt-4o, mistral-large). Jedes gehostete Modell ist über dieses Endpoint erreichbar — nicht nur Claude. Verfügbare Modelle mit /anthropic/v1/models aufzählen.
max_tokensintegererforderlichMaximale Anzahl zu generierender Tokens. Pflichtfeld (anders als bei den OpenAI-kompatiblen Endpoints).
messagesAnthropicMessage[]erforderlichAbwechselnde user- / assistant-Turns. Systemanweisungen gehören in das Top-Level-Feld system, nicht hierher.
rolestringerforderlichcontentstring | AnthropicContentBlock[]erforderlichEin einfacher String (Kurzform für einen Textblock) oder eine Liste von Content-Blocks.
systemstring | AnthropicTextBlock[]optionalSystem-Prompt: ein einfacher String oder eine Liste von Textblöcken (jeder Block kann einen cache_control-Breakpoint tragen).
toolsAnthropicTool[]optionalEigene Tools, die das Modell aufrufen darf. Geben Sie jedes tool_use-Ergebnis in einer folgenden user-Message als tool_result-Block zurück.
typestringoptionalWeglassen oder custom. Andere Werte kennzeichnen nicht unterstützte Server-Tools.
namestringerforderlichdescriptionstringoptionalWas das Tool tut — das Modell entscheidet damit, wann es aufgerufen wird.
input_schemaobjectoptionalJSON Schema der Tool-Argumente.
cache_controlAnthropicCacheControloptionalPrompt-Caching-Breakpoint. Wirksam, wenn der Request von einem Anthropic-Host bedient wird; für andere Provider ein No-op.
typestringerforderlichttlstringoptionalCache-Lebensdauer (TTL).
tool_choiceAnthropicToolChoiceoptionalWie das Modell die bereitgestellten Tools verwenden soll.
temperaturenumberoptionalSampling-Temperatur. Höher = zufälligere Ausgabe.
top_pnumberoptionalNucleus-Sampling.
top_knumberoptionalNur aus den Top-K-Optionen pro Token samplen.
stop_sequencesstring[]optionalEigene Sequenzen, die die Generierung stoppen.
streambooleanoptionalWenn true, wird mit Server-Sent Events im Anthropic-Streaming-Format geantwortet: message_start, content_block_start, content_block_delta, content_block_stop, message_delta, message_stop.
thinkingAnthropicThinkingConfigoptionalExtended-Thinking-Konfiguration. Wird auf die entsprechenden Reasoning-Optionen des Providers abgebildet, der das gewählte Modell hostet.
metadataobjectoptionalRequest-Metadaten.
user_idstring | nulloptionalOpaker Endnutzer-Identifikator.
service_tierstringoptionalWird akzeptiert, aber ignoriert — das Routing wird serverseitig entschieden.
Antwort
{
"id": "msg_abc123",
"type": "message",
"role": "assistant",
"model": "string",
"content": [
{
"type": "text",
"text": "string"
}
],
"stop_reason": "end_turn",
"stop_sequence": "string",
"usage": {
"input_tokens": 0,
"output_tokens": 0,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0
},
"prompt_cache": {
"cache_write_tokens": {
"5m": 0,
"1h": 0
},
"warnings": [
{
"code": "breakpoint_limit_exceeded",
"message": "string"
}
]
}
}{
"id": "msg_abc123",
"type": "message",
"role": "assistant",
"model": "string",
"content": [
{
"type": "text",
"text": "string"
}
],
"stop_reason": "end_turn",
"stop_sequence": "string",
"usage": {
"input_tokens": 0,
"output_tokens": 0,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0
},
"prompt_cache": {
"cache_write_tokens": {
"5m": 0,
"1h": 0
},
"warnings": [
{
"code": "breakpoint_limit_exceeded",
"message": "string"
}
]
}
}Die generierte Message. Mit stream: true wird stattdessen ein text/event-stream mit Anthropic-Streaming-Events zurückgegeben.
idstringerforderlichtypestringerforderlichrolestringerforderlichmodelstringerforderlichcontentAnthropicResponseContentBlock[]erforderlichstop_reasonstringerforderlichstop_sequencestring | nulloptionalusageAnthropicUsageerforderlichinput_tokensintegererforderlichoutput_tokensintegererforderlichcache_creation_input_tokensintegererforderlichIn den Prompt-Cache geschriebene Tokens (0 bei Providern ohne Prompt-Caching).
cache_read_input_tokensintegererforderlichAus dem Prompt-Cache gelesene Tokens (0 bei Providern ohne Prompt-Caching).
prompt_cacheobjectoptionalDeutschlandGPT-Erweiterung. Was mit den gesendeten cache_control-Breakpoints passiert ist. Fehlt vollstaendig, wenn es nichts zu melden gibt; eine Anfrage ohne cache_control bleibt also unveraendert. Siehe Abrechnung -> Prompt-Caching.
cache_write_tokensobjectCache-Write-Tokens nach TTL, wie vom Anbieter gemeldet: 125% des Eingabetarifs fuer 5m, 200% fuer 1h. Auf diesem Endpoint werden beide TTLs beachtet.
5mintegerTokens written at the default 5-minute TTL.
1hintegerTokens written at the extended 1-hour TTL.
warningsobject[]Breakpoints, die nicht genau wie geschrieben umgesetzt werden konnten. Nur vorhanden, wenn mindestens einer betroffen war.
codestringerforderlichStable machine-readable reason, so a client can branch without parsing prose.
messagestringerforderlichHuman-readable explanation naming the affected position.
Statuscodes
Die generierte Message. Mit stream: true wird stattdessen ein text/event-stream mit Anthropic-Streaming-Events zurückgegeben.
Ungültiger Request-Body.
AnthropicErrorFehlender oder ungültiger API-Key.
AnthropicErrorModell nicht gefunden, oder der API-Key hat keinen Zugriff darauf.
AnthropicError