specification: API Commons Rate Limits specificationVersion: '0.1' schema: https://raw.githubusercontent.com/api-evangelist/interface-research/main/schema/api-commons.yml#/$defs/RateLimits provider: Dify providerId: dify created: '2026-05-04' modified: '2026-09-06' generated: '2026-09-06' method: searched source: >- https://dify.ai/pricing, https://docs.dify.ai/en/cloud/use-dify/knowledge/knowledge-request-rate-limit, https://docs.dify.ai/en/api-reference/guides/errors description: >- Dify's published limits. Two independent mechanisms exist and they behave differently: a workspace-wide Knowledge Request rate limit measured per minute, and a plan-level API request quota measured per month on the free tier only. Neither is signalled with RateLimit-* response headers — Dify documents no rate-limit headers at all, so a client can only discover exhaustion from the status code and error code. This file replaces a 2026-05-04 scaffold whose headers and numbers were invented. headers: limit: null remaining: null reset: null retryAfter: null policy: null note: >- Checked, nothing to record. The published error guide documents only status codes and error codes on exhaustion; no X-RateLimit-*, RateLimit-* or Retry-After header is documented anywhere in the API reference or the OpenAPI, and the OpenAPI's 429 responses declare no headers. responseCodes: throttled: 429 quotaExceeded: 429 planLimitOnKnowledgeWrites: 403 error_codes: - code: too_many_requests status: 429 meaning: Concurrency ceiling — too many simultaneous requests for the app right now. action: Back off and retry with exponential backoff. - code: rate_limit_error status: 429 meaning: A Dify Cloud plan quota is exhausted (for example workflow executions). action: Retrying will not clear it; it resets with the quota period or a plan change. - code: forbidden status: 403 meaning: >- On Dify Cloud, knowledge write endpoints return plan limits as 403 with the same code used for access restrictions. action: >- Read the message, not the code — a 403 switch on code alone cannot tell a plan limit from an access restriction. limit_count: 5 limits: - name: Knowledge Request Rate Limit — Sandbox tier: Sandbox scope: workspace metric: knowledge_requests limit: 10 timeFrame: minute docs: https://docs.dify.ai/en/cloud/use-dify/knowledge/knowledge-request-rate-limit applies_to: - Creating, deleting and updating knowledge bases - Uploading, deleting, updating, disabling, enabling, archiving and restoring documents - Pausing and resuming document processing - Adding, deleting, updating and bulk-importing segments - Hit tests - Querying knowledge from apps and workflows (multi-path recall counts as one request) - name: Knowledge Request Rate Limit — Professional tier: Professional scope: workspace metric: knowledge_requests limit: 100 timeFrame: minute docs: https://docs.dify.ai/en/cloud/use-dify/knowledge/knowledge-request-rate-limit - name: Knowledge Request Rate Limit — Team tier: Team scope: workspace metric: knowledge_requests limit: 1000 timeFrame: minute docs: https://docs.dify.ai/en/cloud/use-dify/knowledge/knowledge-request-rate-limit - name: API Rate Limit — Sandbox tier: Sandbox scope: workspace metric: api_requests limit: 5000 timeFrame: month docs: https://dify.ai/pricing - name: API Rate Limit — Professional and Team tier: Professional, Team scope: workspace metric: api_requests limit: null timeFrame: month docs: https://dify.ai/pricing note: >- Published as "No Dify API Rate Limit". A concurrency ceiling still exists and surfaces as too_many_requests; its numeric value is not published. self_hosted: note: >- Community and Enterprise self-hosted deployments run on the operator's own infrastructure; Dify publishes no rate limits for them.