{"record":{"id":"fc2784ce0549333e","repo":"BerriAI/litellm","slug":"key-user-api-key-dict-api-key-over-available-rpm","errorCode":null,"errorMessage":"Key={user_api_key_dict.api_key} over available RPM={available_rpm}. Model RPM={model_rpm}, Active keys={active_projects}","messagePattern":"Key=(.+?) over available RPM=(.+?)\\. Model RPM=(.+?), Active keys=(.+?)","errorType":"http","errorClass":"ProxyRateLimitError","httpStatus":429,"severity":"error","filePath":"litellm/proxy/hooks/dynamic_rate_limiter.py","lineNumber":219,"sourceCode":"                model_tpm,\n                model_rpm,\n                active_projects,\n            ) = await self.check_available_usage(model=data[\"model\"], priority=key_priority)\n            ### CHECK TPM ###\n            if available_tpm is not None and available_tpm == 0:\n                resolved_model, llm_provider = resolve_llm_provider_for_rate_limit(data.get(\"model\"))\n                raise ProxyRateLimitError(\n                    detail={\n                        \"error\": f\"Key={user_api_key_dict.api_key} over available TPM={available_tpm}. Model TPM={model_tpm}, Active keys={active_projects}\"\n                    },\n                    rate_limit_type=RateLimitType.TOKENS,\n                    model=resolved_model,\n                    llm_provider=llm_provider,\n                )\n            ### CHECK RPM ###\n            elif available_rpm is not None and available_rpm == 0:\n                resolved_model, llm_provider = resolve_llm_provider_for_rate_limit(data.get(\"model\"))\n                raise ProxyRateLimitError(\n                    detail={\n                        \"error\": f\"Key={user_api_key_dict.api_key} over available RPM={available_rpm}. Model RPM={model_rpm}, Active keys={active_projects}\"\n                    },\n                    rate_limit_type=RateLimitType.REQUESTS,\n                    model=resolved_model,\n                    llm_provider=llm_provider,\n                )\n            elif available_rpm is not None or available_tpm is not None:\n                ## UPDATE CACHE WITH ACTIVE PROJECT\n                asyncio.create_task(\n                    self.internal_usage_cache.async_set_cache_sadd(  # this is a set\n                        model=data[\"model\"],\n                        value=[user_api_key_dict.token or \"default_key\"],\n                    )\n                )\n        return None\n\n    async def async_post_call_success_hook(self, data: dict, user_api_key_dict: UserAPIKeyAuth, response):","sourceCodeStart":201,"sourceCodeEnd":237,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/hooks/dynamic_rate_limiter.py#L201-L237","documentation":"Error \"Key={user_api_key_dict.api_key} over available RPM={available_rpm}. Model RPM={model_rpm}, Active keys={active_projects}\" thrown in BerriAI/litellm.","triggerScenarios":"Thrown at litellm/proxy/hooks/dynamic_rate_limiter.py:219 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Reduce request rate for this key.","Wait for available RPM to free up as other keys' usage declines.","Request a higher RPM allocation for the model."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}