CDN Reserved Capacity Pricing: Locking In Rates for Predictable Workloads

Last December, a streaming client called me after their November CDN bill jumped 41% overnight. A single viral clip pushed them way past their pay-as-you-go tier, even though their baseline traffic had been steady for eleven months straight. They'd been paying top-shelf rates for a workload that was predictable 90% of the time. That's the exact pain reserved capacity is built to solve.

What You're Actually Buying With Reserved Capacity

When you buy reserved capacity, you aren't just getting a discount code. You're trading flexibility for predictability, and the CDN provider rewards you for it. They can plan their own backbone capacity, peering, and cache expansion months in advance if they know you'll definitely push 200TB a month. That certainty lets them offer you a much lower per-gigabyte rate than they'd ever offer on on-demand traffic. I've seen teams treat a CDN reservation like a coupon, but it's closer to a lease. You're saying, "I'll take this much bandwidth every month for a year," and they lock in the price accordingly.

I learned how much this matters back in 2019 with a large e-commerce platform. They were averaging 180TB a month, every month, with only a 15% swing during sale events. Yet they stayed on pay-as-you-go because they didn't want to get locked in. When we modeled their spend, they were paying around $0.038/GB for North America/EU egress. A one-year reservation for 150TB would have dropped that effective rate to $0.022/GB. They were literally paying for the freedom to be unpredictable when they didn't need it. If you're not mapping that baseline, our guide on CDN Egress Cost Modeling: Understanding and Reducing Your Largest Bill Component will help you find that stable floor in your own traffic.

Reserved capacity only makes sense if your predictable workload is truly predictable. I usually look for at least 70-75% of monthly transfer that you can count on, rain or shine. That's your reservation target, not your peak. The rest stays on-demand or burstable. You don't want to reserve for your Black Friday spike and then pay for 40% unused capacity in February. The trick is separating base load from burst, and that takes a few months of honest traffic data, not just gut feeling.

# Simple reserved capacity savings model (Python)
# Assumptions based on a real US/EU traffic profile

baseline_tb_per_month = 180
on_demand_rate_per_gb = 0.038
reserved_rate_per_gb = 0.022
reservation_commit_tb = 150

on_demand_cost = baseline_tb_per_month * 1024 * on_demand_rate_per_gb
reserved_cost = (reservation_commit_tb * 1024 * reserved_rate_per_gb) + \
                ((baseline_tb_per_month - reservation_commit_tb) * 1024 * on_demand_rate_per_gb)

monthly_savings = on_demand_cost - reserved_cost
print(f"On-demand only: ${on_demand_cost:,.2f}")
print(f"With 150TB reservation: ${reserved_cost:,.2f}")
print(f"Monthly savings: ${monthly_savings:,.2f} (~{monthly_savings/on_demand_cost*100:.1f}%)")
# Output: Monthly savings: ~$2,457 (~31.6%) even with 30TB left on-demand

How Locked Pricing Shields You From Rate and Region Shifts

Locked pricing is the other half of the equation, and it's where a lot of folks get confused. Your reservation doesn't just reserve volume; it freezes your rate card for the term, usually 12 months. Without it, you're exposed to subtle price moves, especially if your audience shifts regions. I've watched a SaaS company expand into APAC and South America and suddenly see their blended per-GB rate climb from $0.04 to $0.065 because those regions cost more to serve on the standard pay-as-you-go list price. With a reservation, that regional mix is baked into your negotiated rate, so you don't get penalized when growth happens in a pricier geography.

Providers also structure locked pricing differently, so you've got to read the terms. Some lock the rate per region, others give you a single blended rate across all PoPs. Some include requests and others bill CDN Request Pricing Analysis: Reducing Per-Request Costs at Scale separately from bandwidth. And don't forget cache behavior still matters. The HTTP Working Group Specifications define how Cache-Control and CDN-Cache-Control work, and if your origin sends short-lived max-age or no-store headers, your origin fetch ratio will stay high and eat into any reservation savings. Similarly, guidance from web.dev Articles on cache efficiency reminds us that a 10% improvement in hit ratio can reduce origin egress more than a pricing tier change ever would. Locked pricing helps, but it doesn't fix a misconfigured cache.

Here's how that lock typically looks when you commit via infrastructure-as-code or an API. You're not just buying TB, you're defining the term, region, and whether overage is billed at the reserved rate or snaps back to on-demand. We always ask for overage at the reserved rate or a modest step-up, never full list price.

// Example: CDN reservation definition (pseudo-Terraform)
resource "cdn_reserved_capacity" "prod_baseline" {
  description      = "Baseline video delivery - NA/EU"
  commitment_tier  = "150TB_per_month"
  term_months      = 12
  pricing_model    = "locked_blended" // locks $/GB for 12 months
  regions          = ["north-america", "europe"]
  effective_rate_per_gb = 0.022

  // Critical: how is overage handled?
  overage_handling = "reserved_rate_plus_15pct" // vs "on_demand_list_price"
  auto_renew       = false

  // We keep 20-30TB of burst on pay-as-you-go
  burst_handling   = "pay_as_you_go"
}

Sizing Your Reservation Without Paying for Air

Sizing is where I see the most expensive mistakes. Teams either get conservative and reserve too little, leaving easy savings on the table, or they get optimistic and over-reserve, then spend the whole year feeling like they're wasting money. My rule of thumb after dozens of these deals is to reserve 70-80% of your lowest monthly transfer from the last six months. Not the average, the lowest month. That way you know you'll use every gigabyte you've committed to, even in a slow month. If you've got seasonality, compare this to other commit models in CDN Bandwidth Commitment Pricing: When Committed Plans Save Money vs Pay-As-You-Go to decide if a 95th percentile commit or a reserved capacity block fits better.

You'll also want to look at utilization hourly, not just monthly. One client had a very spiky VOD catalog where 60% of daily traffic happened in a 4-hour evening window. Their monthly total looked predictable, but they were constantly bursting. We ended up splitting their reservation: a 100TB base reservation for the steady-state plus a smaller, flexible burst pool at a slightly higher rate. That hybrid approach kept their utilization above 92% on the reserved portion, which is where you need to be to make the math work. If your utilization drops below 80%, you've probably reserved too much.

The table below shows what I typically see for mid-market to enterprise reservations in North America and Europe right now. These aren't list prices from a website; they're negotiated one-year rates for customers pushing 50TB to 500TB a month with decent cache hit ratios (85%+). Your numbers will vary by provider and region mix, but the pattern holds: the bigger the commit, the lower the effective rate, but the higher the risk if you don't use it.

Monthly Reservation Effective Locked Rate ($/GB) Savings vs. Pay-As-You-Go Break-Even Utilization
50 TB $0.027 - $0.030 18% - 24% ~78%
100 TB $0.022 - $0.025 28% - 35% ~82%
250 TB $0.016 - $0.019 38% - 46% ~85%
500 TB $0.011 - $0.014 48% - 58% ~88%

Putting Reserved Capacity Live: From Paper Commitment to Active Configuration

Signing the reservation is the easy part. Making it actually save you money requires wiring that commitment into your provisioning and traffic management. Don't just file the contract away — you'll want to map your reservation pool to specific properties, hostnames, or delivery configs on day one. Most providers — Fastly, Akamai, CloudFront — let you tag reservations to account IDs or service IDs. If you don't, your finance team sees a $18,000/month commit while your edge config still bills 40% of traffic as on-demand because it’s hitting an untagged staging property.

We typically recommend a 2-week baseline validation before you lock anything beyond 60% of observed traffic. Pull 90 days of hourly egress and request data, strip out one-off spikes (that product launch that drove 3.2x normal egress for 48 hours doesn't count as predictable), and size your reservation at the P50 to P60 of your clean baseline. For example, if you average 65 TB/month egress with a clean floor of 48 TB, reserving 50 TB at a 32% discount ($0.055/GB reserved vs. $0.08/GB on-demand) saves you roughly $1,250/month even before you factor in request fee discounts. Leave that 15 TB delta for pay-as-you-go — it's cheaper than paying for air you won't use.

Once sized, automate the enforcement and alerting. You don't want to discover you blew past your 100 Gbps commit during a 95th percentile billing review. We wire reservations into Terraform and Datadog so capacity and burn-down are visible to both engineering and FinOps. Here's a pattern we use for tracking commitment utilization against real-time edge logs:

# Monitor reserved capacity burn-down and alert at 85% utilization
# Query edge logs (e.g., via BigQuery, Datadog, or CDN analytics API)

SELECT
  DATE_TRUNC(hour, timestamp) AS hour,
  SUM(resp_bytes) / POW(1024, 4) AS tb_served,
  SUM(requests) AS req_count,
  -- Compare against 50 TB monthly reservation
  SUM(SUM(resp_bytes)) OVER (ORDER BY hour) / POW(1024,4) AS cumulative_tb,
  (50 - cumulative_tb) AS remaining_tb
FROM cdn_edge_logs
WHERE date BETWEEN '2025-09-01' AND '2025-09-30'
GROUP BY 1
HAVING cumulative_tb > 42.5  -- 85% threshold alert
ORDER BY 1;

# Terraform snippet to pin prod domains to reserved pool
resource "cdn_reservation_binding" "prod" {
  reservation_id = "resv_50tb_12mo_na_eu"
  service_ids    = ["prod-site", "api-prod", "images-prod"]
  overage_action = "pay_as_you_go" # never throttle, just bill delta
}

Advanced Patterns: Blending Reservations With Burst, Tiering, and Troubleshooting Overages

Reserved capacity isn't meant to be all-or-nothing. The best setups we've seen treat it as the base layer and blend it strategically. Keep 60-70% as reserved, 20-30% as on-demand for predictable burst, and use spot or spare capacity for the truly elastic stuff. That 3am batch image transcoding or async video pre-warming? Don't burn your discounted reservation on it. That's a perfect fit for CDN Spot Pricing for Edge Compute: Leveraging Unused Capacity for Savings where you can grab 60-70% off for interruptible workloads without touching your core commit.

Where teams get burned is ignoring how storage and compute commits interact with delivery commits. If you've reserved 50 TB of egress but your origin shield and edge storage are still pay-as-you-go, a cache hit ratio drop from 96% to 88% can quietly double your origin fetches and wipe out your delivery savings. You’ve got to pair your egress reservation with a coherent storage strategy. We always review CDN Storage Cost Optimization: Tiering, Compression, and Lifecycle Policies alongside reservations — moving long-tail assets to infrequent access tiers and enabling Brotli/Zstd can shave another 18-25% off total billable bytes. And if you're running functions at the edge, check CDN Edge Compute Cost Optimization: Function Pricing Models and Efficiency Tricks — we've seen teams reserve delivery at $0.05/GB while bleeding $0.60 per million unoptimized edge function invocations they forgot to include in the commit.

Troubleshooting time: if your invoice shows overages despite being "within" your reservation, check three things first. One, region mismatch — you reserved 30 TB in NA/EU but 8 TB actually served from APAC at full $0.12/GB. Two, request vs. bandwidth commits — you covered bandwidth but not the 250M monthly requests that are still billing at $0.0075 per 10k. Three, mid-term traffic shifts — if your utilization sits under 55% for two consecutive months, you're over-reserved. Most providers won't let you downsize mid-term, but you can often negotiate a true-up where unused capacity rolls into an extended term or converts to a different dimension. Don't just eat the loss; your account team would rather restructure than lose the renewal.

Frequently Asked Questions

What happens if we exceed our reserved capacity — do we get throttled?

No, you don't get throttled with any reputable CDN. Overage is almost always billed pay-as-you-go at your standard on-demand rate — typically $0.08 to $0.12/GB depending on region and provider. Some contracts offer a discounted overage rate (say, 10-15% off on-demand) if you negotiate it upfront. The risk isn't throttling, it's bill shock when that Black Friday spike adds $11,000 in unreserved egress you didn't model.

Should we reserve for 12 months or 24-36 months for the biggest discount?

Don't chase the extra 5-8% for a 3-year term unless your traffic has been flat for 18+ months. A 12-month reservation usually gets you 28-35% off, while a 36-month might push to 38-42%. That marginal gain isn't worth it if your architecture changes — like moving to originless or shifting workloads to edge compute — leaves you holding a 200 Gbps commit you no longer need. We only advise 24+ month terms when the workload is truly immovable, like live streaming ingest or regulatory-constrained delivery.

Can we mix reserved capacity across regions?

Usually not as a single pool. Providers sell reservations as regional buckets — NA, EU, APAC — or as global with a blended rate that penalizes you if traffic skews to expensive regions. If 70% of your users are in NA but you buy a "global" 100 TB pool at $0.06/GB, and next quarter APAC grows to 35% of traffic, your effective rate can jump because APAC on-demand is inherently pricier. Better to reserve regionally where you have confidence and keep the volatile region on-demand until the pattern stabilizes.

How do we handle seasonality with reserved pricing?

Reserve for your trough, not your peak. If you do 40 TB in February but 90 TB in November/December, reserve 42-45 TB and cover the holiday burst with on-demand. Paying for 90 TB for 12 months means you're paying for 50 TB of air for 10 months of the year — that's $27,500 wasted at $0.055/GB. Seasonality is exactly where blending reserved + on-demand + spot wins over trying to perfectly predict the peak.

Related Articles

References & Standards: HTTP Working Group Specifications · web.dev Articles · IETF Datatracker