Skip to main content
Billing state comes from Stripe webhook processing and Convex-backed entitlement state. Core web API routes:
Checkout, portal, top-up, and webhook endpoints also exist under non-/api/v1 app routes. They are web-app routes rather than part of the generated public /api/v1 reference. For local webhook testing:
When billing is disabled, pair billing.provider="none" with capabilities.billing=false.