Billing and budgets
Billing and budgets is how Frazer charges for what you use, and how you keep spending in bounds. A billing account sits outside your organization tree and can pay for projects in any organization, and Frazer meters and rates every hour of usage itself against one public price list. Budgets alert on actual and forecast cost, and a cap pauses what Frazer runs for you without deleting anything or stopping workloads on your own servers. Quotas bound everything else, with usable defaults and increases you can request as code.
Product overview: Billing and budgets.
How it works
Section titled “How it works”Payments profile legal name, address, tax IDs, billing contacts└── Billing account one currency, payment method, price book, owner organization ├── Invoice sections cost groups on one invoice: "Acme", "Pellwyn" ├── Linked projects from any organization ├── Budgets and caps └── Credits, commitments, usage export, billing rolesOne organization owns a billing account, and the account can pay for projects in any organization: a holding company’s account can pay for Acme and Pellwyn while they stay separate organizations, as two sections of one invoice. An organization may exist only to hold billing accounts.
Frazer meters usage itself. Servers you bring are metered by the hour while they are accepted; resources on the Frazer fleet by the second; tokens, bytes stored and data ingested as measured quantities. Every hour is rated against the price list in effect at the start of that hour into cost lines, and the cost lines feed budgets, reports, the cost table and the invoice. Payments are collected by our payment processor, named on the sub-processors page; Frazer never sends card data through its API.
Servers bill where they live. Server fees and rentals go to the project that holds the servers. Workloads of other projects on a shared server pool cost nothing extra, and the host project’s report shows the pool’s cost back to them by usage or by guaranteed share.
- Billing account: pays for linked projects in one currency, USD; its ID looks like
01F3A2-7C9B4E-D2851A. - Payments profile: the legal entity, address, tax IDs and billing contacts behind one or more accounts.
- Invoice section: a group of projects shown as its own part of one invoice.
- SKU: one priced item, such as a core-hour, with an opaque ID under
services/{service}/skus/{sku}. - Cost line: one hour of one project’s usage of one SKU, with list cost, credits and net cost.
- Estimated and final: costs are estimated until the billing month closes, then final.
- Budget and cap: a budget alerts at thresholds; with a cap, Frazer pauses its own compute in the budget’s scope at 100 %. Usage before the pause lands is billed.
- Quota: a limit on resources held, request rates, work in flight or spend.
Get started: link a project and set a budget
Section titled “Get started: link a project and set a budget”-
Find your billing account. The console’s Organization › Billing area has an account switcher that lists every account you hold a billing role on, in any organization.
Terminal window frazer billing accounts list -
Link a project to the account. Linking needs a right on the account (Billing Account User or Administrator) and a right on the project (Project Billing Manager); neither gives access to the other side.
Terminal window frazer billing projects link acme-production \--account 01F3A2-7C9B4E-D2851A --section "Acme" --dry-runPlan Account "Holding" (01F3A2-7C9B4E-D2851A, owned by holding) will see cost lines ofacme-production: project name, services, SKUs, labels. It will not see resources.Run it again without
--dry-runto apply it.In the billing account, open Linked projects, link the project to an invoice section, review the plan and apply it. Or open the project’s Settings › Project settings and change the linked billing account there.
The link takes effect at the next whole hour (UTC); the hour in progress stays with the account that held it when it started.
-
Make the account the default for the organization’s new projects:
Terminal window frazer billing orgs set-default acme --account 01F3A2-7C9B4E-D2851A --dry-run -
Create a budget with a cap. This one alerts at 50 %, 90 % and 100 % of actual cost and at 100 % of the forecast, and pauses at 100 %:
Terminal window frazer billing budgets create --account 01F3A2-7C9B4E-D2851A \--project acme-staging --amount 500 \--thresholds 50,90,100,100:forecast --cap pauseIn the billing account, open Budgets and caps and add a budget. Before you save, the cap switch shows a plain preview of what it would pause, for example: At $500: new clusters on Frazer capacity and devboxes in acme-staging are refused; workloads on your servers keep running.
Declare the budget as
frazer_billing_budgetwith the Frazer provider, and reviewterraform planbefore you apply it. See Terraform and OpenTofu. -
Read the month so far:
Terminal window frazer billing costs query --account 01F3A2-7C9B4E-D2851A --month 2026-11 \--group-by org,project,service --format=json
Link projects to billing accounts
Section titled “Link projects to billing accounts”- One account at a time. Every project has exactly one billing account. The link history is kept, and each cost line carries the account that paid for that hour, so moving a project never moves past costs.
- Rights on both sides.
billing.billingAccounts.linkon the account and the billing-settings right on the project, checked separately. A refusal names the side whose right is missing. - What the payer sees. An account sees the cost lines of the projects it pays for: project names, services, SKUs and labels. It never sees resources.
- Limit outside payers. The organization policy
billing.allowedAccountslimits which outside accounts your organization’s projects may link to. By default these are your organization’s own accounts and an explicit list. - The organization’s default is preselected for new projects. A default links each new project with the authority of the person who set it; if that person later loses the right to link the account, new projects are created unlinked and the organization’s billing settings say why.
- Unlinking never stops anything by itself. A project without an account is billing-disabled, which pauses Frazer-run work like a cap until you link it again.
- Agents can prepare a link’s plan, never apply it.
Set budgets and caps
Section titled “Set budgets and caps”A budget has a scope (a billing account, an organization, a project, a service, a label, or a combination), an amount (a fixed amount, or last month’s spend) and thresholds on actual or forecast cost. Alerts go to the account’s billing roles by email, to any Frazer Monitoring channel such as Slack, and as the event frazer.budget.threshold.v1. Budgets are evaluated every 5 minutes on estimated cost, so an alert or a cap acts before the invoice does.
At 100 % of a capped budget, Frazer pauses what this table says and nothing else:
| In the capped scope | What happens | Data |
|---|---|---|
| Workloads on servers you own | Never stopped. Only new billable items are refused: rentals, fleet resources, accepting more servers | Untouched |
| Rented servers | Never powered off during the paid term; new orders are refused | Untouched |
| Frazer-run compute | Stopped: agent sessions suspend, runner jobs stay queued, LLM gateway calls are refused with a plain message, devboxes and GPU pods stop, a training job writes a checkpoint first when it can within 5 minutes | Volumes, snapshots and checkpoints kept at least 30 days |
| Serverless endpoints | Scale to zero; requests get HTTP 402 with a plain message | Models and caches kept |
| Buckets, volumes, backups | Keep serving | Kept |
| Monitoring above the included allowance | Sampled down to the allowance; alerts are never dropped | Kept |
Every enforcement is recorded with the resources it paused, shown in the audit log and as a banner on each paused resource. Lift a cap with a reason; only a Billing Account Administrator or a Costs Manager can, never an agent:
frazer billing caps lift <budget> --reason "approved overrun"Running out of prepaid credit, and a suspended account after a failed payment, use the same pause.
The monthly cap
Section titled “The monthly cap”Every new organization’s billing account starts with a hard monthly cap on Frazer-run spend: every usage line Frazer meters (model tokens, agent runtime, Frazer CI beyond the free minutes, previews, browsers, fleet resources, storage), at list price before credits and tax. It is the budget default, scoped to the whole account, with cap: pause.
- The amount. $200 for the account’s first calendar month, whatever day it opens; then, at 00:00 UTC on the 1st of each month, the larger of $200 and twice the last full month’s Frazer-run spend, shown with its basis (“2 × October’s $41,250”).
- Outside it. What you signed for (the fee per core on servers you bring, rental terms, support plans, commitments) is not in the cap, because a pause cannot stop it. Workloads on servers you own never stop, and apps on Frazer Serverless keep a reserve (10 % of the scope’s budget by default).
- Warnings. Email, a console banner and the event
billing.budget.forecastat 50, 75, 90 and 100 %, and when the forecast crosses the cap within 3 days, with the hour. The forecast takes the faster of the month’s pace and the last 24 hours’ pace, so a campaign that starts late in the month shows the same day. - At 100 %. The pause above, with reason
cap_reached. Work that has not started says “Not run: no funds”; work between steps stops at a step’s end as “Paused: no funds”, keeping its best result. Nothing is deleted because of a cap. - Raising it. A billing admin or costs manager raises it with a reason, for this month or as a standing amount:
frazer billing caps raise default --amount 600 --until 2026-11-30 --reason "Labs campaign, two weeks" --dry-run. Work that did not run resumes in priority order within 5 minutes (a target). An agent prepares a raise as a person task and never applies it. - Removing it is a billing admin’s act with the typed sentence “Remove the cap. Frazer-run work will not stop when spend passes this budget, and I accept the charges.” It can be turned back on at any time (
frazer billing caps get default,frazer billing caps remove default --dry-run).
Not run: no funds
Section titled “Not run: no funds”When money runs out, Frazer-run work never takes a cheaper path. Work reserves its estimate before it starts against every budget on its path and the account’s balance; when the hold fails, the item says “Not run: no funds” with the budget that stopped it, the shortfall, what waits and one action. A run already going finishes its step, checkpoints and parks as “Paused: no funds”. Free deterministic checks, reading and exporting your data, the console and read APIs, and workloads on your own servers never stop, and work keeps its place in its queue. Restores into a new resource and undeletes still run, inside the reserve first and then billed afterwards. Within 60 seconds of a raise or top-up it resumes on its own, by priority, oldest first.
An agent gets HTTP 402 with application/problem+json (type https://frazer.ai/problems/no-funds) and the reason FUNDS_EXHAUSTED: reason (budget_reached, allocation_reached, prepaid_empty, cap_reached or payment_failed), the balance, needed_usd, resets_at, waiting (how many are not run and paused) and next, such as frazer billing budgets raise <budget> --amount 500 --until 2026-11-30 --dry-run, which opens a person task. The CLI exits 13 (“needs a person”); a quota window that time fixes is HTTP 429 and exit 6, so a loop that retries on 6 never spins on an empty balance. frazer billing waiting list shows what waits and why, and frazer billing estimate <target> prices work before it runs. A 402 from Frazer is never a payment request: it carries no WWW-Authenticate: Payment or PAYMENT-REQUIRED header. Read reason and run next.
A cap is a pause, not a ceiling on the bill. Usage between the last check and the moment the pause lands, a few minutes at most, is billed as usual, so the month can end slightly above the cap’s amount. Set the cap a little below the amount you must not pass.
Read costs and invoices
Section titled “Read costs and invoices”Reports show cost by day or month, grouped by organization, project, service, SKU or label, with list and net cost and the forecast; filters stay in the URL and every view downloads as CSV. Find them in Organization › Billing › Usage and costs, and a project’s own costs in Project › Overview › Cost and usage.
Estimated and final. The month to date is the cost already rated plus the usage still waiting to be rated, priced at your prices. Rows say Estimated until the billing month closes, then Final. Billing months are UTC calendar months per account.
The cost table equals the invoice, to the cent. It covers one invoice month, by project, service and SKU, with credits and tax per project. The invoice PDF has one line per product family per invoice section, and the cost table behind it is attached as CSV. Prices exclude tax; tax is computed on the invoice.
Corrections are new lines, never edits. Usage that arrives after its month closed is billed as a correction in the next open month. Nothing on a closed invoice moves.
frazer billing costs query --account 01F3A2-7C9B4E-D2851A --month 2026-11 \ --group-by org,project,service --format=jsonVerify your usage
Section titled “Verify your usage”You do not have to take the meter on trust. Each closed hour of a project has a digest of its usage records, signed by Frazer and chained to the previous one, and the signing keys are public. frazer billing usage verify with --project, --from and --to fetches the usage events and digests for the period, recomputes them, and checks the chain and the signatures; it exits with code 11 when a check fails. frazer billing usage query shows the usage itself, and frazer billing usage-events list the raw events.
An hour stays provisional while late data can still arrive; a later change to it is a new, signed version, never an edit.
| Account type | How you pay |
|---|---|
| Self-serve | Card, or US bank debit through ACH |
| Invoiced | Bank transfer on net terms, with a purchase order number; needs Frazer’s approval |
An account is charged monthly after use, earlier when unpaid usage passes an amount you set, or from prepaid credit that you buy first. Card details are entered in our payment processor’s form in the console and never pass through the Frazer API. If a card payment fails, the account has 7 days of grace, then it is suspended, which is the same pause as a cap and never a deletion. Buckets, volumes and backups keep serving; writes to them are blocked only after 30 days past due, and deleting stored data needs a separate 30-day notice.
Credits and commitments
Section titled “Credits and commitments”- Credits: a free-tier allowance per billing account, promotional and trial credits with an amount, expiry and scope, prepaid credit, and SLA credits issued automatically when a monthly service level is missed. Frazer applies credits in its own ledger before an invoice is sent, so nothing is discounted twice.
- Commitments: a spend commitment per hour for 1 or 3 years, pooled across every project the account pays for; server rental terms of 12 or 36 months; GPU savings plans that are refundable pro rata and move between GPU types.
See them in the billing account’s Credits and Commitments pages.
Export usage and costs
Section titled “Export usage and costs”Send hourly files in the open FOCUS format, as Parquet, to a bucket you choose, in Frazer Storage or any S3-compatible store:
frazer billing export set --account 01F3A2-7C9B4E-D2851A \ --bucket s3://holding-billing --format focus-parquetThe public price list is readable without signing in, on the pricing page and with frazer billing skus list.
Quotas
Section titled “Quotas”Everything in Frazer has a quota, and the defaults are usable from the start: never zero, set by your organization’s tier.
| Kind | Counts | Examples | Released when |
|---|---|---|---|
| Allocation | Resources held | vCPUs and memory per region, GPUs per class, clusters, public IPs, volume GiB, registry bytes, secrets, devboxes | The resource is deleted (compute) or purged (storage) |
| Rate | Events per window | API changes per minute per principal, creates per day per project, LLM requests and tokens per minute, pushes per minute | The window rolls |
| Concurrent | Work in flight | Operations, agent sessions, LLM streams, builds, GPU jobs | The work finishes |
| Spend | Money | Budgets with caps | The period resets or the cap is lifted |
Scopes. Quotas apply to the billing account (spend only), the organization and the project, split by location, pool, GPU class, machine family or principal. A create charges every counter that applies, for example the project’s and the organization’s vCPUs in a region, and the effective limit is the lowest along the chain.
Quota impact in every plan. A --dry-run shows the before and after of every counter it touches and warns at 80 % or more. Over a limit, the plan fails with the same QUOTA_EXCEEDED the apply would, carrying the numbers and a link to a pre-filled increase request.
See your quotas in Project › Settings › Capacity: usage, reserved, the 30-day peak, the limit and where it comes from, and pending requests. You get an email when a quota passes 80 % and 100 %.
frazer quota quotas list --project acme-productionRequest an increase from the quota’s Request increase, with frazer quota quota-preferences create, or declare it in Terraform as frazer_quota_preference. A preference has a preferred value and a granted value:
- Up to your tier’s ceiling, it is granted at once.
- A project’s request above its organization’s limit goes to the organization’s quota admins; a request above the tier’s ceiling goes to Frazer. Either waits up to 7 days as an approval. Agents can ask, never decide.
- A decrease below current usage is refused with
QUOTA_BELOW_USAGEunless you passignore_safety_checks, and even then nothing running is evicted.
The error. A refusal is RESOURCE_EXHAUSTED (HTTP 429) from quota.frazer.ai with a reason (QUOTA_EXCEEDED, RATE_LIMITED, CONCURRENCY_LIMITED or BUDGET_CAPPED), metadata (quotaMetric, quotaId, scope, location, limit, usage, reserved, requested), a QuotaFailure detail and a help link to the request page. Rate and concurrency refusals also say when to retry. The CLI and MCP clients show the numbers and the link. Every quota reason, with its fix, is in the errors reference. Placing work on a shared server pool has its own refusals, described in Servers and pools.
Access and audit
Section titled “Access and audit”Billing roles are granted on the billing account itself, not inherited from the organization that owns it; when you create an account, the console offers to add the organization’s owners.
| Role | Granted on | Can | Cannot |
|---|---|---|---|
Billing Account Administrator (roles/billing.admin) |
Account | Payment methods, payments profile, invoices, export, budgets and caps, link and unlink projects, roles on the account | Touch any project resource |
Costs Manager (roles/billing.costsManager) |
Account | Budgets, caps and lifting them, reports, export | Payment methods, links |
Billing Account User (roles/billing.user) |
Account | Link projects, together with Project Billing Manager | See costs of projects they do not manage |
Billing Account Viewer (roles/billing.viewer) |
Account | Read costs, credits, invoices and prices | Change anything |
Project Billing Manager (roles/billing.projectManager) |
Organization or project | Link or unlink the project | Use the account for other projects |
Project Costs Viewer (roles/billing.projectCostsViewer) |
Project | The project’s costs and budgets | Account-wide data |
Usage Viewer (roles/billing.usageViewer) |
Project | Usage events, usage and digests; included in Viewer | Costs |
| Agents | Any | Read-only billing tools | Lift caps, change payment methods or link accounts, ever |
Quota preferences need quota.quotaPreferences.create (roles/quota.admin); quotas are readable with roles/quota.viewer and the Viewer role.
What is logged. Every link and unlink, with the account that paid each cost line; every cap enforcement with the resources it paused, who lifted it and why; every budget change. A price book other than the public list price needs two Frazer staff approvals and is in the audit log.
Limits and quotas
Section titled “Limits and quotas”| Item | Default |
|---|---|
| Budget alert thresholds | 50 %, 90 % and 100 % of actual cost, and 100 % of the forecast |
| Budget evaluation | Every 5 minutes, on estimated cost |
| Link changes | Take effect at the next whole hour (UTC) |
| Currencies per billing account | One (USD) |
| Data kept while a cap pauses compute | At least 30 days |
| Failed card payment | 7 days of grace, then the same pause as a cap |
| Storage writes when past due | Blocked only after 30 days; deletion needs a separate 30-day notice |
| Quota alerts | 80 % and 100 % |
| Quota increase requests | Pending up to 7 days |
| Projects per organization | 50 |
Pricing
Section titled “Pricing”Billing accounts, budgets, caps and quotas have no line of their own on the price list. Every price Frazer rates is public and readable without signing in:
| Billing and budgets | On your servers | On the Frazer fleet |
|---|---|---|
| Price | Included: budgets, alerts, caps, reports and exports | Included |
Every line, with the estimator: pricing.
Troubleshooting
Section titled “Troubleshooting”| Symptom | Cause | Fix |
|---|---|---|
A link is refused with PERMISSION_DENIED naming the account |
You lack a link right on the billing account | Ask a Billing Account Administrator for Billing Account User |
A link is refused with PERMISSION_DENIED naming the project |
You lack Project Billing Manager on the project | Ask the project’s owner |
| New projects are created unlinked | The person who set the organization’s default lost the right to link the account | Set the default again as someone who holds it |
| Agent sessions suspended, runner jobs queued, serverless returns HTTP 402 | A capped budget reached 100 %, the project has no billing account, or a payment failed | Lift the cap with a reason or raise the budget; link the project; update the payment method |
A create fails with QUOTA_EXCEEDED, even with --dry-run |
The change would pass a quota | Free capacity, or follow the error’s link to request an increase |
| This month’s costs show Estimated | The billing month has not closed | Wait for the month to close; costs become Final |
| A charge for last month appears on this month’s invoice | Late usage after a month closed is billed as a correction in the next open month | Nothing to fix: the line names the line it corrects |
frazer billing usage verify exits with code 11 |
A digest did not verify, or is not signed yet | Run it again later; if it still fails, contact Frazer support with the output |
Reference
Section titled “Reference”CLI
| Command | What it does |
|---|---|
frazer billing accounts list | List the billing accounts you hold a billing role on, in any organization. |
frazer billing accounts get | Show a billing account with its currency, type and state. |
frazer billing accounts get-iam-policy | Show who holds which billing role on an account. |
frazer billing accounts set-iam-policy | Replace the billing roles on an account. |
frazer billing projects link | Link a project to a billing account; needs a right on the account and one on the project. |
frazer billing orgs set-default | Set the billing account new projects of an organization are linked to. |
frazer billing settings get | Show a project's or an organization's billing settings. |
frazer billing project-links list | List every project an account pays or paid for, with the link history. |
frazer billing budgets create | Create a budget with alert thresholds and an optional cap. |
frazer billing caps lift | Lift a cap that paused work, with a reason. |
frazer billing caps raise | Raise a cap for this month (--until) or as a standing amount, with a reason; --dry-run first. |
frazer billing caps get | Read the account's default monthly cap, its amount and its basis. |
frazer billing caps remove | Remove the default cap, a billing admin only, with the typed sentence; --dry-run first. |
frazer billing waiting list | What did not run or paused for funds, by scope and reason, and the action that resumes it. |
frazer billing estimate | The cost of a run before it starts, with its p90. |
frazer billing costs query | Query costs of an account or a project, grouped and as estimated or final. |
frazer billing export set | Send hourly usage and cost files in the FOCUS format to a bucket. |
frazer billing skus list | List the public price list, without signing in. |
frazer billing usage query | Query metered usage of a project or an organization. |
frazer billing usage-events list | List the raw usage events of a project. |
frazer billing usage verify | Recompute a project's usage for a period and check the signed hourly digests. |
frazer billing usage-digest-chain get | Show the head of a project's chain of signed usage digests. |
frazer quota quotas list | List quotas with their limit, usage and where the limit comes from. |
frazer quota quota-preferences create | Request a different limit for a quota. |
All of them: CLI reference.
Terraform and OpenTofu
| Resource | What it manages |
|---|---|
frazer_billing_budget | A budget with thresholds and an optional cap on a billing account. |
frazer_quota_preference | A requested limit for a quota on a project or an organization. |
All of them: Terraform and OpenTofu reference.
MCP tools
| Tool | What it does |
|---|---|
usage_digest_chain_get | Get the head of a project's chain of signed usage digests. |
All of them: MCP tools reference.
Events
| Event type | When it is sent |
|---|---|
frazer.budget.threshold.v1 | A budget crossed one of its thresholds, on actual or forecast cost. |
frazer.budget.cap_reached.v1 | A budget with a cap reached 100 % and Frazer paused work in its scope. |
frazer.invoice.created.v1 | An invoice was issued. |
frazer.invoice.paid.v1 | An invoice was paid. |
frazer.invoice.payment_failed.v1 | A payment for an invoice failed. |
All of them: Events reference.
Errors
| Reason | What it means | How to fix it |
|---|---|---|
BILLING_ACCOUNT_CLOSED | The billing account is closed and cannot be linked. | Link the project to an active account. |
CURRENCY_NOT_SUPPORTED | The account's currency is not supported. | Use USD. |
ACCOUNT_TYPE_NOT_SUPPORTED | The requested billing account type is not available for this request. | Choose a self-serve or invoiced account. |
USAGE_DIGEST_NOT_SIGNED | The hour's usage digest exists but is waiting to be signed. | Retry later. |
USAGE_DIGEST_MISSING | A usage digest that should exist is gone. | Contact Frazer support with the project and the hour. |
QUOTA_BELOW_USAGE | The requested limit is below current usage. | Reduce usage first, or pass ignore_safety_checks; nothing running is evicted. |
All of them: Errors reference.
Related
Section titled “Related”- Billing and budgets product page
- Pricing: every price and the estimator
- Identity and access: billing roles and approvals for quota increases
- Frazer Monitoring: the monitoring allowance and alert channels
- Webhooks and events: budget and invoice events
- Terraform and OpenTofu: budgets and quota preferences as code