langgenius/dify · warning
The number of apps has reached the limit of your subscriptio
Error message
The number of apps has reached the limit of your subscription.
What it means
HTTP 403 from `cloud_edition_billing_resource_check("apps")`. When `resource == "apps"` and `0 < apps.limit <= apps.size`, the decorator aborts with `The number of apps has reached the limit of your subscription.` App creation is blocked at the plan's app count ceiling.
Source
Thrown at api/controllers/console/wraps.py:204
vector_space = FeatureService.get_vector_space(current_tenant_id)
if 0 < vector_space.limit <= vector_space.size:
abort(
403,
"The capacity of the knowledge storage space has reached the limit of your subscription.",
)
return view(*args, **kwargs)
features = FeatureService.get_features(current_tenant_id, exclude_vector_space=True)
if features.billing.enabled:
members = features.members
apps = features.apps
documents_upload_quota = features.documents_upload_quota
annotation_quota_limit = features.annotation_quota_limit
if resource == "members" and 0 < members.limit <= members.size:
abort(403, "The number of members has reached the limit of your subscription.")
elif resource == "apps" and 0 < apps.limit <= apps.size:
abort(403, "The number of apps has reached the limit of your subscription.")
elif resource == "documents" and 0 < documents_upload_quota.limit <= documents_upload_quota.size:
# The api of file upload is used in the multiple places,
# so we need to check the source of the request from datasets
source = request.args.get("source") or request.form.get("source")
if source == "datasets":
abort(403, "The number of documents has reached the limit of your subscription.")
else:
return view(*args, **kwargs)
elif resource == "workspace_custom" and not features.can_replace_logo:
abort(403, "The workspace custom feature has reached the limit of your subscription.")
elif resource == "annotation" and 0 < annotation_quota_limit.limit < annotation_quota_limit.size:
abort(403, "The annotation quota has reached the limit of your subscription.")
else:
return view(*args, **kwargs)
return view(*args, **kwargs)
return decoratedView on GitHub (pinned to ef8544b173)
Solutions
- Upgrade the workspace plan to raise the app limit.
- Delete or archive unused apps to free quota before creating new ones.
- Surface `FeatureService.get_features(...).apps` (`limit`/`size`) in the UI and disable the 'New App' button at the ceiling.
- Confirm the features cache is fresh if the count looks wrong.
Example fix
// before
await createApp(payload) // 403 at app cap
// after
const { apps } = await getFeatures()
if (apps.limit > 0 && apps.size >= apps.limit) {
alert('App limit reached — upgrade or delete an app.')
} else {
await createApp(payload)
} Defensive patterns
Strategy: validation
Validate before calling
from services.feature_service import FeatureService
_, tenant_id = current_account_with_tenant()
features = FeatureService.get_features(tenant_id, exclude_vector_space=True)
a = features.apps
def can_create_app() -> bool:
return not (a.limit > 0 and a.size >= a.limit)
if not can_create_app():
# surface upgrade / delete-app prompt instead of creating
... Type guard
def under_app_cap(limit: int, size: int) -> bool:
return not (limit > 0 and size >= limit) Try / catch
try:
resp = client.post("/apps", ...)
except HTTPError as err:
if err.response.status_code == 403 and "apps" in err.response.text:
# app limit reached — upgrade or delete an app
...
raise Prevention
- Show app count/limit in the UI; disable New App at the ceiling.
- Delete or archive unused apps to free quota.
- Upgrade the plan to raise the app limit.
- Refresh features cache if the count looks stale.
When it happens
Trigger: Creating a new app on a tenant whose app count equals or exceeds the plan's app limit (limit > 0).
Common situations: Free/starter plan with a low app cap; user duplicating apps to template many workflows; bulk import pushing the count over the limit.
Related errors
- The number of members has reached the limit of your subscrip
- The number of documents has reached the limit of your subscr
- The annotation quota has reached the limit of your subscript
- provider_quota_exceeded
- provider_quota_exceeded
AI-assisted analysis of langgenius/dify@ef8544b173 (2026-08-12).
Data as JSON: /api/errors/0d30c0b68f51a03c.
Report an issue: GitHub.