Wer DeepSeek im eigenen Programm nutzen will, braucht die API. Diese Anleitung zeigt, wie Sie einen API-Key anlegen, den ersten Aufruf mit curl und Python absetzen, den Thinking-Modus steuern, Streaming, JSON-Ausgabe und Werkzeugaufrufe nutzen und was die Felder in der Antwort bedeuten. Alle Beispiele haben wir am 17. September 2026 gegen die echte API ausgeführt; die Antworten sind wörtlich übernommen. Wer nur gelegentlich Fragen stellen will, braucht das nicht: Der Chat mit V4.1-Flash und der Chat mit V4-Pro auf deepseek.de laufen ohne Anmeldung im Browser.
Inhalt
- API oder Chat: Was passt zu Ihnen?
- API-Key anlegen
- Basis-URLs und Modellnamen
- Erster Aufruf mit curl
- Python mit dem openai-SDK und Thinking-Modus
- Streaming
- JSON-Ausgabe
- Werkzeugaufrufe (Tool Calls)
- Responses API und Anthropic-Format
- Abrechnung verstehen: Token, Cache, Nebenzeiten, Limits
- Fehlercodes 401, 402, 429
- Häufige Fragen
- Quellen und Änderungen
API oder Chat: Was passt zu Ihnen?
Die API ist die richtige Wahl, wenn ein Programm das Modell aufrufen soll: ein Skript, das hundert Produktbeschreibungen zusammenfasst, ein Support-Bot auf der eigenen Website, Datenextraktion aus Dokumenten, ein Agent mit Werkzeugen oder Claude Code beziehungsweise Codex mit DeepSeek als Modell. Sie zahlen nach verbrauchten Token direkt an DeepSeek.
Der Chat auf deepseek.de reicht, wenn Sie Texte formulieren, übersetzen, zusammenfassen oder Fragen stellen wollen, ohne etwas zu installieren: auf der Startseite mit V4.1-Flash, unter /pro/ mit V4-Pro (Anleitung: DeepSeek auf Deutsch nutzen). Auch dieser Chat nutzt die hier beschriebene API, nur verwaltet deepseek.de den Schlüssel.
API-Key anlegen
- Registrieren Sie sich auf platform.deepseek.com (ein Entwicklerkonto, unabhängig von der DeepSeek-App).
- Laden Sie unter Top up Guthaben auf. Ohne Guthaben antwortet die API mit dem Fehler 402 (Abschnitt 12).
- Erzeugen Sie unter API keys einen Schlüssel; er wird nur einmal angezeigt. Ist er versehentlich öffentlich geworden, löschen Sie ihn dort und erzeugen einen neuen.
Behandeln Sie den Schlüssel wie ein Passwort: nicht in den Quellcode, nicht ins Git-Repository, nicht ins Browser-JavaScript. Üblich ist eine Umgebungsvariable:
export DEEPSEEK_API_KEY="<DEIN_API_KEY>"
Basis-URLs und Modellnamen
Die DeepSeek-API spricht die Formate von OpenAI und Anthropic. Sie können deren SDKs verwenden und müssen nur Basis-URL, Schlüssel und Modellnamen austauschen.
| Parameter | Wert |
|---|---|
| Basis-URL (OpenAI-Format) | https://api.deepseek.com |
| Basis-URL (Anthropic-Format) | https://api.deepseek.com/anthropic |
Modell deepseek-flash |
DeepSeek-V4.1-Flash: 1 M Token Kontext, bis 384 K Token Ausgabe, Thinking- und Non-Thinking-Modus |
Modell deepseek-v4-pro |
DeepSeek-V4-Pro-0813: gleiche Kontext- und Ausgabegrenzen; laut DeepSeek „bis auf Weiteres“ weiter verfügbar |
Die alten Namen deepseek-v4-flash und deepseek-v4-flash-vision-exp werden noch angenommen, aber von V4.1-Flash bedient; deepseek-chat und deepseek-reasoner sind seit dem 24. Juli 2026 abgeschaltet. Für neue Projekte ist deepseek-flash der Standard. Was die Modelle unterscheidet, steht in der Modellübersicht und im Beitrag DeepSeek V4: die neue Modellgeneration.
Erster Aufruf mit curl
Der Endpunkt für Chat-Anfragen ist /chat/completions. Das Beispiel schaltet den Thinking-Modus ab, damit die Antwort schnell kommt:
curl https://api.deepseek.com/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \
-d '{
"model": "deepseek-flash",
"messages": [
{"role": "system", "content": "Du bist ein hilfreicher Assistent. Antworte auf Deutsch."},
{"role": "user", "content": "Nenne drei Sehenswürdigkeiten in Winterthur, je ein Satz."}
],
"thinking": {"type": "disabled"},
"stream": false
}'
Antwort nach 1,2 Sekunden, gekürzt:
{
"id": "6269c3a0-c1f9-4712-9ba5-b7543f11a2b8",
"object": "chat.completion",
"model": "deepseek-flash",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "1. Das Schloss Kyburg bei Winterthur ist eine gut erhaltene mittelalterliche Burg und ein beliebtes Ausflugsziel.\n2. Das Technorama ist ein Science Center mit interaktiven Experimenten […]\n3. Der Stadtgarten Winterthur ist eine grüne Oase im Zentrum […]"
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 38,
"completion_tokens": 98,
"total_tokens": 136,
"prompt_cache_hit_tokens": 0,
"prompt_cache_miss_tokens": 38
}
}
choices[0].message.content ist der Antworttext, finish_reason: "stop" heißt regulär beendet (bei "length" hat max_tokens abgeschnitten), und usage zählt die abgerechneten Token nach Eingabe, Ausgabe, Cache-Treffern und Cache-Fehlschlägen (Abschnitt 11).
Python mit dem openai-SDK und Thinking-Modus
Installieren Sie das OpenAI-Paket (pip install openai) und setzen Sie Basis-URL und Schlüssel. Der Thinking-Modus ist standardmäßig an, mit Aufwandsstufe high. Gesteuert wird er über thinking (an/aus; im SDK über extra_body, weil das Feld dort fehlt) und reasoning_effort mit low, high oder max (Zwischenwerte wie medium werden darauf abgebildet).
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com")
r = client.chat.completions.create(
model="deepseek-flash",
messages=[{"role": "user",
"content": "Was ist größer: 9.11 oder 9.8? Antworte in einem Satz."}],
reasoning_effort="low",
extra_body={"thinking": {"type": "enabled"}},
)
print(r.choices[0].message.reasoning_content) # Gedankengang
print(r.choices[0].message.content) # Antwort
print(r.usage)
Ergebnis (V4.1-Flash, Thinking an, Effort low, 1,1 Sekunden):
reasoning_content: We need answer German. Need compare 9.11 vs 9.8. Numerically 9.8 > 9.11. Need one sentence. Ensure no confusion with dates. […] In German decimal comma. One sentence.
content: 9,8 ist größer als 9,11, denn 9,8 entspricht 9,80 und 9,80 > 9,11.
"usage": {"prompt_tokens": 53, "completion_tokens": 117,
"completion_tokens_details": {"reasoning_tokens": 81}, …}
Der Gedankengang kommt im Feld reasoning_content zurück und zählt als Ausgabe-Token (hier 81 von 117); das Modell denkt oft auf Englisch, auch wenn die Antwort deutsch ist. Ohne Werkzeuge müssen Sie reasoning_content nicht zurückschicken, mit Werkzeugen zwingend (Abschnitt 8). Derselbe Aufbau mit deepseek-v4-pro und reasoning_effort="high" bei einer Rechenaufgabe (Zug 9:40 ab Winterthur, 10:05 in Zürich, 28 km; Durchschnittsgeschwindigkeit?):
V4-Pro, Thinking an, Effort high (3,3 Sekunden, 108 Reasoning-Token): Fahrzeit: 25 min = 25/60 h = 5/12 h […] v = 28 km / (5/12 h) = 28 · 12/5 = 67,2 – Durchschnittsgeschwindigkeit: 67,2 km/h
Für einfache Aufgaben reicht low, high ist der Standard für Agenten, max für schwierige Probleme; je höher, desto mehr Reasoning-Token und Wartezeit.
Streaming
Mit stream=True liefert die API die Antwort stückweise als Server-Sent Events, so dass ein Chat-Fenster den Text laufend anzeigen kann; stream_options={"include_usage": True} liefert am Ende die Token-Zählung:
stream = client.chat.completions.create(
model="deepseek-flash",
messages=[{"role": "user", "content": "Erkläre in zwei Sätzen, was ein Token ist."}],
extra_body={"thinking": {"type": "disabled"}},
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
if chunk.usage:
print("\n", chunk.usage)
Im Test kamen 92 Teilstücke in 1,4 Sekunden; die ersten lauteten 'Ein', ' Token', ' ist', ' eine', ' grund', 'leg': mal ein Wort, mal ein Wortteil. Im Thinking-Modus kommt zuerst der Gedankengang als delta.reasoning_content, dann der Text in delta.content.
V4.1-Flash, Thinking aus: Ein Token ist eine grundlegende Texteinheit, in die ein Text bei der Verarbeitung durch KI-Modelle zerlegt wird – das kann ein Wort, ein Wortteil oder ein Satzzeichen sein. Modelle rechnen nicht mit Buchstaben oder ganzen Wörtern, sondern mit diesen Tokens, weshalb deren Anzahl bestimmt, wie viel Text ein Modell verarbeiten kann und wie viel die Nutzung kostet.
JSON-Ausgabe
Für die Weiterverarbeitung im Programm ist eine JSON-Struktur praktischer als Fließtext: response_format={"type": "json_object"}. Die Dokumentation verlangt, dass das Wort „json“ im Prompt vorkommt, am besten mit einem Beispiel des Formats, und dass max_tokens groß genug ist.
r = client.chat.completions.create(
model="deepseek-flash",
messages=[
{"role": "system", "content": "Extrahiere aus dem Text Firma, Stadt und Gründungsjahr. "
"Antworte als JSON im Format {\"firma\": \"...\", \"stadt\": \"...\", \"gruendungsjahr\": 0}."},
{"role": "user", "content": "Die Sulzer AG wurde 1834 in Winterthur gegründet und stellt Pumpen her."},
],
response_format={"type": "json_object"},
extra_body={"thinking": {"type": "disabled"}},
max_tokens=200,
)
daten = json.loads(r.choices[0].message.content)
V4.1-Flash, Thinking aus (0,9 Sekunden):
{"firma": "Sulzer AG", "stadt": "Winterthur", "gruendungsjahr": 1834}
Laut DeepSeek kann der JSON-Modus gelegentlich leeren Inhalt liefern; fangen Sie den Fall ab und wiederholen Sie dann.
Werkzeugaufrufe (Tool Calls)
Mit tools beschreiben Sie Funktionen, die das Modell aufrufen darf. Es führt sie nicht selbst aus, sondern liefert Name und Argumente; Ihr Programm ruft die Funktion auf und schickt das Ergebnis als Nachricht mit role: "tool" zurück. Beispiel mit einer erfundenen Wetterfunktion (V4.1-Flash, Thinking an, Effort low):
Runde 1, reasoning_content: We need to get weather for Winterthur. Use function get_weather.
tool_calls:{"id": "call_00_TWkNo5aLmruXonYD92808479", "type": "function", "function": {"name": "get_weather", "arguments": "{\"stadt\": \"Winterthur\"}"}},finish_reason: "tool_calls"Runde 2 (nach Rückgabe von „Bewölkt, 14 °C, leichter Wind“): In Winterthur ist es momentan bewölkt bei 14 °C, dazu weht ein leichter Wind.
Wichtig im Thinking-Modus: Sobald eine Anfrage tools enthält, muss die Assistant-Nachricht mitsamt reasoning_content in die Folgeanfrage, sonst antwortet die API mit Fehler 400; am einfachsten hängen Sie response.choices[0].message unverändert an die Nachrichtenliste an. Wie daraus ein Agent wird, zeigt der Beitrag DeepSeek V4 als KI-Agent.
Responses API und Anthropic-Format
Responses API. Seit August 2026 unterstützt DeepSeek auch das neuere Responses-Format von OpenAI unter derselben Basis-URL; darauf setzt Codex. Der Thinking-Modus heißt hier reasoning.effort mit none (aus), low, high oder max:
r = client.responses.create(
model="deepseek-flash",
instructions="Du bist ein knapper Assistent. Antworte auf Deutsch.",
input="Nenne zwei Unterschiede zwischen der Chat-Completions-API und der Responses API, je ein Satz.",
reasoning={"effort": "low"},
)
print(r.output_text)
V4.1-Flash, Responses API, Effort low (2,7 Sekunden): Die Responses API kann den Gesprächszustand serverseitig über
previous_response_idfortführen, während die Chat-Completions-API zustandslos ist und den gesamten Verlauf erneut übergeben muss. Die Responses API bietet integrierte Tools wie Web- und Dateisuche direkt an […]
Die Antwort beschreibt das Format von OpenAI allgemein und zeigt, dass man Modellaussagen gegen die Dokumentation prüfen muss: Bei DeepSeek ist previous_response_id nicht unterstützt (zustandslos, store immer false), eingebaute Web- oder Dateisuche gibt es nicht. Nicht unterstützte Parameter werden stillschweigend ignoriert.
Anthropic-Format. Wer mit dem Anthropic-SDK arbeitet oder Claude Code mit DeepSeek betreiben will, nutzt die Basis-URL https://api.deepseek.com/anthropic. Modellnamen mit claude-opus werden auf deepseek-v4-pro abgebildet, claude-sonnet, claude-haiku und unbekannte Namen auf deepseek-flash.
import anthropic
client = anthropic.Anthropic(api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com/anthropic")
msg = client.messages.create(
model="deepseek-flash", max_tokens=300,
system="Antworte auf Deutsch, höchstens zwei Sätze.",
thinking={"type": "disabled"},
messages=[{"role": "user", "content": "Was ist der Unterschied zwischen einem API-Key und einem Passwort?"}],
)
print(msg.content[0].text, msg.usage)
V4.1-Flash, Anthropic-Format, Thinking aus (1,3 Sekunden): Ein API-Key ist ein oft langlebiger, maschinenlesbarer Schlüssel zur Identifikation einer Anwendung, während ein Passwort ein geheimes, meist benutzerspezifisches Authentifizierungsmerkmal ist. API-Keys werden häufig in Requests mitgesendet und seltener geändert, Passwörter dagegen regelmäßig erneuert und nie im Klartext übertragen.
Zurück kam stop_reason: "end_turn" und usage: {"input_tokens": 33, "output_tokens": 90}. Den Denkaufwand steuern Sie hier mit output_config: {"effort": …}; budget_tokens wird ignoriert.
Abrechnung verstehen: Token, Cache, Nebenzeiten, Limits
DeepSeek rechnet pro Token ab, getrennt nach Eingabe und Ausgabe. Die aktuellen Sätze stehen auf der offiziellen Preisseite; wir nennen bewusst keine Zahlen, weil sie sich mehrfach im Jahr ändern. Drei Konzepte beeinflussen die Rechnung stark:
Context Caching
Die API speichert Eingabe-Präfixe automatisch zwischen. Beginnen mehrere Anfragen mit demselben Text (System-Prompt oder Dokument, dann verschiedene Fragen), werden die übereinstimmenden Token als Cache-Treffer deutlich günstiger abgerechnet; Sie müssen nur den gleichbleibenden Teil an den Anfang stellen. Im Test: ein System-Prompt mit rund 1.590 Token (ein Auszug aus der API-Dokumentation), zweimal mit verschiedenen Fragen:
| Anfrage | prompt_tokens | prompt_cache_hit_tokens | prompt_cache_miss_tokens |
|---|---|---|---|
| 1. Frage (Bildformate) | 1.598 | 0 | 1.598 |
| 2. Frage (Größenlimit), 1 Sekunde später | 1.605 | 1.408 | 197 |
Beim zweiten Aufruf kamen 1.408 Token aus dem Cache; nicht der ganze System-Prompt, weil der Cache in Blöcken arbeitet und nur vollständige Blöcke zählt. Ein Eintrag bleibt laut Dokumentation nach der letzten Nutzung „einige Stunden bis einige Tage“ erhalten, garantiert wird ein Treffer nicht.
Spitzen- und Nebenzeiten
Seit August 2026 gibt es Spitzen- und Nebenzeittarife; die Nebenzeit ist halb so teuer. Spitzenzeit ist montags bis freitags von 01:00 bis 04:00 und 06:00 bis 10:00 UTC, in Deutschland also vormittags (03:00 bis 06:00 und 08:00 bis 12:00 MESZ). Nachmittags, abends und am Wochenende ist es günstiger; Stapelverarbeitung lässt sich entsprechend planen.
Rate Limits
DeepSeek begrenzt nicht die Anfragen pro Minute, sondern die gleichzeitig laufenden Anfragen pro Konto: 2.500 für deepseek-flash, 500 für deepseek-v4-pro, gezählt von der Absendung bis zum Ende der Antwort. Darüber kommt Fehler 429. Bei hoher Auslastung hält der Server die Verbindung mit Leerzeilen oder SSE-Kommentaren (: keep-alive) offen; Ihr Client sollte das aushalten.
Fehlercodes 401, 402, 429
Die API antwortet mit üblichen HTTP-Statuscodes:
| Code | Bedeutung | Was tun |
|---|---|---|
| 401 | Schlüssel falsch oder fehlt | Schlüssel prüfen oder neu erzeugen. Im Test mit falschem Schlüssel: {"message": "Authentication Fails, Your api key: ****ssel is invalid", "type": "authentication_error"} |
| 402 | Kein Guthaben (Insufficient Balance) | Guthaben unter Top up aufladen; typisch bei neuen Konten, die den Schlüssel vor der ersten Zahlung anlegen. |
| 429 | Zu viele gleichzeitige Anfragen | Parallelität senken, mit wachsender Wartezeit wiederholen. |
| 400 | Anfrageformat ungültig | JSON prüfen; im Thinking-Modus mit Werkzeugen: fehlt reasoning_content? |
| 422 | Parameter ungültig | Fehlermeldung lesen, Parameter anpassen. |
| 500 / 503 | Serverfehler / überlastet | Kurz warten und wiederholen. |
Das openai-SDK wirft bei 401 eine AuthenticationError, bei 429 eine RateLimitError und wiederholt Anfragen bei 429, 500 und 503 standardmäßig zweimal.
Häufige Fragen
Kann ich den DeepSeek-Chat auf deepseek.de über die API steuern?
Nein. deepseek.de ist eine unabhängige Demoseite ohne eigene API; Sie brauchen ein Konto auf platform.deepseek.com und einen eigenen Schlüssel.
Welches Modell soll ich nehmen?
deepseek-flash. V4.1-Flash ist das aktuelle Modell und liegt laut DeepSeek in Tests vor V4-Pro. deepseek-v4-pro bleibt vorerst verfügbar, V4.1-Pro ist angekündigt. Zum Vergleich mit anderen Anbietern: DeepSeek vs. ChatGPT.
Soll ich den Thinking-Modus ein- oder ausschalten?
Für Übersetzungen, Zusammenfassungen und Datenextraktion aus (schneller, weniger Ausgabe-Token). Für Rechnen, Logik, Programmierung und Agenten ein, mit low für einfache und high oder max für schwierige Aufgaben.
Wie viele Token hat mein Text?
Das Feld usage jeder Antwort zeigt es. Vorab schätzen können Sie mit dem Tokenizer auf der Seite Token & Token Usage, dort gibt es auch einen Rechner für Bild-Token. Weitere Fragen beantwortet unsere FAQ.
Quellen und Änderungen
- DeepSeek API Docs: Your First API Call, Models & Pricing (offizielle Preisseite), Thinking Mode, JSON Output, Tool Calls, Responses API, Anthropic API, Context Caching, Rate Limit & Isolation, Error Codes, Change Log; Stand 17.09.2026
- DeepSeek: DeepSeek-V4.1-Flash (10.09.2026) und DeepSeek-V4-Pro GA (13.08.2026)
- Eigene Tests am 17.09.2026 mit openai-SDK 3.14.1, anthropic-SDK 1.6.0 und curl
Änderungen: 17.09.2026 – Beitrag vollständig neu geschrieben als Einstiegsanleitung. Die Fassung vom 14.08.2026 („DeepSeek verteuert API-Zugang für V4-Modelle deutlich“) war eine Preismeldung, die seit der Preisänderung vom 10.09.2026 überholt war; Preisangaben wurden entfernt, es gilt die offizielle Preisseite. Neu: API-Key, curl- und Python-Beispiele, Thinking-Steuerung, Streaming, JSON, Tool Calls, Responses API, Anthropic-Format, Cache-, Nebenzeit- und Limit-Konzepte, Fehlercodes. Alle Beispiele und Antworten wurden eigens für diese Fassung ausgeführt.

