Billing runs on Stripe. Plans and their prices are in Plans & limits; the credit mechanics are in Credits & metering. This page is the money plumbing around both.
Your organization's billing lives at /<org>/~/billing.
Renewal is your anniversary, not the 1st
Each subscription carries a cycle anchor day, and the monthly reset credits an organization on its own anchor rather than on the first of the month.
The alternative, resetting everyone on the 1st, means a customer who subscribed on the 28th gets a full month's credits three days later. The anchor is the honest version and it is what the reset cron reads.
Tax
Stripe Tax is enabled on checkout, so EU VAT and US sales tax are computed at purchase.
The credit grant reads the pre-tax amount, never the total charged. VAT collected on behalf of a state is not revenue, and granting credits against it would hand out a different number of credits depending on where the buyer lives.
After you pay
Checkout returns to /<org>/~/billing/activate, which shows the real
state of each webhook (payment, subscription, plan, credits) before
handing control back.
There is no timer and no artificial wait: an organization already synchronised sees no waiting at all. The screen exists because "your payment succeeded" and "your plan is active" are two different events, and a customer refreshing a dashboard to find out which one happened is a support ticket.
Idempotency
Every Stripe webhook is deduplicated on the Stripe event id, and the monthly grant is keyed per organization and month. The same key covers the daily reset cron, the subscription-created event and the paid-invoice backstop, so three different paths to the same grant produce one grant, not three.
Changing or cancelling
POST /api/stripe/billing-portal opens the Stripe customer portal for
your organization: plan changes, payment method, cancellation.
One thing it does not cover. A marketplace subscription you bought as a buyer uses a different Stripe customer (the one Checkout created), so it does not appear in this portal. See Buying on the marketplace.
Reconciliation
A nightly cron reconciles the local subscription state against Stripe. A webhook that never arrived, and they do get lost, is corrected by the next run rather than leaving an organization on a plan it stopped paying for, or off one it is paying for.