Methodology

How we calculate your carbon footprint.

Our footprint reports the full lifecycle of your AI usage, converged with the Watershed corporate AI emissions framework. We keep our four-way token engine as the innermost layer, then widen the accounting boundary around it in two steps. This page documents the math, the sources, and the uncertainty behind every CO₂ number on your dashboard.

Active factor version: v1.2

Aligning with Watershed: the three layers

Earlier versions reported only active GPU silicon. Watershed's corporate methodology counts the whole facility and the hardware lifecycle, so their number is larger. Rather than replace our engine with a flat blended factor, v1.2 reports three distinct, inspectable layers — you can see exactly where each gram comes from, and the innermost layer is still our own measured execution energy.

1

Our engine

Active execution

Per-token joules from the four-way token split (prefill, decode, cache creation, cache read), through PUE and grid intensity.

2

GHG Scope 2

Facility operational

Active energy scaled by host overhead (×1.18) and cluster utilization (÷0.3) — the server and idle-fleet cost of serving your request.

3

GHG Scope 3

Full lifecycle

Operational plus embodied hardware (0.02 kg/MTok) and amortized model training (0.008 kg/MTok), carried as its own line — never blended in silently.

Your dashboard headline is Layer 3, the full lifecycle footprint. Layers 1 and 2 are persisted alongside it so any number can be inspected down to the active silicon.

The calculation chain

Per request, we split tokens into categories, compute their active energy, then widen to operational and lifecycle. Cached input tokens are near-zero cost because the provider skips the KV-cache rebuild.

  1. 1

    Categorize tokens

    Split each event into uncached_input, cached_input, cache_creation, and output. Anthropic and OpenAI report these separately; OpenRouter doesn't break out cached, so all input is treated as uncached (conservative default).

  2. 2

    Layer 1 — active energy → CO₂

    Active energy (J) = uncached × prefill_J + cache_creation × prefill_J + cached × cached_J + output × decode_J, then layer1_kg = J ÷ 3,600,000 × PUE × grid. Prefill and decode are separate because decode is autoregressive and prefill is parallelizable.

  3. 3

    Layer 2 — facility operational (Scope 2)

    layer2_kg = active_kWh × 1.18 ÷ 0.3 × PUE × grid. Host overhead accounts for the whole server beyond the accelerator; dividing by cluster utilization allocates the idle fleet capacity that has to exist to serve you.

  4. 4

    Layer 3 — full lifecycle (Scope 3)

    layer3_kg = layer2_kg + (embodied + training) × tokens ÷ 1e6 with embodied = 0.02 and training = 0.008 kg per million tokens. Training is carried as its own component so it is always visible, never folded invisibly into the operational number.

  5. 5

    Uncertainty — IPCC Tier 1 RSS

    Combined uncertainty is the root-sum-of-squares of activity-data and emission-factor uncertainty: √(20² + 20²) ≈ 28.28%. Bounds are layer3 × (1 ± 0.2828). These bands are real and material — energy-per-token varies with hardware generation, batch size, and inference framework.

Per-tier active factors (v1.2)

Each model is matched to a tier by pattern. Active energy comes from published GPU power draw for representative deployments; reasoning tiers get a higher decode coefficient because extended-thinking chains amplify output-side compute. PUE and grid intensity vary by provider fleet.

TierPrefill (J/tok)Decode (J/tok)Cached (J/tok)PUEGrid (kg/kWh)
Small / Distilled
small
0.1000.2000.01001.200.420
Medium / Flagship
medium
0.3000.5000.03001.200.420
Large / Frontier
large
0.5000.9000.05001.200.420
Reasoning (extended thinking)
reasoning
0.5001.8000.05001.200.420
Gemini Flash
gemini_flash
0.0800.5000.00801.090.345
Gemini Pro (reasoning)
gemini_pro_reasoning
0.3502.5000.03501.090.345
Gemma (open weights)
gemma_open
0.0400.1600.00401.090.345
Google embeddings
google_embedding
0.0040.0000.00041.090.345

Host power

×1.18

Server overhead beyond the accelerator

Cluster util.

÷0.3

Idle-fleet allocation

Embodied

0.02 kg/MTok

Hardware manufacturing

Training

0.008 kg/MTok

Amortized pre-training

Model → tier mapping

We match each model name against these glob patterns at calculation time. Unknown models fall back to medium as a conservative default. If a model you use isn't covered, let us know and we'll add it.

Small / Distilled

gpt-4o-mini*gpt-3.5-turbo*gpt-5-nano*claude-haiku*claude-3-haiku*text-embedding-3-small*

Medium / Flagship

gpt-4o*gpt-5-mini*claude-3-5-sonnet*claude-sonnet*text-embedding-3-large*

Large / Frontier

gpt-4-turbo*gpt-4*gpt-5*claude-3-opus*claude-opus*

Reasoning (extended thinking)

o1*o3*o4*claude-3-7-sonnet*

Gemini Flash

gemini-3.5-flash*gemini-3-flash*gemini-2.5-flash*gemini-2.5-flash-lite*

Gemini Pro (reasoning)

gemini-3.1-pro*gemini-2.5-pro*

Gemma (open weights)

gemma-4-*gemma-3-*gemma-2-*codegemma*

Google embeddings

gemini-embedding-2*gemini-embedding-001text-embedding-005text-embedding-004

Worked example

One million tokens on the medium tier (GPT-4o class): 750k uncached input, 250k output, no caching. PUE 1.20, grid 0.42 kg/kWh.

Active energy (J)
750,000 × 0.30 + 250,000 × 0.50
= 225,000 + 125,000 = 350,000 J
Layer 1 — active (kg)
350,000 ÷ 3,600,000 × 1.20 × 0.42
≈ 0.049 kg
Layer 2 — operational (kg)
0.09722 × 1.18 ÷ 0.30 × 1.20 × 0.42
≈ 0.1927 kg
Layer 3 — lifecycle (kg)
0.1927 + 0.020 embodied + 0.008 training
≈ 0.2207 kg
Range (±28.28%)
0.2207 × (1 ± 0.2828)
= 0.1583 to 0.2832 kg

The headline your dashboard shows for this workload is the Layer 3 figure, ~0.22 kg CO₂ per million tokens, with the active and operational layers inspectable underneath it.

Why receipts are immutable

Every calculation is pinned to the factor version it was computed under. When a billing period closes, that version is snapshotted onto the receipt and the audit-pack manifest. If the methodology advances later, historical receipts keep reflecting the math applied at calculation time — an auditor can verify any past receipt against the version it was signed under.

References

The layered boundary, factor values, and uncertainty approach draw on the Watershed framework, the GHG Protocol, IPCC guidance, and peer-reviewed research.

Honest caveats

  • These are model-tier estimates, not direct GPU meter readings. The ±28.28% combined uncertainty band is real and material.
  • Embodied hardware and training are lifecycle estimates. We carry a conservative training default (0.008 kg/MTok) and show it as its own line rather than blending it into the operational number.
  • Grid intensity is a fleet-level average per provider. Workloads served from renewable-heavy regions likely emit less; coal-heavy regions emit more. Region-specific intensity is a planned refinement.
  • Provider Usage APIs report with a 24-48h delay. Late-arriving telemetry is reconciled by a daily T+24h cron, so receipts close with the full data.