langgenius/dify · error · SeatsLimitExceeded
limit_exceeded
limit_exceeded
Error message
Unable to create account because the licensed seats limit was exceeded
What it means
Raised by SeatsLimitExceeded in _create_new_account when AccountService.create_account_and_tenant raises SeatsLimitExceededError. This is a licensing/billing control: the Dify edition enforces a maximum number of seated accounts per tenant/workspace, and new account creation is refused once the cap is hit.
Source
Thrown at api/controllers/console/auth/email_register.py:215
def _create_new_account(
self,
email: str,
password: str,
timezone: str | None = None,
language: str | None = None,
) -> Account:
try:
return AccountService.create_account_and_tenant(
email=email,
name=email,
password=password,
interface_language=get_valid_language(language),
timezone=timezone,
session=db.session(),
)
except SeatsLimitExceededError:
raise SeatsLimitExceeded()
except AccountRegisterError:
raise AccountInFreezeError()
View on GitHub (pinned to ef8544b173)
Solutions
- Upgrade the license/plan to raise the seat cap, or remove inactive member accounts to free seats.
- Check the billing/license admin page to see current seat usage versus the limit.
- If seats should be available, verify the license file/env is current and the seat-count job is not stale.
- Invite the user as a member of an existing workspace instead of creating a new account/tenant.
Example fix
// before: every signup creates a new tenant register(...); // after: when seats are full, offer invite link if (res.code === 'limit_exceeded') showUpgradeOrInviteUI();
Defensive patterns
Strategy: try-catch
Try / catch
try {
await register({ token, ... });
} catch (e) {
if (e.code === 'limit_exceeded') showUpgradeOrInviteUI();
else throw e;
} Prevention
- Monitor seat usage vs license cap before users hit the wall.
- Remove inactive members to free seats before onboarding.
- Keep the license file/env current; alert when seats approach the cap.
When it happens
Trigger: POST /console/api/email-register succeeds through all token checks, then create_account_and_tenant attempts to provision a tenant seat and the configured seat limit is reached.
Common situations: Self-hosted EE with a license seat cap exhausted; SaaS workspace on a plan whose seat quota is full; trial license expired or downgraded; orphaned inactive accounts still counting toward the limit.
Related errors
AI-assisted analysis of langgenius/dify@ef8544b173 (2026-08-12).
Data as JSON: /api/errors/04b12311d0bab53a.
Report an issue: GitHub.