← All posts

aws · api-gateway · pricing

AWS API Gateway Pricing: REST Costs 3.5x What HTTP Does

By ·

AWS API Gateway pricing depends first on which kind of API you made. A REST API costs $3.50 per million requests, an HTTP API costs $1.00 per million, and a WebSocket API costs $1.00 per million messages plus $0.25 per million connection minutes. On top of that comes data out to the internet at the normal EC2 rate, and for REST, an optional cache billed by the hour.

Those are US East (N. Virginia) prices from the API Gateway pricing page and the AWS Price List, published October 13, 2026, which we checked today, November 6. The rest of this post is about the first line, because it’s the one most teams never chose on purpose.

The tiers, all of them

REST APIs get cheaper with volume: $3.50 per million for the first 333 million requests a month, $2.80 for the next 667 million, $2.38 for the next 19 billion, and $1.51 after that. HTTP APIs have two steps: $1.00 per million for the first 300 million, $0.90 above. WebSocket messages are $1.00 per million for the first billion and $0.80 after.

Two metering rules are easy to miss. WebSocket messages are counted in 32 KB pieces, so a 33 KB message is billed as two. And the pricing page’s own HTTP API example bills a 4.5 MB upload as nine requests, one per 512 KB. If you push file uploads through an HTTP API, that multiplies quickly. Use a presigned S3 URL for those instead.

The free tier is the old one: 1 million REST calls, 1 million HTTP calls, 1 million WebSocket messages and 750,000 connection minutes a month for 12 months. It only applies to accounts created before July 15, 2025. Newer accounts get up to $200 in Free Tier credits instead, spread across every service.

A worked example

This one is hypothetical, but the shape is common. A startup’s API runs on Lambda behind a REST API: 120 million requests a month, responses averaging 8 KB. Someone turned on the 1.6 GB cache during a load test last spring and it’s still on. Nothing uses API keys, usage plans, WAF or request validation. The API type is REST because the tutorial they followed made a REST API.

LineREST APIHTTP API
Requests (120 million)120 × $3.50 = $420.00120 × $1.00 = $120.00
Cache, 1.6 GB, 730 hours730 × $0.038 = $27.74not available
Data out (915.5 GB at $0.09)$82.40$82.40
Total a month$530.14$202.40

Same Lambda functions, same users, same responses. The difference is $327.74 a month, about $3,933 a year, for features this API doesn’t use. The data out line is identical because both types bill it at the EC2 data transfer rate; it’s 120 million times 8 KB, worked out the way AWS’s own examples do it. The account-wide 100 GB of free data out isn’t subtracted here, same as in AWS’s examples.

Two receipts for the same 120 million requests a month: a REST API with a 1.6 GB cache totals $530.14 and an HTTP API totals $202.40, with the $3.50 versus $1.00 request line circled

You can run your own numbers in our API Gateway pricing calculator, which prices REST and HTTP side by side.

What the extra $2.50 per million buys

AWS is honest about this in its REST vs HTTP API comparison. REST has things HTTP doesn’t: API keys and usage plans with per-client throttling, AWS WAF, request validation, request body transformation, caching, private and edge-optimized endpoints, resource policies, X-Ray tracing, execution logs, canary deployments and mock integrations. HTTP has native JWT authorizers, which REST doesn’t, and automatic deployments.

If you sell API access with keys and quotas, or you need WAF in front of the API, REST is the right product and the price is fair. If your API is the backend for your own web and mobile app, signed in with Cognito, Auth0 or Supabase JWTs, an HTTP API does the same job for less than a third of the request price.

The move isn’t free in engineering time. Event payloads differ (HTTP APIs default to payload format 2.0), so Lambda handlers that read event.requestContext.identity or multiValueHeaders need small changes. Custom domains have to be remapped. And anything leaning on request validation now needs to validate in code. Check the cache hit rate before you mourn the cache: CacheHitCount against CacheMissCount in CloudWatch. If the hits are close to zero, the cache was only ever a $27.74 line.

When you don’t need API Gateway at all

For a webhook receiver, an internal tool or a single-function API, a Lambda function URL has no charge of its own. AWS says it plainly: you pay for the invocations and compute time, nothing for the URL. You lose custom domains (without CloudFront in front), authorizers beyond IAM, and per-route throttling, which you’d set with reserved concurrency instead. For a Stripe webhook endpoint, none of that matters.

Where this sits on your bill

API Gateway is rarely the biggest line on an AWS bill, but it’s one of the few you can cut without touching how the app works. If you’d like someone to check this one along with the rest, our free cloud cost audit costs $0 and reads every line of the bill. When there’s real money to save, we reduce startup AWS bills for $0 up front and are paid 50% of the verified monthly saving for 6 months, then nothing. If nothing is saved, you owe nothing. The Lambda side of the same API is priced in the AWS Lambda pricing calculator.

Want us to look at your bill?

No upfront fee: for six months you pay half of what we save you each month, then you keep all of it. Nothing saved, nothing owed.

Also here: Free cloud cost audit ($0) · Cloud cost optimization services: $0 up front · Reduce your startup's AWS bill · Pricing: paid only from verified savings · Move from AWS to a European cloud