Normalize AI provider usage. Join cost. Never fake a number.

Normalize mixed AI provider usage records (OpenAI, Anthropic, Google, Bedrock, Azure OpenAI, Groq) onto one canonical shape and join cost observations into a deterministic, versioned evidence report. Absent price or usage stays unknown, never 0. Local-first CLI and a stateless HTTP API.

What it does

usagejoin.dev maps usage records from multiple AI providers onto one canonical shape and joins cost observations into a deterministic, versioned evidence report. Missing price or usage is reported as unknown — never silently coerced to 0 — so pass, unknown, and fail stay distinct and honest.

Supported providers

Each adapter has documented limits and valid plus adversarial fixtures.

Canonical contract version: 1.0.0.

Run it locally

Free local CLI and fixtures — no account, no upload of your secrets.

node src/cli.mjs INPUT.json --json
# exit 0 = pass, 2 = unknown, 1 = fail

Or call the stateless HTTP API: POST /v1/normalize with a usage document (optionally { document, priceTable } to resolve absent cost from token counts). See the source and contract.