What a quantity discount is
A quantity discount is a “first N discounted” mechanism: customers get a pool of discounted units that refreshes on a cadence, depletes against usage, and resets at each cadence boundary.Scope
| Dimension | Coverage |
|---|---|
| Product types | PIT (consumption-based) and POT (access-based) |
| Quantity strategies | On-demand and recurring |
| Pricing models | All unit-based models (per-unit, volume, tiered, package, step) |
| Discount level | Per product/pricing — not cross-product or contract-level |
The core mechanic
- Pool created — a fresh pool of discounted units is created at each cadence boundary.
- Deplete chronologically — periods within the cadence window consume from the pool in order.
- Bill the remainder — usage beyond the pool is billable.
Cadence relative to billing period
| Relationship | Example | Behavior |
|---|---|---|
| Cadence = billing period | Monthly cadence, monthly bill | Each billing period gets its own pool |
| Cadence > billing period | Quarterly cadence, monthly bill | A single pool is shared across months and depletes chronologically |
| Cadence < billing period | Daily cadence, monthly bill | Each day gets its own pool; month-end is the sum of daily overages |
| No cadence | — | Functionally the same as cadence = billing period: each billing period gets the full discount value, but proration of partial windows doesn’t apply |
How it treats PIT and POT identically
The discount engine treats PIT and POT identically — it receives a quantity and subtracts discounted units from it, without knowing or caring whether that quantity came from a PIT meter or a POT allocation. For PIT, this looks like usage being offset month to month:Lifetime caps track consumption, not pool size
A lifetime cap (max_lifetime) limits the total discounted units ever consumed across the contract — not the size of any single pool. Unused or wasted discounted units don’t count toward this cap; only units actually applied against usage do.
Proration of the pool for partial cadence windows
When a cadence window is only partially covered — for example, a contract starting mid-month — the pool itself can be reduced proportionally, controlled by theprorate_stub flag.
prorate_stub=false), the full pool applies even to a partial window. This is distinct from POT’s own proration — for POT, pricing proration adjusts the dollar amount for a partial period, while discount proration (when enabled) adjusts the quantity pool. These operate on different axes and aren’t expected to interact directly.
Bracket-shift effects on volume and tiered pricing
Because the quantity discount reduces the billable quantity before the pricing model runs, it can shift which bracket a customer lands in:-
Volume pricing: reducing quantity can move a customer into a lower bracket, which sometimes carries a higher rate — counterintuitively, the discount can increase the invoice in that scenario.
- Tiered pricing: reducing quantity simply means fewer tiers get filled. There’s no equivalent paradox here — the total is always less than or equal to what it would be without the discount.
| Model | Quantity discount applicable? | Notes |
|---|---|---|
| Flat fee | No | Fixed amount regardless of quantity |
| Package | Yes | Fewer units means fewer packages |
| Percent | No | Based on monetary input, not units |
| Step | Yes | Fewer units means fewer steps triggered |
Stacking with other discounts
Quantity discounts reduce units first; dollar and percent discounts apply afterward to whatever amount results. Multiple quantity discounts (for example, a daily one and a monthly one) can coexist via theorder field, each depleting its own pool independently.