Skip to main content
<METRIC> is one of: Runner minutes run from the moment a runner claims a job to the moment the job ends, both as the server sees them. On the free plan runner builds are skipped (the target gets a note), whatever ATOLL_BILLING_FREE_BUILD_MINUTES_* says. Subscriptions created before a metric existed get its price added (without proration) at server start and with the next hourly report, so runner minutes are billed on them too. Metrics are matched by Stripe meter, so a changed price never bills a metric twice.

Stripe setup

  1. Add a webhook endpoint pointing at https://<server>/api/webhooks/stripe with these events: checkout.session.completed, payment_method.attached, payment_method.detached, invoice.paid, invoice.payment_failed, invoice.voided, invoice.marked_uncollectible, customer.subscription.deleted.
  2. Enable the customer portal in the Stripe dashboard (Settings, Billing, Customer portal).
  3. Set the two variables above. Meters (atoll_<metric>) and monthly metered prices are created in Stripe on first use. Changing a price creates a new Stripe price that new subscriptions use; existing ones keep theirs.
Set ATOLL_PANEL_URL: Checkout and the portal send users back to <panel>/#/orgs/<org>/billing.

Behaviour

  • Free plan: once any allowance is used up, new deployments are refused. Once CPU, memory or bandwidth is used up, the org’s running apps are stopped until the next month or until a card is added.
  • Pay as you go: starts when a card is added. Usage past the allowance is reported to Stripe hourly and invoiced monthly. An optional spend limit refuses new deployments and stops running apps once the month’s cost reaches it.
  • Usage reports run at 7 minutes past every hour. The month’s last hour is reported shortly after midnight UTC on the 1st, before Stripe finalizes the invoice (about an hour later). Usage that turns up after that is billed on the next month’s invoice.
  • If Stripe cancels a subscription after failed payments, the org drops to the free plan; adding a card, or “Switch to pay as you go” in the panel, starts a new subscription.