langgenius/dify · warning
The number of members has reached the limit of your subscrip
Error message
The number of members has reached the limit of your subscription.
What it means
HTTP 403 from `cloud_edition_billing_resource_check("members")`. Inside the decorator, when `resource == "members"` and `0 < members.limit <= members.size`, it aborts with `The number of members has reached the limit of your subscription.` Invite/add-member operations are blocked at the quota ceiling.
Source
Thrown at api/controllers/console/wraps.py:202
if dify_config.DEPLOYMENT_EDITION != DeploymentEdition.CLOUD:
return view(*args, **kwargs)
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)View on GitHub (pinned to ef8544b173)
Solutions
- Upgrade the workspace plan to raise the seat limit.
- Remove an inactive member to free a seat before inviting a new one.
- Check `FeatureService.get_features(...).members` (`limit` vs `size`) in the UI and warn before the user attempts to invite.
- Confirm the features cache is fresh if you believe the count is wrong.
Example fix
// before
await inviteMember(email) // 403 when at seat limit
// after
const { members } = await getFeatures()
if (members.limit > 0 && members.size >= members.limit) {
alert('Seat limit reached — upgrade or remove a member.')
} else {
await inviteMember(email)
} 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)
m = features.members
def can_add_member() -> bool:
return not (m.limit > 0 and m.size >= m.limit)
if not can_add_member():
# surface upgrade / remove-member prompt instead of inviting
... Type guard
def seats_available(limit: int, size: int) -> bool:
return not (limit > 0 and size >= limit) Try / catch
try:
resp = client.post("/workspace/members/invite-email", ...)
except HTTPError as err:
if err.response.status_code == 403 and "members" in err.response.text:
# seat limit reached — upgrade or remove a member
...
raise Prevention
- Show current/limit seat count in the UI; disable invite at the ceiling.
- Remove inactive members to free seats before inviting.
- Upgrade the plan to raise the seat limit.
- Refresh features cache if the seat count looks stale.
When it happens
Trigger: Inviting a new member (or any operation gated by `cloud_edition_billing_resource_check("members")`) on a tenant whose seat count has reached the plan's seat limit.
Common situations: Team plan with a 3-seat limit trying to add a 4th member; bulk invite pushing count over the cap; stale features cache making `size` undercount (less common).
Related errors
- The number of apps has reached the limit of your subscriptio
- 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/82b6374a1f8a653a.
Report an issue: GitHub.