Plans
Every tenant is on a plan. The Plan enum has three values:
FREE_TRIAL | PRO | ENTERPRISE
A self-serve signup provisions on FREE_TRIAL. (The database column
default is PRO — that's the legacy value backfilled onto tenants created by
hand before self-serve existed; new self-serve tenants are explicitly set to
FREE_TRIAL at approval.)
Limits
Limits live in code (PLAN_LIMITS) and are surfaced to merchants at
GET /api/v1/merchant/limits (usage + cap per metric).
| Metric | FREE_TRIAL | PRO | ENTERPRISE |
|---|---|---|---|
| Catalog items | 25 | 500 | unlimited |
| API calls / day | 1,000 | 50,000 | unlimited |
| Storage | 100 MB | 10 GB | unlimited |
| Staff seats | 1 | 5 | unlimited |
| Storefronts | 1 | 5 | unlimited |
What's enforced today
FREE_TRIAL limits are live and return 402 when exceeded:
- Items — blocked at create once you hit the cap
- Storage — checked when minting a signed upload URL and again on image confirm
- Staff seats — blocked at teammate invite
- API calls/day — a rolling-day rate limit on the public API
PRO and ENTERPRISE limits are tracked and shown in the merchant Plan &
Usage view but not yet enforced — every existing org was backfilled to
PRO, so enforcement is intentionally held to FREE_TRIAL until paid plans
are reviewed. ENTERPRISE is unlimited on every metric. The storefronts
cap is forward-looking and not enforced on any plan yet.
Dollar pricing and the billing lifecycle aren't here — they publish with litecheckout. This page documents the technical limits an integration actually hits (the
402s), which is what you need to build against.
Signup
Self-serve signup runs through an abuse-filtered queue — see the Self-serve signup guide for the endpoint and lifecycle. Enterprise signups always route to a human; auto-approval is code-enforced off for Enterprise by design.
Related
- Self-serve signup — how a tenant gets created
- Tenants & context — what a tenant scopes