DeepSeek API 400 "Model Not Exist": deepseek-chat and deepseek-reasoner were retired
For two years deepseek-chat was the model id in every DeepSeek example, and deepseek-reasoner was the thinking version of the same model. In late July 2026 the DeepSeek API stopped accepting both. Requests that had worked the day before came back with HTTP 400 and the message Model Not Exist. The current docs list two ids, deepseek-flash and deepseek-v4-pro, and do not mention the old names at all, so anyone who pinned the old id in a config file, a cron job or a library default found out from the error.
Last verified September 18, 2026 against DeepSeek API docs: models and pricing, GitHub: apps failing with the retired id (July 25, 2026), GitHub: "mark deepseek-chat and deepseek-reasoner aliases as deprecated" (July 26, 2026) · 4 min read
| Provider | DeepSeek API (api.deepseek.com) |
| HTTP status | 400 Bad Request |
| Error type | invalid_request_error |
| Message | Model Not Exist |
| Models | deepseek-chat and deepseek-reasoner. deepseek-v4-flash still resolves but is served by V4.1 Flash |
| When it started | The first GitHub reports are dated July 24 to 26, 2026. DeepSeek did not publish a deprecation notice that we could find; the current docs simply no longer list the ids |
| How common | About 580,000 files on GitHub contain deepseek-chat and 100,000 contain deepseek-reasoner (GitHub code search, September 17, 2026) |
| Can you wait it out? | No. The ids are gone. Retrying returns the same 400 |
- Fastest fix at DeepSeek: rename
deepseek-chattodeepseek-flashand add"thinking": {"type": "disabled"}, or the model will think by default and your bill and latency change. Renamedeepseek-reasonertodeepseek-flashas is. - No code change: point
base_urlat an endpoint that still accepts the old ids. Ours does, with the same thinking defaults, on US GPUs. - Check libraries: if a framework has
deepseek-chatas its default model, update the framework, not just your call.
What the error looks like
{
"error": {
"message": "Model Not Exist",
"type": "invalid_request_error",
"param": null,
"code": "invalid_request_error"
}
}The status is 400, not 404, so many SDKs report it as a generic BadRequestError and the model id is not always in the message. If a request that has not changed starts failing with this body, the model id is the first thing to check.
The same body comes back for any id DeepSeek does not serve, including typos. What is new since July is that two ids that used to work are on that list.
Which ids changed, and what they map to now
| Id you may have in code | What it was | Status at api.deepseek.com | Current DeepSeek id | Same id on Inference APIs |
|---|---|---|---|---|
deepseek-chat | The chat endpoint, non-thinking mode (V3 line, then V4 Flash) | Rejected with 400 "Model Not Exist" since late July 2026 | deepseek-flash with thinking switched off | Works unchanged; thinking off by default |
deepseek-reasoner | The same model in thinking mode | Rejected with 400 since late July 2026 | deepseek-flash (thinking is its default) | Works unchanged; thinking on |
deepseek-v4-flash | DeepSeek V4 Flash (the 0731 release) | Accepted, but served by DeepSeek-V4.1-Flash and billed at the Flash price | deepseek-flash | Works and still runs the 0731 build |
deepseek-v4-pro | DeepSeek V4 Pro (0813 release) | Current | deepseek-v4-pro | Works unchanged |
The thinking-mode detail matters. deepseek-chat never returned reasoning tokens. deepseek-flash does by default, and reasoning tokens are billed as output. A rename without switching thinking off makes short requests slower and more expensive than they were.
Fix 1: rename the id at DeepSeek
Change the model string and, for anything that used deepseek-chat, disable thinking:
from openai import OpenAI
client = OpenAI(api_key="sk-...", base_url="https://api.deepseek.com")
# deepseek-chat was the NON-thinking mode. deepseek-flash thinks by default, so switch it off
# or you will pay for reasoning tokens you did not get before.
resp = client.chat.completions.create(
model="deepseek-flash",
messages=[{"role": "user", "content": "Summarise this in one line: ..."}],
extra_body={"thinking": {"type": "disabled"}},
)Then search your dependencies. LangChain, LlamaIndex, LiteLLM, Dify and many smaller wrappers shipped deepseek-chat as a default at some point. The GitHub reports for this error are mostly libraries and tools whose defaults had not been updated, not hand-written calls.
Fix 2: keep the old ids and change the base URL
DeepSeek V4 is an open-weight model, so hosts other than DeepSeek run it. We accept the retired ids as aliases and keep their behaviour: deepseek-chat runs with thinking off and deepseek-reasoner with thinking on, both on DeepSeek V4 Flash (the 0731 release). deepseek-flash maps to V4.1 Flash, as at DeepSeek. Tool calling and tool_choice work on all of them, including tool_choice: "required", which the old reasoner refused.
from openai import OpenAI
client = OpenAI(api_key="your-inferenceapis-key", base_url="https://api.inferenceapis.com/v1")
# "deepseek-chat" and "deepseek-reasoner" keep working. deepseek-chat answers without thinking,
# deepseek-reasoner thinks first, exactly as before. Both run DeepSeek V4 Flash (0731) on US GPUs.
resp = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": "Summarise this in one line: ..."}],
)
print(resp.choices[0].message.content)for m in deepseek-chat deepseek-reasoner deepseek-flash; do
curl -s https://api.inferenceapis.com/v1/chat/completions \
-H "Authorization: Bearer $INFERENCEAPIS_API_KEY" -H "Content-Type: application/json" \
-d "{\"model\":\"$m\",\"messages\":[{\"role\":\"user\",\"content\":\"Say ok\"}],\"max_tokens\":20}" \
| python3 -c "import sys,json; d=json.load(sys.stdin); print('$m', '->', d['choices'][0]['message']['content'], d['usage'].get('completion_tokens_details'))"
doneThe ids are listed by GET /v1/models, so client-side validation that checks the model list passes too.
What it costs, side by side
| DeepSeek API, deepseek-flash (peak / off-peak) | Inference APIs, deepseek-chat or deepseek-reasoner | |
|---|---|---|
| Input, cache miss | $0.30 / $0.15 per 1M | $0.19 per 1M |
| Input, cache hit | $0.006 / $0.003 per 1M | $0.04 per 1M |
| Output | $1.20 / $0.60 per 1M | $0.38 per 1M |
| Model served | DeepSeek-V4.1-Flash | DeepSeek-V4-Flash-0731 (V4.1 Flash is deepseek-flash here, $0.40 / $1.60) |
| Where it runs | DeepSeek, China | Together AI GPUs, United States |
| Retention | See DeepSeek's privacy policy | Zero, see /trust |
| Rate limits | Dynamic, per account | None published; prepaid balance is the only cap |
DeepSeek's prices are from its pricing page on September 17, 2026, and change by time of day. Ours are flat. If you are price-driven and can accept China hosting, DeepSeek off-peak is cheaper. If location, retention or a flat price matters, that is the case for a US host.
Frequently asked questions
Did DeepSeek announce the retirement?
Not in any place we could find. The docs were updated to list the new ids and the old ones stopped working. We date it from the first GitHub reports, July 24 to 26, 2026. If you know of an official notice, tell us and we will link it.
Is deepseek-flash the same model as deepseek-chat was?
No. deepseek-chat last pointed at DeepSeek V4 Flash; deepseek-flash is DeepSeek V4.1 Flash. DeepSeek also serves requests for the legacy deepseek-v4-flash id from V4.1 Flash now. If you need the 0731 build of V4 Flash specifically, it is deepseek-ai/DeepSeek-V4-Flash here.
Does deepseek-chat on Inference APIs return reasoning_content?
No. Thinking is off for that alias unless you send reasoning_effort or reasoning: {enabled: true} yourself. deepseek-reasoner returns reasoning_content on the message, and as delta.reasoning_content when streaming.
What about deepseek-coder?
That id was merged into deepseek-chat in 2024 and has not existed at DeepSeek since. We do not alias it.
Where Inference APIs fits
The second fix is what we sell. deepseek-chat, deepseek-reasoner, deepseek-v4-flash and deepseek-flash are all accepted ids on our endpoint, so a base URL change is the whole migration. The models run on GPUs in the United States with zero retention, billed per token from a prepaid balance. We are not cheaper than DeepSeek's own off-peak price and we say so in the table above.
Something changed or wrong? Tell us and we will re-verify the entry.
