Resources / Integrations / OpenRouter

INTEGRATION · OPENROUTER

OpenRouter cost tracking per feature and customer

To see OpenRouter spend per feature and per customer, add LLMtrack as a Webhook destination in OpenRouter's Broadcast settings, then label your requests with a user and a feature. No SDK and no proxy. It takes about two minutes, and it's one of the gateways LLMtrack connects to.

Setup: about 2 minutes · No SDK · Free plan: 3,000 requests a month · Checked against OpenRouter's docs on 13 Oct 2026

What you get on top of OpenRouter

OpenRouter already shows what you spent per model and per key. LLMtrack takes the same requests and answers the questions OpenRouter's dashboard doesn't: which feature in your product spent it, which customer it was for, and what next month will cost.

These are the same views every LLMtrack workspace gets. See all six on the integrations overview. They're part of a complete approach to LLM cost.

Set it up

  1. 01

    Copy your LLMtrack ingest key

    Sign up free, open Keys & Integrations, and create a key named "OpenRouter". One key per connection lets you revoke it on its own.

  2. 02

    Add a Webhook in Settings › Observability

    In OpenRouter, open Settings › Observability, add a Broadcast destination of type Webhook, and paste:

    URL      https://otlp.llm-track.com/v1/traces
    Headers  {"Authorization": "Bearer llmt_live_…"}

    Turn on Privacy Mode for this destination. LLMtrack drops prompt text on arrival anyway, and with Privacy Mode it's never sent.

  3. 03

    Label your requests

    Add the customer and the feature to the requests you already send:

    "user":  "acme-corp",
    "trace": { "feature": "summarizer" }

    Tip Some calls also go through the LLMtrack SDK? Add responseId: completion.id to those track() calls. Each request then lands once, whichever way it arrives, and your event count stays exact.

Check it worked

Send one request through OpenRouter, then open your LLMtrack dashboard. Within a second you'll see it under the feature you set, with source "OpenRouter", the model, token counts and a cost. If you used the connection test in OpenRouter first, that test sends an empty payload: it passes, and nothing is recorded.

Troubleshooting

  • The connection test failsCheck that the URL ends in /v1/traces and that the headers field is valid JSON, quotes included: {"Authorization": "Bearer llmt_live_…"}.
  • Requests arrive as "unlabelled"The feature belongs inside the trace object, "trace": { "feature": "…" }, not at the top level of the request.
  • No customer shownSet the user field on the request. That's the value LLMtrack reads as the customer.
  • A request shows "Unpriced"That model isn't in LLMtrack's price sheet yet. It's recorded with its tokens and flagged, never as $0. Check the model price list.

What LLMtrack keeps from OpenRouter

LLMtrack reads only the fields below. Everything else in the trace, including any prompt or completion text, is dropped before anything is saved.

Kept

  • model and provider
  • token counts: input, output, cached, cache writes, reasoning, audio
  • the cost your gateway reported
  • your feature label and customer ID
  • latency and status

Dropped on arrival

  • prompts and system instructions
  • completions and tool calls
  • images and audio
  • anything else that holds content

Questions

Do I need OpenRouter's Privacy Mode?

It's recommended, not required. LLMtrack never stores prompt or completion text either way. Privacy Mode means it isn't sent at all.

Does OpenRouter charge for Broadcast?

OpenRouter's docs don't list a charge for Broadcast as of 13 Oct 2026. Check your OpenRouter plan for the current terms.

Do you store my prompts?

No. LLMtrack reads token counts, the model, your labels and timing. Any prompt or completion text in a trace is dropped before anything is written, and it never appears in logs.

I also send some of these calls through the LLMtrack SDK. Will they count twice?

No. Pass the provider's response ID to track() as responseId, and LLMtrack matches the two copies, keeps one row with the details from both, and counts it once. Calls that only look alike, with no ID to compare, are labelled "possible duplicate" and kept out of your totals until you decide. Hidden copies still count toward your monthly events, so sending responseId is the setup that keeps everything exact. You choose how both cases behave in Keys & Integrations.

How are events counted?

One request your gateway exports is one event. The free plan includes 3,000 a month, and Pro includes 25,000 for $11.99. Your usage page shows which connection used them, so a busy gateway is never a mystery.

Other gateways

  • Cloudflare AI Gateway cost per feature
  • Vercel AI Gateway cost per customer
  • LiteLLM proxy cost tracking

See every integration on one page

Keep OpenRouter. See where the money goes.

One URL in your OpenRouter settings, and your next request shows up on your dashboard already priced.