CLI First
How Credits Work
Every company has a credit balance. Operations deduct credits on use. New accounts start with 20 free credits on a 7-day starter trial.Credit Costs
Each credit is worth $0.05 USD.Fixed-Price Operations
SEO / AEO / queue are additionally metered against your plan quota (a separate
per-primitive counter surfaced at
GET /v1/users/:id/billing/usage) on top of the
credit charge above.Infrastructure (duration-metered)
Anything that runs a server you keep alive is billed by time, not per call — metered by a background scheduler (~every 2 minutes). An idle/stopped resource accrues nothing.- The hosted-runtime container is
1 vCPU / 2 GBby default, so a continuously-running hosted agent costs ≈1.7 + (2 × 0.18) = 2.06 credits/hour(~0.05/credit). - Only claimed containers (your agent profile’s) are billed. The shared warm pool that keeps start-up latency low is platform overhead and is never charged to you.
- Bring-your-own-runtime (you run the agent in your own harness with
agentProfile.tools()) incurs noruntime_usage— you only pay for the API primitives the agent calls. - A claimed hosted container bills the same whether busy or idle (the task is up), so
tear agent profiles down with
revoke()when done — revoke releases the slot immediately. - Path A infrastructure is duration-metered, not per-operation. Provisioned managed
Postgres, web hosting, and object-storage buckets cost us a recurring vendor fee for as
long as they exist, so each is billed by time while
ready. The queries, HTTP requests, and object operations against them are free — you pay for the running resource, not per call.naive downtears a resource down and stops its meter. - The three Path A rates above are not switched on yet. The meter ships at a rate of
0for managed Postgres, web hosting and object storage, so areadyresource accrues nodatabase_usage/web_usage/storage_usagetoday. The rates in brackets are what each is expected to cost when metering begins; we will announce pricing before any of them starts charging. The credit gate on provisioning and the out-of-credit suspension sweep both run regardless.
Path A infrastructure is credit-gated. Provisioning via
naive up (managed
Postgres, object storage buckets, web hosting) is blocked when your credits are
exhausted, and when you run out, running infra is suspended: web deployments are
disabled and the hosted runtime is stopped by its meter. Managed Postgres and
bucket data persists (a stored resource can’t be “paused”), so it keeps metering
until you tear it down — top up to re-enable web and resume; new provisioning unblocks
immediately. Self-service compute tasks/services are not auto-stopped on exhaustion;
their meter simply keeps debiting the (now-negative-gated) balance until you stop them.LLM Calls
There are two ways LLM usage is billed, both per-token and deducted after the call completes (after the final SSE event for streams):- The
llmprimitive & OpenRouter proxy (POST /v1/llm/chat/completions,naive.llm.chat(), and the/v1/proxy/openrouter/*drop-in). These route through OpenRouter, which returns the exact USD cost of each call. Naive bills that returnedusage.cost× markup, converted to credits — so there’s no per-model rate table and pricing always tracks OpenRouter. See the LLM primitive. - Orchestration LLM calls (CEO agent / employees). These flow through the Anthropic/OpenAI/Google proxies and are billed per-token using the rates below, with cache read tokens billed at a discount and cache creation at a premium.
Audio Calls
Theaudio primitive bills the same way — exact reported USD cost × markup, converted to credits:
Catalog, usage, and route-trace reads are free. Async transcriptions are charged once on the first poll that observes
succeeded (keyed on the transcription id — no double-charge). Synthesis charges settle from the usage row after the audio streams. Very short calls can round below credit precision and cost nothing.
Every rate below is the provider’s own list price × 1.25, converted at $0.05/credit.
Anthropic
OpenAI
Google
Cache reads are billed at the provider’s cache-read rate (a fraction of the input
rate) and cache writes at 1.25× the input rate.
Models not in this table cannot be served on the direct proxies. If a model is
not listed, Naive first looks up the provider’s real per-token price via
OpenRouter’s catalogue and bills that × 1.25. If no published price can be found,
the request is rejected with
400 unpriceable_model rather than billed at a
guessed rate — a request that cannot be priced is never served. The llm
primitive and the OpenRouter drop-in are unaffected: they bill the exact cost
OpenRouter reports, whatever the model.Dynamic-Price Operations (Image/Video Generation)
Image and video generation costs are model-dependent and calculated dynamically. Use the pricing endpoints to preview costs before submitting:unit_price_usd is fal.ai’s live price for that model in its own billing unit
(per megapixel for flux/schnell, per image or per second elsewhere); the credit
charge is that price × quantity × 2, with a 0.1-credit floor. Prices are read
live per request, so a model whose price fal changes is billed at the new price
with no release on our side. If fal cannot price a model at all, generation is
rejected rather than billed at an assumed rate.
Two different “budgets” — don’t confuse them
Naïve has two independent ledgers. Keep them straight:
An agent profile’s
budget.cap is a combined cost ceiling: it caps the agent profile’s
real-world spend (cards/trading) plus the platform credits it burns (LLM, search,
compute, hosted runtime — counted at $0.05/credit) against one number. It is still
distinct from your company-wide Naïve credit balance (the budget is per agent profile, in
USD). A hard cap denies over-budget actions (and auto-stops the agent profile’s hosted
runtime); a soft cap routes them to approval. See IaC policy
and the Governance Gateway.
A card’s spending limit is not spend. Issuing a card is still gated on its
limit — a 50 cap, because the
limit is what the card puts at risk — but the limit itself is never written to
tenant_spend_events. Only money that actually moves is: top-ups, trading notional,
card swipes and metered primitive usage. A 0, and cancelling it changes nothing, because
nothing was charged.
Running out of credits
When a company’s credit balance is exhausted, new API calls return402 insufficient_credits and hosted-runtime containers are automatically stopped by
the meter (a runtime.stopped event with reason: out_of_credits) — so a
non-paying account stops incurring cloud cost. Top up or upgrade to resume.
Sync vs Async Charging
Synchronous operations (email, search, URL read, quick research):- Credits deducted immediately when the operation succeeds
- If it fails, no credits are charged
- On submission: pre-check that balance ≥ estimated cost (returns
402if not) - Job runs in background
- On success: credits deducted and transaction recorded
- On failure: no charge
Concurrent async jobs can temporarily exceed your balance since pre-checks pass independently. The balance may go slightly negative — subsequent submissions will be blocked once balance drops below threshold.
Checking Your Balance
Usage History
action_type — e.g. llm_call, audio_call, web_search,
email_send, job_completion, compute_usage, runtime_usage,
subscription_renewal, credit_topup. The dashboard’s
GET /v1/dashboard/usage-summary groups the same ledger by action_type so you can
see exactly where credits went (including infrastructure time).
Credit Responses
Every operation that costs credits includes the charge in its response:Credit Enforcement
All billable operations check your credit balance before executing. When your balance drops to zero or below:- API primitives (email send, search, URL read) return
402 insufficient_credits - CEO runs are blocked with a credit pre-check (5 credits)
- LLM proxy calls from the container are rejected, stopping agent work
- The balance stops at zero. A settlement that arrives for more than the wallet holds — a
metered charge nobody could pre-check, like an LLM call priced after the tokens are served —
empties it to exactly
0.0000and the remainder is forgiven. You are never billed into debt.
Running Low on Credits?
When your balance hits zero, operations fail with aninsufficient_credits error that includes available credit packs. You can buy more anytime:
Configuration reference (rates & metering)
The credit value and the duration-meter rates are deployment configuration. On the managed cloud these use the defaults below; self-hosters can override them via environment variables.
Both duration meters tick every ~2 minutes, key each charge to a time window
(
<resource_id>:<windowStart>) so a double-tick can’t double-charge, and cap a
single tick’s back-charge at 3 intervals if the scheduler was paused. Compute is
gated on NAIVE_COMPUTE_*; hosted-runtime metering is gated on ORCH_CLUSTER
(hosted runtime being enabled at all).