LowRouter

Per-request metadata

Every successful response from the gateway carries a top-level lowrouter field:

JSON
{
  "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:

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’s total_tokens.
  • carbon_g — total CO₂e estimated for the request, in grams. energy_wh × grid_intensity_for(provider, region) / 1000.
  • carbon_per_1k_tokens_gcarbon_g normalised per 1K total tokens. Comparable across requests of different sizes.
  • accuracy — confidence band: accurate, medium, or gross. 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.