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 decorated

View on GitHub (pinned to ef8544b173)

Solutions

  1. Upgrade the workspace plan to raise the app limit.
  2. Delete or archive unused apps to free quota before creating new ones.
  3. Surface `FeatureService.get_features(...).apps` (`limit`/`size`) in the UI and disable the 'New App' button at the ceiling.
  4. 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

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


AI-assisted analysis of langgenius/dify@ef8544b173 (2026-08-12). Data as JSON: /api/errors/0d30c0b68f51a03c. Report an issue: GitHub.