0 included minutes · 0.35 € per started hour · never more than 120 € per customer per billing cycle.Swap the numbers for tokens, messages, or seats — the shape stays the same.
What you will have at the end
- A quota feature
cutter_minutes - A plan that grants
0minutes and bills overage - A rate written the way you sell it (
0.35 EUR per 60 minutes) - A spending cap of
120 EUR - Backend calls that count usage safely
- Visibility on the Metered usage screen in the dashboard
Prerequisites
- A Kerne app with Stripe connected
@kerne/serveron your backend- Ability to open the Kerne dashboard (Pricing editor)
1. Create the feature
In the dashboard → your product → Features:
Use the smallest unit you bill (minutes, not hours). Kerne counts whole numbers; a fractional hour has nowhere to go.
Leave dimension empty for a single pool per customer — see per machine, per project, per seat if each machine should have its own.
2. Put it on a plan
Open the Pricing editor for that product.- Select the plan (e.g. Pay-as-you-go).
-
Find the
cutter_minutesrow. -
Set included to
0. - Under Past the allowance, choose Bill it.
-
Write the rate as you sell it:
- Amount:
0.35 - Currency:
EUR - Per:
60minutes - Partial block: rounded up (a started hour counts whole)
- Amount:
-
Set a spending cap:
120EUR per billing cycle, applied per customer.
3. Count usage from your backend
Only the server SDK should commit usage. A browser-only check is trivial to bypass.consumechecks and increments atomically.- Use
reportUsageonly when you intentionally record without gating. - For many events at once, prefer
reportBatchon the server.
4. Show remaining allowance in the UI (optional)
On the client, neverconsume. Only reflect state:
<Access featureKey="cutter_minutes"> to hide a control when a hard limit is hit.
5. What the customer is charged
A background worker forwards billable units to Stripe. On the next invoice the customer sees the overage line items produced from your rate (and stops accruing charge once the 120 € cap is reached). In the Kerne dashboard, Metered usage shows:- Consumed / included / billable
- Amount already billed this period
- Room left under the cap
- Not billing rows if the provider is rejecting usage (price archived, meter disabled, …)
- Capped rows when access continues but billing has stopped
Checklist
- Feature
cutter_minutes(quota, unit = minute, renews on billing cycle) - Plan includes
0, bills past it, rate = 0.35 EUR / 60 minutes, cap = 120 EUR - New offer version published
- Backend uses
consumewith the customer’s id passed ascustomer - UI only reads usage (no client-side consume)
Next
Pricing models and meters
Rates, tiers, caps, dimensions, and the edge cases.
consume()
Full options and return shape.

