DeepSeek API migration before July 24: replace legacy model names safely
Quick answer
DeepSeek will make deepseek-chat and deepseek-reasoner inaccessible after July 24, 2026 at 15:59 UTC. Replace both aliases before the deadline:
| Legacy model | Explicit replacement | Thinking mode |
|---|---|---|
deepseek-chat |
deepseek-v4-flash |
Disabled |
deepseek-reasoner |
deepseek-v4-flash |
Enabled |
Do not replace deepseek-chat with deepseek-v4-flash and stop there. DeepSeek documents thinking mode as enabled by default on the V4 models, so a model-name-only change can alter latency, token use, and response shape. Make the mode explicit, then test streaming, JSON output, tool calls, and multi-turn state.
deepseek-v4-pro is an optional quality upgrade, not the automatic successor to deepseek-reasoner. Start with V4 Flash to preserve the current alias behavior and promote selected tasks to Pro only after an evaluation justifies the extra cost.
Who this is for
This guide is for developers calling the official DeepSeek API directly or through an OpenAI-compatible SDK, an Anthropic-compatible client, a provider adapter, or an AI coding tool. It focuses on production migration, not on self-hosted DeepSeek weights.
If your application already routes several providers, use the same provider-adapter pattern described in the GitHub Models retirement checklist. If you are choosing models for a new product rather than replacing a live dependency, start with a small, task-specific evaluation like the one in the GPT-5.6 migration checklist.
What changes on July 24
DeepSeek introduced deepseek-v4-flash and deepseek-v4-pro on April 24. Both official API models support OpenAI Chat Completions and Anthropic API formats, a 1M-token context window, thinking and non-thinking modes, JSON output, and tool calls.
During the transition, the old names are compatibility aliases:
-
deepseek-chatroutes to V4 Flash with thinking disabled. -
deepseek-reasonerroutes to V4 Flash with thinking enabled. - Neither alias routes to V4 Pro.
- After July 24 at 15:59 UTC, both aliases become inaccessible.
The deadline is a confirmed API retirement. It is not evidence that a different model will launch that day. Plan against the documented shutdown, not rumors about what may replace the aliases.
Choose Flash or Pro deliberately
DeepSeek's current pricing page lists these rates per one million tokens:
| Model | Cache-miss input | Output | Best starting role |
|---|---|---|---|
deepseek-v4-flash |
$0.14 | $0.28 | Existing chat/reasoner traffic, high-volume tasks, first migration target |
deepseek-v4-pro |
$0.435 | $0.87 | Tasks where your own eval shows a meaningful quality gain |
Both models currently list 1M context and a 384K maximum output. Those limits are ceilings, not a reason to send an entire repository or document by default. Measure prompt size, cache-hit rate, time to first token, total latency, and successful task completion on your own workload.
A practical routing rule is:
Was the request previously sent to deepseek-chat?
-> V4 Flash + thinking disabled
Was it previously sent to deepseek-reasoner?
-> V4 Flash + thinking enabled
Does a representative eval show Flash misses an important task?
-> Test V4 Pro for that route only
Migrate in six steps
1. Find every model-name dependency
Search code, deployment variables, workflow files, dashboards, saved agent profiles, and proxy configuration:
rg -n 'deepseek-(chat|reasoner)|DEEPSEEK_MODEL|model.*deepseek' . \
--glob '!node_modules/**' --glob '!dist/**'
Also inspect defaults hidden in third-party integrations. A UI label such as “DeepSeek” may still serialize an old model ID.
2. Put model and mode behind one adapter
Preserve existing behavior explicitly with the OpenAI Python SDK:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com",
)
response = client.chat.completions.create(
model="deepseek-v4-flash",
messages=messages,
extra_body={"thinking": {"type": "disabled"}},
)
For the old reasoner route, set type to enabled and choose reasoning_effort="high" or "max" when the task warrants it. Keep the mode in configuration rather than scattering it across prompts.
3. Check parameter behavior
In thinking mode, DeepSeek says temperature, top_p, presence_penalty, and frequency_penalty have no effect, but compatibility code may not receive an error. Remove the assumption that those fields control a reasoning response.
The response also includes reasoning_content. If a thinking turn performs a tool call, pass the complete assistant message, including reasoning_content, back on subsequent requests. Omitting it can produce a 400 error.
4. Run a migration matrix
Use production-shaped prompts with secrets removed:
| Test | What must remain true |
|---|---|
| Non-thinking chat | No unexpected reasoning block; latency and output length stay within budget |
| Thinking task | Final answer quality is acceptable; reasoning fields are parsed safely |
| Streaming | Reasoning and final-content chunks are accumulated separately |
| JSON output | Parser success rate matches the current route |
| Tool call | Tool arguments validate; reasoning_content survives the tool loop |
| Multi-turn | Conversation state remains valid after several user and tool turns |
| Failure path | 400, 429, timeout, and empty-response handling still work |
Compare task success, not just wording similarity. A model migration can be correct even when prose changes, and unsafe even when one sample looks similar.
5. Shadow, canary, then cut over
Replay a small redacted sample against the explicit V4 route without serving its output. Review failures and cost first. Then canary a small share of live traffic, watching error rate, p95 latency, output tokens, tool-call completion, and user-visible fallback rate.
Deploy the explicit route well before the deadline. Keep a configuration rollback between Flash and Pro or between thinking modes, but do not treat the retiring aliases as a viable rollback target.
6. Prove the aliases are gone
After rollout, repeat the repository search, inspect deployed environment values, and check telemetry for the actual model ID. Add a CI rule that rejects the old strings in executable configuration while allowing them in migration documentation.
Common mistakes
- Changing only the model string and accidentally enabling thinking on former
deepseek-chattraffic. - Moving all reasoner traffic to V4 Pro without measuring whether Flash already meets the task.
- Assuming ignored sampling parameters still control thinking-mode output.
- Dropping
reasoning_contentduring a tool loop and discovering the400only in production. - Testing one prompt but not streaming, structured output, tools, multi-turn state, and error handling.
- Waiting for July 24 or treating launch rumors as part of the migration plan.
- Leaving an old alias in a hosted workflow, secret manager, proxy, or third-party agent profile after updating application code.
FAQ
Can I keep the same base URL and API key?
Yes. DeepSeek says the OpenAI-format base URL remains https://api.deepseek.com; update the model and make thinking mode explicit. The Anthropic-format endpoint is https://api.deepseek.com/anthropic.
Is V4 Pro the replacement for deepseek-reasoner?
No. The documented compatibility mapping sends deepseek-reasoner to V4 Flash with thinking enabled. Pro is a separate choice for tasks where its measured quality gain is worth the higher token price.
What is the safest replacement for deepseek-chat?
Use deepseek-v4-flash with thinking explicitly disabled. V4 thinking defaults to enabled, so explicit configuration preserves the old alias behavior.
Do I need to change tool-call code?
Possibly. In thinking mode, tool-call loops must return the assistant's reasoning_content in later requests. Add a multi-step tool test even if simple chat calls already pass.
Sources
- DeepSeek API changelog: https://api-docs.deepseek.com/updates/
- DeepSeek V4 Preview release: https://api-docs.deepseek.com/news/news260424/
- DeepSeek models and pricing: https://api-docs.deepseek.com/quick_start/pricing/
- DeepSeek thinking mode: https://api-docs.deepseek.com/guides/thinking_mode/
- DeepSeek tool calls: https://api-docs.deepseek.com/guides/tool_calls/
- DeepSeek Anthropic API compatibility: https://api-docs.deepseek.com/guides/anthropic_api/
Top comments (0)