Billing & tiers
Plans, quotas and subscription management.
Every organization runs on a plan, and the plan's limits are enforced at the API boundary. Usage is metered per calendar month and shown in Settings → Billing.
Plans
| Plan | Projects | Events / month | Seats | Retention |
|---|---|---|---|---|
| Free | 2 | 5,000 | 1 | 30 days |
| Pro | 10 | 250,000 | 5 | 90 days |
| Team | 50 | 2,000,000 | 25 | 180 days |
| Enterprise | unlimited | unlimited | unlimited | unlimited |
Quotas are enforced at the API boundary:
- creating projects beyond the plan limit →
403with codeUPGRADE_REQUIRED; - invitations beyond the seat count →
403 UPGRADE_REQUIRED; - new projects are clamped to the plan's retention window;
- ingest over the monthly event budget →
429(Monthly event quota exceeded).
Usage is counted per calendar month in usage_counter and exposed by
GET /api/v1/organizations/{slug}/billing.
Managing your subscription
Upgrades, downgrades and invoices live in Settings → Billing in the dashboard.
Checkout and the billing portal are served by the auth sidecar at
/api/auth/billing/checkout and /api/auth/billing/portal; both are inert unless
Stripe is configured for the deployment, in which case the billing tab shows the
upgrade options.
Changing a plan directly
Support can move an organization between plans without Stripe, which is also how accounts created before quotas were enforced were placed on the enterprise tier:
UPDATE org_billing SET plan = 'pro', seats = 5 WHERE organization_id = '<org id>';An organization with no org_billing row is on the free tier.