Plan DeepSeek capacity around outstanding work, account sharing and the model you call. Use the live limit table and the current isolation rules before increasing concurrency.

How DeepSeek limits work

DeepSeek currently publishes active concurrency limits by account and model. A request remains active until its response completes, and calls made with different keys share the account calculation. This is different from treating a requests-per-minute figure as the only admission rule. Official DeepSeek documentation.

For your application, maintain a count of work that has been dispatched but has not reached a final outcome. Include streaming calls until they finish or are cancelled. If your workers only count jobs at submission time, the application can launch more overlapping work than intended while slow responses accumulate.

Separate user demand from provider admission. Accepting a task into your own queue need not immediately create a provider request. Give queued tasks a deadline and a visible state, then admit them when capacity is available. This lets the product handle a temporary burst without pretending that waiting work is already being processed by the model.

Original diagram of documented DeepSeek request admission, account capacity and retry flow.

Limits by tier and model

Verified rate limits
Model or scopeTierMetricLimitNotesSource
deepseek-flash
deepseek-flash
account defaultconcurrency2,500Account-wide active requests per model; not a requests-per-minute quota.Official source ↗
deepseek-v4-pro
deepseek-v4-pro
account defaultconcurrency500Account-wide active requests per model; not a requests-per-minute quota.Official source ↗

Last verified · Source ↗

Read the metric name beside the value in the live table. A concurrency entry is not an inferred RPM or TPM allowance. Keep the provider’s units in your monitoring and use the relevant model’s published rule. For broader planning, connect this page with DeepSeek cost conditions and account grant conditions.

Measure request duration under the workload you intend to run. Long answers, reasoning and tool interactions can change how long application work remains outstanding. Keep the task-level measure separate from the duration of an individual HTTP call. A tool-driven task may perform several calls, with application work between them, and should not occupy a provider slot while your own tool is doing unrelated work.

Use a central admission mechanism when several processes share the account. A local counter in each worker cannot see the others. Record model, start time, completion state and a safe task identifier. Avoid personal information in operational identifiers and keep the data necessary to diagnose capacity separate from full prompt content.

How to move up a tier

The current DeepSeek capacity reference points to a capacity-expansion request for workloads needing additional concurrency. Follow that official process and describe the real application rather than assuming that buying credit automatically changes the published account allowance. Official DeepSeek documentation.

Prepare evidence that explains the need: how jobs arrive, how long representative requests remain active, which models are used and what happens when the queue grows. Include the desired user experience and whether work can wait. This is more actionable than a peak worker count without task duration or a list of keys that all belong to the same account.

Scale after the account’s actual capacity is confirmed. Increase admitted work in controlled steps while tracking queue age, completion quality and error rate. Keep a rollback setting so you can reduce concurrency without redeploying code. An expanded allowance changes what the service may accept; it does not prove that the rest of your application can process results safely at that pace.

Reading limit headers and 429 responses

The official error guide identifies rate limiting separately from balance and server failures. Inspect the actual safe response body and status to distinguish those conditions. This guide does not invent an undocumented universal reset-header contract for DeepSeek. Official DeepSeek documentation.

Capture only the headers and response metadata needed for diagnosis. Never include authorization values in a support bundle. Compare the rejection time with your own active-request count and recent dispatch decisions. A shared account makes this especially useful: the source of load may be another worker rather than the process that first observed the error.

DeepSeek also documents keep-alive behavior while a request waits. A streaming parser must tolerate the documented comment form, and a non-streaming reader must tolerate leading empty lines. Treat connection activity separately from a completed answer. Your user interface should not present a keep-alive event as generated content. Official DeepSeek documentation.

Retry strategy the provider recommends

The provider recommends pacing requests for rate errors and waiting briefly before retrying temporary server failures. Implement a bounded application retry policy with delayed attempts and a clear final failure state. Permanent validation, authentication and balance conditions need a different action. Official DeepSeek documentation.

Release or update your local admission state on every completion path, including cancellation and exceptions. A leaked slot can make a healthy account appear permanently saturated. Conversely, releasing the slot before the response is finished can make the counter understate active work. Test these paths with local fixtures before increasing live traffic.

Avoid overlapping retry layers. If the SDK retries internally and a worker also retries the whole task, the resulting call count can be larger than your application intended. Choose which layer owns the policy, record attempt numbers and apply a total task deadline. A useful retry produces another controlled attempt, not an invisible extension of an already expired user request.

Test the queue’s shutdown behavior as well as its steady operation. Pause dispatch, let accepted work reach a final state and inspect any remaining jobs before restarting. A controlled shutdown makes it easier to distinguish an account rejection from a process restart that lost its state. Keep cancellation visible in the task record so operators do not assume a cancelled job still needs a provider retry.

Batch/async options that bypass limits

Do not infer a quota bypass from a local batch loop, an asynchronous client or an off-peak billing condition. The current capacity reference applies to the requests admitted by the service. If you use a separate documented API interface, verify its own rules explicitly before assuming it changes account admission.

A local queue is still useful for deferrable jobs: preserve their input, admit a controlled amount of work and store each result with a stable task identifier. Resume only unfinished tasks after a restart. That design improves recovery and pacing even when it provides no special provider-side quota or billing treatment.

Use the AI API cost calculator to examine the cost of the whole planned workload separately from how quickly it runs. Then return to the DeepSeek API overview or Python tutorial for the request contract. Capacity planning is complete only when the application also knows what to do with a failed, cancelled or incomplete task.

Frequently asked questions

Are DeepSeek limits calculated per key?
The current reference describes shared account concurrency. Do not multiply capacity by issuing additional keys.
Is concurrency the same as requests per minute?
No. Concurrency measures overlapping active requests. Request duration affects how much work remains active at a given time.
Why can a stream use a slot after text first appears?
The request has not completed merely because a chunk arrived. Keep application admission state until the response reaches its final outcome.
Does asynchronous Python bypass the limit?
No. It changes how your program waits. A queue and controlled admission are still needed for requests sharing the account.
Should every error be retried?
No. Distinguish temporary capacity or server failures from validation, authentication and balance conditions. Bound attempts and the total task deadline.
What should I include in a capacity request?
Describe arrival patterns, representative duration, models, queue behavior and user requirements. Use safe aggregate evidence rather than credentials or sensitive prompts.

Sources

Last verified · Source ↗