Manage organization limits
Set per-organization caps on fleet resources (nodes, CPU cores, memory, GPUs). Org limits sit on top of the platform license caps — every edge create / node add request is gated by both the license cap and the org's own cap.
Who can do this
Super-admins. Regular org members never see the Limits action.
Open the dialog
- Admin → Organizations (sidebar in admin section).
- Find the org row and click Limits in its action column.
- The dialog opens with two halves:
- Current usage — read-only, computed from the latest
fleet snapshot. Shows
nodes,cpu_cores,memory_gi,gpusand the org's edge count. - Limit form — four numeric inputs, each with an Unlimited toggle.
- Current usage — read-only, computed from the latest
fleet snapshot. Shows
Set a cap
For each dimension you want to bound:
- Toggle Unlimited off.
- Enter the cap as a whole number (cores, GiB, etc.).
Leave Unlimited on (the default) for any dimension where you don't want a per-org ceiling — license-wide caps still apply.
Click Save.
Validation rules
The server enforces two invariants:
- Single-org cap ≤ license cap. A non-zero limit can't exceed the platform license cap on the same dimension.
- Sum of org caps ≤ license cap. Across all orgs, the non-zero limits on a dimension can't add up to more than the license cap.
If either invariant fails the dialog shows a toast with the specific dimension and conflicting numbers, e.g.:
Sum of org limits exceeds license cap:
nodes sum=15 (other orgs 12 + this 3) > license=10
Lower this org's limit, or another org's, until the sum fits.
What happens at edge create / node add time
After the limits are set, every request to:
POST /api/orgs/:org/edge-instances(BYO with provisioner)POST /api/orgs/:org/edge-instances/provision(VM-path)POST /api/orgs/:org/edge-instances/:id/nodes(add node)
…runs through three sequential gates:
- License count cap (e.g.
max_edgesnot exceeded) - License-wide fleet quota (total resources across all orgs)
- Org-level cap (this org's resources alone)
If the org's current usage already meets or exceeds any
non-zero cap on a dimension, the request comes back with
402 ORG_LIMIT_REACHED — the response body names the failing
dimension and the current vs. cap counts.
Set limit = 0 to remove a cap
Toggle Unlimited back on (or type 0). The dimension
falls back to "no per-org ceiling" — only the license cap
applies.
When usage isn't shown
If the periodic fleet aggregator hasn't run yet (very fresh install, no edges) the usage row shows zeros. The aggregator runs every ~15 minutes; once the first cycle completes, the dialog populates.