There used to be a second model,
mode: onprem, which was the default: one
implicit organization, no signup endpoint, no entitlement gate. It has been
removed. A config file that still carries mode: loads unchanged — the value
is ignored — so nothing needs editing to upgrade.Self-hosting is unaffected. Running ManyLayers on your own infrastructure,
air-gapped or otherwise, was never what this setting controlled; see
Deployment.License enforcement
A self-hosted deployment optionally enforces a signed license file to control seat counts and expiry:An absent
license_file (empty string) keeps unlimited default behavior. A configured but invalid license file causes the gateway to refuse to start — it fails closed.Organizations
How it works
- Signup — customers sign up via
POST /auth/signup, which creates a new org and its first admin user. - Approval (optional) — when
saas.signup_approval_required: true, new orgs start aspending. All requests return 403 until an operator approves viaPOST /admin/orgs/{id}/approve. - Invites — org admins invite teammates via
POST /admin/org/invites. Recipients accept viaPOST /auth/invite/{token}/accept. - Org isolation — all data (teams, keys, conversations, knowledge bases, deployments) is fully scoped to the org.
Operator console
As the platform operator, you manage all orgs via admin API key:| Endpoint | Description |
|---|---|
GET /admin/orgs | List all orgs |
POST /admin/orgs/{id}/approve | Approve a pending org |
POST /admin/orgs/{id}/suspend | Suspend an org |
GET /admin/orgs/{id}/analytics | Per-org analytics |
GET /admin/orgs/{id}/usage | Per-org usage rollup |
PUT /admin/orgs/{id}/subscription | Assign a plan to an org |