Some customers must never be billed for usage beyond their committed balance—free trial accounts, fraud-sensitive segments, or customers on strict internal budgets. Guarantee zero overages in Metronome by setting list rates to 0 USD and encoding the real prices either as a commit rate on the rate card or as a commit-specific override on the contract. Usage burns down the commit at the real prices while balance exists, and falls back to 0 USD after the commit is exhausted.Documentation Index
Fetch the complete documentation index at: https://docs.metronome.com/llms.txt
Use this file to discover all available pages before exploring further.
Only use this pattern when customers must never be charged for overages. If you want to allow overages but need controls around them, Metronome offers two complementary mechanisms instead:
- Prepaid balance thresholds auto-recharge a customer’s prepaid commit balance when it drops to a
threshold_amount, topping it back up to arecharge_to_amount. Useful when you want continuous service with automatic top-ups. - Spend thresholds cap how much a customer can accrue before a payment is triggered—useful for limiting fraud exposure in PLG workflows.
When to use this pattern
This approach is useful when:- Free trials must hard-cap at the granted amount with no possibility of a bill.
- Fraud-sensitive accounts could otherwise rack up runaway usage before fraud signals fire.
- Strict-budget customers require a contractual guarantee that you never invoice them for overages, even if your application’s gating fails.
How it works
Two pieces work together:- List rate of 0 USD on the rate card. This is the fallback price after any commit is exhausted, so any leaked usage is billed at 0 USD.
- A real per-unit price that only applies while a commit is being drawn down. You can encode this real price in one of two ways depending on whether prices are uniform across customers or set per customer.
Choose your implementation
| Option A: Commit rate on the rate card | Option B: Commit-specific override on the contract | |
|---|---|---|
| Where prices live | On the rate card, alongside the 0 USD list rate | On each customer’s contract |
| Best for | Uniform pricing across all (or most) customers on the rate card | Per-customer customization of commit prices |
| Setup cost | Configure once on the rate card | Add an override on every contract |
| Customer inheritance | All customers using the rate card automatically inherit the commit price | Each contract specifies its own commit price |
Option A: Commit rate on the rate card
Use this when the real price is consistent across all (or most) customers on the rate card. You set the list rate to 0 USD and the real price as acommit_rate on the same rate card entry. Customers inherit both automatically—no per-contract override required.
1. Add the product to the rate card with price: 0 and a commit_rate
2. Create the commit and tell it to use commit_rate
When you create the commit on the contract, set rate_type: commit_rate so that drawdowns are priced against the rate card’s commit rate.
commit_rate (100 USD/unit). After the commit is exhausted, usage falls back to the rate card’s 0 USD list rate.
Option B: Commit-specific override on the contract
Use this when each customer needs different prices, or when you don’t want to encode the real prices on the rate card. The list rate stays 0 USD on the rate card, and you add anoverwrite override on each contract that only applies while the commit has balance.
1. Set the list rate to 0 USD on the rate card
2. On the contract, add a commit and a commit-specific override
The override is scoped to the commit viaoverride_specifiers.commit_ids, so it only applies while that commit has remaining balance.
App-side gating is still requiredThis pattern guarantees zero billing for any usage that leaks through, but it does not stop usage from being submitted. Gate access in your application using balance thresholds or webhooks so customers can’t continue consuming the product after their commit is exhausted.