Metering and receipts
Every inference request that reaches a model gets a receipt. It records the tokens, rates, cost, and exact model configuration used.
A catalog model bills the tokens on its receipt. A model you deploy bills the GPU time it holds instead: its receipts record token counts at zero rates, and a gpu block with the card time that paid for the request (see pricing).
Billed tokens
| Receipt field | What it counts |
|---|---|
input_tokens | Prompt tokens not served from cache. |
cache_read_tokens | Prompt tokens served from prefix cache. |
cache_write_tokens | Prompt tokens written to cache. Priced at $0 under automatic caching. |
output_tokens | Generated tokens, including reasoning and tool calls. |
The response's usage.prompt_tokens includes cached and uncached input. Receipts separate them. Unreported cache counts are null; when cache reads are unknown, the prompt is billed as uncached and the receipt includes a note.
Reasoning is output, even when displayed separately from the final answer.
Get a receipt
Save the response's x-request-id header. After the request finishes, fetch its receipt with a key carrying requests:read or inference:write.
curl "https://api.boardwalk.cloud/v1/receipts/$REQUEST_ID" \
-H "Authorization: Bearer $BOARDWALK_API_KEY"{
"usage": {
"input_tokens": 100,
"output_tokens": 20,
"cache_read_tokens": 0,
"cache_write_tokens": 0
},
"prices": {
"input_micros_per_mtok": "100000",
"output_micros_per_mtok": "200000",
"cache_read_micros_per_mtok": "10000",
"cache_write_micros_per_mtok": "0"
},
"cost_micros": "14"
}Multiply each count by its rate, add the results, divide by 1,000,000, and round up once to a whole micro-dollar. The example costs $0.000014. Zero usage costs zero.
The full receipt also includes source and config revisions, engine version, timings, finish reason, and status. Old receipts retain their original rates.
A catalog request that fails or disconnects is recorded at zero cost until output reaches you, and bills what was generated after that; on your own deployment, the card’s time is still billed. A gateway refusal has no receipt because it never reached a card. A receipt may briefly return 404 while the request finishes recording.
GPU time
A model holds its cards for a visit: the swap onto them, every request served, and the hold. Each visit is billed as intervals of at most a minute. A receipt for your deployment links the interval its request ran in.
{
"cost_micros": "0",
"gpu": {
"grant_id": "grant_example",
"interval_seq": 0,
"wait_ms": 0,
"floor": false,
"cards": 1,
"rate_micros_per_gpu_hour": "5750000",
"interval": {
"opened_at": "2026-10-01T12:00:00.000Z",
"closed_at": "2026-10-01T12:00:47.300Z",
"cold_start_ms": 300,
"serving_ms": 42000,
"hold_ms": 5000,
"billed_ms": 47300,
"cost_micros": "75549"
}
}
}One interval pays for every request that ran in it, so add up intervals, not receipts: billed_ms × cards × rate ÷ 3,600,000. On a reserved GPU, floor is true and the interval costs nothing; the reservation pays for that GPU time. wait_ms is how long the request waited for a card, which is never billed.
Count a prompt
Tokenization is free. Send messages to apply the served chat template, or prompt to count raw text. Send exactly one.
curl https://api.boardwalk.cloud/v1/tokenize \
-H "Authorization: Bearer $BOARDWALK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"Qwen/Qwen3-0.6B","messages":[{"role":"user","content":"Hello"}]}'The response includes count, tokens, and max_model_len. Use the same model revision as your inference request.
For usage exports, see request history. Boardwalk stores token counts and request metadata, not prompt or completion content.