Vercel Pricing in 2026: Plans, Credits, and What You'll Actually Pay
Vercel Pricing in 2026: Plans, Credits, and What You'll Actually Pay
Vercel Pricing in 2026: Plans, Credits, and What You'll Actually Pay
Vercel Pricing in 2026: Plans, Credits, and What You'll Actually Pay
Vercel Pricing in 2026: Plans, Credits, and What You'll Actually Pay
• 7 min read
• 7 min read

Aanchal Parmar
Product Marketing Manager, Flexprice

Vercel pricing runs on a $20 monthly platform fee per deploying seat, $20 of usage credit bundled with each seat, and on-demand rates after that.
It's a different model from a year ago, and most guides still describe the old one. Vercel, the company behind Next.js, shipped Next.js 16.3 support on 4 August 2026 and now runs a $1,000,000 bounty on escaping its Sandbox. A three-seat team at 250,000 monthly visitors pays about $294.
Every rate and limit below comes from Vercel's own pricing pages and docs, checked 19 August 2026.

Key takeaways
Vercel Pro costs $20 per month per deploying seat, and each seat brings $20 of usage credit that can be spent across any billable resource.
Two allocations sit outside the credit and cost nothing: 1 TB of Fast Data Transfer and 10 million Edge Requests per month. Everything else draws the credit down first.
Unused credit and unused allocations expire at the end of the month. Nothing rolls over.
Your bill tracks bandwidth and requests, not headcount. Another seat costs $20. Another 200,000 visitors can cost ten times that.
The Enterprise cliff is gone. SAML Single Sign-On now costs $300 a month as a Pro add-on, HIPAA BAA costs $350, and the Web Application Firewall ships free on the Hobby plan.
The bill turns somewhere around 1 TB of monthly egress. Below that, most teams pay their seat count and nothing more.
What is Vercel?
Vercel is a cloud platform for deploying and running modern web applications, and it's the company behind Next.js. Teams connect a Git repository, and Vercel handles builds, preview deployments for every push, a global CDN, serverless functions on Fluid compute, and edge middleware.
The product now reaches well past hosting into file storage with Blob, key-value configuration with Global Config, an AI Gateway for model calls, sandboxed code execution, and v0 for generating interfaces. Each of those pieces meters separately, which is exactly why Vercel hosting pricing looks the way it does.
How Vercel pricing works in 2026
Vercel pricing has three parts: a flat platform fee, a pool of usage credit, and on-demand rates for everything past it. Get the middle part right and the rest follows.
The platform fee is $20 a month. That buys one deploying team seat and comes with $20 in monthly credit. Add a second seat and you pay another $20, which brings another $20 of credit with it. So a three-seat team pays $60 and carries $60 of credit. Viewer seats are free and unlimited. They can read dashboards and comment on previews, but they can't deploy.
Then two allocations sit outside the credit entirely. Every Pro team gets 1 TB of Fast Data Transfer and 10 million Edge Requests a month at no cost, and using them doesn't touch the credit. Vercel's wording is precise here: once you pass those allocations, it "will charge usage against your monthly credit before switching to on-demand billing."
Everything else works the other way round. Active CPU, provisioned memory, function invocations, ISR reads and writes, image optimization, Blob storage, build minutes: all of it draws the credit down from the first unit. When the credit hits zero, on-demand billing starts.
The catch is expiry. Credit and allocations both reset monthly and neither carries forward. A quiet July doesn't subsidise a busy August.
That structure explains why Vercel bills feel unpredictable. Vercel runs hybrid pricing, or subscription plus usage pricing, with a credit layer wedged between the two, and the credit hides small overages completely until the month you cross a threshold, at which point the whole overage becomes visible at once. Nothing changed in your app. The credit just stopped absorbing it.
A monthly grant that expires without rollover and draws down across a dozen meters in a set order is, structurally, what credit wallets do. Vercel calls Pro "a flexible credit-based system," which is an honest description.
Vercel plans compared: Hobby, Pro, and Enterprise
Vercel pricing plans split three ways, and the gap between them is smaller than it used to be. Hobby is genuinely free and genuinely capped. Pro is where almost every paying team lives. Enterprise buys governance, not capacity.
Vercel Hobby: free forever, with hard caps
Hobby costs nothing and stops rather than bills. That single behaviour is the whole difference between it and Pro.
The monthly allowances that matter, from Vercel's pricing page:
Resource | Hobby included |
Fast Data Transfer | 100 GB |
Edge Requests | 1 million |
Function Active CPU | 4 hours |
Function Provisioned Memory | 360 GB-hours |
Function Invocations | 1 million |
Image transformations | 5,000 |
Blob storage | 1 GB |
Web Analytics events | 50,000 |
Runtime log retention | 1 hour |
Vercel free tier bandwidth is the figure people search for most, so to be direct: the Vercel free plan includes 100 GB of Fast Data Transfer a month.
Cross it and Vercel pauses the project until the next cycle. There's no overage billing on Hobby and no way to pay your way out of the cap. Commercial use isn't permitted either, so the moment you charge a customer you're on Pro.
Those are the Vercel free plan limits in full. Hobby ships more than it used to: the Web Application Firewall, DDoS mitigation, Fluid compute and the global CDN are all included. What you don't get is cold start prevention, build queue priority, or observability worth the name.
Vercel Pro pricing: $20 per seat, where most teams sit
Pro costs $20 per deploying seat per month and bundles $20 of credit with each one. It's the only plan with on-demand billing, which is both the appeal and the risk.
Against Hobby: builds skip the queue, cold start prevention kicks in, spend management appears, viewer seats become free, and new teams get one free first-year domain on an eligible TLD.
Spend management deserves more attention than it usually gets. Vercel notifies you at 75% of your monthly credit, then sends daily and weekly summaries once you cross into on-demand billing.
At 100% you can auto-pause deployments, fire a webhook, or trigger SMS. New Pro customers start with a $200 per cycle threshold already enabled, and that default is a guess about your business, so set it deliberately on day one.
Vercel Enterprise pricing: custom, and bought for governance
Enterprise buys controls and commitments, not bigger buckets. It adds SCIM directory sync, audit logs, managed WAF rulesets, multi-region compute and failover, guest and team access controls, a 99.99% SLA, and named support.
Compliance matters less as a differentiator than it did, since SOC 2 Type 2, PCI DSS, ISO 27001 and EU-U.S. DPF now cover every tier.
Be sceptical of any Enterprise figure you read, including this one, because Vercel publishes nothing. MakerKit's cost breakdown cites "typically $20k+/yr," and third-party estimates put the floor between $20,000 and $45,000 a year. It's a contract, not an upgrade button.
Limits that aren't prices
Some Vercel constraints never appear on a pricing page and still shape architecture. Vercel publishes them on its limits page:
Limit | Hobby | Pro | Enterprise |
Projects | 200 | Unlimited | Unlimited |
Deployments per day | 100 | 6,000 | 24,000 |
Concurrent deployments | 1 | Up to 500 | Custom |
Build time per deployment | 45 minutes | 45 minutes | 45 minutes |
Routes per deployment | 2,048 | 2,048 | Custom |
Max function duration | 15s default | 300s | 900s |
Domains per project | 50 | Unlimited | Unlimited |
Runtime log retention | 1 hour | 1 day | 3 days |
Two of these bite in practice. The 45-minute build cap applies on every plan including Enterprise, and a build that exceeds it fails rather than queues. Environment variables cap at 1,000 per environment per project with a 64KB ceiling, which large monorepos do hit.
Launch Your Usage Based Billing in Days and Not Weeks
Launch Your Usage Based Billing in Days and Not Weeks
What Vercel actually costs: three worked bills
A three-seat team at 250,000 monthly visitors pays about $294 a month, and only $60 of that is seats. The other three-quarters is bandwidth and requests.
Two notes on where these numbers come from. Every rate applied below is Vercel's own published rate in its cheapest regions, and I've done the arithmetic rather than quoting a total.
The usage volumes come from MakerKit's Vercel pricing calculator presets, because Vercel publishes no example bills, so treat the traffic assumptions as a model and the rates as fact. Build lines use Vercel's actual Turbo rate of $0.105 a minute, which is why these totals run slightly below MakerKit's.
Small: 50,000 visitors, 3 seats, $60 a month
At this size the bill equals the seat count, because the credit swallows everything else.
Line item | Cost |
Pro plan, 3 seats | $60.00 |
Fast Data Transfer, 214 GB of 1 TB | $0.00 |
Edge Requests, 7.9M of 10M | $0.00 |
Fast Origin Transfer | $0.46 |
Function Invocations, 0.4M | $0.24 |
Active CPU, 8.9 hours | $1.14 |
Provisioned Memory | $0.24 |
Build execution, 160 Turbo minutes | $16.80 |
Monthly credit applied | -$18.88 |
Total | $60.00 |
Read the credit line carefully, because this is the case nobody explains. The workload generated $18.88 of metered usage against $60 of credit, so on-demand billing was zero, and both included allocations went unused. This is Vercel at its most predictable, and where most early-stage teams live.
Growing: 250,000 visitors, 3 seats, about $294 a month
This is the inflection point, and Edge Requests alone cost more than the entire team.
Line item | Cost |
Pro plan, 3 seats | $60.00 |
Fast Data Transfer, 1,526 GB against 1 TB included | $78.90 |
Edge Requests, 75M of 10M | $130.00 |
Fast Origin Transfer | $8.58 |
Function Invocations, 5M | $3.00 |
Active CPU, 139 hours | $17.79 |
Provisioned Memory | $3.68 |
Build execution, 500 Turbo minutes | $52.50 |
Monthly credit applied | -$60.00 |
Total | ~$294.45 |
Traffic went up 5x and the bill followed, but the seat cost didn't move. The team passed 1 TB of bandwidth by 526 GB and 10 million Edge Requests by more than 6x. The $60 of credit disappeared in days.
Scale: 1.5M visitors, 5 seats, about $3,071 a month
At this volume two line items are the entire bill and the seats are a rounding error.
Line item | Cost |
Pro plan, 5 seats | $100.00 |
Fast Data Transfer, 10,014 GB | $1,352.10 |
Edge Requests, 645M | $1,270.00 |
Fast Origin Transfer | $64.37 |
Function Invocations, 45M | $27.00 |
Active CPU, 1,500 hours | $192.00 |
Provisioned Memory | $39.75 |
Build execution, 1,200 Turbo minutes | $126.00 |
Monthly credit applied | -$100.00 |
Total | ~$3,071.22 |
Bandwidth and Edge Requests are 85% of this invoice. This is where teams book the call with Vercel sales, and where an Enterprise contract or a CDN offload starts beating published rates.
The pattern across all three: doubling your team adds $20 a seat, and doubling your traffic can add hundreds. If you're forecasting a Vercel bill from headcount, you're modelling the wrong variable.
The meters that drive your bill
Vercel prices roughly twenty separate resources, and two of them account for most of every large invoice. Running that many meters against one plan is a question of how flexible your pricing models can be, and Vercel's answer is to meter everything separately and let the credit smooth it out.
Every rate below carries a regional range. Vercel charges least in Washington D.C., Cleveland and Portland, and more everywhere else, per its regional pricing docs.
Edge Requests, $2.00 to $3.20 per million
Every asset on every page view counts, which is why this number gets large so fast. Pro includes the first 10 million a month.
A single page with 35 images, scripts and stylesheets plus one API call is 36 Edge Requests. At two million page views a month, that's 72 million requests against a 10 million allowance. If middleware.ts runs on every route including assets, the count multiplies again.
Fast Data Transfer, $0.15 to $0.35 per GB
This is egress, and it's the single biggest line on most large bills. Pro includes the first 1 TB. It climbs when you serve video or large images, when cache hit rates drop, or when a page ships uncompressed heroes at three device sizes.
Fast Origin Transfer is the related meter, covering data moving from your function back to the edge, at $0.06 to $0.43 per GB, a 7x regional spread.
Active CPU, $0.128 to $0.221 per hour
Vercel bills only the time your code actually runs on CPU, not the time a request spends waiting. This is Fluid compute, and it's a genuine win for I/O-heavy work.
Vercel's own example, a function that takes 100ms to process data and spends 400ms waiting on a database query bills for the 100ms. The rate runs $0.128 an hour in the cheapest US regions, $0.184 in Frankfurt and $0.221 in São Paulo.
Most guides skip the second half. CPU billing pauses during I/O wait, but Provisioned Memory keeps billing the whole time a function instance is alive, at $0.0106 to $0.0183 per GB-hour. Billing that pauses mid-request and resumes when the CPU wakes up only works on top of real-time metering, so a slow database makes your memory line expensive while your CPU line still looks healthy.
Function Invocations, $0.60 per million
Pro includes no invocation allowance at all. Vercel bills them on demand from the first call, against your credit. This is where background jobs and aggressive polling show up.
ISR and Runtime Cache, where writes cost ten times reads
Reads are cheap and writes cost ten times more, which is the opposite of what most teams assume. Incremental Static Regeneration serves static content that updates over time: a read serves cached content, a write updates it.
Reads run $0.40 to $0.64 per million units and writes $4.00 to $6.40 per million, with Runtime Cache priced the same. Wiring ISR to fire on every CMS save is how a caching feature becomes a billing problem.
Image optimization, Blob, and Global Config
Three smaller meters that surprise people, with Pro rates for each:
Image transformations run $0.05 to $0.0812 per 1,000, cache reads $0.40 to $0.64 per million, cache writes $4.00 to $6.40 per million. A blog with 100 posts and five hero variants each can hit thousands of source images on the first deploy.
Blob storage runs $0.023 to $0.041 per GB, with simple operations at $0.35 to $0.56 per million and advanced operations at $4.50 to $7.00 per million.
Global Config, which Vercel used to call Edge Config, runs $3.00 per million reads and $1.00 per 100 writes. Treat it as a read-heavy store.
Build minutes, $0.0035 per CPU-minute
Builds bill by CPU-minute, not wall-clock minute, and the machine class multiplies it. Vercel's rate card gives the formula: a build taking 2 minutes 34 seconds on an Enhanced machine costs $0.084, because it rounds to 3 minutes, times 8 CPUs, times $0.0035. Starting prices are $0.014 a minute for Standard, $0.028 for Enhanced and $0.105 for Turbo.
Several widely-read guides list Turbo at $0.126, which is wrong against Vercel's own figure. New Pro teams default to Elastic machines, which pick a class per project automatically, and that convenience makes build costs harder to forecast.
The newer meters nobody covers
Vercel has added billable products faster than the guides have kept up. Each of these bills separately against your credit:
Vercel Sandbox, with its own CPU, memory, creation and network meters, plus Vercel Workflows and Vercel Queues at $0.60 to $0.96 per million operations
Edge Request CPU Duration, a separate meter at $0.30 to $0.48 per hour
Microfrontends, at $2 per million routed requests and $250 per project per month past the two included
WAF rate limiting at $0.50 to $0.80 per million allowed requests, plus OWASP CRS inspection billed by request count and payload size
Speed Insights at $0.65 per 10,000 events, Web Analytics at $0.03 per 1,000, and Log Drains at $0.50 per GB
Custom environments, one per Pro project, then $50 a month per pack of five up to 16
Nobody needs to memorise that list. The point is that "Vercel costs $20 a seat" stopped being a useful sentence a while ago.
The Pro add-ons that replaced the Enterprise cliff
You don't need Enterprise just for SSO. Vercel sells SAML Single Sign-On as a Pro add-on at $300 a month, and it sells eight more the same way.
Last year this article argued that a team needing one enterprise feature had no option but a five-figure contract. That was true then and it isn't now. Here's the full menu from Vercel's Pro plan docs:
Add-on | Price |
Additional deploying seat | $20 / month each |
SAML Single Sign-On | $300 / month |
HIPAA BAA | $350 / month |
Flags Explorer | $250 / month |
Advanced Deployment Protection | $150 / month |
Preview Deployment Suffix | $100 / month |
Static IPs | $100 / month per project, plus Private Data Transfer |
Web Analytics Plus | $10 / month |
Speed Insights | $10 / month per project |
Observability Plus | $1.20 per million events |
Now do the arithmetic that used to be impossible. SSO plus HIPAA plus Advanced Deployment Protection runs $800 a month, about $9,600 a year, comfortably under the lowest published Enterprise estimate. Add a five-seat team at $100 and you're at $10,800 a year with security features that previously required a contract.
So the Enterprise question changed shape. It's no longer "can I buy just the one thing I need." It's whether SCIM, audit logs, managed WAF rulesets, multi-region failover and a 99.99% SLA are worth signing for. That's a real decision with a real answer, and I'd rather have it than the cliff we had before. Credit where it's due: unbundling this was the right call.
Two caveats. Add-on prices are list prices and none of them consumes your credit, so a $300 SSO line is $300 on the invoice. And the free Hobby-tier WAF is not the same product as managed WAF rulesets, which stay behind Enterprise.
When Vercel gets expensive, and what teams switch to
Vercel gets expensive when bandwidth or middleware dominates your workload. It stays cheap when your traffic is mostly static and your team is small. That fork is structural, not something you negotiate.
Vercel turns costly for image-heavy marketing sites leaning on Image Optimization, apps running edge middleware on every route, high-traffic SSR where every render does real work, and anything past roughly 1 TB of monthly egress. It stays cheap for mostly-static sites and docs, indie SaaS with one to three seats under about 50,000 visitors a month, and anything with aggressive caching.
Here's the same 250,000-visitor, three-seat workload priced across platforms. The Vercel figure is mine, computed from Vercel's rates above. The rest come from MakerKit's cross-provider calculator, since those platforms publish their own rates and I have not verified them here:
Platform | Monthly cost | Egress charged? |
Cloudflare Workers | ~$15 | No |
Self-hosted VPS behind a CDN | ~$30 | No |
Railway Pro, 3 seats | ~$116 | Yes, $0.05/GB |
Vercel Pro, 3 seats | ~$294 | Yes, $0.15/GB over 1 TB |
Netlify Pro | ~$340 | Yes, credit-based |
Render Pro | ~$537 | Yes, $30 per 100 GB over 100 GB |
The gap is real and it isn't mostly about rates. Cloudflare Workers costs an order of magnitude less at this workload because it doesn't charge for egress at all.
That's a pricing-model difference, not a discount: the cheaper platforms moved the meter rather than lowering the price on the same meter. Whether Vercel's premium is worth roughly $250 a month depends on how many engineering hours you'd burn rebuilding preview deploys, skew protection and zero-config Next.js yourself.
Teams do leave, and they're public about it. The highest-ranking community discussion on Vercel pricing is an r/vercel thread from a team that left at $1,800 a month and landed at roughly $25 to $40 on a VPS tier. Worth reading before you assume your own bill is unavoidable.
What to do with this
Vercel's pricing is predictable now in a way it wasn't two years ago, as long as you know which two meters to watch. Bandwidth and Edge Requests decide almost every bill above the credit line. Everything else is noise until it isn't.
So do three things this week. Open your usage dashboard and find out how close you are to 1 TB of Fast Data Transfer and 10 million Edge Requests, because those two numbers tell you whether you have a bill or just a seat count. Set your spend management threshold to a figure that means something for your business rather than leaving the $200 default in place. And if you need SSO or HIPAA, price the add-ons before you take the sales call, because $800 a month buys a lot of what a contract used to be the only route to.
If you're on the other side of this and building credit-based pricing into your own product, the Flexprice docs show how the wallet mechanics work.
Frequently asked questions about Vercel pricing
How much does Vercel cost per month?
Vercel costs $0 on Hobby, $20 per deploying seat per month on Pro, and custom pricing on Enterprise. A three-seat Pro team at 50,000 monthly visitors pays $60, because usage stays inside the credit. The same team at 250,000 visitors pays about $294, and at 1.5 million visitors with five seats, about $3,071.
Is Vercel free or paid?
Both. The Hobby plan is free forever with no credit card, and paid plans start at $20 a month. Hobby restricts you to non-commercial projects and pauses deployments at the cap instead of billing overage, so charging a customer means moving to Pro.
How does Vercel's $20 usage credit work?
Each Pro seat comes with $20 of credit that you can spend on any billable resource in that month. Two allocations sit outside the credit and cost nothing: 1 TB of Fast Data Transfer and 10 million Edge Requests. Every other meter draws the credit down first, and on-demand billing starts only when the credit hits zero. Unused credit expires at month end with no rollover.
When does Vercel get expensive?
Vercel's bill turns somewhere around 1 TB of monthly egress. Past that, Fast Data Transfer at $0.15 to $0.35 per GB and Edge Requests at $2.00 to $3.20 per million overtake seat costs and dominate the invoice. At 250,000 monthly visitors, Edge Requests alone can cost more than an entire three-person team's seats.
Do I need Vercel Enterprise just for SSO?
No. Vercel sells SAML Single Sign-On as a Pro add-on at $300 a month, HIPAA BAA at $350, and Advanced Deployment Protection at $150. Enterprise is now about SCIM directory sync, audit logs, managed WAF rulesets, multi-region failover and a 99.99% SLA, not about buying one security feature.
How to replicate Vercel's pricing with Flexprice
Complete guide to replicate Vercel multi-tier pricing structure with usage-based billing in flexprice.io. Flexprice is an enterprise-grade billing and monetization platform designed for the most complex billing scenarios from day zero. Think AI-native companies, cloud infrastructure providers, observability platforms, LLM providers, martech tools, and any SaaS company whose pricing has outgrown simple subscription tiers.
Overview
Vercel uses a sophisticated multi-tier pricing model with usage-based scaling across multiple dimensions:
Features | Base Price | Key Features |
|---|---|---|
Hobby | $0/ month | 1M edge requests, 100GB bandwidth, 4 CPU-hrs |
Pro | 20/user/month | 10M Edge Requests, 1TB bandwidth, 16 CPU-hrs |
Enterprise | Custom pricing | Unlimited resources + SLA + compliance + support |
Prerequisites
- ✅ flexprice.io account
- ✅ API key ready
- ✅ Understanding of edge computing and CDN billing
- ✅ Knowledge of serverless functions and deployment platforms
Step 1: Get Your API Key
Log in to your flexprice.io dashboard
Navigate to **Settings** → **API Keys**
Copy your API key
Step 2: Create Core Usage Features
Edge Requests Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Requests", "type": "metered", "unit_singular": "request", "unit_plural": "requests", "description": "Requests routed through Vercel edge network", "meter": { "aggregation": { "type": "SUM", "field": "request_count", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Requests", "filters": [], "event_name": "edge.requests" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Requests", "type": "metered", "unit_singular": "request", "unit_plural": "requests", "description": "Requests routed through Vercel edge network", "meter": { "aggregation": { "type": "SUM", "field": "request_count", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Requests", "filters": [], "event_name": "edge.requests" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Requests", "type": "metered", "unit_singular": "request", "unit_plural": "requests", "description": "Requests routed through Vercel edge network", "meter": { "aggregation": { "type": "SUM", "field": "request_count", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Requests", "filters": [], "event_name": "edge.requests" } }'
Fast Data Transfer Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Fast Data Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer from edge network to users", "meter": { "aggregation": { "type": "SUM", "field": "bytes_transferred", "multiplier": 0.000000001 }, "reset_usage": "BILLING_PERIOD", "name": "Fast Data Transfer", "filters": [], "event_name": "transfer.fast_data" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Fast Data Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer from edge network to users", "meter": { "aggregation": { "type": "SUM", "field": "bytes_transferred", "multiplier": 0.000000001 }, "reset_usage": "BILLING_PERIOD", "name": "Fast Data Transfer", "filters": [], "event_name": "transfer.fast_data" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Fast Data Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer from edge network to users", "meter": { "aggregation": { "type": "SUM", "field": "bytes_transferred", "multiplier": 0.000000001 }, "reset_usage": "BILLING_PERIOD", "name": "Fast Data Transfer", "filters": [], "event_name": "transfer.fast_data" } }'
Fast Origin Transfer Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Fast Origin Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer between edge network and functions", "meter": { "aggregation": { "type": "SUM", "field": "origin_bytes", "multiplier": 0.000000001 }, "reset_usage": "BILLING_PERIOD", "name": "Fast Origin Transfer", "filters": [], "event_name": "transfer.fast_origin" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Fast Origin Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer between edge network and functions", "meter": { "aggregation": { "type": "SUM", "field": "origin_bytes", "multiplier": 0.000000001 }, "reset_usage": "BILLING_PERIOD", "name": "Fast Origin Transfer", "filters": [], "event_name": "transfer.fast_origin" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Fast Origin Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer between edge network and functions", "meter": { "aggregation": { "type": "SUM", "field": "origin_bytes", "multiplier": 0.000000001 }, "reset_usage": "BILLING_PERIOD", "name": "Fast Origin Transfer", "filters": [], "event_name": "transfer.fast_origin" } }'
Functions Active CPU Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Functions Active CPU", "type": "metered", "unit_singular": "hour", "unit_plural": "hours", "description": "Active CPU time for serverless functions", "meter": { "aggregation": { "type": "SUM", "field": "cpu_hours", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Functions Active CPU", "filters": [], "event_name": "functions.cpu" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Functions Active CPU", "type": "metered", "unit_singular": "hour", "unit_plural": "hours", "description": "Active CPU time for serverless functions", "meter": { "aggregation": { "type": "SUM", "field": "cpu_hours", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Functions Active CPU", "filters": [], "event_name": "functions.cpu" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Functions Active CPU", "type": "metered", "unit_singular": "hour", "unit_plural": "hours", "description": "Active CPU time for serverless functions", "meter": { "aggregation": { "type": "SUM", "field": "cpu_hours", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Functions Active CPU", "filters": [], "event_name": "functions.cpu" } }'
Functions Provisioned Memory Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Functions Provisioned Memory", "type": "metered", "unit_singular": "GB-hour", "unit_plural": "GB-hours", "description": "Memory allocated to function instances", "meter": { "aggregation": { "type": "SUM", "field": "memory_gb_hours", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Functions Provisioned Memory", "filters": [], "event_name": "functions.memory" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Functions Provisioned Memory", "type": "metered", "unit_singular": "GB-hour", "unit_plural": "GB-hours", "description": "Memory allocated to function instances", "meter": { "aggregation": { "type": "SUM", "field": "memory_gb_hours", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Functions Provisioned Memory", "filters": [], "event_name": "functions.memory" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Functions Provisioned Memory", "type": "metered", "unit_singular": "GB-hour", "unit_plural": "GB-hours", "description": "Memory allocated to function instances", "meter": { "aggregation": { "type": "SUM", "field": "memory_gb_hours", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Functions Provisioned Memory", "filters": [], "event_name": "functions.memory" } }'
Function Invocations Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Function Invocations", "type": "metered", "unit_singular": "invocation", "unit_plural": "invocations", "description": "Number of function executions", "meter": { "aggregation": { "type": "SUM", "field": "invocation_count", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Function Invocations", "filters": [], "event_name": "functions.invocations" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Function Invocations", "type": "metered", "unit_singular": "invocation", "unit_plural": "invocations", "description": "Number of function executions", "meter": { "aggregation": { "type": "SUM", "field": "invocation_count", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Function Invocations", "filters": [], "event_name": "functions.invocations" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Function Invocations", "type": "metered", "unit_singular": "invocation", "unit_plural": "invocations", "description": "Number of function executions", "meter": { "aggregation": { "type": "SUM", "field": "invocation_count", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Function Invocations", "filters": [], "event_name": "functions.invocations" } }'
ISR Reads Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "ISR Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Incremental Static Regeneration cache reads", "meter": { "aggregation": { "type": "SUM", "field": "isr_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "ISR Reads", "filters": [], "event_name": "isr.reads" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "ISR Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Incremental Static Regeneration cache reads", "meter": { "aggregation": { "type": "SUM", "field": "isr_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "ISR Reads", "filters": [], "event_name": "isr.reads" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "ISR Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Incremental Static Regeneration cache reads", "meter": { "aggregation": { "type": "SUM", "field": "isr_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "ISR Reads", "filters": [], "event_name": "isr.reads" } }'
ISR Writes Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "ISR Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Incremental Static Regeneration cache writes", "meter": { "aggregation": { "type": "SUM", "field": "isr_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "ISR Writes", "filters": [], "event_name": "isr.writes" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "ISR Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Incremental Static Regeneration cache writes", "meter": { "aggregation": { "type": "SUM", "field": "isr_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "ISR Writes", "filters": [], "event_name": "isr.writes" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "ISR Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Incremental Static Regeneration cache writes", "meter": { "aggregation": { "type": "SUM", "field": "isr_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "ISR Writes", "filters": [], "event_name": "isr.writes" } }'
Image Transformations Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Transformations", "type": "metered", "unit_singular": "transformation", "unit_plural": "transformations", "description": "Image optimization and transformations", "meter": { "aggregation": { "type": "SUM", "field": "image_transforms", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Transformations", "filters": [], "event_name": "images.transforms" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Transformations", "type": "metered", "unit_singular": "transformation", "unit_plural": "transformations", "description": "Image optimization and transformations", "meter": { "aggregation": { "type": "SUM", "field": "image_transforms", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Transformations", "filters": [], "event_name": "images.transforms" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Transformations", "type": "metered", "unit_singular": "transformation", "unit_plural": "transformations", "description": "Image optimization and transformations", "meter": { "aggregation": { "type": "SUM", "field": "image_transforms", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Transformations", "filters": [], "event_name": "images.transforms" } }'
Image Cache Reads Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Cache Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Image cache read operations", "meter": { "aggregation": { "type": "SUM", "field": "image_cache_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Cache Reads", "filters": [], "event_name": "images.cache_reads" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Cache Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Image cache read operations", "meter": { "aggregation": { "type": "SUM", "field": "image_cache_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Cache Reads", "filters": [], "event_name": "images.cache_reads" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Cache Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Image cache read operations", "meter": { "aggregation": { "type": "SUM", "field": "image_cache_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Cache Reads", "filters": [], "event_name": "images.cache_reads" } }'
Image Cache Writes Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Cache Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Image cache write operations", "meter": { "aggregation": { "type": "SUM", "field": "image_cache_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Cache Writes", "filters": [], "event_name": "images.cache_writes" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Cache Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Image cache write operations", "meter": { "aggregation": { "type": "SUM", "field": "image_cache_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Cache Writes", "filters": [], "event_name": "images.cache_writes" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Cache Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Image cache write operations", "meter": { "aggregation": { "type": "SUM", "field": "image_cache_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Cache Writes", "filters": [], "event_name": "images.cache_writes" } }'
Blob Storage Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Storage", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "File storage in blob store", "meter": { "aggregation": { "type": "MAX", "field": "storage_gb", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Storage", "filters": [], "event_name": "blob.storage" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Storage", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "File storage in blob store", "meter": { "aggregation": { "type": "MAX", "field": "storage_gb", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Storage", "filters": [], "event_name": "blob.storage" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Storage", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "File storage in blob store", "meter": { "aggregation": { "type": "MAX", "field": "storage_gb", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Storage", "filters": [], "event_name": "blob.storage" } }'
Blob Simple Operations Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Simple Operations", "type": "metered", "unit_singular": "operation", "unit_plural": "operations", "description": "Simple blob operations (head, URL access)", "meter": { "aggregation": { "type": "SUM", "field": "simple_ops", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Simple Operations", "filters": [], "event_name": "blob.simple_ops" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Simple Operations", "type": "metered", "unit_singular": "operation", "unit_plural": "operations", "description": "Simple blob operations (head, URL access)", "meter": { "aggregation": { "type": "SUM", "field": "simple_ops", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Simple Operations", "filters": [], "event_name": "blob.simple_ops" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Simple Operations", "type": "metered", "unit_singular": "operation", "unit_plural": "operations", "description": "Simple blob operations (head, URL access)", "meter": { "aggregation": { "type": "SUM", "field": "simple_ops", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Simple Operations", "filters": [], "event_name": "blob.simple_ops" } }'
Blob Advanced Operations Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Advanced Operations", "type": "metered", "unit_singular": "operation", "unit_plural": "operations", "description": "Advanced blob operations (put, copy, list)", "meter": { "aggregation": { "type": "SUM", "field": "advanced_ops", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Advanced Operations", "filters": [], "event_name": "blob.advanced_ops" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Advanced Operations", "type": "metered", "unit_singular": "operation", "unit_plural": "operations", "description": "Advanced blob operations (put, copy, list)", "meter": { "aggregation": { "type": "SUM", "field": "advanced_ops", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Advanced Operations", "filters": [], "event_name": "blob.advanced_ops" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Advanced Operations", "type": "metered", "unit_singular": "operation", "unit_plural": "operations", "description": "Advanced blob operations (put, copy, list)", "meter": { "aggregation": { "type": "SUM", "field": "advanced_ops", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Advanced Operations", "filters": [], "event_name": "blob.advanced_ops" } }'
Blob Data Transfer Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Data Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer for blob downloads/views", "meter": { "aggregation": { "type": "SUM", "field": "blob_transfer_gb", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Data Transfer", "filters": [], "event_name": "blob.transfer" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Data Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer for blob downloads/views", "meter": { "aggregation": { "type": "SUM", "field": "blob_transfer_gb", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Data Transfer", "filters": [], "event_name": "blob.transfer" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Data Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer for blob downloads/views", "meter": { "aggregation": { "type": "SUM", "field": "blob_transfer_gb", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Data Transfer", "filters": [], "event_name": "blob.transfer" } }'
Edge Config Reads Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Config Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Edge configuration data reads", "meter": { "aggregation": { "type": "SUM", "field": "config_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Config Reads", "filters": [], "event_name": "edge_config.reads" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Config Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Edge configuration data reads", "meter": { "aggregation": { "type": "SUM", "field": "config_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Config Reads", "filters": [], "event_name": "edge_config.reads" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Config Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Edge configuration data reads", "meter": { "aggregation": { "type": "SUM", "field": "config_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Config Reads", "filters": [], "event_name": "edge_config.reads" } }'
Edge Config Writes Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Config Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Edge configuration data writes", "meter": { "aggregation": { "type": "SUM", "field": "config_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Config Writes", "filters": [], "event_name": "edge_config.writes" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Config Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Edge configuration data writes", "meter": { "aggregation": { "type": "SUM", "field": "config_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Config Writes", "filters": [], "event_name": "edge_config.writes" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Config Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Edge configuration data writes", "meter": { "aggregation": { "type": "SUM", "field": "config_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Config Writes", "filters": [], "event_name": "edge_config.writes" } }'
Web Analytics Events Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Web Analytics Events", "type": "metered", "unit_singular": "event", "unit_plural": "events", "description": "Web analytics events collected", "meter": { "aggregation": { "type": "SUM", "field": "analytics_events", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Web Analytics Events", "filters": [], "event_name": "analytics.events" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Web Analytics Events", "type": "metered", "unit_singular": "event", "unit_plural": "events", "description": "Web analytics events collected", "meter": { "aggregation": { "type": "SUM", "field": "analytics_events", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Web Analytics Events", "filters": [], "event_name": "analytics.events" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Web Analytics Events", "type": "metered", "unit_singular": "event", "unit_plural": "events", "description": "Web analytics events collected", "meter": { "aggregation": { "type": "SUM", "field": "analytics_events", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Web Analytics Events", "filters": [], "event_name": "analytics.events" } }'
Speed Insights Data Points Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Speed Insights Data Points", "type": "metered", "unit_singular": "data point", "unit_plural": "data points", "description": "Core Web Vitals data points", "meter": { "aggregation": { "type": "SUM", "field": "speed_data_points", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Speed Insights Data Points", "filters": [], "event_name": "speed.insights" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Speed Insights Data Points", "type": "metered", "unit_singular": "data point", "unit_plural": "data points", "description": "Core Web Vitals data points", "meter": { "aggregation": { "type": "SUM", "field": "speed_data_points", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Speed Insights Data Points", "filters": [], "event_name": "speed.insights" } }'
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Speed Insights Data Points", "type": "metered", "unit_singular": "data point", "unit_plural": "data points", "description": "Core Web Vitals data points", "meter": { "aggregation": { "type": "SUM", "field": "speed_data_points", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Speed Insights Data Points", "filters": [], "event_name": "speed.insights" } }'
Step 3: Create Hobby Plan (Free Tier)
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Hobby Plan", "description": "Free forever for personal projects", "lookup_key": "vercel_hobby", "prices": [], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_origin_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 4, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 360, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_function_invocations_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 200000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_transforms_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 5000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 300000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_storage_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_simple_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_advanced_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 2000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_analytics_events_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 50000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_speed_data_points_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10000, "usage_reset_period": "MONTHLY" } ] }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Hobby Plan", "description": "Free forever for personal projects", "lookup_key": "vercel_hobby", "prices": [], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_origin_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 4, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 360, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_function_invocations_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 200000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_transforms_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 5000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 300000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_storage_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_simple_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_advanced_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 2000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_analytics_events_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 50000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_speed_data_points_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10000, "usage_reset_period": "MONTHLY" } ] }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Hobby Plan", "description": "Free forever for personal projects", "lookup_key": "vercel_hobby", "prices": [], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_origin_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 4, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 360, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_function_invocations_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 200000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_transforms_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 5000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 300000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_storage_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_simple_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_advanced_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 2000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_analytics_events_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 50000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_speed_data_points_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10000, "usage_reset_period": "MONTHLY" } ] }'
Step 4: Create Pro Plan
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Pro Plan", "description": "Everything you need to build and scale your app", "lookup_key": "vercel_pro", "prices": [ { "amount": "2000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Pro Plan Base Fee per seat", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "200", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Requests overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "200", "up_to": null } ], "filters": { "feature": "edge_requests" } }, { "amount": "15", "billing_model": "PER_UNIT", "currency": "USD", "description": "Fast Data Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "15", "up_to": null } ], "filters": { "feature": "fast_data_transfer" } }, { "amount": "6", "billing_model": "PER_UNIT", "currency": "USD", "description": "Fast Origin Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "6", "up_to": null } ], "filters": { "feature": "fast_origin_transfer" } }, { "amount": "12.8", "billing_model": "PER_UNIT", "currency": "USD", "description": "Functions Active CPU overage (per hour)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "12.8", "up_to": null } ], "filters": { "feature": "functions_cpu" } }, { "amount": "1.06", "billing_model": "PER_UNIT", "currency": "USD", "description": "Functions Provisioned Memory overage (per GB-hour)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "1.06", "up_to": null } ], "filters": { "feature": "functions_memory" } }, { "amount": "60", "billing_model": "PER_UNIT", "currency": "USD", "description": "Function Invocations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "60", "up_to": null } ], "filters": { "feature": "function_invocations" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "ISR Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "isr_reads" } }, { "amount": "400", "billing_model": "PER_UNIT", "currency": "USD", "description": "ISR Writes overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "400", "up_to": null } ], "filters": { "feature": "isr_writes" } }, { "amount": "5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Transformations overage (per 1K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "5", "up_to": null } ], "filters": { "feature": "image_transforms" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Cache Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "image_cache_reads" } }, { "amount": "400", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Cache Writes overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "400", "up_to": null } ], "filters": { "feature": "image_cache_writes" } }, { "amount": "2.3", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Storage overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "2.3", "up_to": null } ], "filters": { "feature": "blob_storage" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Simple Operations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "blob_simple_ops" } }, { "amount": "500", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Advanced Operations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "500", "up_to": null } ], "filters": { "feature": "blob_advanced_ops" } }, { "amount": "5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Data Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "5", "up_to": null } ], "filters": { "feature": "blob_data_transfer" } }, { "amount": "300", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Config Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "300", "up_to": null } ], "filters": { "feature": "edge_config_reads" } }, { "amount": "1000", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Config Writes overage (per 500 writes)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "1000", "up_to": null } ], "filters": { "feature": "edge_config_writes" } }, { "amount": "3", "billing_model": "PER_UNIT", "currency": "USD", "description": "Web Analytics Events overage (per 100K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "3", "up_to": null } ], "filters": { "feature": "analytics_events" } } ], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_origin_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 16, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1440, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_function_invocations_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 2000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_transforms_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 600000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 200000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_storage_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 5, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_simple_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_advanced_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_analytics_events_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_speed_data_points_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" } ] }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Pro Plan", "description": "Everything you need to build and scale your app", "lookup_key": "vercel_pro", "prices": [ { "amount": "2000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Pro Plan Base Fee per seat", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "200", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Requests overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "200", "up_to": null } ], "filters": { "feature": "edge_requests" } }, { "amount": "15", "billing_model": "PER_UNIT", "currency": "USD", "description": "Fast Data Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "15", "up_to": null } ], "filters": { "feature": "fast_data_transfer" } }, { "amount": "6", "billing_model": "PER_UNIT", "currency": "USD", "description": "Fast Origin Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "6", "up_to": null } ], "filters": { "feature": "fast_origin_transfer" } }, { "amount": "12.8", "billing_model": "PER_UNIT", "currency": "USD", "description": "Functions Active CPU overage (per hour)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "12.8", "up_to": null } ], "filters": { "feature": "functions_cpu" } }, { "amount": "1.06", "billing_model": "PER_UNIT", "currency": "USD", "description": "Functions Provisioned Memory overage (per GB-hour)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "1.06", "up_to": null } ], "filters": { "feature": "functions_memory" } }, { "amount": "60", "billing_model": "PER_UNIT", "currency": "USD", "description": "Function Invocations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "60", "up_to": null } ], "filters": { "feature": "function_invocations" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "ISR Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "isr_reads" } }, { "amount": "400", "billing_model": "PER_UNIT", "currency": "USD", "description": "ISR Writes overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "400", "up_to": null } ], "filters": { "feature": "isr_writes" } }, { "amount": "5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Transformations overage (per 1K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "5", "up_to": null } ], "filters": { "feature": "image_transforms" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Cache Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "image_cache_reads" } }, { "amount": "400", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Cache Writes overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "400", "up_to": null } ], "filters": { "feature": "image_cache_writes" } }, { "amount": "2.3", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Storage overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "2.3", "up_to": null } ], "filters": { "feature": "blob_storage" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Simple Operations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "blob_simple_ops" } }, { "amount": "500", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Advanced Operations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "500", "up_to": null } ], "filters": { "feature": "blob_advanced_ops" } }, { "amount": "5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Data Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "5", "up_to": null } ], "filters": { "feature": "blob_data_transfer" } }, { "amount": "300", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Config Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "300", "up_to": null } ], "filters": { "feature": "edge_config_reads" } }, { "amount": "1000", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Config Writes overage (per 500 writes)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "1000", "up_to": null } ], "filters": { "feature": "edge_config_writes" } }, { "amount": "3", "billing_model": "PER_UNIT", "currency": "USD", "description": "Web Analytics Events overage (per 100K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "3", "up_to": null } ], "filters": { "feature": "analytics_events" } } ], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_origin_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 16, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1440, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_function_invocations_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 2000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_transforms_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 600000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 200000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_storage_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 5, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_simple_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_advanced_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_analytics_events_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_speed_data_points_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" } ] }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Pro Plan", "description": "Everything you need to build and scale your app", "lookup_key": "vercel_pro", "prices": [ { "amount": "2000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Pro Plan Base Fee per seat", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "200", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Requests overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "200", "up_to": null } ], "filters": { "feature": "edge_requests" } }, { "amount": "15", "billing_model": "PER_UNIT", "currency": "USD", "description": "Fast Data Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "15", "up_to": null } ], "filters": { "feature": "fast_data_transfer" } }, { "amount": "6", "billing_model": "PER_UNIT", "currency": "USD", "description": "Fast Origin Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "6", "up_to": null } ], "filters": { "feature": "fast_origin_transfer" } }, { "amount": "12.8", "billing_model": "PER_UNIT", "currency": "USD", "description": "Functions Active CPU overage (per hour)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "12.8", "up_to": null } ], "filters": { "feature": "functions_cpu" } }, { "amount": "1.06", "billing_model": "PER_UNIT", "currency": "USD", "description": "Functions Provisioned Memory overage (per GB-hour)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "1.06", "up_to": null } ], "filters": { "feature": "functions_memory" } }, { "amount": "60", "billing_model": "PER_UNIT", "currency": "USD", "description": "Function Invocations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "60", "up_to": null } ], "filters": { "feature": "function_invocations" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "ISR Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "isr_reads" } }, { "amount": "400", "billing_model": "PER_UNIT", "currency": "USD", "description": "ISR Writes overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "400", "up_to": null } ], "filters": { "feature": "isr_writes" } }, { "amount": "5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Transformations overage (per 1K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "5", "up_to": null } ], "filters": { "feature": "image_transforms" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Cache Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "image_cache_reads" } }, { "amount": "400", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Cache Writes overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "400", "up_to": null } ], "filters": { "feature": "image_cache_writes" } }, { "amount": "2.3", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Storage overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "2.3", "up_to": null } ], "filters": { "feature": "blob_storage" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Simple Operations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "blob_simple_ops" } }, { "amount": "500", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Advanced Operations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "500", "up_to": null } ], "filters": { "feature": "blob_advanced_ops" } }, { "amount": "5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Data Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "5", "up_to": null } ], "filters": { "feature": "blob_data_transfer" } }, { "amount": "300", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Config Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "300", "up_to": null } ], "filters": { "feature": "edge_config_reads" } }, { "amount": "1000", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Config Writes overage (per 500 writes)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "1000", "up_to": null } ], "filters": { "feature": "edge_config_writes" } }, { "amount": "3", "billing_model": "PER_UNIT", "currency": "USD", "description": "Web Analytics Events overage (per 100K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "3", "up_to": null } ], "filters": { "feature": "analytics_events" } } ], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_origin_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 16, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1440, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_function_invocations_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 2000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_transforms_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 600000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 200000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_storage_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 5, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_simple_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_advanced_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_analytics_events_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_speed_data_points_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" } ] }'
Step 5: Create Enterprise Plan Template
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Enterprise Plan", "description": "Critical security, performance, observability, platform SLAs", "lookup_key": "vercel_enterprise", "prices": [ { "amount": "300000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Enterprise Plan Base Fee (starting price)", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 } ], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 50000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 5000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 50000, "usage_reset_period": "MONTHLY" } ] }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Enterprise Plan", "description": "Critical security, performance, observability, platform SLAs", "lookup_key": "vercel_enterprise", "prices": [ { "amount": "300000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Enterprise Plan Base Fee (starting price)", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 } ], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 50000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 5000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 50000, "usage_reset_period": "MONTHLY" } ] }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Enterprise Plan", "description": "Critical security, performance, observability, platform SLAs", "lookup_key": "vercel_enterprise", "prices": [ { "amount": "300000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Enterprise Plan Base Fee (starting price)", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 } ], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 50000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 5000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 50000, "usage_reset_period": "MONTHLY" } ] }'
Step 6: Create Add-on Plans
Web Analytics Plus Add-on curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Web Analytics Plus", "description": "Extended analytics with UTM parameters and 24-month retention", "lookup_key": "web_analytics_plus", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Web Analytics Plus per team", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 } ] }'
Web Analytics Plus Add-on curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Web Analytics Plus", "description": "Extended analytics with UTM parameters and 24-month retention", "lookup_key": "web_analytics_plus", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Web Analytics Plus per team", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 } ] }'
Web Analytics Plus Add-on curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Web Analytics Plus", "description": "Extended analytics with UTM parameters and 24-month retention", "lookup_key": "web_analytics_plus", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Web Analytics Plus per team", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 } ] }'
Speed Insights Add-on
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Speed Insights", "description": "Core Web Vitals monitoring per project", "lookup_key": "speed_insights", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Speed Insights per project", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "6.5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Speed Insights data points overage (per 10K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "6.5", "up_to": null } ], "filters": { "feature": "speed_data_points" } } ] }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Speed Insights", "description": "Core Web Vitals monitoring per project", "lookup_key": "speed_insights", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Speed Insights per project", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "6.5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Speed Insights data points overage (per 10K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "6.5", "up_to": null } ], "filters": { "feature": "speed_data_points" } } ] }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Speed Insights", "description": "Core Web Vitals monitoring per project", "lookup_key": "speed_insights", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Speed Insights per project", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "6.5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Speed Insights data points overage (per 10K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "6.5", "up_to": null } ], "filters": { "feature": "speed_data_points" } } ] }'
Observability Plus Add-on
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Observability Plus", "description": "Advanced metrics, query engine, and AI prompting", "lookup_key": "observability_plus", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Observability Plus base fee (1M events included)", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "120", "billing_model": "PER_UNIT", "currency": "USD", "description": "Observability events overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "120", "up_to": null } ], "filters": { "feature": "observability_events" } } ] }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Observability Plus", "description": "Advanced metrics, query engine, and AI prompting", "lookup_key": "observability_plus", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Observability Plus base fee (1M events included)", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "120", "billing_model": "PER_UNIT", "currency": "USD", "description": "Observability events overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "120", "up_to": null } ], "filters": { "feature": "observability_events" } } ] }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Observability Plus", "description": "Advanced metrics, query engine, and AI prompting", "lookup_key": "observability_plus", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Observability Plus base fee (1M events included)", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "120", "billing_model": "PER_UNIT", "currency": "USD", "description": "Observability events overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "120", "up_to": null } ], "filters": { "feature": "observability_events" } } ] }'
Step 7: Create Customer
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/customers' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "DevStudio Corp", "email": "[email protected]", "external_id": "cust_devstudio_123", "metadata": { "company": "DevStudio Corp", "industry": "Software Development", "plan_tier": "pro", "team_size": "5" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/customers' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "DevStudio Corp", "email": "[email protected]", "external_id": "cust_devstudio_123", "metadata": { "company": "DevStudio Corp", "industry": "Software Development", "plan_tier": "pro", "team_size": "5" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/customers' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "DevStudio Corp", "email": "[email protected]", "external_id": "cust_devstudio_123", "metadata": { "company": "DevStudio Corp", "industry": "Software Development", "plan_tier": "pro", "team_size": "5" } }'
Step 8: Create Pro Subscription
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/subscriptions' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "customer_id": "cust_123456789", "plan_id": "plan_vercel_pro_123", "billing_period": "MONTHLY", "billing_period_count": 1, "currency": "USD", "start_date": "2025-01-15", "phases": [ { "start_date": "2025-01-15", "line_items": [ { "price_id": "price_pro_base_123", "quantity": 5, "display_name": "Pro Plan - 5 Team Seats" }, { "price_id": "price_web_analytics_plus_123", "quantity": 1, "display_name": "Web Analytics Plus Add-on" } ] } ] }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/subscriptions' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "customer_id": "cust_123456789", "plan_id": "plan_vercel_pro_123", "billing_period": "MONTHLY", "billing_period_count": 1, "currency": "USD", "start_date": "2025-01-15", "phases": [ { "start_date": "2025-01-15", "line_items": [ { "price_id": "price_pro_base_123", "quantity": 5, "display_name": "Pro Plan - 5 Team Seats" }, { "price_id": "price_web_analytics_plus_123", "quantity": 1, "display_name": "Web Analytics Plus Add-on" } ] } ] }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/subscriptions' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "customer_id": "cust_123456789", "plan_id": "plan_vercel_pro_123", "billing_period": "MONTHLY", "billing_period_count": 1, "currency": "USD", "start_date": "2025-01-15", "phases": [ { "start_date": "2025-01-15", "line_items": [ { "price_id": "price_pro_base_123", "quantity": 5, "display_name": "Pro Plan - 5 Team Seats" }, { "price_id": "price_web_analytics_plus_123", "quantity": 1, "display_name": "Web Analytics Plus Add-on" } ] } ] }'
Step 9: Track Usage Events
Edge Requests Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_edge_requests_123", "quantity": 15000000, "metadata": { "project_id": "proj_main_app", "region": "us-east-1", "measurement_time": "2025-01-15T10:30:00Z" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_edge_requests_123", "quantity": 15000000, "metadata": { "project_id": "proj_main_app", "region": "us-east-1", "measurement_time": "2025-01-15T10:30:00Z" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_edge_requests_123", "quantity": 15000000, "metadata": { "project_id": "proj_main_app", "region": "us-east-1", "measurement_time": "2025-01-15T10:30:00Z" } }'
Fast Data Transfer Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_fast_data_transfer_123", "quantity": 1250, "metadata": { "project_id": "proj_main_app", "transfer_type": "static_assets", "region": "global" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_fast_data_transfer_123", "quantity": 1250, "metadata": { "project_id": "proj_main_app", "transfer_type": "static_assets", "region": "global" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_fast_data_transfer_123", "quantity": 1250, "metadata": { "project_id": "proj_main_app", "transfer_type": "static_assets", "region": "global" } }'
Functions Active CPU Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_functions_cpu_123", "quantity": 25, "metadata": { "project_id": "proj_main_app", "function_type": "api_route", "runtime": "nodejs18.x" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_functions_cpu_123", "quantity": 25, "metadata": { "project_id": "proj_main_app", "function_type": "api_route", "runtime": "nodejs18.x" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_functions_cpu_123", "quantity": 25, "metadata": { "project_id": "proj_main_app", "function_type": "api_route", "runtime": "nodejs18.x" } }'
Functions Provisioned Memory Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_functions_memory_123", "quantity": 2000, "metadata": { "project_id": "proj_main_app", "memory_allocation": "2GB", "runtime": "nodejs18.x" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_functions_memory_123", "quantity": 2000, "metadata": { "project_id": "proj_main_app", "memory_allocation": "2GB", "runtime": "nodejs18.x" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_functions_memory_123", "quantity": 2000, "metadata": { "project_id": "proj_main_app", "memory_allocation": "2GB", "runtime": "nodejs18.x" } }'
Image Transformations Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_image_transforms_123", "quantity": 25000, "metadata": { "project_id": "proj_main_app", "format": "webp", "optimization_type": "auto" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_image_transforms_123", "quantity": 25000, "metadata": { "project_id": "proj_main_app", "format": "webp", "optimization_type": "auto" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_image_transforms_123", "quantity": 25000, "metadata": { "project_id": "proj_main_app", "format": "webp", "optimization_type": "auto" } }'
ISR Operations Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_isr_reads_123", "quantity": 15000000, "metadata": { "project_id": "proj_main_app", "cache_type": "data_cache", "region": "global" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_isr_reads_123", "quantity": 15000000, "metadata": { "project_id": "proj_main_app", "cache_type": "data_cache", "region": "global" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_isr_reads_123", "quantity": 15000000, "metadata": { "project_id": "proj_main_app", "cache_type": "data_cache", "region": "global" } }'
Blob Storage Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_blob_storage_123", "quantity": 8.5, "metadata": { "project_id": "proj_main_app", "storage_type": "file_uploads", "measurement_time": "2025-01-15T10:30:00Z" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_blob_storage_123", "quantity": 8.5, "metadata": { "project_id": "proj_main_app", "storage_type": "file_uploads", "measurement_time": "2025-01-15T10:30:00Z" } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_blob_storage_123", "quantity": 8.5, "metadata": { "project_id": "proj_main_app", "storage_type": "file_uploads", "measurement_time": "2025-01-15T10:30:00Z" } }'
Web Analytics Events Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_analytics_events_123", "quantity": 250000, "metadata": { "project_id": "proj_main_app", "event_type": "page_view", "custom_events": true } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_analytics_events_123", "quantity": 250000, "metadata": { "project_id": "proj_main_app", "event_type": "page_view", "custom_events": true } }'
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_analytics_events_123", "quantity": 250000, "metadata": { "project_id": "proj_main_app", "event_type": "page_view", "custom_events": true } }'
Step 10: Monitor Usage
Check current usage across all features:
curl --location 'https://api.cloud.flexprice.io/v1/subscriptions/sub_123456789/usage' \ --header 'x-api-key: YOUR_API_KEY_HERE'
curl --location 'https://api.cloud.flexprice.io/v1/subscriptions/sub_123456789/usage' \ --header 'x-api-key: YOUR_API_KEY_HERE'
curl --location 'https://api.cloud.flexprice.io/v1/subscriptions/sub_123456789/usage' \ --header 'x-api-key: YOUR_API_KEY_HERE'
Vercel’s Pricing Isn’t Simple, But It’s Predictable If You Know What to Watch
Vercel’s pricing has evolved from generous, flat-tier plans to a usage-based model that mirrors how modern infrastructure scales.
It’s not meant to be confusing, it’s meant to give you flexibility.
But that flexibility comes with responsibility: understanding what you’re consuming, setting limits, and tracking the right metrics.
If you're building something simple and static, Vercel will likely stay free forever.
If you're launching a production-grade app or running dynamic logic at scale, you’ll need to keep an eye on usage, Edge Requests, CPU, bandwidth, ISR, and more.
Once you understand the logic behind the model, you can predict your costs, control your overages, and avoid the classic “How did this happen?” billing moment.
Vercel doesn’t hide what you’re paying for. But you do have to know where to look.
What Vercel actually costs: three worked bills
A three-seat team at 250,000 monthly visitors pays about $294 a month, and only $60 of that is seats. The other three-quarters is bandwidth and requests.
Two notes on where these numbers come from. Every rate applied below is Vercel's own published rate in its cheapest regions, and I've done the arithmetic rather than quoting a total.
The usage volumes come from MakerKit's Vercel pricing calculator presets, because Vercel publishes no example bills, so treat the traffic assumptions as a model and the rates as fact. Build lines use Vercel's actual Turbo rate of $0.105 a minute, which is why these totals run slightly below MakerKit's.
Small: 50,000 visitors, 3 seats, $60 a month
At this size the bill equals the seat count, because the credit swallows everything else.
Line item | Cost |
Pro plan, 3 seats | $60.00 |
Fast Data Transfer, 214 GB of 1 TB | $0.00 |
Edge Requests, 7.9M of 10M | $0.00 |
Fast Origin Transfer | $0.46 |
Function Invocations, 0.4M | $0.24 |
Active CPU, 8.9 hours | $1.14 |
Provisioned Memory | $0.24 |
Build execution, 160 Turbo minutes | $16.80 |
Monthly credit applied | -$18.88 |
Total | $60.00 |
Read the credit line carefully, because this is the case nobody explains. The workload generated $18.88 of metered usage against $60 of credit, so on-demand billing was zero, and both included allocations went unused. This is Vercel at its most predictable, and where most early-stage teams live.
Growing: 250,000 visitors, 3 seats, about $294 a month
This is the inflection point, and Edge Requests alone cost more than the entire team.
Line item | Cost |
Pro plan, 3 seats | $60.00 |
Fast Data Transfer, 1,526 GB against 1 TB included | $78.90 |
Edge Requests, 75M of 10M | $130.00 |
Fast Origin Transfer | $8.58 |
Function Invocations, 5M | $3.00 |
Active CPU, 139 hours | $17.79 |
Provisioned Memory | $3.68 |
Build execution, 500 Turbo minutes | $52.50 |
Monthly credit applied | -$60.00 |
Total | ~$294.45 |
Traffic went up 5x and the bill followed, but the seat cost didn't move. The team passed 1 TB of bandwidth by 526 GB and 10 million Edge Requests by more than 6x. The $60 of credit disappeared in days.
Scale: 1.5M visitors, 5 seats, about $3,071 a month
At this volume two line items are the entire bill and the seats are a rounding error.
Line item | Cost |
Pro plan, 5 seats | $100.00 |
Fast Data Transfer, 10,014 GB | $1,352.10 |
Edge Requests, 645M | $1,270.00 |
Fast Origin Transfer | $64.37 |
Function Invocations, 45M | $27.00 |
Active CPU, 1,500 hours | $192.00 |
Provisioned Memory | $39.75 |
Build execution, 1,200 Turbo minutes | $126.00 |
Monthly credit applied | -$100.00 |
Total | ~$3,071.22 |
Bandwidth and Edge Requests are 85% of this invoice. This is where teams book the call with Vercel sales, and where an Enterprise contract or a CDN offload starts beating published rates.
The pattern across all three: doubling your team adds $20 a seat, and doubling your traffic can add hundreds. If you're forecasting a Vercel bill from headcount, you're modelling the wrong variable.
The meters that drive your bill
Vercel prices roughly twenty separate resources, and two of them account for most of every large invoice. Running that many meters against one plan is a question of how flexible your pricing models can be, and Vercel's answer is to meter everything separately and let the credit smooth it out.
Every rate below carries a regional range. Vercel charges least in Washington D.C., Cleveland and Portland, and more everywhere else, per its regional pricing docs.
Edge Requests, $2.00 to $3.20 per million
Every asset on every page view counts, which is why this number gets large so fast. Pro includes the first 10 million a month.
A single page with 35 images, scripts and stylesheets plus one API call is 36 Edge Requests. At two million page views a month, that's 72 million requests against a 10 million allowance. If middleware.ts runs on every route including assets, the count multiplies again.
Fast Data Transfer, $0.15 to $0.35 per GB
This is egress, and it's the single biggest line on most large bills. Pro includes the first 1 TB. It climbs when you serve video or large images, when cache hit rates drop, or when a page ships uncompressed heroes at three device sizes.
Fast Origin Transfer is the related meter, covering data moving from your function back to the edge, at $0.06 to $0.43 per GB, a 7x regional spread.
Active CPU, $0.128 to $0.221 per hour
Vercel bills only the time your code actually runs on CPU, not the time a request spends waiting. This is Fluid compute, and it's a genuine win for I/O-heavy work.
Vercel's own example, a function that takes 100ms to process data and spends 400ms waiting on a database query bills for the 100ms. The rate runs $0.128 an hour in the cheapest US regions, $0.184 in Frankfurt and $0.221 in São Paulo.
Most guides skip the second half. CPU billing pauses during I/O wait, but Provisioned Memory keeps billing the whole time a function instance is alive, at $0.0106 to $0.0183 per GB-hour. Billing that pauses mid-request and resumes when the CPU wakes up only works on top of real-time metering, so a slow database makes your memory line expensive while your CPU line still looks healthy.
Function Invocations, $0.60 per million
Pro includes no invocation allowance at all. Vercel bills them on demand from the first call, against your credit. This is where background jobs and aggressive polling show up.
ISR and Runtime Cache, where writes cost ten times reads
Reads are cheap and writes cost ten times more, which is the opposite of what most teams assume. Incremental Static Regeneration serves static content that updates over time: a read serves cached content, a write updates it.
Reads run $0.40 to $0.64 per million units and writes $4.00 to $6.40 per million, with Runtime Cache priced the same. Wiring ISR to fire on every CMS save is how a caching feature becomes a billing problem.
Image optimization, Blob, and Global Config
Three smaller meters that surprise people, with Pro rates for each:
Image transformations run $0.05 to $0.0812 per 1,000, cache reads $0.40 to $0.64 per million, cache writes $4.00 to $6.40 per million. A blog with 100 posts and five hero variants each can hit thousands of source images on the first deploy.
Blob storage runs $0.023 to $0.041 per GB, with simple operations at $0.35 to $0.56 per million and advanced operations at $4.50 to $7.00 per million.
Global Config, which Vercel used to call Edge Config, runs $3.00 per million reads and $1.00 per 100 writes. Treat it as a read-heavy store.
Build minutes, $0.0035 per CPU-minute
Builds bill by CPU-minute, not wall-clock minute, and the machine class multiplies it. Vercel's rate card gives the formula: a build taking 2 minutes 34 seconds on an Enhanced machine costs $0.084, because it rounds to 3 minutes, times 8 CPUs, times $0.0035. Starting prices are $0.014 a minute for Standard, $0.028 for Enhanced and $0.105 for Turbo.
Several widely-read guides list Turbo at $0.126, which is wrong against Vercel's own figure. New Pro teams default to Elastic machines, which pick a class per project automatically, and that convenience makes build costs harder to forecast.
The newer meters nobody covers
Vercel has added billable products faster than the guides have kept up. Each of these bills separately against your credit:
Vercel Sandbox, with its own CPU, memory, creation and network meters, plus Vercel Workflows and Vercel Queues at $0.60 to $0.96 per million operations
Edge Request CPU Duration, a separate meter at $0.30 to $0.48 per hour
Microfrontends, at $2 per million routed requests and $250 per project per month past the two included
WAF rate limiting at $0.50 to $0.80 per million allowed requests, plus OWASP CRS inspection billed by request count and payload size
Speed Insights at $0.65 per 10,000 events, Web Analytics at $0.03 per 1,000, and Log Drains at $0.50 per GB
Custom environments, one per Pro project, then $50 a month per pack of five up to 16
Nobody needs to memorise that list. The point is that "Vercel costs $20 a seat" stopped being a useful sentence a while ago.
The Pro add-ons that replaced the Enterprise cliff
You don't need Enterprise just for SSO. Vercel sells SAML Single Sign-On as a Pro add-on at $300 a month, and it sells eight more the same way.
Last year this article argued that a team needing one enterprise feature had no option but a five-figure contract. That was true then and it isn't now. Here's the full menu from Vercel's Pro plan docs:
Add-on | Price |
Additional deploying seat | $20 / month each |
SAML Single Sign-On | $300 / month |
HIPAA BAA | $350 / month |
Flags Explorer | $250 / month |
Advanced Deployment Protection | $150 / month |
Preview Deployment Suffix | $100 / month |
Static IPs | $100 / month per project, plus Private Data Transfer |
Web Analytics Plus | $10 / month |
Speed Insights | $10 / month per project |
Observability Plus | $1.20 per million events |
Now do the arithmetic that used to be impossible. SSO plus HIPAA plus Advanced Deployment Protection runs $800 a month, about $9,600 a year, comfortably under the lowest published Enterprise estimate. Add a five-seat team at $100 and you're at $10,800 a year with security features that previously required a contract.
So the Enterprise question changed shape. It's no longer "can I buy just the one thing I need." It's whether SCIM, audit logs, managed WAF rulesets, multi-region failover and a 99.99% SLA are worth signing for. That's a real decision with a real answer, and I'd rather have it than the cliff we had before. Credit where it's due: unbundling this was the right call.
Two caveats. Add-on prices are list prices and none of them consumes your credit, so a $300 SSO line is $300 on the invoice. And the free Hobby-tier WAF is not the same product as managed WAF rulesets, which stay behind Enterprise.
When Vercel gets expensive, and what teams switch to
Vercel gets expensive when bandwidth or middleware dominates your workload. It stays cheap when your traffic is mostly static and your team is small. That fork is structural, not something you negotiate.
Vercel turns costly for image-heavy marketing sites leaning on Image Optimization, apps running edge middleware on every route, high-traffic SSR where every render does real work, and anything past roughly 1 TB of monthly egress. It stays cheap for mostly-static sites and docs, indie SaaS with one to three seats under about 50,000 visitors a month, and anything with aggressive caching.
Here's the same 250,000-visitor, three-seat workload priced across platforms. The Vercel figure is mine, computed from Vercel's rates above. The rest come from MakerKit's cross-provider calculator, since those platforms publish their own rates and I have not verified them here:
Platform | Monthly cost | Egress charged? |
Cloudflare Workers | ~$15 | No |
Self-hosted VPS behind a CDN | ~$30 | No |
Railway Pro, 3 seats | ~$116 | Yes, $0.05/GB |
Vercel Pro, 3 seats | ~$294 | Yes, $0.15/GB over 1 TB |
Netlify Pro | ~$340 | Yes, credit-based |
Render Pro | ~$537 | Yes, $30 per 100 GB over 100 GB |
The gap is real and it isn't mostly about rates. Cloudflare Workers costs an order of magnitude less at this workload because it doesn't charge for egress at all.
That's a pricing-model difference, not a discount: the cheaper platforms moved the meter rather than lowering the price on the same meter. Whether Vercel's premium is worth roughly $250 a month depends on how many engineering hours you'd burn rebuilding preview deploys, skew protection and zero-config Next.js yourself.
Teams do leave, and they're public about it. The highest-ranking community discussion on Vercel pricing is an r/vercel thread from a team that left at $1,800 a month and landed at roughly $25 to $40 on a VPS tier. Worth reading before you assume your own bill is unavoidable.
What to do with this
Vercel's pricing is predictable now in a way it wasn't two years ago, as long as you know which two meters to watch. Bandwidth and Edge Requests decide almost every bill above the credit line. Everything else is noise until it isn't.
So do three things this week. Open your usage dashboard and find out how close you are to 1 TB of Fast Data Transfer and 10 million Edge Requests, because those two numbers tell you whether you have a bill or just a seat count. Set your spend management threshold to a figure that means something for your business rather than leaving the $200 default in place. And if you need SSO or HIPAA, price the add-ons before you take the sales call, because $800 a month buys a lot of what a contract used to be the only route to.
If you're on the other side of this and building credit-based pricing into your own product, the Flexprice docs show how the wallet mechanics work.
Frequently asked questions about Vercel pricing
How much does Vercel cost per month?
Vercel costs $0 on Hobby, $20 per deploying seat per month on Pro, and custom pricing on Enterprise. A three-seat Pro team at 50,000 monthly visitors pays $60, because usage stays inside the credit. The same team at 250,000 visitors pays about $294, and at 1.5 million visitors with five seats, about $3,071.
Is Vercel free or paid?
Both. The Hobby plan is free forever with no credit card, and paid plans start at $20 a month. Hobby restricts you to non-commercial projects and pauses deployments at the cap instead of billing overage, so charging a customer means moving to Pro.
How does Vercel's $20 usage credit work?
Each Pro seat comes with $20 of credit that you can spend on any billable resource in that month. Two allocations sit outside the credit and cost nothing: 1 TB of Fast Data Transfer and 10 million Edge Requests. Every other meter draws the credit down first, and on-demand billing starts only when the credit hits zero. Unused credit expires at month end with no rollover.
When does Vercel get expensive?
Vercel's bill turns somewhere around 1 TB of monthly egress. Past that, Fast Data Transfer at $0.15 to $0.35 per GB and Edge Requests at $2.00 to $3.20 per million overtake seat costs and dominate the invoice. At 250,000 monthly visitors, Edge Requests alone can cost more than an entire three-person team's seats.
Do I need Vercel Enterprise just for SSO?
No. Vercel sells SAML Single Sign-On as a Pro add-on at $300 a month, HIPAA BAA at $350, and Advanced Deployment Protection at $150. Enterprise is now about SCIM directory sync, audit logs, managed WAF rulesets, multi-region failover and a 99.99% SLA, not about buying one security feature.
How to replicate Vercel's pricing with Flexprice
Complete guide to replicate Vercel multi-tier pricing structure with usage-based billing in flexprice.io. Flexprice is an enterprise-grade billing and monetization platform designed for the most complex billing scenarios from day zero. Think AI-native companies, cloud infrastructure providers, observability platforms, LLM providers, martech tools, and any SaaS company whose pricing has outgrown simple subscription tiers.
Overview
Vercel uses a sophisticated multi-tier pricing model with usage-based scaling across multiple dimensions:
Features | Base Price | Key Features |
|---|---|---|
Hobby | $0/ month | 1M edge requests, 100GB bandwidth, 4 CPU-hrs |
Pro | 20/user/month | 10M Edge Requests, 1TB bandwidth, 16 CPU-hrs |
Enterprise | Custom pricing | Unlimited resources + SLA + compliance + support |
Prerequisites
- ✅ flexprice.io account
- ✅ API key ready
- ✅ Understanding of edge computing and CDN billing
- ✅ Knowledge of serverless functions and deployment platforms
Step 1: Get Your API Key
Log in to your flexprice.io dashboard
Navigate to **Settings** → **API Keys**
Copy your API key
Step 2: Create Core Usage Features
Edge Requests Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Requests", "type": "metered", "unit_singular": "request", "unit_plural": "requests", "description": "Requests routed through Vercel edge network", "meter": { "aggregation": { "type": "SUM", "field": "request_count", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Requests", "filters": [], "event_name": "edge.requests" } }'
Fast Data Transfer Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Fast Data Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer from edge network to users", "meter": { "aggregation": { "type": "SUM", "field": "bytes_transferred", "multiplier": 0.000000001 }, "reset_usage": "BILLING_PERIOD", "name": "Fast Data Transfer", "filters": [], "event_name": "transfer.fast_data" } }'
Fast Origin Transfer Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Fast Origin Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer between edge network and functions", "meter": { "aggregation": { "type": "SUM", "field": "origin_bytes", "multiplier": 0.000000001 }, "reset_usage": "BILLING_PERIOD", "name": "Fast Origin Transfer", "filters": [], "event_name": "transfer.fast_origin" } }'
Functions Active CPU Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Functions Active CPU", "type": "metered", "unit_singular": "hour", "unit_plural": "hours", "description": "Active CPU time for serverless functions", "meter": { "aggregation": { "type": "SUM", "field": "cpu_hours", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Functions Active CPU", "filters": [], "event_name": "functions.cpu" } }'
Functions Provisioned Memory Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Functions Provisioned Memory", "type": "metered", "unit_singular": "GB-hour", "unit_plural": "GB-hours", "description": "Memory allocated to function instances", "meter": { "aggregation": { "type": "SUM", "field": "memory_gb_hours", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Functions Provisioned Memory", "filters": [], "event_name": "functions.memory" } }'
Function Invocations Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Function Invocations", "type": "metered", "unit_singular": "invocation", "unit_plural": "invocations", "description": "Number of function executions", "meter": { "aggregation": { "type": "SUM", "field": "invocation_count", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Function Invocations", "filters": [], "event_name": "functions.invocations" } }'
ISR Reads Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "ISR Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Incremental Static Regeneration cache reads", "meter": { "aggregation": { "type": "SUM", "field": "isr_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "ISR Reads", "filters": [], "event_name": "isr.reads" } }'
ISR Writes Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "ISR Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Incremental Static Regeneration cache writes", "meter": { "aggregation": { "type": "SUM", "field": "isr_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "ISR Writes", "filters": [], "event_name": "isr.writes" } }'
Image Transformations Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Transformations", "type": "metered", "unit_singular": "transformation", "unit_plural": "transformations", "description": "Image optimization and transformations", "meter": { "aggregation": { "type": "SUM", "field": "image_transforms", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Transformations", "filters": [], "event_name": "images.transforms" } }'
Image Cache Reads Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Cache Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Image cache read operations", "meter": { "aggregation": { "type": "SUM", "field": "image_cache_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Cache Reads", "filters": [], "event_name": "images.cache_reads" } }'
Image Cache Writes Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Cache Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Image cache write operations", "meter": { "aggregation": { "type": "SUM", "field": "image_cache_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Cache Writes", "filters": [], "event_name": "images.cache_writes" } }'
Blob Storage Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Storage", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "File storage in blob store", "meter": { "aggregation": { "type": "MAX", "field": "storage_gb", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Storage", "filters": [], "event_name": "blob.storage" } }'
Blob Simple Operations Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Simple Operations", "type": "metered", "unit_singular": "operation", "unit_plural": "operations", "description": "Simple blob operations (head, URL access)", "meter": { "aggregation": { "type": "SUM", "field": "simple_ops", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Simple Operations", "filters": [], "event_name": "blob.simple_ops" } }'
Blob Advanced Operations Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Advanced Operations", "type": "metered", "unit_singular": "operation", "unit_plural": "operations", "description": "Advanced blob operations (put, copy, list)", "meter": { "aggregation": { "type": "SUM", "field": "advanced_ops", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Advanced Operations", "filters": [], "event_name": "blob.advanced_ops" } }'
Blob Data Transfer Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Data Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer for blob downloads/views", "meter": { "aggregation": { "type": "SUM", "field": "blob_transfer_gb", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Data Transfer", "filters": [], "event_name": "blob.transfer" } }'
Edge Config Reads Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Config Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Edge configuration data reads", "meter": { "aggregation": { "type": "SUM", "field": "config_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Config Reads", "filters": [], "event_name": "edge_config.reads" } }'
Edge Config Writes Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Config Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Edge configuration data writes", "meter": { "aggregation": { "type": "SUM", "field": "config_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Config Writes", "filters": [], "event_name": "edge_config.writes" } }'
Web Analytics Events Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Web Analytics Events", "type": "metered", "unit_singular": "event", "unit_plural": "events", "description": "Web analytics events collected", "meter": { "aggregation": { "type": "SUM", "field": "analytics_events", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Web Analytics Events", "filters": [], "event_name": "analytics.events" } }'
Speed Insights Data Points Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Speed Insights Data Points", "type": "metered", "unit_singular": "data point", "unit_plural": "data points", "description": "Core Web Vitals data points", "meter": { "aggregation": { "type": "SUM", "field": "speed_data_points", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Speed Insights Data Points", "filters": [], "event_name": "speed.insights" } }'
Step 3: Create Hobby Plan (Free Tier)
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Hobby Plan", "description": "Free forever for personal projects", "lookup_key": "vercel_hobby", "prices": [], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_origin_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 4, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 360, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_function_invocations_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 200000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_transforms_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 5000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 300000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_storage_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_simple_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_advanced_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 2000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_analytics_events_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 50000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_speed_data_points_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10000, "usage_reset_period": "MONTHLY" } ] }'
Step 4: Create Pro Plan
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Pro Plan", "description": "Everything you need to build and scale your app", "lookup_key": "vercel_pro", "prices": [ { "amount": "2000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Pro Plan Base Fee per seat", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "200", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Requests overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "200", "up_to": null } ], "filters": { "feature": "edge_requests" } }, { "amount": "15", "billing_model": "PER_UNIT", "currency": "USD", "description": "Fast Data Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "15", "up_to": null } ], "filters": { "feature": "fast_data_transfer" } }, { "amount": "6", "billing_model": "PER_UNIT", "currency": "USD", "description": "Fast Origin Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "6", "up_to": null } ], "filters": { "feature": "fast_origin_transfer" } }, { "amount": "12.8", "billing_model": "PER_UNIT", "currency": "USD", "description": "Functions Active CPU overage (per hour)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "12.8", "up_to": null } ], "filters": { "feature": "functions_cpu" } }, { "amount": "1.06", "billing_model": "PER_UNIT", "currency": "USD", "description": "Functions Provisioned Memory overage (per GB-hour)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "1.06", "up_to": null } ], "filters": { "feature": "functions_memory" } }, { "amount": "60", "billing_model": "PER_UNIT", "currency": "USD", "description": "Function Invocations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "60", "up_to": null } ], "filters": { "feature": "function_invocations" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "ISR Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "isr_reads" } }, { "amount": "400", "billing_model": "PER_UNIT", "currency": "USD", "description": "ISR Writes overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "400", "up_to": null } ], "filters": { "feature": "isr_writes" } }, { "amount": "5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Transformations overage (per 1K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "5", "up_to": null } ], "filters": { "feature": "image_transforms" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Cache Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "image_cache_reads" } }, { "amount": "400", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Cache Writes overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "400", "up_to": null } ], "filters": { "feature": "image_cache_writes" } }, { "amount": "2.3", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Storage overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "2.3", "up_to": null } ], "filters": { "feature": "blob_storage" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Simple Operations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "blob_simple_ops" } }, { "amount": "500", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Advanced Operations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "500", "up_to": null } ], "filters": { "feature": "blob_advanced_ops" } }, { "amount": "5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Data Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "5", "up_to": null } ], "filters": { "feature": "blob_data_transfer" } }, { "amount": "300", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Config Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "300", "up_to": null } ], "filters": { "feature": "edge_config_reads" } }, { "amount": "1000", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Config Writes overage (per 500 writes)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "1000", "up_to": null } ], "filters": { "feature": "edge_config_writes" } }, { "amount": "3", "billing_model": "PER_UNIT", "currency": "USD", "description": "Web Analytics Events overage (per 100K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "3", "up_to": null } ], "filters": { "feature": "analytics_events" } } ], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_origin_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 16, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1440, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_function_invocations_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 2000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_transforms_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 600000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 200000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_storage_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 5, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_simple_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_advanced_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_analytics_events_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_speed_data_points_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" } ] }'
Step 5: Create Enterprise Plan Template
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Enterprise Plan", "description": "Critical security, performance, observability, platform SLAs", "lookup_key": "vercel_enterprise", "prices": [ { "amount": "300000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Enterprise Plan Base Fee (starting price)", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 } ], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 50000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 5000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 50000, "usage_reset_period": "MONTHLY" } ] }'
Step 6: Create Add-on Plans
Web Analytics Plus Add-on curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Web Analytics Plus", "description": "Extended analytics with UTM parameters and 24-month retention", "lookup_key": "web_analytics_plus", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Web Analytics Plus per team", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 } ] }'
Speed Insights Add-on
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Speed Insights", "description": "Core Web Vitals monitoring per project", "lookup_key": "speed_insights", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Speed Insights per project", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "6.5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Speed Insights data points overage (per 10K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "6.5", "up_to": null } ], "filters": { "feature": "speed_data_points" } } ] }'
Observability Plus Add-on
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Observability Plus", "description": "Advanced metrics, query engine, and AI prompting", "lookup_key": "observability_plus", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Observability Plus base fee (1M events included)", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "120", "billing_model": "PER_UNIT", "currency": "USD", "description": "Observability events overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "120", "up_to": null } ], "filters": { "feature": "observability_events" } } ] }'
Step 7: Create Customer
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/customers' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "DevStudio Corp", "email": "[email protected]", "external_id": "cust_devstudio_123", "metadata": { "company": "DevStudio Corp", "industry": "Software Development", "plan_tier": "pro", "team_size": "5" } }'
Step 8: Create Pro Subscription
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/subscriptions' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "customer_id": "cust_123456789", "plan_id": "plan_vercel_pro_123", "billing_period": "MONTHLY", "billing_period_count": 1, "currency": "USD", "start_date": "2025-01-15", "phases": [ { "start_date": "2025-01-15", "line_items": [ { "price_id": "price_pro_base_123", "quantity": 5, "display_name": "Pro Plan - 5 Team Seats" }, { "price_id": "price_web_analytics_plus_123", "quantity": 1, "display_name": "Web Analytics Plus Add-on" } ] } ] }'
Step 9: Track Usage Events
Edge Requests Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_edge_requests_123", "quantity": 15000000, "metadata": { "project_id": "proj_main_app", "region": "us-east-1", "measurement_time": "2025-01-15T10:30:00Z" } }'
Fast Data Transfer Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_fast_data_transfer_123", "quantity": 1250, "metadata": { "project_id": "proj_main_app", "transfer_type": "static_assets", "region": "global" } }'
Functions Active CPU Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_functions_cpu_123", "quantity": 25, "metadata": { "project_id": "proj_main_app", "function_type": "api_route", "runtime": "nodejs18.x" } }'
Functions Provisioned Memory Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_functions_memory_123", "quantity": 2000, "metadata": { "project_id": "proj_main_app", "memory_allocation": "2GB", "runtime": "nodejs18.x" } }'
Image Transformations Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_image_transforms_123", "quantity": 25000, "metadata": { "project_id": "proj_main_app", "format": "webp", "optimization_type": "auto" } }'
ISR Operations Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_isr_reads_123", "quantity": 15000000, "metadata": { "project_id": "proj_main_app", "cache_type": "data_cache", "region": "global" } }'
Blob Storage Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_blob_storage_123", "quantity": 8.5, "metadata": { "project_id": "proj_main_app", "storage_type": "file_uploads", "measurement_time": "2025-01-15T10:30:00Z" } }'
Web Analytics Events Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_analytics_events_123", "quantity": 250000, "metadata": { "project_id": "proj_main_app", "event_type": "page_view", "custom_events": true } }'
Step 10: Monitor Usage
Check current usage across all features:
curl --location 'https://api.cloud.flexprice.io/v1/subscriptions/sub_123456789/usage' \ --header 'x-api-key: YOUR_API_KEY_HERE'
Vercel’s Pricing Isn’t Simple, But It’s Predictable If You Know What to Watch
Vercel’s pricing has evolved from generous, flat-tier plans to a usage-based model that mirrors how modern infrastructure scales.
It’s not meant to be confusing, it’s meant to give you flexibility.
But that flexibility comes with responsibility: understanding what you’re consuming, setting limits, and tracking the right metrics.
If you're building something simple and static, Vercel will likely stay free forever.
If you're launching a production-grade app or running dynamic logic at scale, you’ll need to keep an eye on usage, Edge Requests, CPU, bandwidth, ISR, and more.
Once you understand the logic behind the model, you can predict your costs, control your overages, and avoid the classic “How did this happen?” billing moment.
Vercel doesn’t hide what you’re paying for. But you do have to know where to look.
What Vercel actually costs: three worked bills
A three-seat team at 250,000 monthly visitors pays about $294 a month, and only $60 of that is seats. The other three-quarters is bandwidth and requests.
Two notes on where these numbers come from. Every rate applied below is Vercel's own published rate in its cheapest regions, and I've done the arithmetic rather than quoting a total.
The usage volumes come from MakerKit's Vercel pricing calculator presets, because Vercel publishes no example bills, so treat the traffic assumptions as a model and the rates as fact. Build lines use Vercel's actual Turbo rate of $0.105 a minute, which is why these totals run slightly below MakerKit's.
Small: 50,000 visitors, 3 seats, $60 a month
At this size the bill equals the seat count, because the credit swallows everything else.
Line item | Cost |
Pro plan, 3 seats | $60.00 |
Fast Data Transfer, 214 GB of 1 TB | $0.00 |
Edge Requests, 7.9M of 10M | $0.00 |
Fast Origin Transfer | $0.46 |
Function Invocations, 0.4M | $0.24 |
Active CPU, 8.9 hours | $1.14 |
Provisioned Memory | $0.24 |
Build execution, 160 Turbo minutes | $16.80 |
Monthly credit applied | -$18.88 |
Total | $60.00 |
Read the credit line carefully, because this is the case nobody explains. The workload generated $18.88 of metered usage against $60 of credit, so on-demand billing was zero, and both included allocations went unused. This is Vercel at its most predictable, and where most early-stage teams live.
Growing: 250,000 visitors, 3 seats, about $294 a month
This is the inflection point, and Edge Requests alone cost more than the entire team.
Line item | Cost |
Pro plan, 3 seats | $60.00 |
Fast Data Transfer, 1,526 GB against 1 TB included | $78.90 |
Edge Requests, 75M of 10M | $130.00 |
Fast Origin Transfer | $8.58 |
Function Invocations, 5M | $3.00 |
Active CPU, 139 hours | $17.79 |
Provisioned Memory | $3.68 |
Build execution, 500 Turbo minutes | $52.50 |
Monthly credit applied | -$60.00 |
Total | ~$294.45 |
Traffic went up 5x and the bill followed, but the seat cost didn't move. The team passed 1 TB of bandwidth by 526 GB and 10 million Edge Requests by more than 6x. The $60 of credit disappeared in days.
Scale: 1.5M visitors, 5 seats, about $3,071 a month
At this volume two line items are the entire bill and the seats are a rounding error.
Line item | Cost |
Pro plan, 5 seats | $100.00 |
Fast Data Transfer, 10,014 GB | $1,352.10 |
Edge Requests, 645M | $1,270.00 |
Fast Origin Transfer | $64.37 |
Function Invocations, 45M | $27.00 |
Active CPU, 1,500 hours | $192.00 |
Provisioned Memory | $39.75 |
Build execution, 1,200 Turbo minutes | $126.00 |
Monthly credit applied | -$100.00 |
Total | ~$3,071.22 |
Bandwidth and Edge Requests are 85% of this invoice. This is where teams book the call with Vercel sales, and where an Enterprise contract or a CDN offload starts beating published rates.
The pattern across all three: doubling your team adds $20 a seat, and doubling your traffic can add hundreds. If you're forecasting a Vercel bill from headcount, you're modelling the wrong variable.
The meters that drive your bill
Vercel prices roughly twenty separate resources, and two of them account for most of every large invoice. Running that many meters against one plan is a question of how flexible your pricing models can be, and Vercel's answer is to meter everything separately and let the credit smooth it out.
Every rate below carries a regional range. Vercel charges least in Washington D.C., Cleveland and Portland, and more everywhere else, per its regional pricing docs.
Edge Requests, $2.00 to $3.20 per million
Every asset on every page view counts, which is why this number gets large so fast. Pro includes the first 10 million a month.
A single page with 35 images, scripts and stylesheets plus one API call is 36 Edge Requests. At two million page views a month, that's 72 million requests against a 10 million allowance. If middleware.ts runs on every route including assets, the count multiplies again.
Fast Data Transfer, $0.15 to $0.35 per GB
This is egress, and it's the single biggest line on most large bills. Pro includes the first 1 TB. It climbs when you serve video or large images, when cache hit rates drop, or when a page ships uncompressed heroes at three device sizes.
Fast Origin Transfer is the related meter, covering data moving from your function back to the edge, at $0.06 to $0.43 per GB, a 7x regional spread.
Active CPU, $0.128 to $0.221 per hour
Vercel bills only the time your code actually runs on CPU, not the time a request spends waiting. This is Fluid compute, and it's a genuine win for I/O-heavy work.
Vercel's own example, a function that takes 100ms to process data and spends 400ms waiting on a database query bills for the 100ms. The rate runs $0.128 an hour in the cheapest US regions, $0.184 in Frankfurt and $0.221 in São Paulo.
Most guides skip the second half. CPU billing pauses during I/O wait, but Provisioned Memory keeps billing the whole time a function instance is alive, at $0.0106 to $0.0183 per GB-hour. Billing that pauses mid-request and resumes when the CPU wakes up only works on top of real-time metering, so a slow database makes your memory line expensive while your CPU line still looks healthy.
Function Invocations, $0.60 per million
Pro includes no invocation allowance at all. Vercel bills them on demand from the first call, against your credit. This is where background jobs and aggressive polling show up.
ISR and Runtime Cache, where writes cost ten times reads
Reads are cheap and writes cost ten times more, which is the opposite of what most teams assume. Incremental Static Regeneration serves static content that updates over time: a read serves cached content, a write updates it.
Reads run $0.40 to $0.64 per million units and writes $4.00 to $6.40 per million, with Runtime Cache priced the same. Wiring ISR to fire on every CMS save is how a caching feature becomes a billing problem.
Image optimization, Blob, and Global Config
Three smaller meters that surprise people, with Pro rates for each:
Image transformations run $0.05 to $0.0812 per 1,000, cache reads $0.40 to $0.64 per million, cache writes $4.00 to $6.40 per million. A blog with 100 posts and five hero variants each can hit thousands of source images on the first deploy.
Blob storage runs $0.023 to $0.041 per GB, with simple operations at $0.35 to $0.56 per million and advanced operations at $4.50 to $7.00 per million.
Global Config, which Vercel used to call Edge Config, runs $3.00 per million reads and $1.00 per 100 writes. Treat it as a read-heavy store.
Build minutes, $0.0035 per CPU-minute
Builds bill by CPU-minute, not wall-clock minute, and the machine class multiplies it. Vercel's rate card gives the formula: a build taking 2 minutes 34 seconds on an Enhanced machine costs $0.084, because it rounds to 3 minutes, times 8 CPUs, times $0.0035. Starting prices are $0.014 a minute for Standard, $0.028 for Enhanced and $0.105 for Turbo.
Several widely-read guides list Turbo at $0.126, which is wrong against Vercel's own figure. New Pro teams default to Elastic machines, which pick a class per project automatically, and that convenience makes build costs harder to forecast.
The newer meters nobody covers
Vercel has added billable products faster than the guides have kept up. Each of these bills separately against your credit:
Vercel Sandbox, with its own CPU, memory, creation and network meters, plus Vercel Workflows and Vercel Queues at $0.60 to $0.96 per million operations
Edge Request CPU Duration, a separate meter at $0.30 to $0.48 per hour
Microfrontends, at $2 per million routed requests and $250 per project per month past the two included
WAF rate limiting at $0.50 to $0.80 per million allowed requests, plus OWASP CRS inspection billed by request count and payload size
Speed Insights at $0.65 per 10,000 events, Web Analytics at $0.03 per 1,000, and Log Drains at $0.50 per GB
Custom environments, one per Pro project, then $50 a month per pack of five up to 16
Nobody needs to memorise that list. The point is that "Vercel costs $20 a seat" stopped being a useful sentence a while ago.
The Pro add-ons that replaced the Enterprise cliff
You don't need Enterprise just for SSO. Vercel sells SAML Single Sign-On as a Pro add-on at $300 a month, and it sells eight more the same way.
Last year this article argued that a team needing one enterprise feature had no option but a five-figure contract. That was true then and it isn't now. Here's the full menu from Vercel's Pro plan docs:
Add-on | Price |
Additional deploying seat | $20 / month each |
SAML Single Sign-On | $300 / month |
HIPAA BAA | $350 / month |
Flags Explorer | $250 / month |
Advanced Deployment Protection | $150 / month |
Preview Deployment Suffix | $100 / month |
Static IPs | $100 / month per project, plus Private Data Transfer |
Web Analytics Plus | $10 / month |
Speed Insights | $10 / month per project |
Observability Plus | $1.20 per million events |
Now do the arithmetic that used to be impossible. SSO plus HIPAA plus Advanced Deployment Protection runs $800 a month, about $9,600 a year, comfortably under the lowest published Enterprise estimate. Add a five-seat team at $100 and you're at $10,800 a year with security features that previously required a contract.
So the Enterprise question changed shape. It's no longer "can I buy just the one thing I need." It's whether SCIM, audit logs, managed WAF rulesets, multi-region failover and a 99.99% SLA are worth signing for. That's a real decision with a real answer, and I'd rather have it than the cliff we had before. Credit where it's due: unbundling this was the right call.
Two caveats. Add-on prices are list prices and none of them consumes your credit, so a $300 SSO line is $300 on the invoice. And the free Hobby-tier WAF is not the same product as managed WAF rulesets, which stay behind Enterprise.
When Vercel gets expensive, and what teams switch to
Vercel gets expensive when bandwidth or middleware dominates your workload. It stays cheap when your traffic is mostly static and your team is small. That fork is structural, not something you negotiate.
Vercel turns costly for image-heavy marketing sites leaning on Image Optimization, apps running edge middleware on every route, high-traffic SSR where every render does real work, and anything past roughly 1 TB of monthly egress. It stays cheap for mostly-static sites and docs, indie SaaS with one to three seats under about 50,000 visitors a month, and anything with aggressive caching.
Here's the same 250,000-visitor, three-seat workload priced across platforms. The Vercel figure is mine, computed from Vercel's rates above. The rest come from MakerKit's cross-provider calculator, since those platforms publish their own rates and I have not verified them here:
Platform | Monthly cost | Egress charged? |
Cloudflare Workers | ~$15 | No |
Self-hosted VPS behind a CDN | ~$30 | No |
Railway Pro, 3 seats | ~$116 | Yes, $0.05/GB |
Vercel Pro, 3 seats | ~$294 | Yes, $0.15/GB over 1 TB |
Netlify Pro | ~$340 | Yes, credit-based |
Render Pro | ~$537 | Yes, $30 per 100 GB over 100 GB |
The gap is real and it isn't mostly about rates. Cloudflare Workers costs an order of magnitude less at this workload because it doesn't charge for egress at all.
That's a pricing-model difference, not a discount: the cheaper platforms moved the meter rather than lowering the price on the same meter. Whether Vercel's premium is worth roughly $250 a month depends on how many engineering hours you'd burn rebuilding preview deploys, skew protection and zero-config Next.js yourself.
Teams do leave, and they're public about it. The highest-ranking community discussion on Vercel pricing is an r/vercel thread from a team that left at $1,800 a month and landed at roughly $25 to $40 on a VPS tier. Worth reading before you assume your own bill is unavoidable.
What to do with this
Vercel's pricing is predictable now in a way it wasn't two years ago, as long as you know which two meters to watch. Bandwidth and Edge Requests decide almost every bill above the credit line. Everything else is noise until it isn't.
So do three things this week. Open your usage dashboard and find out how close you are to 1 TB of Fast Data Transfer and 10 million Edge Requests, because those two numbers tell you whether you have a bill or just a seat count. Set your spend management threshold to a figure that means something for your business rather than leaving the $200 default in place. And if you need SSO or HIPAA, price the add-ons before you take the sales call, because $800 a month buys a lot of what a contract used to be the only route to.
If you're on the other side of this and building credit-based pricing into your own product, the Flexprice docs show how the wallet mechanics work.
Frequently asked questions about Vercel pricing
How much does Vercel cost per month?
Vercel costs $0 on Hobby, $20 per deploying seat per month on Pro, and custom pricing on Enterprise. A three-seat Pro team at 50,000 monthly visitors pays $60, because usage stays inside the credit. The same team at 250,000 visitors pays about $294, and at 1.5 million visitors with five seats, about $3,071.
Is Vercel free or paid?
Both. The Hobby plan is free forever with no credit card, and paid plans start at $20 a month. Hobby restricts you to non-commercial projects and pauses deployments at the cap instead of billing overage, so charging a customer means moving to Pro.
How does Vercel's $20 usage credit work?
Each Pro seat comes with $20 of credit that you can spend on any billable resource in that month. Two allocations sit outside the credit and cost nothing: 1 TB of Fast Data Transfer and 10 million Edge Requests. Every other meter draws the credit down first, and on-demand billing starts only when the credit hits zero. Unused credit expires at month end with no rollover.
When does Vercel get expensive?
Vercel's bill turns somewhere around 1 TB of monthly egress. Past that, Fast Data Transfer at $0.15 to $0.35 per GB and Edge Requests at $2.00 to $3.20 per million overtake seat costs and dominate the invoice. At 250,000 monthly visitors, Edge Requests alone can cost more than an entire three-person team's seats.
Do I need Vercel Enterprise just for SSO?
No. Vercel sells SAML Single Sign-On as a Pro add-on at $300 a month, HIPAA BAA at $350, and Advanced Deployment Protection at $150. Enterprise is now about SCIM directory sync, audit logs, managed WAF rulesets, multi-region failover and a 99.99% SLA, not about buying one security feature.
How to replicate Vercel's pricing with Flexprice
Complete guide to replicate Vercel multi-tier pricing structure with usage-based billing in flexprice.io. Flexprice is an enterprise-grade billing and monetization platform designed for the most complex billing scenarios from day zero. Think AI-native companies, cloud infrastructure providers, observability platforms, LLM providers, martech tools, and any SaaS company whose pricing has outgrown simple subscription tiers.
Overview
Vercel uses a sophisticated multi-tier pricing model with usage-based scaling across multiple dimensions:
Features | Base Price | Key Features |
|---|---|---|
Hobby | $0/ month | 1M edge requests, 100GB bandwidth, 4 CPU-hrs |
Pro | 20/user/month | 10M Edge Requests, 1TB bandwidth, 16 CPU-hrs |
Enterprise | Custom pricing | Unlimited resources + SLA + compliance + support |
Prerequisites
- ✅ flexprice.io account
- ✅ API key ready
- ✅ Understanding of edge computing and CDN billing
- ✅ Knowledge of serverless functions and deployment platforms
Step 1: Get Your API Key
Log in to your flexprice.io dashboard
Navigate to **Settings** → **API Keys**
Copy your API key
Step 2: Create Core Usage Features
Edge Requests Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Requests", "type": "metered", "unit_singular": "request", "unit_plural": "requests", "description": "Requests routed through Vercel edge network", "meter": { "aggregation": { "type": "SUM", "field": "request_count", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Requests", "filters": [], "event_name": "edge.requests" } }'
Fast Data Transfer Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Fast Data Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer from edge network to users", "meter": { "aggregation": { "type": "SUM", "field": "bytes_transferred", "multiplier": 0.000000001 }, "reset_usage": "BILLING_PERIOD", "name": "Fast Data Transfer", "filters": [], "event_name": "transfer.fast_data" } }'
Fast Origin Transfer Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Fast Origin Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer between edge network and functions", "meter": { "aggregation": { "type": "SUM", "field": "origin_bytes", "multiplier": 0.000000001 }, "reset_usage": "BILLING_PERIOD", "name": "Fast Origin Transfer", "filters": [], "event_name": "transfer.fast_origin" } }'
Functions Active CPU Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Functions Active CPU", "type": "metered", "unit_singular": "hour", "unit_plural": "hours", "description": "Active CPU time for serverless functions", "meter": { "aggregation": { "type": "SUM", "field": "cpu_hours", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Functions Active CPU", "filters": [], "event_name": "functions.cpu" } }'
Functions Provisioned Memory Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Functions Provisioned Memory", "type": "metered", "unit_singular": "GB-hour", "unit_plural": "GB-hours", "description": "Memory allocated to function instances", "meter": { "aggregation": { "type": "SUM", "field": "memory_gb_hours", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Functions Provisioned Memory", "filters": [], "event_name": "functions.memory" } }'
Function Invocations Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Function Invocations", "type": "metered", "unit_singular": "invocation", "unit_plural": "invocations", "description": "Number of function executions", "meter": { "aggregation": { "type": "SUM", "field": "invocation_count", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Function Invocations", "filters": [], "event_name": "functions.invocations" } }'
ISR Reads Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "ISR Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Incremental Static Regeneration cache reads", "meter": { "aggregation": { "type": "SUM", "field": "isr_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "ISR Reads", "filters": [], "event_name": "isr.reads" } }'
ISR Writes Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "ISR Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Incremental Static Regeneration cache writes", "meter": { "aggregation": { "type": "SUM", "field": "isr_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "ISR Writes", "filters": [], "event_name": "isr.writes" } }'
Image Transformations Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Transformations", "type": "metered", "unit_singular": "transformation", "unit_plural": "transformations", "description": "Image optimization and transformations", "meter": { "aggregation": { "type": "SUM", "field": "image_transforms", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Transformations", "filters": [], "event_name": "images.transforms" } }'
Image Cache Reads Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Cache Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Image cache read operations", "meter": { "aggregation": { "type": "SUM", "field": "image_cache_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Cache Reads", "filters": [], "event_name": "images.cache_reads" } }'
Image Cache Writes Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Image Cache Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Image cache write operations", "meter": { "aggregation": { "type": "SUM", "field": "image_cache_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Image Cache Writes", "filters": [], "event_name": "images.cache_writes" } }'
Blob Storage Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Storage", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "File storage in blob store", "meter": { "aggregation": { "type": "MAX", "field": "storage_gb", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Storage", "filters": [], "event_name": "blob.storage" } }'
Blob Simple Operations Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Simple Operations", "type": "metered", "unit_singular": "operation", "unit_plural": "operations", "description": "Simple blob operations (head, URL access)", "meter": { "aggregation": { "type": "SUM", "field": "simple_ops", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Simple Operations", "filters": [], "event_name": "blob.simple_ops" } }'
Blob Advanced Operations Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Advanced Operations", "type": "metered", "unit_singular": "operation", "unit_plural": "operations", "description": "Advanced blob operations (put, copy, list)", "meter": { "aggregation": { "type": "SUM", "field": "advanced_ops", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Advanced Operations", "filters": [], "event_name": "blob.advanced_ops" } }'
Blob Data Transfer Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Blob Data Transfer", "type": "metered", "unit_singular": "GB", "unit_plural": "GB", "description": "Data transfer for blob downloads/views", "meter": { "aggregation": { "type": "SUM", "field": "blob_transfer_gb", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Blob Data Transfer", "filters": [], "event_name": "blob.transfer" } }'
Edge Config Reads Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Config Reads", "type": "metered", "unit_singular": "read", "unit_plural": "reads", "description": "Edge configuration data reads", "meter": { "aggregation": { "type": "SUM", "field": "config_reads", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Config Reads", "filters": [], "event_name": "edge_config.reads" } }'
Edge Config Writes Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Edge Config Writes", "type": "metered", "unit_singular": "write", "unit_plural": "writes", "description": "Edge configuration data writes", "meter": { "aggregation": { "type": "SUM", "field": "config_writes", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Edge Config Writes", "filters": [], "event_name": "edge_config.writes" } }'
Web Analytics Events Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Web Analytics Events", "type": "metered", "unit_singular": "event", "unit_plural": "events", "description": "Web analytics events collected", "meter": { "aggregation": { "type": "SUM", "field": "analytics_events", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Web Analytics Events", "filters": [], "event_name": "analytics.events" } }'
Speed Insights Data Points Feature
curl --location 'https://api.cloud.flexprice.io/v1/features' \ -X POST \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --header 'Content-Type: application/json' \ --data '{ "name": "Speed Insights Data Points", "type": "metered", "unit_singular": "data point", "unit_plural": "data points", "description": "Core Web Vitals data points", "meter": { "aggregation": { "type": "SUM", "field": "speed_data_points", "multiplier": 1 }, "reset_usage": "BILLING_PERIOD", "name": "Speed Insights Data Points", "filters": [], "event_name": "speed.insights" } }'
Step 3: Create Hobby Plan (Free Tier)
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Hobby Plan", "description": "Free forever for personal projects", "lookup_key": "vercel_hobby", "prices": [], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_origin_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 4, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 360, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_function_invocations_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 200000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_transforms_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 5000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 300000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_storage_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 1, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_simple_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_advanced_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 2000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_analytics_events_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 50000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_speed_data_points_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": false, "usage_limit": 10000, "usage_reset_period": "MONTHLY" } ] }'
Step 4: Create Pro Plan
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Pro Plan", "description": "Everything you need to build and scale your app", "lookup_key": "vercel_pro", "prices": [ { "amount": "2000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Pro Plan Base Fee per seat", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "200", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Requests overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "200", "up_to": null } ], "filters": { "feature": "edge_requests" } }, { "amount": "15", "billing_model": "PER_UNIT", "currency": "USD", "description": "Fast Data Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "15", "up_to": null } ], "filters": { "feature": "fast_data_transfer" } }, { "amount": "6", "billing_model": "PER_UNIT", "currency": "USD", "description": "Fast Origin Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "6", "up_to": null } ], "filters": { "feature": "fast_origin_transfer" } }, { "amount": "12.8", "billing_model": "PER_UNIT", "currency": "USD", "description": "Functions Active CPU overage (per hour)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "12.8", "up_to": null } ], "filters": { "feature": "functions_cpu" } }, { "amount": "1.06", "billing_model": "PER_UNIT", "currency": "USD", "description": "Functions Provisioned Memory overage (per GB-hour)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "1.06", "up_to": null } ], "filters": { "feature": "functions_memory" } }, { "amount": "60", "billing_model": "PER_UNIT", "currency": "USD", "description": "Function Invocations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "60", "up_to": null } ], "filters": { "feature": "function_invocations" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "ISR Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "isr_reads" } }, { "amount": "400", "billing_model": "PER_UNIT", "currency": "USD", "description": "ISR Writes overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "400", "up_to": null } ], "filters": { "feature": "isr_writes" } }, { "amount": "5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Transformations overage (per 1K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "5", "up_to": null } ], "filters": { "feature": "image_transforms" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Cache Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "image_cache_reads" } }, { "amount": "400", "billing_model": "PER_UNIT", "currency": "USD", "description": "Image Cache Writes overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "400", "up_to": null } ], "filters": { "feature": "image_cache_writes" } }, { "amount": "2.3", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Storage overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "2.3", "up_to": null } ], "filters": { "feature": "blob_storage" } }, { "amount": "40", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Simple Operations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "40", "up_to": null } ], "filters": { "feature": "blob_simple_ops" } }, { "amount": "500", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Advanced Operations overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "500", "up_to": null } ], "filters": { "feature": "blob_advanced_ops" } }, { "amount": "5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Blob Data Transfer overage (per GB)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "5", "up_to": null } ], "filters": { "feature": "blob_data_transfer" } }, { "amount": "300", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Config Reads overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "300", "up_to": null } ], "filters": { "feature": "edge_config_reads" } }, { "amount": "1000", "billing_model": "PER_UNIT", "currency": "USD", "description": "Edge Config Writes overage (per 500 writes)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "1000", "up_to": null } ], "filters": { "feature": "edge_config_writes" } }, { "amount": "3", "billing_model": "PER_UNIT", "currency": "USD", "description": "Web Analytics Events overage (per 100K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "3", "up_to": null } ], "filters": { "feature": "analytics_events" } } ], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_origin_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 16, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1440, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_function_invocations_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_isr_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 2000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_transforms_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 600000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_image_cache_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 200000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_storage_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 5, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_simple_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_advanced_ops_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_blob_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_reads_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_edge_config_writes_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_analytics_events_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 100000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_speed_data_points_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 10000, "usage_reset_period": "MONTHLY" } ] }'
Step 5: Create Enterprise Plan Template
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Vercel Enterprise Plan", "description": "Critical security, performance, observability, platform SLAs", "lookup_key": "vercel_enterprise", "prices": [ { "amount": "300000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Enterprise Plan Base Fee (starting price)", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 } ], "entitlements": [ { "feature_id": "feat_edge_requests_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 50000000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_fast_data_transfer_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 5000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_cpu_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 1000, "usage_reset_period": "MONTHLY" }, { "feature_id": "feat_functions_memory_123", "feature_type": "metered", "is_enabled": true, "is_soft_limit": true, "usage_limit": 50000, "usage_reset_period": "MONTHLY" } ] }'
Step 6: Create Add-on Plans
Web Analytics Plus Add-on curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Web Analytics Plus", "description": "Extended analytics with UTM parameters and 24-month retention", "lookup_key": "web_analytics_plus", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Web Analytics Plus per team", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 } ] }'
Speed Insights Add-on
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Speed Insights", "description": "Core Web Vitals monitoring per project", "lookup_key": "speed_insights", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Speed Insights per project", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "6.5", "billing_model": "PER_UNIT", "currency": "USD", "description": "Speed Insights data points overage (per 10K)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "6.5", "up_to": null } ], "filters": { "feature": "speed_data_points" } } ] }'
Observability Plus Add-on
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/plans' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "Observability Plus", "description": "Advanced metrics, query engine, and AI prompting", "lookup_key": "observability_plus", "prices": [ { "amount": "1000", "billing_model": "FLAT_FEE", "currency": "USD", "description": "Observability Plus base fee (1M events included)", "type": "RECURRING", "billing_period": "MONTHLY", "billing_period_count": 1 }, { "amount": "120", "billing_model": "PER_UNIT", "currency": "USD", "description": "Observability events overage (per million)", "type": "USAGE", "tier_mode": "VOLUME", "tiers": [ { "unit_amount": "120", "up_to": null } ], "filters": { "feature": "observability_events" } } ] }'
Step 7: Create Customer
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/customers' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "name": "DevStudio Corp", "email": "[email protected]", "external_id": "cust_devstudio_123", "metadata": { "company": "DevStudio Corp", "industry": "Software Development", "plan_tier": "pro", "team_size": "5" } }'
Step 8: Create Pro Subscription
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/subscriptions' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "customer_id": "cust_123456789", "plan_id": "plan_vercel_pro_123", "billing_period": "MONTHLY", "billing_period_count": 1, "currency": "USD", "start_date": "2025-01-15", "phases": [ { "start_date": "2025-01-15", "line_items": [ { "price_id": "price_pro_base_123", "quantity": 5, "display_name": "Pro Plan - 5 Team Seats" }, { "price_id": "price_web_analytics_plus_123", "quantity": 1, "display_name": "Web Analytics Plus Add-on" } ] } ] }'
Step 9: Track Usage Events
Edge Requests Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_edge_requests_123", "quantity": 15000000, "metadata": { "project_id": "proj_main_app", "region": "us-east-1", "measurement_time": "2025-01-15T10:30:00Z" } }'
Fast Data Transfer Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_fast_data_transfer_123", "quantity": 1250, "metadata": { "project_id": "proj_main_app", "transfer_type": "static_assets", "region": "global" } }'
Functions Active CPU Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_functions_cpu_123", "quantity": 25, "metadata": { "project_id": "proj_main_app", "function_type": "api_route", "runtime": "nodejs18.x" } }'
Functions Provisioned Memory Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_functions_memory_123", "quantity": 2000, "metadata": { "project_id": "proj_main_app", "memory_allocation": "2GB", "runtime": "nodejs18.x" } }'
Image Transformations Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_image_transforms_123", "quantity": 25000, "metadata": { "project_id": "proj_main_app", "format": "webp", "optimization_type": "auto" } }'
ISR Operations Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_isr_reads_123", "quantity": 15000000, "metadata": { "project_id": "proj_main_app", "cache_type": "data_cache", "region": "global" } }'
Blob Storage Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_blob_storage_123", "quantity": 8.5, "metadata": { "project_id": "proj_main_app", "storage_type": "file_uploads", "measurement_time": "2025-01-15T10:30:00Z" } }'
Web Analytics Events Usage
curl --request POST \ --url 'https://api.cloud.flexprice.io/v1/usage' \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY_HERE' \ --data '{ "subscription_id": "sub_123456789", "feature_id": "feat_analytics_events_123", "quantity": 250000, "metadata": { "project_id": "proj_main_app", "event_type": "page_view", "custom_events": true } }'
Step 10: Monitor Usage
Check current usage across all features:
curl --location 'https://api.cloud.flexprice.io/v1/subscriptions/sub_123456789/usage' \ --header 'x-api-key: YOUR_API_KEY_HERE'
Vercel’s Pricing Isn’t Simple, But It’s Predictable If You Know What to Watch
Vercel’s pricing has evolved from generous, flat-tier plans to a usage-based model that mirrors how modern infrastructure scales.
It’s not meant to be confusing, it’s meant to give you flexibility.
But that flexibility comes with responsibility: understanding what you’re consuming, setting limits, and tracking the right metrics.
If you're building something simple and static, Vercel will likely stay free forever.
If you're launching a production-grade app or running dynamic logic at scale, you’ll need to keep an eye on usage, Edge Requests, CPU, bandwidth, ISR, and more.
Once you understand the logic behind the model, you can predict your costs, control your overages, and avoid the classic “How did this happen?” billing moment.
Vercel doesn’t hide what you’re paying for. But you do have to know where to look.

Aanchal Parmar
Aanchal Parmar
Aanchal Parmar heads content marketing at Flexprice.io. She’s been in the content for seven years across SaaS, Web3, and now AI infra. When she’s not writing about monetization, she’s either signing up for a new dance class or testing a recipe that’s definitely too ambitious for a weeknight.
Aanchal Parmar heads content marketing at Flexprice.io. She’s been in the content for seven years across SaaS, Web3, and now AI infra. When she’s not writing about monetization, she’s either signing up for a new dance class or testing a recipe that’s definitely too ambitious for a weeknight.
Share it on:

























