Metered, per run
Every run produces a receipt. Budgets cap a run before it overspends, and usage rolls up by API key so you can pass costs through to your own customers.
Agent runs
Runs bill by token usage for the band you select. A band is a stable envelope of capability and cost. Novo improves the routing behind it as models change, without changing your API or the shape of your bill.
| lite | Lower-cost agent work for everyday, well-defined jobs: same stable agent APIs, same delegation surface. |
| core | The default band. Deeper orchestration with advisors and workers, so Novo can spend stronger routes where they are useful without sending every task through the most expensive model. |
| frontier | Maximum-intelligence orchestration for the hardest jobs, with a cross-checked second opinion on consequential decisions. Highest cost. Reach for it when the task warrants the strongest routes. |
Per-run totals are exposed as usage.costCents in fractional cents. For exact debit attribution across inference, browser sessions, and managed workspaces, page through novo.usage.events.list(); terminal run and step usage remain scoped receipts.
Managed tools
Managed tools (image, video, speech, music, sound effects, analysis, browser) bill separately from inference tokens. The table below shows the metering unit so you can estimate usage before turning on a capability. Strict data handling can select compliance-specific managed routes or reject unavailable variants; standard runs keep the normal optimized routes.
Generation
| generate_image | Billed by text input tokens, image input tokens, and image output tokens. |
| generate_video | Billed per generated second. Reference-video inputs use their own metering path. |
| generate_speech | Billed by synthesized character count. |
| generate_music | Billed per generated second. |
| generate_sound_effect | Billed per generation for auto length, or per generated second for fixed durations. |
Analysis
| view_media | Billed only when it returns managed analysis. Image/audio/video input tokens and output tokens follow the analyzer model's modality rates. |
Browser
| browser | Billed per managed session-minute, metered independently of run completion. Session time is not bounded by the run's budgetCents or maxDurationMs; the idle timeout is the bound. The model inference that drives the browser bills as normal tokens. |
Managed workspaces
Managed workspaces bill separately from run model usage. Compute is metered while the workspace is warm, transfer is metered by bytes, creation is metered per workspace, and storage is metered while files are retained.
In-workspace editing (enabled with workspace.mediaEditing on a managed workspace) bills as this same managed-workspace compute. There is noper-operation charge; an edit is workspace compute and transfer while it runs, outside the reach of a run's budgetCents or maxDurationMs.
Workspaces hibernate after their idle window and resume on the next tool or preview access. Aggregated usage includes workspace and browser costs in day, agent, and thread groupings; API-key and band groupings roll thread-scoped runtime into the public managed_runtime bucket.
What you don't pay for
- Failed-before-work runs. If a run errors before any model call,
costCentsis0. - Paused time. A run waiting for a human (tool approval or user interaction) does not bill model time while paused.
- Connection time. Stream attach, reconnect, and idle SSE keep-alive do not bill. Only model work and managed-tool work bill.
Credits and billing
Novo bills from a prepaid credit wallet. An organization admin can purchase credits through hosted Stripe Checkout from Billing → Add credits; balance shows in the console header.
- Free tier. Every new workspace gets starter credits at signup, enough to take an agent end-to-end and confirm the loop works for you.
- Account limits. Organization-level monthly spend caps, run-starts-per-minute limits, and active-run limits raise with billing history. Monthly spend caps return
quota_exceeded; run-start and active-run caps returnrate_limited. - Per-run cap. Pass
budgetCentsonthreads.streamorruns.startto hard-stop a run that tries to exceed it. The run terminates withterminalReason: 'budget_exceeded'.
Reading your usage
Pull aggregated usage from GET /v1/usage grouped by day, agent, thread, band, or API key. Page exact ledger rows from GET /v1/usage/events. Numbers match what you see in the console.
Grouping by API key is the pass-through path: issue one key per customer, and their usage (inference, browser, workspaces) rolls up under it, in the same numbers the console shows.