DeepSeek has released new documentation detailing the rate limits and isolation mechanisms for its API. The company outlines concurrency limits per account for different models, with a clear policy on how requests are counted and what happens when limits are exceeded.
According to the documentation, concurrency limits are calculated at the account level, regardless of which API key is used. A request is considered concurrent from the time it is sent until the model response is complete. When the limit is exceeded, the API returns an HTTP 429 error code.
DeepSeek also introduces a user_id parameter for fine-grained management. This parameter enables content safety isolation, KVCache isolation, and scheduling isolation for different users on the client side. For regular API users, all user_id values are combined for concurrency limit calculation. For users with increased concurrency quotas, DeepSeek imposes both a total concurrency limit and per-user_id limits: 500 for deepseek-v4-pro and 2500 for deepseek-v4-flash.
The user_id must be a string matching the regex [a-zA-Z0-9\-_]+ with a maximum length of 512 characters. DeepSeek warns not to include user privacy information in the user_id. The parameter can be set via the extra_body parameter when using the OpenAI SDK or through the Anthropic SDK.
Additionally, DeepSeek explains that after a request is sent, the server may keep the connection open while waiting for inference. Non-streaming requests may receive empty lines, and streaming requests may receive SSE keep-alive comments (: keep-alive). If inference does not start within 10 minutes, the server closes the connection.
Users requiring higher concurrency can submit a capacity expansion request at no additional cost, and DeepSeek will match appropriate concurrency based on business needs.