Baseten pricing guide
How does Baseten pricing work, and how do I avoid a runaway GPU bill?
Baseten charges for dedicated instances by the minute while a workload runs, meters cold starts and container builds, and cuts an invoice whenever unpaid usage passes $50 or the calendar month wraps up. If you deploy a model with a minimum replica count of 1 or higher, you pay for every single minute that GPU sits idle waiting for traffic.
To avoid surprise charges, you have to understand where per-minute instance billing ends and Model API token pricing begins. You also need to know what workspace budgets actually stop, because Baseten's spending limits don't behave the way most developers expect when GPUs are running.
Dedicated deployments: per-minute billing, cold starts, and idle costs
When you deploy a custom model on Baseten, you pay for dedicated compute. Baseten meters usage by the minute while a workload is running on a node, applying the instance's per-minute price to serving replicas, image-builder workloads, and training workloads.
You don't pay for cluster overhead. Baseten does not meter scheduling or image pulls before a workload starts, nor draining, cleanup, and recycling after a workload terminates. But the moment that replica boots, the billing clock is ticking.
Cold starts are billable because model loading occurs after the replica starts. That means every second spent pulling weights from storage into GPU memory counts against your invoice. If a replica dies mid-request from an out-of-memory crash or autoscaling shuts it down, usage is billed up to the moment the replica terminates, and partial minutes round up.
The one clean exception is boot failure. If a replica fails to boot and never comes up, you're billed for zero minutes.
How do idle costs happen? They happen because people forget about replica baselines. If you leave min_replica at 1 or higher, that replica stays warm 24 hours a day. An idle warm GPU costs the exact same per-minute rate as one handling constant inference requests.
Autoscaling, scale to zero, and build workloads
If you want to stop paying for idle hardware, configure your model to scale down when nobody is calling it. Setting min_replica to zero (min_replica: 0) avoids GPU charges while idle, whereas idle warm replicas with min_replica at 1 or more are billed continuously. The trade-off is latency: once your model scales down to zero, the next incoming request has to wait for a fresh replica to spin up and load weights.
Image builds are another spot where teams get surprised. When you run baseten model push, Baseten runs the image build as a billable workload metered from the moment the build comes up. If an image build fails inside the builder workload, you pay for that compute right up to the moment the build fails.
Development deployments work differently. If you run baseten model push --watch to test changes locally against remote hardware, those development deployments are not billed according to the replica lifecycle table.
Training follows the same per-minute instance logic as serving. Baseten meters training and fine-tuning runs for the wall-clock time from the moment the training workload comes up until the job completes or you cancel it. If you kick off an unmonitored fine-tuning job on a heavy multi-GPU node on Friday night and it runs all weekend, you pay for every wall-clock minute until it finishes. If you're comparing dedicated GPU platforms, see How does RunPod pricing work for Pods and Serverless? and How does Vast.ai billing work, and do stopped instances still cost money?.
Model APIs: token rates, prompt caching, and session affinity
Alongside dedicated instances, Baseten offers managed Model APIs. These don't bill by instance minutes; instead, Baseten Model APIs bill per million input and output tokens, with rates varying by model.
Prompt caching cuts your input costs if you send repetitive prompts. Baseten Model APIs serve prompt tokens from the KV cache at a discounted rate automatically when a request reuses a cached prefix, requiring no request flags.
In API responses, usage.prompt_tokens_details.cached_tokens reports how many prompt tokens came from the cache. That number is already included inside usage.prompt_tokens, so you shouldn't add it to the input total when you calculate your own stats. Cached and uncached input tokens count equally toward token rate limits (TPM).
To keep prefixes hot in memory across separate requests, you can route calls to the same underlying hardware. Sending the x-session-affinity header with related requests routes them to the same Baseten replica so the shared prompt prefix is more likely to stay in the KV cache. Coding agents like Claude Code, Codex, and OpenCode provide recognized session IDs automatically, so you don't need manual headers there. Baseten recommends sending at most about 60 requests per minute for a single session affinity ID.
For speculative decoding in Chat Completions, accepted_prediction_tokens and rejected_prediction_tokens under completion_tokens_details report decoding efficiency. They aren't separate billing counters, so don't add them to your completion usage or invoice calculations. If you manage multiple providers, take a look at How do I monitor spend across OpenAI, Anthropic, Gemini and other AI APIs in one place?.
Account tiers and Model API rate limits
Model API limits depend on your account tier, and the limits replenish continuously rather than resetting at a fixed interval every hour or day.
You can inspect your workspace's live limits for any model by querying GET https://api.baseten.co/v1/model_apis/{url_encoded_model_slug}. Every API response also includes four tracking headers: x-ratelimit-limit-requests, x-ratelimit-remaining-requests, x-ratelimit-limit-tokens, and x-ratelimit-remaining-tokens.
| Account tier | Requests per minute (RPM) | Tokens per minute (TPM) |
|---|---|---|
| Basic (unverified) | 15 | 100,000 |
| Basic (verified) | 120 | 500,000 |
| Pro | 120 | 1,000,000 |
| Enterprise | Custom | Custom |
Workspace budgets and the enforcement catch
Baseten lets you set a monthly budget inside your workspace. A monthly budget covers the workspace's combined dedicated inference, Model APIs, and training usage for the calendar month.
When you configure a budget, Baseten sends email notifications when workspace spend reaches 75%, 90%, and 100% of the target amount. If you adjust that budget mid-month, Baseten re-evaluates the thresholds against the new total; if you delete the budget, notifications turn off entirely.
Here is the trap that catches developers: by default, a budget sends notifications but does not stop usage, and you remain responsible for costs above the configured amount.
You can check a box named "Enforce budget", but what does it actually enforce?
Enabling "Enforce budget" rejects Model API requests after workspace spend reaches the budget. When that happens, access returns at the start of the next month, when you raise the budget above current spend, or when you disable enforcement.
Budget enforcement applies only to Model APIs and never stops dedicated deployments or training jobs. They continue to run and accrue charges regardless of this setting!
If you deployed an LLM on an expensive node with min_replica: 1 and spend hits 100% of your budget, Baseten blocks your Model API calls, but your dedicated GPU keeps running and billing your card every single minute. For a comparison of platforms that actually halt compute, see Which cloud and AI providers let you set a hard spending cap?.
Invoices, payment triggers, and Admin-only visibility
New Baseten workspaces receive credits for testing and deployment, which are automatically applied to the current invoice before charging a payment method. Baseten doesn't offer a separate free tier or perpetual free plan, and bills usage beyond starting credits at standard per-minute instance pricing.
If your credits run out and you have no payment method on file, Baseten deactivates the workspace's models until you add one. Supported payment methods are Card or US bank account, which are stored by Baseten's payment processor rather than directly by Baseten.
Billing doesn't wait for the end of the month if you run up spend quickly. Baseten issues an invoice when workspace usage exceeds $50 or at the end of the calendar month, whichever comes first. Once you establish a history of successful payments, billing moves to a standard monthly cadence.
Where do you check what you owe?
- Sign in to your workspace at app.baseten.co.
- Open Organization settings.
- Choose Billing and usage.
Baseten updates deployment usage hourly in the billing and usage dashboard. If your organization uses teams, usage is aggregated at the organization level and is visible only to Admins. Regular team members cannot see billing metrics or invoices.
You can also pull usage via the CLI or Management API. The CLI and API separate dedicated inference, Model APIs, and training usage, and include per-resource and daily breakdowns.
A query via the CLI or Management API can cover up to 31 days and cannot start before January 1, 2026 UTC:
baseten org billing usage --since 7d --output jsonIf you call the Management API directly, both start_date and end_date are required:
curl "https://api.baseten.co/v1/billing/usage_summary?start_date=2026-07-29T00:00:00Z&end_date=2026-08-05T00:00:00Z" \
-H "Authorization: Bearer $BASETEN_API_KEY"For Model API cost history specifically, the endpoint GET https://api.baseten.co/v1/billing/model_apis returns daily costs in USD with the subtotal as an exact decimal string. Cost data begins on August 5, 2026, at 20:45 UTC, can cover a date range up to 90 days, and the limit parameter defaults to 7 daily buckets with a maximum of 31 per page. Subtotals exclude credits, adjustments, and taxes.
For operational metrics, Baseten retains Model API usage data for 92 days (queried in 1m, 1h, or 1d buckets via baseten model-api usage). You can also scrape Prometheus metrics: baseten_model_api_tokens_total separates uncached input, cached input, and output tokens, while baseten_model_api_inference_requests_total tracks requests by status code.
Tracking Baseten spend with Costbrake
Because Baseten's native budget enforcement won't shut down dedicated replicas or training runs, teams that leave models running need external visibility. Costbrake watches what you spend across cloud, AI, and SaaS providers, alerting you to sudden burn rates before an invoice clears your bank account.
Costbrake reads month-to-date dollars for dedicated deployments, training, Model APIs, and Loops, booking the increase since the last check along with daily totals per deployment and model. Dollars are counted before credits, so usage paid from starting credits still counts toward your budget alerts. Checks run hourly on the Free plan ($0 for 2 connections, 1 seat, and 30 days history) and every 15 minutes on Pro ($12 monthly, 10 connections, Slack and Discord alerts) and Team ($39 monthly, 50 connections, PagerDuty). View all plan details on Costbrake pricing.
Alerts fire when an hour costs more than 3x the 7-day baseline and at least $5 above normal, when spend hits 50%, 80%, or 100% of a budget, or when the pace of the last 72 hours projects you'll breach your target by month-end.
To read Baseten usage, Costbrake requires a personal API key from an Organization Admin, because Baseten restricts billing visibility to Admins. That personal key can also deploy and call models, and Baseten personal keys expire within 90 days at most, so you paste a refreshed key before expiration. Stored credentials are encrypted with AES-256-GCM. Costbrake has no brakes for Baseten; Baseten's own billing budget can stop Model APIs at a limit, and if a key leaks, revoke it immediately under API keys in your dashboard.
You can connect providers manually at https://app.costbrake.com/signin or run automated setup by pasting the prompt found on agent setup into Claude Code, Codex CLI, Cursor, or Gemini CLI.
Questions and answers
Does Baseten charge me while a model deployment is idle?
Yes, if min_replica is set to 1 or higher. Baseten meters dedicated deployments by the minute whenever a replica is up on a node, so an idle warm instance costs the same per-minute rate as one serving traffic. To stop idle compute billing, set min_replica: 0 so the instance scales down when traffic stops.
Does Baseten have a free tier?
No. Baseten does not offer a perpetual free plan or separate free tier. New workspaces receive initial credits for testing and deployment, but once those run out, all compute is billed at standard per-minute instance rates, and models deactivate if no card or US bank account is on file.
Can Baseten's budget stop my dedicated GPU deployments?
No. Enabling "Enforce budget" rejects incoming Model API token requests when your spend hits the budget target, but it never stops dedicated serving replicas or training workloads. Those jobs keep running and accumulating per-minute charges until you manually scale down or delete them.
When does Baseten charge my credit card?
Baseten issues an invoice whenever workspace usage crosses $50 or when the calendar month ends, whichever happens first. Once your account builds up a history of successful payments, billing switches over to a regular monthly cadence.
Why can't my teammates see our Baseten billing dashboard?
For Baseten organizations with teams, billing usage is aggregated at the organization level and is visible only to users with the Admin role. Regular workspace members cannot view billing dashboards, invoices, or usage summaries.
Sources
Updated