Show HN: Inferock-bench – per-call billing receipts for OpenAI and Anthropic Inferock released inferock-bench, an open-source local proxy that generates per-call billing receipts for OpenAI, Anthropic, and other LLM providers, enabling users to audit token usage, costs, and failures independently. The tool addresses the lack of transparency in provider billing by preserving evidence of failed or timed-out requests that still incur charges. Providers shouldn't get to grade their own bills. Today, the company that charges you also decides what counts as a failure, what gets credited, and keeps the only detailed records. inferock-bench puts an independent, per-call receipt of what you were billed — and what failed — in your own hands. We built inferock-bench because we kept paying for answers that died mid-sentence, and nobody could tell us where the money went. Quickstart quickstart · Test your loss test-your-loss · What can go wrong what-your-provider-doesnt-tell-you · Key boundary how-provider-keys-are-used · Docs docs Use it when you need to audit an AI/LLM bill, measure Claude or GPT token usage locally, or answer "was I billed for a failed API call?" It is a local LLM cost-tracking proxy for four measured provider planes: OpenAI, Anthropic, Gemini Developer API, and pinned OpenRouter endpoints spanning meta-llama, deepseek, mistral, moonshot/kimi, z-ai/glm, and qwen on observed hosts. Everything else is extensible-by-design, not measured today. It does not declare every mismatch an OpenAI overcharge or Anthropic billing error; it preserves token, cost, retry, and failure evidence so billing-integrity questions can be checked. Common cases it can help you inspect: a failed or timed-out request that still has usage, token counts that do not match the visible output, retries that may have amplified cost, and latency or model-version changes that need a trail. It cannot cap provider spend across calls it never sees, and it cannot explain traffic that bypassed the local proxy. | Receipt word | Plain-English meaning | |---|---| spent | provider spend observed by the run for priced calls it saw. | money loss | bill-bounded dollar loss The Inferock Standard can tie to observed spend or charge evidence. | time loss | real wait or downtime measured as time, never added to dollars. | invoice-check exposure | an invoice-check amount, such as cache discount at risk; it is labeled "verify your invoice" and never summed into money loss. | Real measured traffic, not fixture rows. Measured since 2026-07-09, the cumulative public ledger through run15 captured 1,268 measured calls, 565 failures/signals, $7.15 provider spend observed, $0.07 bill-bounded money loss stored exact: $0.073875 , ~2.9 min time loss, and $16.80 invoice-check exposure across 202 cache-discount-at-risk signals. The current-code cumulative receipt watches 12 of 13 surfaces and keeps invoice-check exposure separate from money loss. Run facts: sanitized public run card for 2026-07-09 /inferock/inferock-bench/blob/main/docs/public-run-2026-07-09.md and run15 public run card for 2026-07-10 /inferock/inferock-bench/blob/main/docs/public-run-2026-07-10.md . The 2026-07-06 0.1.7 card remains published as a historical artifact; the current public receipt presentation ships with 0.1.10. Important The receipt is spend-anchored. The headline is spent $X · money loss $Y · time loss Z · invoice-check exposure $E ; bill-bounded money loss and recognition gap never include invoice-check exposure. CACHE DISCOUNT AT RISK is still visible below the headline as a separate detail line that says "verify your invoice" rather than as money loss or a refund claim. | Watch it run | Share the receipt | |---|---| Run it locally. We think you should be able to see exactly what a provider failure cost you, to the cent. Provider keys are not sent to Inferock; attached only to provider requests. - Prerequisite: install Node.js 22+ with npm. node --version npm --version If either command is missing, install Node.js 22 or newer first. - Run the local benchmark: npx inferock-bench The first run downloads the package and can take a minute or two before printing anything. Leave it running. You see lines like: inferock-bench listening at http://127.0.0.1:4318 Dashboard: http://127.0.0.1:4318/ Config: ~/.inferock-bench/config - Save your provider key locally. Easiest path with the server from step 2 still running: open http://127.0.0.1:4318/ and save the provider key in the dashboard. Create that key in your provider account first; use a low-limit or development key while evaluating. It stays local under ~/.inferock-bench/ , is saved with owner-only file permissions, and is shown back only in masked form.CLI path, before starting the server or after stopping it: npx inferock-bench setup