Development

Negotiating a Reserved Capacity Contract: Terms That Bite

Antonio Evans9 min read

A cluttered desk seen from above: a printed contract with four clauses highlighted in yellow, a laptop showing a line chart of per-minute usage that spikes well above a flat committed line, a calculator, a coffee mug.
Key points

Key points

  1. 1Read the burst allowance, ramp schedule, true-down clause and unit definition first, because those four decide whether the commitment protects you or traps you.
  2. 2Model every proposed term against one month of your own per-minute usage, not a vendor forecast or a smoothed weekly average.
  3. 3Compute the break-even utilization implied by the discount before you sign, and walk away if your own 90-day minimum sits below it.
  4. 4Ask for the invoice in writing: a worked example showing one quiet month and one peak month billed under the exact contract language.

Start with the discount, then work backwards

A reserved capacity discount is a price for predictability. You are selling the provider a forecast and buying a lower rate. The provider's forecast risk is your idle-capacity risk, and the contract decides who carries it.

The first number to compute is the break-even utilization. If the reserved rate is 60 percent of on-demand, the reservation only beats on-demand once you actually consume about 60 percent of what you committed to. Analysts put reserved-instance discounts in a 30 to 60 percent band compared with on-demand pricing for steady workloads in this capacity reservation overview. AWS's own commitment products reach higher headline discounts, with Compute Savings Plans at up to 66 percent and Standard Reserved Instances at 72 to 75 percent, but flexibility usually costs discount points according to this practitioner comparison.

The decision rule: compute your 90-day minimum usage, not your average. A reservation sized to the average is sized to lose money on every quiet night. In Kubernetes terms, commit to baseline capacity and let burst capacity run on-demand per this reserved capacity guide.

SituationCommit levelWhy
Traffic never dips below 40 percent of peak90-day minimum, rounded downNearly all reserved units get consumed
Daily peaks 3 to 5x baseline, quiet nightsBaseline onlyBurst handles the peaks
Launch-driven spikes of 10 to 20x baselineBaseline, with written burst termsLaunch traffic is predictable in timing, not magnitude
50 to 100x viral spikes within minutesOn-demand or serverless floorNo reservation absorbs this without a burst clause

Traffic spike profiles differ by source, and each has its own reserved-to-burst ratio: business-hours peaks run 3 to 5 times baseline for 8 to 10 hours a day, while launch spikes can hit 10 to 20 times baseline for 24 to 72 hours as described in this burst capacity analysis. Your own month of data will show which profile you actually have.

Clause 1: Burst allowance

Burst allowance is how far above the committed level you can go before overage rates apply, and at what price.

Ask these questions in order:

  1. What is the burst ceiling, expressed as a multiple of the commitment (1.5x, 2x, 4x)?
  2. What is the overage rate above the ceiling, and is it capped at a multiple of the reserved rate?
  3. Is burst throttled, queued or billed when the ceiling is reached?
  4. Does burst capacity carry the same latency guarantee as reserved capacity?

The last question is where reserved contracts hide their worst surprise. Serverless and elastic capacity can scale to meet a spike, but a 70B-class model may need 15 to 30 seconds of weight loading before the first token appears, so the spike that drives the most traffic is also when cold start hurts most per this burst capacity writeup. A burst allowance that is technically available but starts cold is not the same product as your reserved baseline.

Model it with numbers. Suppose you commit to 20 units per minute, burst ceiling is 2x (40 units), and your month of per-minute data shows 43 minutes above 40 units. Under a metered overage at 1.5x the reserved rate, those 43 minutes are cheap. Under a throttle, your users see errors. Cap overage at a multiplier of your reserved rate and get the throttle behavior written down, which matches the clause advice in this GPU reservation negotiation guide from Spheron.

Clause 2: Ramp schedule

A ramp schedule is whether the commitment starts at full volume on day one or steps up over weeks.

Most teams sign for a level that matches where they expect traffic to be in month three, then pay full price in month one. In an AI inference product, month one may be the proving ground with no traffic at all.

Ask whether the commitment ramps, and demand the schedule in the contract language itself. A defensible pattern is 50 percent in month one, 75 percent in month two, 100 percent from month three, each step measured against your actual consumption so far.

Run the numbers against your month. If you commit 30 units and your first month's average is 12, you paid for 18 units of nothing. That idle tax is the silent cost. On a single GPU provisioned for a 10x peak while running at 10 percent average utilization, the idle tax can reach roughly 90 percent of the spend per this burst capacity analysis. Ramping the commitment reduces the same tax without touching the rate.

If the provider refuses a ramp, ask for the term floor instead. Market guidance puts one year as the practical floor for a real discount, with two to three year terms usually requiring around 20 percent of contract value prepaid per this reservation negotiation guide. A shorter term with a steeper rate beats a long term with a slow ramp you cannot fill.

Clause 3: True-down

A true-down clause lets you lower the commitment later. Without one, the commitment is a floor you cannot move even after you refactor, migrate or lose a customer.

Ask these questions:

  • Can the commitment be reduced, by what percentage, and how many times per term?
  • How much notice is required (30, 60, 90 days)?
  • Does the reduction take effect at the next billing cycle or only at renewal?
  • Are there fees, clawbacks of discount, or a permanent floor below which you cannot go?

The failure mode is a "true-up only" contract. It lets you raise the commitment at any time and never lower it. That is an option written for the provider, not for you. The finance logic is simple: the provider may have signed an offtake agreement to fund the capacity you are reserving, so they want your commitment to stay firm as this negotiation guide explains.

There is a structural alternative worth asking for: a dual-rate reservation. Some platforms bill a lower holding fee to keep capacity available whether or not it runs, plus a higher usage rate charged only while the capacity works. Idle time costs less than under a flat reservation, at the price of a smaller headline discount per this negotiation guide. For bursty inference traffic, the dual-rate structure is often the better deal even though the quoted discount looks worse.

Test the true-down clause with a shrinking scenario. Take your month of data and cut every hour after the tenth by 30 percent, as if a refactor reduced token volume. If the commitment cannot follow that curve, you are paying for idle capacity. Microsoft's own reservation documentation notes that reservations do not renew automatically and that the purchased quantity is fixed unless you change the renewal settings, which is the same structural constraint in miniature per Microsoft Learn.

Clause 4: The defined unit

The unit of measure decides what you are actually buying. "Provisioned throughput," "capacity unit," "vCPU-hour" and "requests per minute" are not interchangeable, and the definition paragraph is the one most teams skim.

Ask:

  • Is the unit metered by time (hour), by request, by token or by provisioned rate?
  • What counts toward the unit? Does a failed request, a cached response, a health check or a retry consume it?
  • Is the unit measured per second, per minute, or averaged over an hour?
  • Are input and output metered the same way, or separately?

Amazon Bedrock illustrates why this matters. The online pricing page lists per-token rates per model and per region, and separately notes that batch inference runs at 50 percent lower price than on-demand per the Bedrock pricing page. A reservation expressed in tokens per minute is a different object than a reservation expressed in model units per hour, and one guide argues the hourly model-unit table is effectively stale per this Bedrock pricing guide. If a vendor quotes you in a unit their public documentation no longer uses, ask for the invoice definition in the contract.

For vendor-side framing, Bedrock's own description of Provisioned Throughput is billed hourly or monthly for provisioned units regardless of use, while on-demand bills per token per this pricing explainer. That is the clean statement of the trade: you pay for the option, not the usage, unless the unit definition says otherwise.

A worked model against one month of your data

You need 60 days or more of per-minute usage for a model worth trusting. Here is a small Python script that turns your own data into the comparison.

import csv, statistics

# columns: minute, units_used
rows = []
with open("usage.csv") as f:
    for r in csv.DictReader(f):
        rows.append(float(r["units_used"]))

per_minute = sorted(rows)
total = sum(per_minute)
p50 = statistics.median(per_minute)
p95 = per_minute[int(len(per_minute) * 0.95)]
p99 = per_minute[int(len(per_minute) * 0.99)]
minimum = per_minute[0]

# Reserved scenario: commit to the 90-day minimum, burst above it
commit = minimum
reserved_rate = 0.6      # reserved rate as a fraction of on-demand
overage_rate = 0.9       # overage as a fraction of on-demand
reserved_cost = commit * len(per_minute) * reserved_rate
overage_cost = sum(max(0, u - commit) for u in per_minute) * overage_rate
reserved_total = reserved_cost + overage_cost
on_demand_total = total  # on-demand index equals units used

print(f"commit={commit} p50={p50} p95={p95} p99={p99}")
print(f"reserved={reserved_total:.1f} on_demand={on_demand_total:.1f}")
print(f"utilization of commit={total / (commit * len(per_minute)):.2f}")

Run it three times: once with your real month, once with every value after the tenth of the month scaled by 1.3, and once with every value scaled by 0.7. The growing case tests the burst clause; the shrinking case tests the true-down clause. If the reservation only wins in the growing case, you are not buying insurance, you are buying a bet on your own forecast.

The output also gives you the utilization figure that matters. If it lands near or below the break-even implied by the discount, shrink the commitment until it clears. A provider that will not accept the smaller number is telling you they need the idle tax to make the deal work. Quanta Inference prices per model and prepaid rather than per reservation, which is a useful comparison row when you are arguing the on-demand side of the table at Quanta Inference.

Questions that expose an idle-capacity trap

Use these verbatim in the review call. Each one is designed to force a number rather than a commitment to "partner with you."

  1. "Show me the invoice for a customer who used 40 percent of their commitment for a full month." If the provider cannot produce a worked example, treat the pricing table as unverified.
  2. "What is the overage rate above burst, and is it capped?" An uncapped overage rate turns your busiest day into your most expensive one.
  3. "If we reduce committed units by 25 percent in month nine, what do we pay?" Silence here is the true-down trap.
  4. "Does our committed capacity behave identically to your on-demand capacity at peak?" Cold start and latency differences are the burst trap.
  5. "Is the unit definition attached to the contract as an exhibit?" If not, the definition can be changed without your signature.

Edge and serverless products are where the latency-behavior question bites hardest. Cold starts arise on first invocation, on scale-from-zero, and when the provider reallocates resources, and observed durations range from half a second to a few seconds for Lambda functions depending on package size and runtime per this cold start explainer. One team measured consistent median cold latency of about 400ms versus 125ms hot in one edge platform in this provider thread. Ask whether burst traffic inherits those numbers.

Bundle size is the lever you control on your side. A validation library comparison showed a 141.43 KiB raw bundle (26.75 KiB gzipped) against an alternative at 11.92 KiB (2.72 KiB), a 9.8x gap, because the smaller library tree-shook down to only what the schema used per this experiment writeup. If your burst capacity is cold-start sensitive, shrinking your bundle is a contract-negotiation lever, not just an engineering chore. Providers who publish region choices for edge functions make this easier to verify per this discussion thread.

A clause checklist before signature

ClauseMinimum acceptableWalk away if
Burst allowance2x ceiling, overage capped at reserved rateThrottle above 1x with no cap
Ramp schedule50/75/100 percent over three monthsFull commitment from day one
True-down25 percent reduction once per term, 60 days noticeTrue-up only
Unit definitionAttached exhibit, per-minute meteringDefinition by reference to a live pricing page
Latency parityBurst capacity meets reserved latencyBurst allowed to cold start
ExitWritten exit priceNo exit language

If it helps to have someone read the term sheet against your usage data, a consulting call with the Quanta Intelligence team is a reasonable next step at Quanta Intelligence.

FAQ

FAQ

How many months of usage data do I need before signing?

Sixty days is the practical floor and 90 days is better, because you need to see at least one full business cycle plus any monthly billing or release pattern. Ask for per-minute exports rather than daily aggregates; the peaks inside a day are exactly what the burst clause prices. If you have less history, size the commitment to your first month and demand a ramp.

What is a true-down clause and why does it matter?

A true-down clause lets you reduce the committed level later, usually with notice and a cap on how much you can cut. It matters because your workload will change and a reservation is a floor below which you cannot go. Without it, a refactor or migration that cuts your usage leaves you paying for capacity you no longer use. Demand the reduction percentage, notice period, and whether it applies at the next billing cycle.

Is a longer term always cheaper?

The headline rate is usually lower on longer terms, but the all-in cost is not. Market guidance puts one year as the practical floor for a real discount and notes two to three year terms often require around 20 percent of contract value prepaid per this reservation guide. Compare the total paid under a real month of your data with growth and shrinkage scenarios, not the rate sheet. A shorter term you can fill usually beats a longer term you cannot.

How do I compare a per-token on-demand rate with a provisioned reservation?

Convert both to a monthly cost against your own usage. Model on-demand as usage units multiplied by the per-unit rate, and model the reservation as the commitment multiplied by the reserved rate plus overage above the ceiling. Bedrock's docs state Provisioned Throughput bills hourly or monthly regardless of use, while on-demand bills per token per this pricing explainer. The comparison is only valid if the unit definitions match, so check that first.

What should be attached to the contract as an exhibit?

The unit definition, the overage rate table, the ramp schedule, the true-down terms and the latency parity statement. Anything that lives on a live pricing page can change without your signature, so it is not a term you can rely on. Ask for a worked invoice example for one quiet month and one peak month under the exact wording. If the provider will not attach the definitions, treat the reservation as a fixed fee and size the commitment accordingly.

Sources

Sources

  1. Capacity Reservation - Infracost
  2. AWS Savings Plans vs Reserved Instances 2026 - DoiT
  3. How to Implement Reserved Capacity with Resource Reservations
  4. Burst Capacity for AI Inference Traffic Spikes - GMI Cloud
  5. GPU Cluster Reservation Contracts: How to Negotiate in 2026 - Spheron
  6. Save costs with Microsoft Fabric Capacity reservations
  7. Amazon Bedrock Pricing
  8. AWS Bedrock Pricing Guide: On-Demand vs Provisioned ...
  9. Understanding Amazon Bedrock Pricing: From On- ...
  10. What is Cold Start? Understanding Serverless Latency - PayPro Global
  11. Poor performance with Edge Functions #29301
  12. How Dependency Size Impacts Cold Starts in Edge ...
  13. Is it possible to choose which region(s) the Edge functions run in?
About the author

About the author

Antonio Evans
Antonio Evans

Antonio Evans is the founder of Quanta Intelligence and a fractional CTO who builds HIPAA-ready AI systems for health and life-science companies. Before that he was technical co-founder of FriendsEAT for twenty years, CEO of Socialdraft, and a data engineer at IBM. Antonio lives with his dog Santino in Lisbon, Portugal.

All articles