Skip to main content

Routing Integrity

Routing Integrity is the dashboard view over Proof of Routing. It reads the attested record of every governed model call and reports who served it, whether the routing matched what was asked for, where the data was processed, and what it cost.

Access via Agent Detail → Provenance for the whole-agent view. Per-session detail appears on the Verify tab and in Session Replay.

The tab is shown only for agents registered on the OpenRouter framework. Routing provenance is an OpenRouter-specific record — it exists because that gateway picks the provider per request and publishes the answer afterwards — so an agent on another framework has nothing to display here. An agent that really does route through OpenRouter but was registered as something else will show nothing until its framework is corrected on Agent Settings.

Reading the Panel

Read coverage before any rate. A perfect honored rate over traffic that named no allowlist is a statement about nothing, so the panel puts the size of the denominator next to every score.

BlockAnswers
Summary cardsHow many calls were attested, how many made a checkable promise, and whether any promise broke.
Provider routingWhich providers served the traffic, and which calls went outside a stated allowlist.
Model integrityWhether the model that answered is the model that was asked for.
Provider reliabilityHow often each provider failed, and how slow each attempt was.
ResidencyWhich regions were approved, and which calls ran outside them.
What it costSpend per call and per session, and the spend attributable to each broken promise.
Attested model callsThe drill-down: one row per call, filterable, each carrying its generation ID.

Three Outcomes, Not Two

Every check in this panel has a third state, and it is the one that keeps the numbers honest.

OutcomeMeaning
HonoredThe request named a provider allowlist, and an allowed provider served the call.
DishonoredThe request named an allowlist, and someone else served it.
UnconstrainedThe request named no allowlist. Nothing was promised, so nothing was broken — and the call is excluded from the honored rate rather than counted as a pass.

honored_rate is null rather than 100% when nothing was constrained. coverage_rate sits beside it saying how much of the traffic the rate speaks for.

Provider Routing

The per-provider breakdown shows, for each upstream provider that served traffic: the number of calls, how many of those went outside a stated allowlist, the total cost, and the average latency.

Providers are de-duplicated case-insensitively. OpenRouter reports OpenAI on one call and openai on another, and a breakdown listing both would read as two providers serving the session; the first spelling seen wins as the display label.

Model Integrity

The same record answers a second question: did I get the model I paid for?

OutcomeMeaning
MatchedThe model that ran is the model the request asked for. A model the caller listed in their own fallback chain counts as matched — they asked for it.
SubstitutedA different model answered. The caller paid for one thing and got another.
UncheckedThe request named openrouter/auto, so choosing the model was the point. Reported as unchecked, never as a pass.

Unlike the provider check, nearly every request names a concrete model — so this check speaks for almost all traffic, and its coverage is usually near-total.

Provider Reliability

A reliability scorecard built from your own traffic rather than a global status page: how often each provider failed you, and how slow each attempt was.

ColumnMeaning
AttemptsEvery attempt on the failover chain, not just the ones that won.
FailuresAttempts that did not serve the call.
Failure rateFailures over attempts.
Mean / worst latencyThe average and the slowest attempt, coloured apart — an acceptable mean can hide a provider that occasionally takes ten seconds.

Counting attempts rather than winners is the point. Scoring only the calls a provider served would flatter every provider whose failures were quietly absorbed by failover.

Residency

Where the data was processed, measured against the regions a policy approved.

FieldMeaning
Declared callsCalls that ran under an approved-region list at all.
Approved / unapprovedCalls inside, and outside, that list.
UncheckedCalls with no approved list, or none the gateway reported a region for. Never counted as approved.
Approved regionsThe regions the policy approved, with call counts.
Own keyWhether a customer-supplied provider key was required, and whether it was used.

Two things this panel states on the screen rather than in a footnote:

  • This check is weaker than the provider check, on purpose. Nothing in a request steers where a call lands, so a residency breach is evidence caught one call later — not prevention. A policy can refuse the next call and halt the session.
  • global is compared literally. A plain openai/gpt-4o-mini call reports data_region: global while being served by Azure. global means no regional endpoint was used, which is exactly what an operator who approved ["eu"] needs to see fail. Approving ["global"] is the honest way to say any zone is acceptable.

What It Cost

The gateway's own dashboard reports spend per key and per model. What it cannot report is what a violation cost, because nothing else holds the comparison and the price on the same record.

FigureMeaning
Total costSummed over calls that carried a price.
Per call / per sessionAverages, null when nothing was priced.
Dishonored spendSpend on calls served outside a stated allowlist.
Substituted spendSpend on calls that ran a model nobody asked for.
Unapproved spendSpend on calls processed outside the approved regions.
Unpriced callsCalls whose record carried no cost. Reported as a hole in the evidence, excluded from the averages rather than averaged as free.
Upstream costShown only where a BYOK call exists, and scoped to those calls.

Every violation line is drillable to a generation ID through the matching filter on the call list, which is the whole claim: a number anyone can re-check at source rather than an invoice they are asked to accept.

Upstream cost is deliberately confined to BYOK traffic. A non-BYOK call reports an upstream inference cost of 0 alongside a non-zero total, because for that traffic the gateway charge is the cost — so a fleet-wide "margin" figure would read as though the gateway kept everything.

Attested Model Calls

One row per call, newest first. Each row carries the provider that served it, the model that ran, the model requested, the region, the cost, the latency, the failover trail, and the outcome of each check.

Filters:

FilterUse it to find
outcome=dishonoredCalls served outside a stated allowlist
modelOutcome=substitutedCalls that ran a model nobody asked for
residencyOutcome=unapprovedCalls processed outside the approved regions
provider / regionEverything served by one provider, or from one region
byokOnly calls served on a customer-supplied key

Every row shows OpenRouter's generation ID. Click it to copy, then re-check the claim at the source:

curl -H "Authorization: Bearer $OPENROUTER_API_KEY" \
"https://openrouter.ai/api/v1/generation?id=gen-1787824433-ldSfnr06xRDRoVVJmDzQ"

That is the point of keeping the ID. Nothing in this panel asks to be believed.

Empty States

An empty panel is a statement, so it says which one it is:

SituationWhat you see
Agent on another frameworkThe tab is not shown at all.
No attested calls yetThe panel explains that provenance is written after the response, so a very recent run may still be collecting.
A filter matched nothingA message naming what it found nothing of — "no call in this window was served outside a stated allowlist" — rather than a bare "no results".
A session that failed before reaching a providerNo provenance, because no call reached a provider. Its Run Receipt still attests that nothing ran.