Chat-Vervollständigung erstellen
Erstellt eine Modellantwort für die angegebene Chat-Konversation. OpenAI-kompatibel — richten Sie ein OpenAI SDK auf die Platform API Basis-URL und tauschen Sie den API-Key aus, um die meisten Apps zu migrieren.
Unterstützt Streaming via SSE (stream: true), Function Calling, strukturierte Ausgabe (json_schema) und multimodale Eingabe (Bilder, Dateien).
Unterstützte Anfrage-Felder: messages, model, max_completion_tokens, temperature, tools, parallel_tool_calls, reasoning_effort, response_format, stream, stream_options, prompt_cache_key. Andere OpenAI-Felder — einschließlich des veralteten max_tokens (verwenden Sie max_completion_tokens), top_p, n, stop, presence_penalty, frequency_penalty, seed, user, logit_bias und tool_choice — werden stillschweigend ignoriert. Wenn Sie tool_choice benötigen, verwenden Sie /v2/responses.
Prompt-Caching (Anthropic-Modelle). Die Cache-Lebensdauer beträgt ausschließlich fünf
Minuten — ttl: "1h" wird auf diesem Endpoint NICHT unterstützt. Markieren Sie das letzte Element eines
unveränderlichen Präfixes mit cache_control, und dieses Präfix wird beim Anbieter
zwischengespeichert; eine spätere Anfrage, die es Byte für Byte wiederholt, wird zum
Cache-Read-Tarif abgerechnet. Ohne Ihre Markierung wird nichts gecacht — wir setzen
niemals selbst Breakpoints, denn ob sich ein Cache-Write lohnt, hängt von Ihrem
Zugriffsmuster ab, nicht von unserem. Jeder Cache lebt fünf Minuten — ttl: "1h" wird
akzeptiert, aber noch nicht unterstützt und als marker_ttl_unsupported gemeldet statt
angewandt. Siehe Abrechnung → Prompt-Caching.
Prompt-Caching (Mistral-Modelle). Mistral cacht Präfixe automatisch, cache_control
bewirkt dort also nichts — senden Sie stattdessen prompt_cache_key: eine stabile
Zeichenkette pro Konversation oder Sitzung, wiederholt bei jeder Anfrage mit gemeinsamem
Präfix. Das Feld wird bedingungslos angewendet und kostet nichts extra (Mistral berechnet
keinen Cache-Write-Aufschlag), Ihr Wert wird Ihrem Workspace zugeordnet, und ein Treffer ist
eine Wahrscheinlichkeit, keine Zusage. Siehe
Abrechnung → Mistral-Modelle.
Beispielaufruf
curl https://api.deutschlandgpt.de/v2/chat/completions \
-X POST \
-H "Authorization: Bearer $DGPT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "system",
"content": null
}
],
"model": "gpt-4o",
"max_completion_tokens": 0,
"temperature": 0,
"stream": false,
"stream_options": {},
"tools": [
{
"type": "function",
"function": {
"name": "string"
}
}
],
"parallel_tool_calls": true,
"reasoning_effort": "none",
"response_format": {
"type": "text"
},
"prompt_cache_key": "conversation-42"
}'curl https://api.deutschlandgpt.de/v2/chat/completions \
-X POST \
-H "Authorization: Bearer $DGPT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "system",
"content": null
}
],
"model": "gpt-4o",
"max_completion_tokens": 0,
"temperature": 0,
"stream": false,
"stream_options": {},
"tools": [
{
"type": "function",
"function": {
"name": "string"
}
}
],
"parallel_tool_calls": true,
"reasoning_effort": "none",
"response_format": {
"type": "text"
},
"prompt_cache_key": "conversation-42"
}'import os, requests
response = requests.post(
"https://api.deutschlandgpt.de/v2/chat/completions",
headers={"Authorization": f"Bearer {os.environ['DGPT_API_KEY']}"},
json={
"messages": [
{
"role": "system",
"content": None
}
],
"model": "gpt-4o",
"max_completion_tokens": 0,
"temperature": 0,
"stream": False,
"stream_options": {},
"tools": [
{
"type": "function",
"function": {
"name": "string"
}
}
],
"parallel_tool_calls": True,
"reasoning_effort": "none",
"response_format": {
"type": "text"
},
"prompt_cache_key": "conversation-42"
},
)
print(response.json())import os, requests
response = requests.post(
"https://api.deutschlandgpt.de/v2/chat/completions",
headers={"Authorization": f"Bearer {os.environ['DGPT_API_KEY']}"},
json={
"messages": [
{
"role": "system",
"content": None
}
],
"model": "gpt-4o",
"max_completion_tokens": 0,
"temperature": 0,
"stream": False,
"stream_options": {},
"tools": [
{
"type": "function",
"function": {
"name": "string"
}
}
],
"parallel_tool_calls": True,
"reasoning_effort": "none",
"response_format": {
"type": "text"
},
"prompt_cache_key": "conversation-42"
},
)
print(response.json())const response = await fetch('https://api.deutschlandgpt.de/v2/chat/completions', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.DGPT_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messages": [
{
"role": "system",
"content": null
}
],
"model": "gpt-4o",
"max_completion_tokens": 0,
"temperature": 0,
"stream": false,
"stream_options": {},
"tools": [
{
"type": "function",
"function": {
"name": "string"
}
}
],
"parallel_tool_calls": true,
"reasoning_effort": "none",
"response_format": {
"type": "text"
},
"prompt_cache_key": "conversation-42"
}),
});
console.log(await response.json());const response = await fetch('https://api.deutschlandgpt.de/v2/chat/completions', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.DGPT_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"messages": [
{
"role": "system",
"content": null
}
],
"model": "gpt-4o",
"max_completion_tokens": 0,
"temperature": 0,
"stream": false,
"stream_options": {},
"tools": [
{
"type": "function",
"function": {
"name": "string"
}
}
],
"parallel_tool_calls": true,
"reasoning_effort": "none",
"response_format": {
"type": "text"
},
"prompt_cache_key": "conversation-42"
}),
});
console.log(await response.json());Anfrage-Body
messagesMessage[]erforderlichKonversationsverlauf. Fügen Sie system-, user-, assistant-, tool- und developer-Nachrichten ein.
modelstringerforderlichModell-ID (z. B. gpt-4o, claude-4.5-sonnet, gemini-2.5-flash). Verwenden Sie /v2/models, um verfügbare Textmodelle aufzulisten.
max_completion_tokensintegeroptionalObergrenze für generierte Token, einschließlich sichtbarer Ausgabe und Reasoning-Token.
temperaturenumberoptionalSampling-Temperatur (0–2). Höher = zufälligere Ausgabe. Setzen Sie nicht gleichzeitig temperature und top_p.
streambooleanoptionalWenn true, werden inkrementelle Token als Server-Sent Events gestreamt. Jede data:-Zeile ist ein JSON-Delta. Der Stream endet mit data: [DONE]. Nicht kompatibel mit dem json_schema-Antwortformat.
stream_optionsobjectoptionalOptionen für Streaming-Antworten. Nur gültig, wenn stream: true.
include_usagebooleanoptionalWenn true, wird ein abschließendes Chunk mit Token-Nutzungsstatistiken vor [DONE] gesendet.
toolsFunctionTool[]optionalFunktionen, die das Modell aufrufen kann. Wenn das Modell eine Funktion aufruft, geben Sie das Ergebnis in einer tool-Nachricht zurück.
typestringerforderlichfunctionobjecterforderlichnamestringerforderlichFunktionsname (a-z, A-Z, 0-9, Unterstriche, Bindestriche)
descriptionstringoptionalWas die Funktion tut — wird vom Modell verwendet, um zu entscheiden, wann sie aufgerufen wird
parametersobjectoptionalJSON Schema, das die Funktionsparameter beschreibt
cache_controlCacheControloptionalCacht die Tool-Definitionen (und damit auch den System-Prompt, da Anthropic Tools zuerst anordnet). Erfordert eine System-Nachricht in derselben Anfrage — ohne sie wird die Markierung verworfen und nicht auf die erste Nutzer-Nachricht verschoben, die sich bei jeder Anfrage aendert und daher nie zu einem Treffer fuehren wuerde.
typestringerforderlichttlstringoptionalCache-Lebensdauer. Auf DIESEM Endpoint wird 1h NICHT UNTERSTUETZT: es wird akzeptiert, damit bestehende Integrationen weiterlaufen, der Breakpoint wird aber mit der Standard-Lebensdauer von fuenf Minuten gesetzt, zum Fuenf-Minuten-Tarif abgerechnet (1,25-facher Eingabetarif, nicht 2-facher) und als Warnung marker_ttl_unsupported in prompt_cache gemeldet. Da damit alle Breakpoints dieselbe Lebensdauer haben, wird das Mischen beider Werte akzeptiert und Anthropics Reihenfolge-Regel (1h vor 5m) nicht erzwungen. Auf /anthropic/v1/messages WIRD 1h beachtet, dort ist cache_control Anthropics eigenes Feld. Wo nichts gecacht wird, werden die Markierungen vollstaendig ignoriert.
parallel_tool_callsbooleanoptionalDem Modell erlauben, mehrere Tools in einem einzigen Schritt aufzurufen.
reasoning_effortstringoptionalReasoning-Budget für Reasoning-Modelle (z. B. o3, o4-mini). Niedriger = schneller und günstiger; none deaktiviert erweitertes Denken.
response_formatobject | objectoptionalAusgabeformat einschränken. Verwenden Sie json_schema für strukturierte Ausgabe (Streaming wird nicht unterstützt).
prompt_cache_keystringoptionalOptionale stabile Kennung für Anfragen, die sich ein Prompt-Präfix teilen — eine Konversations-, Sitzungs- oder Workflow-ID. Erhöht die Prompt-Cache-Trefferquote bei Modellen, die Präfixe automatisch cachen (Mistral). Wird von Modellen ignoriert, die über explizite cache_control-Breakpoints cachen (Anthropic), sowie von Modellen ohne Prompt-Cache. Ihr Wert wird serverseitig Ihrem Workspace zugeordnet und kann daher nie mit einem anderen Tenant kollidieren oder auf dessen Cache zielen. Treffer sind Best-Effort und nie garantiert — ein Fehlschlag wird exakt wie eine ungecachte Anfrage abgerechnet, es geht also nichts verloren. Legen Sie keine Geheimnisse oder personenbezogenen Daten hinein.
Antwort
{
"id": "chatcmpl-xR4qT5Uy",
"object": "chat.completion",
"created": 0,
"model": "string",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "string",
"tool_calls": [
null
]
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 0,
"completion_tokens": 0,
"total_tokens": 0,
"prompt_tokens_details": {
"cached_tokens": 0,
"cache_write_tokens": 0
}
},
"prompt_cache": {
"cache_write_tokens": {
"5m": 0,
"1h": 0
},
"warnings": [
{
"code": "breakpoint_limit_exceeded",
"message": "string"
}
]
}
}{
"id": "chatcmpl-xR4qT5Uy",
"object": "chat.completion",
"created": 0,
"model": "string",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "string",
"tool_calls": [
null
]
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 0,
"completion_tokens": 0,
"total_tokens": 0,
"prompt_tokens_details": {
"cached_tokens": 0,
"cache_write_tokens": 0
}
},
"prompt_cache": {
"cache_write_tokens": {
"5m": 0,
"1h": 0
},
"warnings": [
{
"code": "breakpoint_limit_exceeded",
"message": "string"
}
]
}
}Chat-Vervollständigung (JSON) oder SSE-Stream, wenn stream: true
Ebenfalls verfügbar als text/event-stream
idstringobjectstringcreatedintegerUnix-Zeitstempel
modelstringchoicesChatCompletionChoice[]indexintegermessageobjectrolestringcontentstring | nulltool_callsToolCall[]finish_reasonstring | nullusageUsageprompt_tokensintegercompletion_tokensintegertotal_tokensintegerprompt_tokens_detailsobjectDie Cache-Aufteilung von prompt_tokens. prompt_tokens ist die GESAMTSUMME; diese Werte sind Teilmengen davon, keine Ergaenzungen.
cached_tokensintegerEingabetokens aus dem Prompt-Cache, abgerechnet zum Cache-Read-Tarif, sofern Prompt-Caching fuer Ihre Organisation aktiviert ist.
cache_write_tokensintegerIn den Prompt-Cache geschriebene Eingabetokens. Nur vorhanden, wenn Prompt-Caching fuer Ihre Organisation aktiviert ist.
prompt_cacheobjectDeutschlandGPT-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 /v2/chat/completions und /v2/responses ist das 1h-Kontingent immer 0, weil diese Endpoints den Ein-Stunden-Cache nicht unterstuetzen und einen ttl: "1h"-Breakpoint mit der Fuenf-Minuten-Lebensdauer schreiben.
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
Chat-Vervollständigung (JSON) oder SSE-Stream, wenn stream: true
Validierungsfehler oder nicht unterstützte Kombination
ErrorFehlender oder ungültiger API-Key
ErrorNicht genügend Guthaben
ErrorFunktion für diesen Workspace nicht aktiviert
ErrorModell nicht gefunden
Error