Billing lives at Settings → Billing. From there you can see your current plan, month-to-date usage, upgrade, downgrade, or cancel.
Plans
| Tier | Price (USD/mo) | Events / mo | Emails / mo | Channels | Replay retention |
|---|---|---|---|---|---|
| Hobby | Free | 1,000 | — | webhook | 7 days |
| Hacker | $9 | 10,000 | 50 | webhook · email · cron | 14 days |
| Pro | $29 | 100,000 | 500 | webhook · email · cron · slack | 30 days |
| Scale | $149 | 5,000,000 | 50,000 | webhook · email · cron · slack | 90 days |
| Enterprise | Contact us | Custom | Custom | All + custom domains | 90+ days |
Scale also includes a 20× throughput bump over Pro — 1,000 webhook RPS and 200 email RPS vs Pro’s 50 / 10. Scale is the only plan that supports multi-seat teams — see Teams.
Existing subscribers keep their current prices until their next billing cycle rolls over; new checkouts see the rates above.
Billing context — personal vs. team
Every account has a personal workspace with its own plan. Users on Scale can also create one or more teams; each team has its own plan, billing portal, and Stripe customer. Switching workspaces (via the switcher in the sidebar) changes which subscription the billing page operates on.
Inside a team, only owners can change the plan or open the Stripe portal. Members see usage + limits but the upgrade controls are hidden, with a notice explaining who to ask.
Usage tracking
Two counters matter for quota:
- Events inbound — every event accepted into your project counts, regardless of whether it was delivered, dropped by a rule, or failed. Duplicates skipped for idempotency don’t count.
- Emails inbound — counted separately since email has a heavier per-message
cost than webhook.
email.receivedevents count against both the event cap and the email cap.
Usage resets on the first of each UTC month. The dashboard shows month-to-date against cap as a progress bar.
Hitting a cap returns 402 Payment Required with code=quota_exceeded on
the ingest path — the event is rejected, not buffered. Upgrade mid-month and
the new cap applies immediately.
Rate limits
Per-tier RPS caps protect your project from a burst upstream:
| Tier | Webhook RPS | Email RPS |
|---|---|---|
| Hobby | 5 | — |
| Hacker | 15 | 5 |
| Pro | 50 | 10 |
| Scale | 1,000 | 200 |
Exceeding the cap returns 429 Too Many Requests with a Retry-After
header. Well-behaved upstreams (Stripe, GitHub, Resend) already retry on 429.
Resource limits
| Tier | Projects | Channels / project | Endpoints / project | API keys / project | Rules / project |
|---|---|---|---|---|---|
| Hobby | 1 | 1 | 1 | 1 | 1 |
| Hacker | 3 | 5 | 3 | 3 | 5 |
| Pro | 10 | 25 | 10 | 10 | 25 |
| Scale | Unlimited | Unlimited | Unlimited | Unlimited | Unlimited |
Retention on plan change
Downgrading from a longer-retention plan (e.g. Pro 30d → Hobby 7d) doesn’t instantly amputate your event history. Nevo honours the old retention window for a 14-day grace period after the plan change, so the 23 days of data that would normally become invisible on day one stays readable while you confirm the downgrade was the right call.
After the grace window, retention follows the new plan.
Upgrades take effect immediately — the longer retention window applies to every event already on record.
Upgrading & downgrading
- Upgrade — lands on the Stripe checkout form; on success the new plan is active within a few seconds.
- Downgrade — drops to the new plan at the end of your current billing period. You keep the higher tier’s quotas until then.
- Cancel — reverts to the Hobby plan at period end. Your projects, events, and API keys stay; anything beyond the free tier’s limits becomes read-only until you upgrade again or delete the excess resource.
Payment is handled by Stripe; invoices are emailed the same day each cycle closes.