At 15:59 UTC today, two of the most-used model names in open-weight AI simply stop answering. DeepSeek is retiring deepseek-chat and deepseek-reasoner, the aliases that thousands of apps, scripts, and agent frameworks have hardcoded since the company’s models became the cheap default for anything that reasons. The company has flagged this date for three months, so the deadline itself is not the story. The story is that the fix everyone will reach for first — find the old name, paste in the new one — quietly changes how your requests behave and what they cost, and most teams will not notice until the bill or the latency graph does.

What actually goes dark at 15:59 UTC

The specifics are on DeepSeek’s own pricing and models page, which now carries the line that the model names deepseek-chat and deepseek-reasoner will be deprecated on 2026/07/24 15:59 UTC. Those two strings were never separate models. They were routing labels: deepseek-chat pointed at the non-thinking mode of the current generation, and deepseek-reasoner pointed at the thinking mode of the same model. Through the preview period they resolved to deepseek-v4-flash under the hood, kept alive purely for backward compatibility with code written before the V4 line landed in April.

After the cutoff, the compatibility shim goes away and only the explicit V4 identifiers answer: deepseek-v4-flash and deepseek-v4-pro. There is no announced grace alias, no soft redirect that keeps the old names limping along. Any request whose model field still reads deepseek-chat or deepseek-reasoner is a request to a name that no longer exists. This is the same class of housekeeping event we walked through when a coding harness changed its release contract mid-stream — cheap to handle if you catch it, painful if it catches you.

It helps to be clear about what a deprecation like this is and is not. It is not a model being switched off; deepseek-v4-flash, the engine both aliases already ran on, keeps serving traffic unchanged. It is a naming contract expiring. For three months the two old strings were a convenience layer that let pre-V4 code keep working without edits. That convenience always had a shelf life, and the shelf life ends this afternoon. The teams that feel it are the ones who treated the alias as permanent infrastructure rather than a temporary bridge — which, given how quietly the aliases worked, is a very large share of them.

Why the obvious swap is not a no-op

Here is where the tidy one-line migration goes wrong. deepseek-chat was the non-thinking alias — it answered directly, no chain of thought, no reasoning tokens. deepseek-v4-flash, the model you are told to move to, defaults the other way: thinking is enabled out of the box, per DeepSeek’s thinking-mode guide. So the mechanical rename — deepseek-chat becomes deepseek-v4-flash and nothing else changes — does change something. You have just turned on reasoning for every call that used to run without it.

That flip is not free. Thinking mode generates a separate stream of reasoning before the answer, returned in a reasoning_content field alongside the usual content. Those reasoning tokens are billed as output, and output is the expensive side of the meter: deepseek-v4-flash costs $0.14 per million input tokens but $0.28 per million output. A workload that was a lean question-and-answer loop yesterday can quietly double or triple its output token count today, plus the added wall-clock time of the model thinking before it speaks. Nothing errors. The numbers just drift.

The correct migration says out loud what the old alias assumed silently. To reproduce deepseek-chat, move to deepseek-v4-flash and set thinking to disabled. To reproduce deepseek-reasoner, move to the same model and leave thinking enabled — that path is a genuine like-for-like, and your reasoning still arrives in reasoningcontent exactly as before. In the OpenAI-compatible SDK the flag rides in extrabody, which is easy to miss precisely because it lives outside the normal arguments; the before-and-after is spelled out in the reference panel at the end of this piece.

The cost gap is worth making concrete. Say a service runs five million short completions a month on the old non-thinking alias, each returning a couple of hundred tokens. Rename it to deepseek-v4-flash on autopilot and every one of those calls now thinks first, often spending more tokens reasoning than answering; a response that was 200 output tokens can balloon past 1,000 once the chain of thought is counted, and output is billed at twice the input rate. The dollar figure is not catastrophic on its own, but it is a real, unplanned line item that appears with no code error, no alert, and no obvious cause — the worst kind of regression to trace weeks later. Pinning thinking to disabled makes the migration cost-neutral by construction.

The lineup you are actually choosing between

The retirement is also a nudge to re-pick your model on purpose rather than inherit an old default. The V4 line splits into two public tiers, and the gap between them is wide enough that picking by habit leaves money or capability on the table. deepseek-v4-flash is the cheap, fast worker the legacy aliases already resolved to, at $0.14 per million input tokens and $0.28 per million output. deepseek-v4-pro is the stronger, pricier sibling — the one DeepSeek’s own Anthropic-format mapping treats as the Opus-class option — at $0.435 input and $0.87 output. Both carry a one-million-token context window and can emit up to 384K output tokens in a single response, so context length is not the axis you are trading on; cost and reasoning depth are.

If your app was riding deepseek-chat for cost, staying on Flash and pinning thinking off keeps that economics intact. If you were on deepseek-reasoner for harder problems, Flash with thinking on is the honest continuation — but the retirement is a reasonable moment to test whether deepseek-v4-pro earns its roughly threefold output premium on your specific workload. This is the same open-weight cost calculus that decides whether a model is worth self-hosting at all, the thread we pulled on in the economics of Kimi K3’s open weights, and it rewards a deliberate choice over a reflexive one.

Claude Code and other Anthropic-format clients change differently

The rename is usually framed as an OpenAI-SDK problem, because that is how most people call DeepSeek. But the company also runs an Anthropic-compatible interface at api.deepseek.com/anthropic, and a growing number of teams route Claude Code and similar Anthropic-native tools through it to swap in a cheaper backend. On that path the moving parts are different. Model names still change to the V4 identifiers, with Claude Opus requests mapping to deepseek-v4-pro and Haiku or Sonnet requests mapping to deepseek-v4-flash. Reasoning is not the OpenAI-style thinking object there; it is an outputconfig.effort setting of high or max, and DeepSeek notes that Anthropic’s budgettokens field is accepted but ignored.

The practical failure mode is the same in both formats: the breakage lives wherever a model name is written down, and those places are rarely just one file. Environment variables, gateway routing rules, LangChain or LlamaIndex model arguments, evaluation harnesses, cron scripts, and copied-and-pasted cURL snippets all tend to carry their own frozen copy of deepseek-chat. Provider-abstraction layers make this worse by hiding the string one config level down, a portability seam we mapped in the look at reasoning-effort portability across providers. A repository-wide search for both legacy names is the unglamorous move that actually closes the gap.

Two spots catch people even after the code is clean. One is anything cached or queued: a job that serialized a request with the old model name yesterday and runs it tomorrow carries the dead string with it, so draining or rewriting in-flight work matters as much as patching the source. The other is the fallback branch. Plenty of production stacks list DeepSeek as a secondary provider that only fires when a primary is down — code that may not have executed in weeks and will not be exercised until an outage, at which point the retired name turns a routine failover into a second failure. Grep the fallbacks with the same care as the hot path.

The bigger reason this small change matters

DeepSeek is not a fringe endpoint you can afford to let break. The company went from an attention-grabbing V3 release to being the price floor that much of the open-weight ecosystem quietly benchmarks against, which is exactly why deprecating two strings ripples so far. When the cheap default changes its interface, everything built to lean on cheap defaults inherits the change. That is the real texture of the AI economy right now: the leverage is not only in the models but in the integration surface around them, and that surface moves on the provider’s schedule, not yours.

There is a habit worth taking from this beyond today’s fix. Aliases like deepseek-chat feel like stable ground because they keep working for months, but a backward-compatibility name is a promise with an expiry the provider sets, not you. The teams that will shrug this off are the ones already pinning explicit model versions, keeping provider strings in one config module instead of scattered through the code, and reading the changelog that DeepSeek publishes rather than waiting for a 400 to tell them something moved. None of that is exotic; it is the same discipline that makes any dependency upgrade boring. Today it is DeepSeek collapsing two aliases; next quarter it is another provider retiring a snapshot, and the shops that treated this migration as a fire drill will barely notice the next one.

One honest caveat before you touch production. DeepSeek’s public notice fixes the date, the 15:59 UTC time, and the model mapping, and the thinking-flag behavior above follows directly from its documented defaults — but exact routing can shift, and the only source of truth on cutover day is DeepSeek’s live docs, not a guide summarizing them. Confirm the current pricing and defaults against the provider before you flip anything, treat the deadline as firm rather than negotiable, and change the model name and the thinking flag in the same commit so the two never drift apart. Handled that way, this is fifteen minutes of careful editing. Handled by autopilot, it is a silent behavior change you go looking for later, after something already got more expensive.

Article Brief

Key Takeaways

5 Points30s Read

  1. Hard cutoff todayDeepSeek deprecates the deepseek-chat and deepseek-reasoner model names at 15:59 UTC on 2026-07-24; requests that still use them stop resolving after that.
  2. The replacementsBoth legacy names mapped to deepseek-v4-flash — deepseek-chat was its non-thinking mode, deepseek-reasoner its thinking mode. A like-for-like move lands on deepseek-v4-flash, with deepseek-v4-pro as the heavier option.
  3. The catchdeepseek-v4-flash defaults to thinking enabled. Rename deepseek-chat to it without a second thought and you switch on reasoning you never had before — more output tokens, higher latency, a bigger bill.
  4. The safe renamePin the behavior explicitly: send thinking type disabled to reproduce deepseek-chat, and leave thinking on to reproduce deepseek-reasoner.
  5. Anthropic-format users tooIf you point Claude Code or another Anthropic-SDK client at DeepSeek, the base URL and effort parameter change shape — the rename is not only an OpenAI-format problem.

1

2await client.chat.completions.create({ model: "deepseek-chat", messages });

3await client.chat.completions.create({ model: "deepseek-reasoner", messages });

4

5

6

7await client.chat.completions.create({

8 model: "deepseek-v4-flash",

9 messages,

10 extra_body: { thinking: { type: "disabled" } },

11});

12

13

14await client.chat.completions.create({

15 model: "deepseek-v4-flash",

16 messages,

17 extra_body: { thinking: { type: "enabled" } },

18});

This is a technical migration explainer for developers and is provided for general information only, not as operational or financial advice. Model names, pricing, defaults, and the deprecation timing are drawn from DeepSeek’s official documentation as of publication and can change; verify every value against DeepSeek’s live API docs before modifying production systems.