Plan Limits & Usage

How Koolbase enforces plan limits — designed so your app's end-users never see an error because of your plan.

Two kinds of limits

Resource counts (projects, environments, flags, configs, team members) are checked when you create one more. At the limit, the create is rejected — nothing existing is ever affected.

Monthly usage meters (active users, function invocations, code-push patch installs, storage) measure real activity. Meters include a grace margin past the printed limit, and you receive an email alert at 80% — you will never be surprised by a hard stop at exactly 100%.

Grandfathering

If a plan limit lands while you're already over it, everything you have keeps working. Only new creates or new usage past the limit are refused — Koolbase never breaks something that already exists.

What hitting a limit looks like

Management API requests past a limit return 402 Payment Required with a structured body — the dashboard surfaces these as a notification with an upgrade path:

{
  "code": "plan_limit_reached",
  "error": "plan limit reached: free allows 3 environments — upgrade to add more",
  "details": { "resource": "environments", "limit": 3, "plan": "free" }
}

End-users are protected

Meters that touch your app's end-users degrade gracefully, never loudly:

Code pushAt the patch-install limit, devices checking for updates simply receive "no update" — apps keep running their current code. Nothing errors on a user’s phone.
StorageOnly new uploads are gated. Reads and downloads are never blocked — your users’ data is never held hostage.
Active usersPast the MAU limit (plus grace), new sign-ins are refused with a clear message. Existing sessions continue.
RealtimeConnections beyond the concurrent limit are refused at connect; apps fall back to standard reads.

Current limits for each plan are on the pricing page. Usage is visible live in the dashboard sidebar and on the Usage page, and the 80% alert email tells you before anything is gated.