Plans & billing

Plans and billing

Every Thundera product is billed through one place: auth.thundera.eu/billing. One payment method and one invoice cover all of your subscriptions. Payments are processed by Stripe.

For customers

  • Free to start. Every product has a free tier; no card is needed to sign up.
  • Mix and match. Subscribe to Pro in one app and stay on Free in another. Each product's plan shows in your user menu and on the billing page.
  • Upgrades take effect immediately and are prorated on your next invoice. Downgrades and cancellations apply at the end of the period, with any credit carried forward.
  • Invoices and cards live under Plan & billing. Remove a card at any time once another is set as default.
  • Organizations pay for their members: members do not see billing; owners and admins manage plans and seats in Settings → Organization → Plan & Billing.

For apps

Apps never run their own checkout. They read the catalogue and the user's entitlement, and send people to the central billing page to change plans.

Plan catalogue (public)

GET https://auth.thundera.eu/api/v1/auth/billing/plans?app=<slug>

Returns { "plans": [ … ] } with, per plan: id, app_slug, tier (free, pro, business, …), billing_period (monthly, yearly), name, tagline, unit_amount_cents, currency, per_seat, features[], limits, is_popular and sort_order. It is public, cached for a minute and allowed from every *.thundera.eu origin. Disabled apps are omitted.

Pricing table in one line. With the Shell v2 landing kit, `

` renders this catalogue with a monthly/yearly toggle. Never hardcode prices in a page or in JSON-LD.

Entitlements

GET https://auth.thundera.eu/api/v1/auth/billing/effective-plan/<app>

With the user's cookie or bearer token, returns {app, tier, plan_id, limits, status} — the plan that applies right now, including organization plans. Resource servers using OIDC tokens can call GET /api/v1/oidc/entitlements/<app> instead. Cache the answer for at most 30 seconds. The user object from /api/v1/auth/me also carries plan.tier and plan.by_app for quick UI decisions.

Send people to:

https://auth.thundera.eu/billing?product=<slug>&tier=<tier>&period=<monthly|yearly>

The billing page opens on that product and plan. After payment, entitlements update within seconds; re-read the effective plan when the user returns.