What a meter measures
A meter counts one thing, for one customer, over a period.- The unit —
minute,token,message,gigabyte. Count in the smallest unit you bill: minutes, not hours. Counts are whole numbers, which is what makes concurrent consumption safe, so a fractional hour has nowhere to go. Same discipline as storing money in cents. - The period — daily, weekly, monthly, or the customer’s billing cycle. This is when the count goes back to zero.
- What it’s counted by — by default, one pool per customer. It can also split per machine, per project or per seat; see below.
consume().
The rate
A rate is an amount and the quantity it buys — “0.35 EUR per 60 minutes”, not “0.0058 EUR per minute”. Kerne keeps both halves, because 0.35 divided by 60 has no exact decimal and a flattened rate is unrecognisable as the offer you sell. Past that, two questions. Their answers are independent, and between them they cover every shape you can build.Does a partly-used quantity count in full?
1,500 units at 5.00 EUR per 1,000:Does the rate change as usage grows?
Add a tier — “past 10,000 units, 4.00 EUR per 1,000” — then say what a tier applies to. A customer who used 20,000 pays:
Nothing here assumes the rate falls as usage grows. Volume discounts and congestion pricing are both real offers; a tier just says what applies past a point, in either direction.
The two questions combine. “0.35 EUR per 60 minutes, every started hour whole, dropping to 0.28
EUR past 150 hours” is one rate — Kerne does the quantity arithmetic before the provider sees a
number, which is what lets a sold-by quantity and a tier schedule coexist. Stripe cannot express
that pairing on its own.
Per machine, per project, per seat
By default a meter pools everything into one counter per customer. Often that’s right — they’re billed for total consumption, and which machine produced it is their business. Sometimes it isn’t. Dimensions split one meter into several counters under the same customer:minute per cutter), then each tier chooses what that means — and the allowance and the spending cap choose independently:
Per-slice caps are the ones people forget exist, and usually the better default: it’s how you sell 1,000 credits per user with a 20 € ceiling per user, or 100 GB per project at 50 € per project.
Attribution works either way — even on a shared pool, every event records which slice it came from.
Why the cap doesn’t block
A spending cap is a ceiling in money, and it does not stop anything.Money and access are separate
Hitting a spending cap means you stop charging. The customer notices nothing — their machines
keep running, their API keeps answering.
Blocking is its own setting
If you genuinely want consumption to stop, that’s a ceiling in units, sitting one rung below
on the same rule, and empty by default.
What you see
The Usage billing screen shows every subscriber on a metered entitlement: consumed, billable, already charged, and room left under the cap. Two states are worth watching for:- Capped — still consuming, no longer charged. Working as designed, but you want to know.
- Not billing — the provider is refusing this entitlement’s usage (its price was archived, its meter turned off). Access still works, revenue is silently zero.
Things that will bite you
A cap counts whole quantities, it does not divide
A cap counts whole quantities, it does not divide
A 120 € cap at 0.35 € per started hour doesn’t buy 342.8 hours. It buys 342 whole hours: the
343rd would count whole and invoice 120.05 €. Kerne computes it the way the invoice will.
The cap resets on the feature's period, not on the invoice
The cap resets on the feature's period, not on the invoice
A 120 € cap means 120 € per renewal period — the one set on the feature, not the one you bill
on. Usage is invoiced monthly, so the two only line up when the feature renews on the billing
cycle. A weekly feature can carry roughly 4 × 120 € onto one invoice; a daily one, 30 ×.None of those is wrong. But if you meant “their bill never exceeds 120 €”, renew on the billing
cycle.
Changing a rate means replacing it
Changing a rate means replacing it
A price is immutable on its amount at the provider, so “change the rate” is always “create another
and point this entitlement at it”. The meter is reused, not recreated, so consumption history
stays whole.Customers already subscribed keep the rate they signed up on. Changing their plan brings them onto
the current one.
An allowance that carries over can't also be billed
An allowance that carries over can't also be billed
If unused allowance rolled into next period, last period’s consumption would be billable again.
Kerne refuses the pair rather than storing it. Same for an unlimited allowance with a rate
attached: nothing would ever be billable.
Repricing everything can make a bigger bill smaller
Repricing everything can make a bigger bill smaller
If tiers are priced at whatever rate the total reaches, crossing one can lower the total: at
5 € then 4 € per 1,000, ten thousand units cost 50 € and ten thousand and one cost 44 €. That’s
the pricing working as designed; the editor says so when you pick such a tier.
Next
Set one up end to end
A metered feature from blank to invoice line.
Designing your pricing
Which shape fits what you sell.

