feat(api): align plan catalog with new pricing#5445
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📝 WalkthroughWalkthroughPlan marketing content and Business trace limits were updated in the default catalog and entitlements. The frontend pricing metadata constant was removed. ChangesPricing catalog and entitlements
Estimated code review effort: 2 (Simple) | ~10 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Verified in the appI captured the pricing modal against the local EE dev stack ( What the four cards show:
The Limits section behind the modal also picks up the new quota and now reads I could not attach the screenshot image itself: image upload needs an authenticated GitHub web session, and neither browser available to me is signed in to GitHub. The PNG is on the dev box at |
Railway Preview Environment
Updated at 2026-07-22T21:40:47.506Z |
Context
We are changing cloud pricing. The plan cards in Settings > Usage & Billing and the enforced quotas both read from
DEFAULT_CATALOGandDEFAULT_ENTITLEMENTSinapi/ee/src/core/access/entitlements/types.py, so the app still advertised the old plans: Business included 1,000,000 traces per month, Pro's card still described "prompts" and "seats", and Hobby claimed community support in a way that no longer matches the pricing page.Changes
Business included usage drops from 1,000,000 to 10,000 per month, which is the same allowance as Pro. The number changed in two places that have to agree: the enforced quota in
DEFAULT_ENTITLEMENTS(Counter.TRACES_INGESTED.free) and the first, zero-cost price tier inDEFAULT_CATALOG.Before:
After:
The plan
descriptionandfeaturescopy for Hobby, Pro, Business and Enterprise now matches the new pricing page word for word, so a customer sees the same list in the app and on the website. The cards now talk about agent runs, team members, projects, and trace data retention instead of prompts and seats.This also deletes
web/ee/src/components/pages/settings/Billing/Modals/PricingModal/assets/constants.ts. Nothing imported it, and it still claimed Pro cost $49.Blocker: do not deploy before the Stripe price is repointed
Our code does not compute the free allowance. The meters job reports raw usage to Stripe, and the "first N free, then $5 per 10,000" rule lives on a Stripe tiered price selected by the
AGENTA_BILLING_PRICINGenvironment variable. Stripe price tiers are immutable, so a NEW Business traces price must be created with a 10,000-unit free tier and the env var repointed at it. JP owns that change. Until it lands, do not deploy this, or the app will show 10,000 included while Stripe still bills as though a million were included. Existing Business subscribers stay on the old price until their subscription item is moved, which is a deliberate business decision about grandfathering.A note on wording
The plan cards say "agent runs". The customer-facing usage bar in Settings > Usage & Billing, the meter key, and the quota error messages all still say "traces", and that is deliberate. The pricing page FAQ explains the difference between the two, so the app and the website stay consistent. Renaming the meter key would break the Stripe meter and the historical usage series, so it is out of scope here.
Tests
uv run --no-sync python -m pytest ee/tests/pytest/unit/test_access_controls.py ee/tests/pytest/unit/test_controls_env_override.py ee/tests/pytest/unit/test_billing_settings.py -qfromapi/: 157 passed.ruff formatandruff checkfromapi/: clean.[billing-settings] catalog=defaults pricing=env, so the screenshot below reflects this file and notAGENTA_BILLING_CATALOG.What to QA
(N / 10000 free)on a Business plan.