---
title: Plans and limits
description: Every limit on every plan, what happens when you hit one, and how to change plan.
sidebar:
  label: Plans & limits
---

{/* The pricing and limits tables are RENDERED from PLAN_LIMITS / PLAN_PRICING
    in @glowo/shared — the same constants the API enforces. There is nothing to
    transcribe and nothing to keep in sync. To change a limit, change plans.ts.
    Prose below explains what a limit MEANS; it must not restate a value. */}

import { PLAN_LIMITS, PlanTiers } from "@glowo/shared";

## Pricing and limits

<PlanLimits />

Yearly billing works out at ten months for twelve.

## What the limits actually mean

**Minimum check interval** is the fastest you may check. Free is limited to{" "}
{PLAN_LIMITS[PlanTiers.FREE].minCheckInterval} seconds, so the{" "}
{PLAN_LIMITS[PlanTiers.PRO].minCheckInterval}-second option is unavailable.

**Check regions per monitor** caps how many regions run each check. On Free you
get {PLAN_LIMITS[PlanTiers.FREE].maxCheckRegions} region and it is chosen for you; Pro and
Business let you
[pick your regions](/monitors/regions). More regions is the single most
effective way to stop a bad network path causing false alarms.

**On-demand checks per hour** covers manual [Check now](/monitors/on-demand-checks)
runs, not your scheduled checks. Scheduled checks are governed by the interval.

**History retention** is how long individual heartbeats are kept. Hourly
statistics let you see trends over a longer window.

## Hitting a limit

Glowo refuses the action and tells you which limit you reached. Nothing that
already exists stops working — you cannot create monitor number{" "}
{PLAN_LIMITS[PlanTiers.FREE].maxMonitors + 1} on Free, but your{" "}
{PLAN_LIMITS[PlanTiers.FREE].maxMonitors} keep running.

Limits are enforced at the database level as well as in the application, so
concurrent requests cannot slip past a limit by racing each other.

## Which plan

**Free** is a genuine free tier, not a trial. It suits a personal project or one
service: {PLAN_LIMITS[PlanTiers.FREE].maxMonitors} monitors, a status page, email and
chat alerts.

**Pro** is the point where monitoring becomes a team activity — more people,
your own regions, {PLAN_LIMITS[PlanTiers.PRO].minCheckInterval}-second intervals, SMS,
maintenance windows, and a status page on your own domain.

**Business** adds the things organisations need rather than teams: SSO, an audit
log, {PLAN_LIMITS[PlanTiers.BUSINESS].retentionDays} days of retention, and headroom at{" "}
{PLAN_LIMITS[PlanTiers.BUSINESS].maxMonitors} monitors.

## Changing plan

Billing runs through Stripe.

```http
GET  /billing/subscription   # current plan
GET  /billing/usage          # usage against limits
POST /billing/checkout       # upgrade
POST /billing/portal         # manage payment details, invoices, cancel
```

The portal is Stripe's own, so card details never touch Glowo.

Check `/billing/usage` before downgrading. Dropping to a plan whose limits you
already exceed is the situation you want to discover deliberately rather than
by surprise.

:::note
Only the workspace **owner** can manage billing — `MANAGE_BILLING` is not
granted to admins. See [Members and roles](/organization/members-and-roles).
:::
