Per-request metadata
Every successful response from the gateway carries a top-level
lowrouter field:
{
"id": "chatcmpl-...",
"choices": [...],
"usage": {...},
"lowrouter": {
"generation_id": "gen_01J9...",
"provider": "openai",
"region": "eu-west",
"eco": {
"energy_wh": 0.0021,
"carbon_g": 0.00057,
"carbon_per_1k_tokens_g": 0.013,
"accuracy": "accurate",
"methodology_version": "v0.4-2026-01"
}
}
}The same fields are echoed in HTTP headers (X-LowRouter-Generation-ID,
X-LowRouter-Provider, X-LowRouter-Region) for clients that prefer
header inspection.
Field reference
generation_id
Globally unique, opaque ID for this generation. Use it to:
- Look up the full record via
GET /generation/{id}. - Open the corresponding row on the dashboard’s transactions page.
- Correlate gateway logs with your application logs.
The ID format may evolve; always treat it as opaque.
provider
The upstream that actually served the request. Matches an id in
GET /providers.
region
The region the upstream served from. Strings like eu-west,
us-east, us-west — the same values used in the route.region
field on requests.
eco
The energy and carbon estimate. Five fields:
energy_wh— total energy estimated for the request, in watt-hours. Computed from the resolved model’s active parameter count and the request’stotal_tokens.carbon_g— total CO₂e estimated for the request, in grams.energy_wh × grid_intensity_for(provider, region) / 1000.carbon_per_1k_tokens_g—carbon_gnormalised per 1K total tokens. Comparable across requests of different sizes.accuracy— confidence band:accurate,medium, orgross. Reflects how well-sourced the model’s parameter count is. See methodology.methodology_version— version string that uniquely identifies the formula coefficients and data inputs used. Stable for as long as the methodology is unchanged.
When eco is absent
The eco field can be missing when:
- The resolved model’s parameter count is unknown and we’d rather omit the number than fabricate one.
- The request was a non-completion (e.g. a tool-only response with no tokens consumed).
- The upstream returned an error mid-stream that prevented usage accounting.
When it’s missing, the dashboard shows the row with a — for the
carbon column and a note linking to the methodology page.
Streaming
The same metadata arrives at end-of-stream as a lowrouter.summary
chunk; see streaming for the exact
shape.
Privacy
The lowrouter block contains nothing about prompt or response
content — only the resolved route and the metric estimates. It is safe
to log on the client side; we do.