Skip to content

feat(api): align plan catalog with new pricing#5445

Merged
mmabrouk merged 1 commit into
release/v0.105.9from
pricing-catalog-alignment
Jul 22, 2026
Merged

feat(api): align plan catalog with new pricing#5445
mmabrouk merged 1 commit into
release/v0.105.9from
pricing-catalog-alignment

Conversation

@mmabrouk

Copy link
Copy Markdown
Member

Context

We are changing cloud pricing. The plan cards in Settings > Usage & Billing and the enforced quotas both read from DEFAULT_CATALOG and DEFAULT_ENTITLEMENTS in api/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 in DEFAULT_CATALOG.

Before:

free=1_000_000            # DEFAULT_ENTITLEMENTS
{"limit": 1_000_000, "amount": 0.00}   # DEFAULT_CATALOG first tier

After:

free=10_000
{"limit": 10_000, "amount": 0.00}

The plan description and features copy 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_PRICING environment 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 -q from api/: 157 passed.
  • ruff format and ruff check from api/: clean.
  • Verified against the local EE dev stack that the running API serves the code defaults, not an env override. The startup log line reads [billing-settings] catalog=defaults pricing=env, so the screenshot below reflects this file and not AGENTA_BILLING_CATALOG.

What to QA

  • Open Settings > Usage & Billing and click "Upgrade plan". All four cards show the new copy: Hobby at $0, Pro at $29, Business at $299, Enterprise as "Contact us".
  • The Business card reads "10,000 agent runs / month included, then $5 per additional 10,000", not 1M.
  • Regression: the Limits section above the modal still labels the meter "Traces Ingested" and now reads (N / 10000 free) on a Business plan.

@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Jul 22, 2026
@vercel

vercel Bot commented Jul 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
agenta-documentation Ready Ready Preview, Comment Jul 22, 2026 2:16pm

Request Review

@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Plan marketing content and Business trace limits were updated in the default catalog and entitlements. The frontend pricing metadata constant was removed.

Changes

Pricing catalog and entitlements

Layer / File(s) Summary
Plan marketing catalog
api/ee/src/core/access/entitlements/types.py, web/ee/src/components/pages/settings/Billing/Modals/PricingModal/assets/constants.ts
Hobby, Pro, Business, and Enterprise catalog descriptions and feature lists were revised, and the exported frontend PRICING_PLANS_INFO constant was removed.
Business pricing and trace quota
api/ee/src/core/access/entitlements/types.py
The Business tiered traces pricing limit and free Counter.TRACES_INGESTED quota were changed from 1_000_000 to 10_000.

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly summarizes the main change: updating the API plan catalog to match new pricing.
Description check ✅ Passed The description is directly related to the changeset and explains the pricing and entitlement updates.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch pricing-catalog-alignment

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mmabrouk

Copy link
Copy Markdown
Member Author

Verified in the app

I captured the pricing modal against the local EE dev stack (--ee --dev, port 8280), which bind-mounts this working tree, so the cards below come from this diff. The API startup log confirms the source: [billing-settings] catalog=defaults pricing=env. No AGENTA_BILLING_CATALOG override is set, so the modal renders DEFAULT_CATALOG from this file.

What the four cards show:

  • Hobby, $0/month, "For individuals exploring Agenta." 2 team members, unlimited projects, unlimited agents and workflows, 5,000 agent runs / month, 1-week trace data retention, community support through GitHub Issues.
  • Pro, $29/month, "For teams running agents in production." Unlimited team members, unlimited projects/agents/workflows, unlimited schedules and event triggers, 10,000 agent runs / month included then $5 per additional 10,000, unlimited evaluations, 1-month trace data retention, community support through GitHub Issues.
  • Business, $299/month, "For teams that need governance, compliance, and priority support." Everything in Pro, 10,000 agent runs / month included, then $5 per additional 10,000 (this is the 1M to 10k change), team roles and RBAC, SSO, SOC 2 Type II report, 3-month trace data retention, priority support, private Slack Connect channel.
  • Enterprise, "Contact us", with the full 14-bullet list from DEFAULT_CATALOG (the card scrolls, so the last few bullets sit below the fold).

The Limits section behind the modal also picks up the new quota and now reads Traces Ingested (This Month) 267 / - (267 / 10000 free).

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 /tmp/claude-1000/-home-mahmoud-code-agenta/c450fa39-85fe-406c-8bce-26d78e8320c2/scratchpad/pricing-modal.png if someone wants to drag it in.

@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Railway Preview Environment

Status Destroyed (PR closed)

Updated at 2026-07-22T21:40:47.506Z

@mmabrouk
mmabrouk changed the base branch from main to release/v0.105.9 July 22, 2026 21:40
@mmabrouk
mmabrouk merged commit e5fbc33 into release/v0.105.9 Jul 22, 2026
64 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant