Every selection response carries the
usage receipt described here, and the
same number enforces your per-request ceiling.
Self-serve billing is prepaid: you add credit from the dashboard’s
Wallet page and
each request’s charge is debited from that balance. No invoices are raised
against a prepaid balance.Ledger lines are typed, and only one type is a usage charge. A debit is
what a request cost, and it carries the same input-token count and amount as
that response’s receipt, so every usage debit is checkable against the
receipt that produced it. A grant is credit we added, which is how your
welcome credit arrives; a purchase is credit you added; and a refund
returns credit to the balance. None of those three describes a request, so
none carries a token count or a receipt to check it against. Reconcile against
the debit lines.The price
You are charged $0.09 per 1,000,000 metered input tokens, in USD, on every call that returns a result, whether that result is a smaller context or your full context. The receipt on each response shows what was counted (usage.input_tokens) and under which rate card (usage.price_version).
A request that returns nothing does not count: a stand-down with an empty
selection, an engine error, or an empty input. A request refused with a 4xx
does not count either: the response carries no usage receipt. There is no
per-request minimum fee.
One result that returns nothing is charged: blocked, from
security screening under
security_mode: "enforce". The selection ran and the screening ran over
everything you sent, and a block is a result you asked for, so it is charged at
the one price like any other call that ran. A sanitized_fallback delivers a
packet and is charged as the fallback it is.
One number, computed once
Every200 carries a usage block. It is the same number the telemetry
event records and the same number the wallet debit carries; there is no second
computation anywhere for it to drift from. A 4xx carries an error envelope
instead, with no usage block, because nothing was metered.
The measurement and the price are separate fields on purpose. A single field
cannot be both “the input you submitted” and “zero when nothing is charged”: on
a 100,000-token request that returned nothing those are different numbers.
Splitting them means the measurement is always verifiable and the price is
always attributable.
Three versions that move independently
policy_version says what ran. meter_version says what a token means.
price_version says what it costs.
They are deliberately decoupled: a retune must not reprice anyone, and a
repricing must not change anyone’s selection. If they were one field, every
price change would look like a behaviour change and every retune would look like
a price change.
What is metered
Every customer-supplied text field the engine processes:Recompute it yourself
The reference implementation, in Python and TypeScript, with a worked example.
What is not metered
Why input, and not tokens saved
Charging for tokens saved is the intuitive model and it is the wrong one, for two reasons we would rather state than have you infer.- It pays us more the more we cut. That is a direct incentive against answer quality: the vendor’s interest and yours point in opposite directions on every request.
- It is unstable. A retune would change your bill for identical inputs, making your charges a function of our tuning decisions rather than of your usage.
The charge
price_version and charge_multiplier are both on every response’s receipt;
the published card named by price_version supplies rate_per_million. Nothing
else is needed to price a request.
The rate card is public. Under
price_version npp-2026-10-r1, the rate is
$0.09 per 1,000,000 metered input tokens, in USD. A rate card is immutable
once named: a repricing mints a new price_version and leaves earlier ones
alone, so a receipt always resolves to the rate that was in force when it was
written.The dashboard’s estimated savings figure is a different number on purpose:
it prices the tokens Needlepath removed at a stated reference of $5 per 1M
tokens (a typical frontier-model input price) because what you save is
denominated in what your downstream model would have charged you, not in what
we charge. The tile names the assumption so you can recompute it.Cases people ask about
Rounding never reaches the ledger
Every wallet debit is posted at its exact amount: the per-request charge is exact for every whole token count, so nothing is rounded away per request. Rounding happens only at display, which is why a small request can show as$0.000042 rather than a $0.00 that hides it. Per-request rounding of
sub-cent amounts is how a million small requests silently stop summing to their
own receipts; here the ledger and the receipts sum to the same number by
construction.
Disputing a debit
Every debit on the Wallet ledger carries the same input-token count and amount as the receipt that produced it, so the first check is a lookup, not a computation. If you want to go further, we cannot show you your records, because we never had them (the one exception is a capture you asked for in writing, kept for 30 days). What we can show you is better:1
You hold the payload
You sent it. We did not keep it.
2
We publish the function
estimate_tokens is published in full, including a reference implementation
you can run.3
The receipt names the version
meter_version pins which definition applied to that request.How to recompute your own bill
Step by step, with runnable code.