Skip to main content
POST
Consume AI usage

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json

Consumption payload.

customer
string
required

Customer to bill — the external id your application knows them by, or a Hyperline cus_… id. Resolved exactly the way AI telemetry resolves it.

Required string length: 1 - 255
Example:

"acme-corp"

usage
object
required

What was consumed. Priced server-side against your resolved rates — an amount sent by the client is never trusted, and never read.

Example:
idempotency_key
string
required

Replay key. Replaying it returns the original amount and breakdown unchanged, with a freshly read balance.

Required string length: 1 - 255
Example:

"cns_9f2c1ab4e77d3105bb0a"

agent
string

The agent making the call, as run({ agent }) names it. Optional, and absent means the customer's shared pool — which is what every call did before per-agent billing existed. Naming an agent only changes anything once an operator has given that agent a billing policy of its own; until then it resolves to the same shared pool and the response says so with agent: null.

Required string length: 1 - 128
Example:

"invoice-copilot"

Response

Consumption recorded.

agent
string | null
required

The billing scope that answered: the agent's own slug when it has a policy of its own, and null when the customer's shared pool answered — including when an agent was named but has no policy of its own.

Example:

"invoice-copilot"

amount
string
required

Total charged, at full precision — a sub-cent model call is not rounded away, and neither is a fractional credit.

Example:

"4.182"

denomination
enum<string>
required

What amount and every breakdown line count: the wallet's minor units, credit units, or weighted allowance units.

Available options:
minor_units,
credits,
units
Example:

"minor_units"

breakdown
object[]
required

Itemized lines behind amount: one per LLM call, one per cost item, plus a markup line when the policy charges one. In credits mode every line is in credits, and a line the rate card did not price directly also carries the usd_amount it was converted from. Read each line's price_status: a line nothing could price is present at 0 and marked unpriced rather than dropped, so the receipt always accounts for everything that was sent.

balance
object
required

What the customer can spend. In wallet mode this is the shadow balance — micro-consumption never touches the wallet ledger directly. In credits mode it is the credit pot itself, read live. In windows mode the three numbers describe the binding window, the one with least room left and therefore the one that will refuse the next call; meters carries every window separately.

meters
object[] | null
required

Every rolling allowance window after this call, in windows mode — the units it just consumed are already in used_units. Null in every other mode.

blocked
boolean
required

Whether the customer's kill switch is on. Consumption is still recorded when it is — blocking is a gate for check, not a way to lose ledger entries.

Example:

false

warning
object | null
required

Set when part of this consume could not be priced. The customer was still charged for the lines that could be, and the unpriceable ones are in breakdown with price_status: "unpriced". Null otherwise.

overage
boolean
required

True when THIS call was priced as overage: it crossed the scope's boundary and the policy is metered, so the whole call was re-priced in USD and denomination is minor_units rather than credits or units. A replay reports what the original call did.

Example:

true