Browse documentation
Plans & credits

Billing

What Stripe charges and when, why your renewal is your anniversary rather than the 1st, how tax is handled, and where to change or cancel a plan.

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.

Built on these docs?

Drop into the forum if something's unclear or wrong. Docs improve faster when readers flag the gaps.

Open the forum