Plans & limits
Plan overview
| Free | Hobby | Starter | Growth | Enterprise | |
|---|---|---|---|---|---|
| Price | $0 | $19/mo | $49/mo | $149/mo | Custom |
| Annual | — | $15/mo | $39/mo | $119/mo | Custom |
| License keys | 50 | 500 | 2,000 | 10,000 | Custom |
| Products | 1 | 3 | 10 | Unlimited | Unlimited |
| API calls/day | 500 | 10,000 | 50,000 | 200,000 | Unlimited |
| Webhooks | 0 | 3 | 10 | Unlimited | Unlimited |
| Team seats | 1 | 1 | 3 | 10 | Custom |
| Offline activation | — | ✓ | ✓ | ✓ | ✓ |
| White-label portal | — | — | — | ✓ | ✓ |
| Data retention | 30 days | Account lifetime | Account lifetime | Account lifetime | Account lifetime |
How limits are enforced
API call limit: Tracked per account per day in Cloudflare KV. Counter resets at midnight UTC. When the limit is reached, all /v1/* requests return 429. Enterprise plan bypasses the counter entirely.
Key limit: Enforced at creation time. If active_keys >= plan_limit, POST /v1/keys returns 422 plan_limit_exceeded. Existing keys continue validating; only new key creation is blocked.
Product limit: Enforced at creation time. Same pattern as key limit.
Webhook limit: Enforced at creation time. Free plan: 0 webhooks (all webhook endpoints return 422).
Upgrading
Upgrades take effect immediately. The new limits apply to the next API call.
Downgrading
Downgrading doesn’t delete data — it blocks new resource creation once you’re over the new limits. Existing keys continue validating.
What happens on Free plan expiry
The Free plan doesn’t expire. However, accounts with no activity for 30 days have their data flagged for cleanup (but not deleted). Upgrading before the cleanup runs restores full access.