Skip to content

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 fieldWhat it counts
input_tokensPrompt tokens not served from cache.
cache_read_tokensPrompt tokens served from prefix cache.
cache_write_tokensPrompt tokens written to cache. Priced at $0 under automatic caching.
output_tokensGenerated 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.

Terminal
curl "https://api.boardwalk.cloud/v1/receipts/$REQUEST_ID" \
  -H "Authorization: Bearer $BOARDWALK_API_KEY"
Receipt excerpt · illustrative rates
{
  "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.

Receipt excerpt · your deployment
{
  "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.

Terminal
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.