DeepSeek API 429 Rate Limits: Concurrency, user_id & Retries
📑 Table of Contents
Introduction
Search DeepSeek API 429, and many people first try “just open more API keys.” That usually does nothing.
DeepSeek API rate limits are counted as account concurrency, not per key. Pro defaults to 500 in-flight requests; Flash and Flash Vision default to 2500. Over the cap you get HTTP 429. This site is an independent community; treat the official Rate limit page as source of truth, and the pricing page for rates and peak windows.

I. What a DeepSeek API 429 Actually Limits
| Model | Default concurrency |
|---|---|
deepseek-v4-pro | 500 |
deepseek-v4-flash | 2500 |
deepseek-v4-flash-vision-exp | 2500 |
Official definition: from the moment a request is sent until the model finishes responding, it occupies one concurrency slot. All keys under the same account share the quota. Within the cap, requests are served; over it, you get 429.
Need more headroom: open an official ticket to raise the account limit — no extra fee, sized to your workload, not instant.
For model choice: hard reasoning and long agents → Pro; high-throughput daily work → Flash. See What is DeepSeek V4 Pro and DeepSeek API.
II. Why Rotating Many Keys Does Not Fix 429
The limit is at account scope. Rotating keys on the same platform account does not add concurrency slots.
More reliable moves:
- Client-side limiting: keep process concurrency under the quota with spare capacity for spikes.
- Queues: enqueue batch jobs and release by slot count instead of firing hundreds at once.
- Model split: do not send everything to Pro when Flash fits (500 vs 2500).
- Ticket when truly capped: official expansion is the raise path — not more keys in the frontend.
Peak pricing changes the bill; it does not replace the concurrency quota. Off-peak cost control: DeepSeek API price change.
III. user_id Isolation: Safety, Cache, and Per-User Caps After Expansion
You may pass user_id (regex [a-zA-Z0-9\-_]+, max 512; do not put real names or phone numbers).
Official uses include content-safety isolation, KVCache isolation (privacy), and scheduling isolation.
On concurrency:
- Default accounts: all
user_idvalues merge into the account total. - Expanded accounts: you get an account-wide cap and per-
user_idcaps (empty id counts as a special id). If one id exceeds its cap, only that id sees 429.
OpenAI SDK (user_id in extra_body):
from openai import OpenAI
client = OpenAI(api_key="YOUR_KEY", base_url="https://api.deepseek.com")
response = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "Hello"}],
extra_body={"user_id": "tenant_42_user_7"},
)
On the Anthropic-compatible surface, put user_id in metadata. Do not confuse thinking-mode fields with rate-limit fields — see DeepSeek thinking mode.

IV. Triaging 429 and Long Waits: Keepalive, Retries, Timeouts
After you send a request, the connection may idle-wait. Official keepalive: non-stream responses keep sending blank lines; streams send SSE : keep-alive comments. If you parse HTTP yourself, drop that noise — do not treat it as an error body. If inference has not started after 10 minutes, the server closes the connection.
Practical checklist:
- 429: stop retry storms → exponential backoff (e.g. 1s→2s→4s with a cap) → lower concurrency / switch to Flash / queue.
- Do not treat multi-key as expansion.
- Proxy timeouts: a short Nginx
proxy_read_timeoutcan cut the client while the server still holds a slot — “ghost occupancy,” especially on streams. - Agents / Codex: many tool turns and long connections fill Pro’s 500 faster; setup: DeepSeek Codex setup.
V. FAQ
How do I tell 429 from insufficient balance?
429 is concurrency / rate limiting; balance issues show up in billing and payment-class errors (trust the actual status and body). Check the status code first, then the usage console.
Does the web chat consume my API concurrency?
Web / App chat uses the product path — not the same “slots you open with your own API requests.” API integrations still follow the table above. Beginner path: 2026 DeepSeek guide.
How long does expansion take?
No fixed public SLA. File a ticket with workload details. Before a launch spike, apply early — or plan Flash / queue degradation.
Summary
Shortest DeepSeek API 429 path: account concurrency (Pro 500 / Flash 2500) → multi-key does not help → client limits and queues → ticket to expand → use user_id for isolation (per-id caps only after expansion). Official docs own the contract; this page is a triage order.
Further reading
DeepSeek V4 Pro Team
DeepSeek V4 Pro technical team
Ready to experience DeepSeek V4?
Start chatting now and feel the power of 1M-token context.
🚀 Start ChattingFree · No sign-up required
🧭 In this series
Explore related guides and hub pages in this topic cluster.
Category hub
Tutorial →