Usage & Metered Billing

A metered product doesn’t price at a single number. It prices as two parts:

  1. A committed base subscription — the flat, contractual line price (what the customer commits to pay).
  2. A projected overage — an estimate of what consumption above the included entitlement would cost, based on the product’s usage rate card.

The base subscription is the deal’s committed economics. The projected overage is a quoting aid — it sizes the deal for the rep and the customer, but in v1 it is display-only and non-contractual: usage adds no committed charge, and metering of actual consumption is the billing system’s job. What the deal commits to is the base subscription plus the terms — the entitlement and the overage rate card — carried forward for the downstream billing handoff.

The entitlement

Every metered line includes an entitlement — a bucket of units included at no extra charge (e.g. 1,000,000 API calls per month). Overage is only charged on consumption above the entitlement:

overage units = max(0, estimated usage − entitlement)

A line whose estimated usage sits at or below the entitlement has zero projected overage.

Graduated (Slab) vs volume (Range)

Once you have overage units, the rate card’s Overage Pricing Model decides how they’re priced. Pinion follows the Salesforce CPQ convention: Slab = graduated, Range = volume.

  • Slab (graduated) — each tier prices only the units that fall in its band, tax-bracket style, and the slices are summed.
  • Range (volume) — the single tier the total overage lands in prices every overage unit at that one rate.

Worked example

Take a rate card with two overage tiers:

Overage band (units above entitlement)Rate
1 – 9,000,000$0.001
9,000,001+$0.0008

…and a line with 10,000,000 overage units (10M consumption above the included entitlement).

  • Slab (graduated) walks the bands: the first 9M units at $0.001 plus the remaining 1M at $0.0008: 9,000,000 × $0.001 + 1,000,000 × $0.0008 = $9,000 + $800 = $9,800.
  • Range (volume) finds the single tier the 10M total lands in (the 9,000,001+ band) and prices all 10M units there: 10,000,000 × $0.0008 = $8,000.

Same card, same overage, $9,800 vs $8,000 — because volume gives the whole overage the cheaper landed-tier rate, while graduated only discounts the units that reach it. The pricing model is what distinguishes them; a single-tier card prices identically either way.

Where the numbers come from — one kernel

The projected overage the rep sees in the configurator, the value that persists on the saved line (ProjectedOverage__c), the figure on the quote document, and the estimate an AI agent returns are all computed by the same pricing kernel in the selected model. There is no per-surface re-implementation, so every surface that shows a metered number agrees to the cent.

Tamper protection

Because the overage rate and entitlement drive money, Pinion recomputes them server-side on every save (Save & Sync), before anything persists — the same server-authoritative safety net that protects base price and discounts.

  • A save that posts an overage rate, entitlement, or projected overage that doesn’t match the product’s usage dimension and rate card never persists that value. In the normal save the server overwrites it with the authoritative term before anything is written, so the save succeeds and the stored line holds the correct number rather than the posted one. Post $0.10 against a $0.05 rate and the line comes back $0.05. A term that reaches the validator without having been resolved server-side is rejected outright and the rep sees a usage-term validation error.
  • This exists specifically so a bad actor — or an AI/MCP write tool posting a hallucinated cheap rate — can’t under-price a metered deal. The server recomputes the projection from the trusted rate card, and a divergent posted term is replaced by the trusted one.
  • A legitimate override is honored: if the usage dimension marks the entitlement or overage rate editable on quote, an authorized rep’s override of that term passes. Non-editable terms are grounded back to the catalog definition.

Non-contractual by design (v1)

In v1, the projected overage is a quoting estimate, never a committed charge:

  • The committed UnitPrice / TotalPrice on the line stay the base subscription — usage adds nothing to the committed total.
  • The estimated usage a rep enters is a sizing input, never billed. Actual consumption is metered and rated by the billing system downstream, using the committed terms (entitlement + rate card) the deal carries.

Renewals and amendments

The entitlement and overage rate are contractual terms, so they travel with the deal rather than being looked up again each time a document is built. When an opportunity closes won they are stamped onto the resulting subscription alongside the price and quantity.

Renewal reads the dimension’s Renewal Behavior:

BehaviorEntitlementOverage rate
Carry Forward (default)carriedcarried
Upliftcarriedescalated by the Overage Rate Uplift
Resetre-grounded from the current cardre-grounded from the current card

On a multi-year (MDQ) deal an Uplift renewal picks up where the prior term left off: the ramp starts from the final segment’s rate, not from the catalog base, so a three-year deal renewing into another three years keeps climbing instead of resetting to year one. A renewal into a different currency is the one case where the rate is always re-resolved, because a rate is a per-currency amount and reusing the number would silently change what the customer pays.

Amendment carries both terms verbatim. An amendment renegotiates quantity, price, or dates inside a term; it never re-prices the meter, and that holds for a change that lands mid-segment and splits a segment in two — both halves keep the same terms. Renewal uplift does not apply to an amendment.

Re-opening a renewal or an amendment in the configurator shows the terms the customer signed, not whatever the rate card says today, and saving again keeps them. The usage panel labels them as carried, and the projected overage it quotes is priced off those carried terms. A dimension set to Reset is the exception, since re-grounding each term is the whole point of that setting.

One other thing overrides a carried term: a Product Rule that writes it. If an admin has a rule setting the entitlement or the overage rate for this deal shape, that policy applies on a renewal too, and the rule’s value replaces the carried one for the term it targets. A rule that sets only the rate leaves the entitlement carried. See Setting usage terms by rule.

A quote document freezes its rate card at the moment it is generated, so re-opening an old quote shows the tiers the customer was actually sent even after the catalog has moved on.