Skip to content

Plans & Meters

The Console's billing engine is built on two primitives: meters measure usage, and plans turn usage into money.

Meters

A meter is a measurable unit of consumption. Each meter has:

  • A name (snake_case, used internally — e.g. api_calls).
  • A display name (what customers see — e.g. "API Calls").
  • A unitcount, gb, mb, or kb.
  • An aggregation mode that decides how raw measurements collapse into a billable number:
    • Snapshot — the latest value wins. Use for gauges like "active users right now".
    • Delta — values accumulate over the period. Use for counters like "API calls this month".
    • Distinct — count of unique IDs over the period. Use for session-like metrics.

Some meters are built-in and cannot be deleted; others are custom and can be created on the Meters page.

Plans

A plan binds meters to limits and prices. A plan has:

  • A display name and a generated key.
  • A billing interval — monthly, quarterly, annual, or perpetual.
  • A type — Built-in or Custom. Built-in plans (Starter, Professional, Enterprise) are the standard offering; custom plans are for one-off contracts.
  • A list of meter limits, each consisting of:
    • Included quantity — usage up to this is included in the plan price. 0 with a non-zero overage price means "pay per unit from zero". The word "Unlimited" means no cap.
    • Overage unit price — what each unit above the included quantity costs. $0 means hard limit — usage above the cap is blocked, not charged.

Plan versions

Plans evolve. Rather than mutating an existing plan and breaking history, the Console uses versions:

  • The current version has no retirement date and applies to new customers.
  • Retired versions are read-only. Existing customers stay pinned to whatever version they were on when retired, until you explicitly upgrade them.

Create a new version from the plan card on the Plans page. It pre-fills with the current version's meter limits — edit what should change, then click Create v[N]. The previous version is automatically retired.

How billing actually computes

For each customer's invoice period, the Console:

  1. Gathers raw usage measurements per tenant per meter.
  2. Aggregates them according to the meter's mode (snapshot / delta / distinct).
  3. Applies the plan's included quantity and overage price.
  4. Applies any non-prod multiplier to non-production tenants (configured per customer on the Billing Setup tab).
  5. Applies any per-tenant override (also on Billing Setup) — multiplier, meter exclusion, or price override.
  6. Applies the customer's tax rate and any credit balance.
  7. Issues an invoice.

You can preview usage at any granularity on the Usage page without issuing anything.

Production vs. non-production

The Console treats production and non-production billing separately. On a customer's Billing Setup:

  • Production environments are listed explicitly. Tenants in those environments are billed at 100% against the plan.
  • Non-production billing can be: free, a percentage of usage, a fixed monthly amount, or based on usage with per-environment defaults (e.g. DEV at 25%, UAT at 50%).
  • Each non-production tenant can have a manual override that pins its multiplier and meter overrides independently of the environment default.

Manually-overridden tenants are not affected by changes to the environment default — they keep their pinned values until you reset them.

Where it shows up

  • The customer's Billing Setup tab — assign plan, set tax, configure non-prod billing, override per tenant.
  • The customer's Invoices, Payments, and credit tables.
  • The Customer Finance dashboard — outstanding amounts, overage flags, credit exposure across all customers.
  • The Usage page — query aggregated consumption.
  • For customers themselves, Portal → Billing — usage with quota bars, invoices, payments, and credit history.