Editorial note. S3 figures are for S3 Standard in US East (N. Virginia) from aws.amazon.com/s3/pricing; Workers figures are from Cloudflare's Workers pricing docs. Both as of September 2026; neither company is affiliated with Sonic AI. Both have other billable dimensions left out here for clarity.
Ask anyone in finance to describe "tiered pricing" and they will describe S3. The first 50 TB costs one rate, the next 450 TB a slightly lower one, everything beyond that lower still — and each band is priced on its own, so a big customer's bill is the sum of three slices, not one rate times everything. That is graduated pricing, the model almost every infrastructure product borrows — and the one most often confused with the two other ways a price can step, which Cloudflare Workers shows further down.
What S3 charges
| Component | Rate | Shape |
|---|---|---|
| Storage — first 50 TB / month | $0.023 per GB | Graduated band 1 |
| Storage — next 450 TB / month | $0.022 per GB | Graduated band 2 |
| Storage — over 500 TB / month | $0.021 per GB | Graduated band 3 |
| PUT / COPY / POST / LIST | per 1,000 requests | Packaged |
| GET / SELECT | per 1,000 requests | Packaged |
| Data transfer out | first 100 GB / month free, then tiered | Zero-price first band, then graduated |
The three mechanics
| Mechanic | Rule | Example |
|---|---|---|
| Graduated | Split quantity across bands; each band at its own rate | S3 storage: 120 TB = 50 TB at $0.023 + 70 TB at $0.022 |
| Volume | The band the total lands in prices all of it | Not S3 — but the model most often confused with it |
| Packaged | Price per block; partial block rounds up | S3 requests per 1,000; Workers per million |
| Included allowance | A committed price covers N units; only the remainder is priced |
Workers: $5 covers 10M requests |
The graduated-versus-volume distinction is one word in a contract and a different total on every invoice. At 120 TB, graduated gives $2,690; volume at the reached band would give 120,000 × $0.022 = $2,640. Fifty dollars on one customer, systematic across all of them, and in the other direction for a different customer.
What a month looks like
S3 — 120 TB average stored, 40M GETs, 3M PUTs:
| Line | Qty | Rate | Amount |
|---|---|---|---|
| Storage — band 1 (0–50 TB) | 50,000 GB | $0.023 | $1,150.00 |
| Storage — band 2 (50–500 TB) | 70,000 GB | $0.022 | $1,540.00 |
| GET requests | 40,000 blocks of 1,000 | per rate card | — |
| PUT requests | 3,000 blocks of 1,000 | per rate card | — |
| Storage subtotal | $2,690.00 |
Who else prices in steps — Cloudflare Workers, and the packaged version
S3 is graduated. Cloudflare Workers is the other way a usage price steps: a small flat fee that includes a quantity, and everything beyond priced per million — per block, rounded up. Developers point to it as the pricing page usage billing should look like; it quietly needs three mechanics (fixed, included allowance, packaged) on one line. Vercel and Supabase price the Workers way; Google Cloud Storage and Azure Blob price the S3 way; Mailchimp, HubSpot and most contact-based tools price by volume band — the mechanic S3 is most often confused with.
Cloudflare Workers
| Free | Paid | |
|---|---|---|
| Monthly fee | $0 | $5 minimum |
| Requests | 100,000 per day | 10M per month included, then $0.30 per additional million |
| CPU time | 10 ms per invocation | 30M CPU-ms per month included, then $0.02 per additional million |
Workers Paid — 47.3M requests, 92M CPU-ms:
| Line | Qty | Rate | Amount |
|---|---|---|---|
| Workers Paid — September (in advance) | 1 | $5.00 | $5.00 |
| Requests — included | 10,000,000 of 47,300,000 | — | $0.00 |
| Requests — additional (37.3M → 38 blocks) | 38 | $0.30 | $11.40 |
| CPU time — included | 30,000,000 of 92,000,000 | — | $0.00 |
| CPU time — additional (62M → 62 blocks) | 62 | $0.02 | $1.24 |
| September | $17.64 |
The Workers rounding is the detail: 37.3 million excess requests is 38 blocks, not 37.3. A per-unit engine bills $11.19; the stair-step bills $11.40. Small on one customer, systematic across thousands — and the allowance must be subtracted before the rounding, or you give away up to a block.
Where stepped pricing goes wrong
- Graduated implemented as volume (or vice versa). Most "tiered pricing" disputes are this.
- The quantity is a level, not a sum. GB-months average bytes stored over the month — a time-weighted level, not an event count. The meter's aggregation has to match the data.
- Bands hidden behind a blended rate. Customers expect to see band 1 and band 2 as rows they can check.
- Daily versus monthly allowances. Workers Free resets daily; a monthly meter would let a spiky customer run 3M requests in a day and look fine. The aggregation window is a product rule the meter must mirror.
- Two meters from one event stream with different aggregations (count of requests, sum of CPU-ms), and base and overage billing in different directions — $5 in advance, blocks in arrears — on one invoice.
Billing this shape on Sonic AI
S3's storage is a usage graduated list price on Sonic — contiguous bands with a first and last unit and a rate each; the engine splits the period quantity across them and shows each band as its own invoice row. Requests are a packaged list price — package size 1,000, price per package, partial packages rounded up. A free allowance is a first band at zero. Workers is a fixed $5 line in advance plus, per meter, a usage slab carrying the included units per period and its overage rate in arrears; the template aggregates raw requests into millions (rounded up) so the overage unit is the block. If a contract says "volume", the volume list price prices the whole quantity at the band it lands in. Request and CPU events come from one usage template mapped to two meters with count and sum aggregations, keyed for idempotency.
See usage & seats, the glossary on graduated vs volume pricing, and usage-based billing, explained.
If you price like S3
- Is each band priced on its own slice (graduated) or does the reached band price everything (volume)? Write the word in the contract.
- Is your quantity a sum of events or an average level?
- Do per-block prices round up, and is the allowance subtracted before rounding?
- Is the allowance daily or monthly?
Bring a tier table to a demo — we will configure the bands and show the split invoice.
Similar pricing models
Graduated tiers are the model behind Google Cloud Storage, Azure Blob, Clerk and Mapbox; Cloudflare Workers (above), Vercel and Supabase use a flat fee with an included allowance and packaged overage; HubSpot and Mailchimp use volume bands where the whole quantity takes one price. For per-unit pricing with no steps at all, see OpenAI; for seat counts priced in graduated bands, Jira.
Related terms: graduated pricing, overage, meter, in advance vs in arrears.