The partner endpoint for SOMA's AI-inference emission factors. Factor version soma-ai-ef-2026.10-dataset-v3.0.0.
GET https://app.somaai.earth/api/v1/ai-factors returns SOMA's AI-inference emission factors — carbon, water, uncertainty, tier, factor version and sources — for a model id, provider and cloud region. Every figure is a modelled estimate from published benchmark energy, grid intensity and lifecycle terms. Leave out model and it returns the full table instead of one row.
Method: app.somaai.earth/methodology. Dataset: 10.5281/zenodo.20443585 (concept DOI — always the latest version), SOMA factor version soma-ai-ef-2026.10-dataset-v3.0.0 (SOMA's own pinned version, not the dataset's), CC BY 4.0. The concept DOI resolves to the latest dataset version; the earlier version 2 values are record 10.5281/zenodo.22767475. Record status, v3 record: 10.5281/zenodo.23371447.
Send an API key as a bearer token: Authorization: Bearer sk_soma_.... Keys are issued to partners by SOMA and carry the ai_factors scope.
There is no self-serve signup yet. To request a key, write to guillermollopis@somaai.earth.
Query parameters, all optional:
claude-sonnet-4-5 or openai/gpt-4o. Omit it to get the full table (see below) instead of one row. If SOMA doesn't recognise the id, the row is computed for class C and class_assumed is true. A model id the dataset marks out of scope (embedding, speech, image, video, moderation, rerank) is refused with 422.region is absent the serving region comes from the model and provider: glm-*, mistral-* and deepseek-v4-flash-0731 are priced in eu-west-3 (France), claude-* models and the openai, anthropic, aws, bedrock and azure providers in us-east-1 (US East), and everything else on the global-average grid. In every one of those cases region_assumed is true.region_assumed is true.curl "https://app.somaai.earth/api/v1/ai-factors?model=claude-sonnet-4-5&provider=anthropic®ion=eu-west-1" \ -H "Authorization: Bearer sk_soma_..."
The row above, computed live from the same code this page runs:
{
"model": "claude-sonnet-4-5",
"model_class": "B",
"model_class_label": "Class B — Mid",
"class_assumed": false,
"tier": "2a",
"is_reasoning": false,
"region": "eu-west-1",
"region_label": "EU West - Ireland",
"region_assumed": false,
"kg_co2e_per_million_tokens": {
"central": 0.0245398,
"lower_bound": 0.017650063760268855,
"electricity": 0.020139146751306947,
"embodied": 0.001011396004480956,
"construction": 0.0004550609036594473,
"training": 0.00293425,
"development_separate": 0.027462448095593728
},
"basis": {
"effective_tokens": 302464.52576549666,
"billed_tokens": 1000000,
"w_in": 0.3,
"w_cache": 0.05
},
"high_case": 0.038093,
"class_range": {
"low_pct": -38.595737472666244,
"high_pct": 22.84599086121304
},
"own_model": null,
"grid": {
"id": "IRL",
"source": "Ember yearly electricity data, CO2 intensity 2023, 282.5 g/kWh (lifecycle, IPCC AR5)",
"year": 2023
},
"litres_water_per_million_tokens": 0.10601302108342046,
"uncertainty_pct": 39,
"factor_version": "soma-ai-ef-2026.10-dataset-v3.0.0",
"dataset_doi": "10.5281/zenodo.20443585",
"dataset_version": "dataset dated 2026-10-19",
"dataset_model_class": "class_b_mid",
"factor_note": null,
"method_note": "Modelled estimate: benchmark GPU energy × facility overhead × regional grid intensity, plus lifecycle add-ons. Not a measurement of your provider's infrastructure.",
"sources": [
"ML.ENERGY Leaderboard v3 (May 2026)",
"EPA eGRID 2023",
"Ember Yearly Electricity Data 2023",
"Li et al. 2025 (WUE)",
"Reig et al. 2020 (EWIF)",
"Llopis, G. (2026), Accounting for Purchased AI Inference in Corporate GHG Inventories: A Token-Based Method",
"SOMA AI inference emission factors, dataset v3.0.0 (2026-10-19), concept DOI 10.5281/zenodo.20443585; v3 record: 10.5281/zenodo.23371447"
],
"methodology_url": "https://app.somaai.earth/methodology"
}model_class.true when the model id wasn't recognised and class C was assumed.2a (exact token counts).true when the dataset flags the model as a reasoning model by default. The API returns factors for billed tokens, which already include the extra reasoning tokens, so it applies no multiplier. Estimates from message counts apply the Tier 2b uplift, where no public source gives the multiplier and k is an author assumption.global-average).region.true when no region was given (the default for the model and provider was used) or the region given wasn't recognised (the global-average grid was used); false when the region you passed was recognised.central, and the four terms electricity, embodied (server hardware), construction (data-centre construction) and training (amortised), which sum to central only to the dataset's published precision: for a model class central and high_case are the dataset's published cells, and the terms are calculated from the same constants. lower_bound is the B200 value at the same basis (a hardware sensitivity, not a bound; for class C it sits above the central). development_separate is model development, reported beside the total and never added to it, or null.billed_tokens (the million), effective_tokens (billed tokens weighted by w_in for uncached input and w_cache for cached input, divided by the benchmark-to-billing factor), and the two weights.null.{ low_pct, high_pct }, the spread of the benchmarked models inside the class around the class value at this grid, as signed percentages; null for a model with its own factor.null.id, source and year.basis gives the effective-token split if you need to convert): on-site cooling plus the water behind the grid electricity (hydro allocated), or null where the dataset has no water factor for the region.null when the class was assumed.null.Without model, data is an array of one row per model class and grid — 738 rows today (3 model classes × 240 grids, then one row per benchmarked model at the global-average grid, 18 models).
ai_factors scope.{ error, modality, model, message }. Factors cover chat and completion models only.Retry-After header.Responses carry Cache-Control: private, max-age=86400. The factor version changes whenever a table changes, and partners are told when it does. Cite the version shown with every figure you display.
Factors are versioned snapshots: a published version never changes, and a new dataset release gets a new version. A company that cites a factor should name the version it used.
soma-ai-ef-2026.10-dataset-v3.0.0.soma-ai-ef-2026.09-lifecycle-v2.soma-ai-ef-2026.09-lifecycle-v1.Any figure you display to your own users must say "carbon data powered by SOMA", linking to app.somaai.earth/methodology.