Usage & billing
What Kisenon meters, the free allowance, and how the console shows it.
Kisenon meters four dimensions and rolls them up per organization. Compute is metered as size-weighted uptime — see What a CU-hour is before you read a compute number. The console shows your usage, and usage beyond your free monthly allowance is invoiced per the pricing contract — see Billing status below.
What we meter
The control plane samples three dimensions per project and aggregates them per organization:
| Dimension | Unit | How it's metered |
|---|---|---|
| Compute | CU-hours | Recomputed every minute from each endpoint's server-side runtime (Postgres now()), bucketed by the hour and weighted by compute size. |
| Storage | GB-months | Polled every 5 minutes from the storage layer's per-project size. |
| Branches | branch-months | Sampled once a day at 02:00 UTC per project. |
What a CU-hour is
A CU-hour is one hour an endpoint spends awake, multiplied by that endpoint's compute size. That is the whole definition.
It meters size and uptime, not work done. The meter reads no CPU, no
memory, no IOPS and no connection counts — so an endpoint that is awake
and idle accrues CU-hours at exactly the same rate as one of the same
size running flat out. An endpoint saturating every core for an hour and
an endpoint answering one SELECT 1 in that hour bill identically.
What does change your compute bill:
- Uptime. A suspended endpoint accrues nothing. Time asleep is free.
- Compute size. A larger endpoint accrues proportionally more per hour awake.
So the lever is suspend-on-idle, not query efficiency: an endpoint that suspends stops accruing CU-hours the moment it stops, and a project that sleeps most of the day costs a fraction of one that stays awake. Tuning a query to use less CPU does not lower a CU-hour bill; letting the endpoint suspend sooner does.
Storage and branch counts are stable within their sampling windows, so a coarser cadence is fine.
The samples roll up into a single per-organization view of compute, storage, and branch usage for the current billing cycle — the numbers the billing page renders.
The free tier
Every organization starts with a free monthly allowance. A
project-count cap can also be enforced per organization: when the cap
is enabled, an organization with no payment method on file is held to a
fixed number of projects; once it's reached, creating another project
returns free_allowance_exhausted (HTTP 403). Organizations with a
payment method on file are uncapped. The exact cap is a deployment
setting rather than a hard-coded number, so it can be tuned over time.
As a cycle's metered usage climbs, the console shows an escalating
banner above the main content at three thresholds — the same 80 / 95 / 100 percentages the control plane records in its per-cycle notification
log:
- 80% — a yellow notice: "You've used over 80% of your free tier this period."
- 95% — an amber warning to add a payment method before service is interrupted.
- 100% — a red exhausted state: compute may be paused until a payment method is added.
Each banner is dismissible for the session and links to Add a payment method.
The org billing page
Every organization has a billing page at /orgs/{id}/billing, reachable
from the org's nav. When usage data is available it renders, per
dimension, a used / allowance bar (green below 80%, amber 80–95%, red
at/above 95%) plus an optional projected end-of-period marker, a
projected-invoice line, and the current plan and payment method.
Manage billing
Self-serve billing is live. Once a payment method is on file, the org billing page (Settings → Billing) shows a Manage billing button that opens the Stripe-hosted Customer Portal. In the portal you can:
- Update or replace the payment method.
- View invoices and receipts.
- Edit your billing address and tax IDs.
- Cancel.
Before a card is added, the page shows a Checkout button instead (add a payment method); the two are mutually exclusive.
Who can: the org owner or the billing role only — not admin, member, or viewer.
For reference, the control plane exposes:
POST /v1/billing/portal-session → { url }which returns a URL to the Customer Portal; the portal always returns you to the org billing page afterward.
Per-project cost (showback)
The billing page includes a Cost by project card that breaks your usage down per project. It reports four metered dimensions per project:
| Dimension | Unit |
|---|---|
| Compute | CU-hours |
| Storage | GB-months |
| Branches | branch-months |
| Egress | GB |
An Include credits & discounts toggle switches the view between gross and net — the net view applies a pro-rata allocation of the free allowance and volume discount. It's a display lens: the footer always shows the gross subtotal, free allowance, volume discount, and net total.
Data is day-granular: the period is keyed by a full start date
(YYYY-MM-DD). Usage is drawn from a global metering store, so a
project's costs stay visible even after the project is deleted.
Billing status
Metered usage is collected per project, aggregated per organization, and invoiced through Stripe per the pricing contract:
- Usage inside your free monthly allowance is not charged; usage beyond it is metered per unit, with an automatic volume discount on heavy use.
- The control plane's billing endpoint (
/v1/billing/customer) backs the usage banner and the org billing page — they read from the same source, so both reflect the current cycle's real numbers. - Add a payment method from the org billing page to lift the free-tier project cap and continue past the free allowance.
Related
- Organizations — the unit usage rolls up to.
- Endpoints — suspend-on-idle is the only thing that keeps CU-hours down; see What a CU-hour is.
- Pricing — the free allowance, per-unit rates, and volume discount.