AI Energy Calculator API - Electricity, Water & CO₂ of Any AI Model

Estimate the electricity, water, and carbon footprint of running any AI model with a single API call. The AI Energy Calculator API models the energy of AI inference from the tokens up, then reports an honest P5-P95 range for energy (Wh), water (mL), and CO₂ (gCO₂e) per query, per month, and per year.

Build model-comparison tools, sustainability dashboards, green-AI reporting, or per-request carbon labels. The API covers 45+ models across 9 providers (OpenAI, Anthropic, Google, xAI, DeepSeek, Moonshot, Mistral, and self-hosted open weights), accounts for your region's grid and water intensity, and flags how much to trust each result. When you want to neutralize the footprint, capture the carbon in one more call. Try the free AI Energy Calculator to see it instantly in your browser.


How it works

When you submit a scenario to the API, the following happens:

  1. Token modelling: The input and output token counts for your workload (chat, RAG, coding agent, reasoning, …) set how much text the model generates, because energy scales with generated tokens.
  2. Monte-Carlo sampling: Node power, data-center overhead (PUE), and throughput are each sampled thousands of times, so the result is a distribution, not a single false-precise number.
  3. Water & carbon: A two-term water model (on-site cooling + off-site grid water) and your region's grid intensity turn energy into millilitres of water and grams of CO₂, reported both location-based and market-based.
  4. Confidence: Every result carries a confidence grade (measured, derived, or estimated) and an uncertainty factor, because closed models publish no specs and must be inferred from comparable open ones.

Read the full methodology or the FAQ.


POST/v1/ai_energy/calculate

Calculate AI energy

This endpoint runs one scenario through the energy engine and returns the full footprint (electricity, water, and carbon) as P5 / median / P95 bands across three time bases (per query, per month, per year), plus a breakdown, human-scale equivalents, the resolved assumptions, and a confidence report.

Only model_id and scale are strictly required. Every other field falls back to a documented default (see GET /v1/ai_energy/options for all valid ids and the current defaults).

Required request body attributes

  • Name
    model_id
    Type
    string
    Description

    The model to estimate, e.g. gpt-5.5, claude-fable-5, gemini-3-pro, llama-3.1-405b. Use generic-frontier for a provider-agnostic frontier model. See GET /v1/ai_energy/options for the full list.

  • Name
    scale
    Type
    object
    Description

    How much the model is used per month. mode selects how you express volume: queries (default), tokens, or users.

  • Name
    scale.mode
    Type
    string
    Description

    One of queries, tokens, or users. Determines which of the fields below are read.

  • Name
    scale.queries_per_month
    Type
    number
    Description

    Number of queries per month. Read when mode is queries. Example: 1000000.

  • Name
    scale.input_tokens_per_month
    Type
    number
    Description

    Total input tokens per month. Read when mode is tokens.

  • Name
    scale.output_tokens_per_month
    Type
    number
    Description

    Total output tokens per month. Read when mode is tokens.

  • Name
    scale.users
    Type
    number
    Description

    Number of active users/seats. Read when mode is users (with queries_per_user_per_day).

  • Name
    scale.queries_per_user_per_day
    Type
    number
    Description

    Queries per user per day. Read when mode is users.

Optional request body attributes

  • Name
    region_id
    Type
    string
    Description

    Grid & water region for carbon and water intensity, e.g. us-average, fr, in, eu-average. Defaults to us-average.

  • Name
    workload_id
    Type
    string
    Description

    The task shape, which sets typical token counts, e.g. chat, rag, code-agent, reasoning. Defaults to chat.

  • Name
    regime_id
    Type
    string
    Description

    Serving regime (how aggressively requests are batched), e.g. production-saturated, balanced, single-stream. Defaults to production-saturated.

  • Name
    boundary_id
    Type
    string
    Description

    What to include in the energy boundary: accelerator, node, or comprehensive. Defaults to comprehensive (full serving stack, recommended).

  • Name
    input_tokens
    Type
    number
    Description

    Override the workload's median input token count for this request.

  • Name
    output_tokens
    Type
    number
    Description

    Override the workload's median output token count. Output length is the single biggest driver of per-query energy.

  • Name
    cache_hit_rate
    Type
    number
    Description

    Share of input tokens served from a prompt cache, 0.0-1.0. Higher values reduce prefill energy.

  • Name
    reasoning
    Type
    boolean
    Description

    Set to true to switch a hybrid model into extended-thinking mode (far more output tokens, much higher energy). Defaults to false.

  • Name
    input_modality
    Type
    string
    Description

    text, image, or video. Applies the measured multimodal energy premium. Defaults to text.

  • Name
    batch_size
    Type
    integer
    Description

    Explicit serving batch size. Only meaningful for self-hosted deployments; API consumers do not control their provider's batching.

  • Name
    include_embodied
    Type
    boolean
    Description

    Include embodied (hardware manufacturing) emissions in co2e_total. Defaults to true.

  • Name
    samples
    Type
    integer
    Description

    Monte-Carlo sample count. Higher is smoother but slower. Defaults to 4000.

  • Name
    overrides
    Type
    object
    Description

    Advanced: substitute your own facility/grid figures (pue, wue_onsite_l_kwh, ewif_l_kwh, grid_ci_gco2_kwh, market_ci_gco2_kwh). Any omitted field falls back to the catalog.

Response attributes

  • Name
    per_query
    Type
    object
    Description

    Footprint for a single query. Contains energy (Wh), water_total / water_onsite / water_offsite (mL), and co2e_location_based / co2e_market_based / co2e_embodied / co2e_total (gCO₂e). Each is a band with p5, p50, p95, and mean.

  • Name
    per_month
    Type
    object
    Description

    The same eight quantities scaled to your monthly volume. Energy in kWh, water in L, CO₂ in kg.

  • Name
    per_year
    Type
    object
    Description

    The same quantities scaled to a year (monthly × 12). Energy in kWh, water in L, CO₂ in kg.

  • Name
    breakdown
    Type
    object
    Description

    Where the energy goes, in percent: accelerator_pct, host_cpu_memory_pct, idle_capacity_pct, facility_overhead_pct, plus prefill_pct / decode_pct and cache_savings_pct.

  • Name
    equivalents
    Type
    object
    Description

    Human-scale comparisons keyed by carbon, energy, and water (e.g. tree-years, smartphone charges, showers). Each entry has an id, label, value, and optional basis.

  • Name
    assumptions
    Type
    object
    Description

    Every resolved input echoed back for reproducibility: model, provider, hardware, region, workload, token counts, batch size, PUE, grid and water intensities, queries_per_month, and more.

  • Name
    confidence
    Type
    object
    Description

    How much to trust the numbers: overall (measured | derived | estimated), uncertainty_factor (P95/P5 on monthly energy), plus drivers and caveats arrays explaining why.

  • Name
    warnings
    Type
    array
    Description

    Any load-bearing caveats for this specific scenario (e.g. a closed model whose specs are inferred). Always an array, possibly empty.

  • Name
    sources
    Type
    array
    Description

    The primary sources behind the coefficients used, each with a key and a citation.

  • Name
    units
    Type
    object
    Description

    A map of each field path to its unit (e.g. per_query.energyWh, per_month.co2ekg), so you never have to guess.

  • Name
    data_version
    Type
    string
    Description

    The coefficient dataset version, e.g. 2026.08. Bumped whenever measurements are refreshed.

Request

POST
/v1/ai_energy/calculate
curl --location 'https://api.1clickimpact.com/v1/ai_energy/calculate' \
--header 'Content-Type: application/json' \
--header 'x-api-key: {PRODUCTION API KEY}' \
--data '{
    "model_id": "claude-fable-5",
    "workload_id": "chat",
    "region_id": "us-average",
    "scale": { "mode": "queries", "queries_per_month": 1000000 }
}'

Response

{
  "per_query": {
    "energy":              { "p5": 0.033, "p50": 0.262, "p95": 0.980, "mean": 0.350 },
    "water_total":         { "p5": 0.522, "p50": 1.037, "p95": 2.001, "mean": 1.113 },
    "water_onsite":        { "p5": 0.026, "p50": 0.050, "p95": 0.092, "mean": 0.053 },
    "water_offsite":       { "p5": 0.496, "p50": 0.988, "p95": 1.906, "mean": 1.060 },
    "co2e_location_based": { "p5": 0.059, "p50": 0.117, "p95": 0.226, "mean": 0.126 },
    "co2e_market_based":   { "p5": 0, "p50": 0, "p95": 0, "mean": 0 },
    "co2e_embodied":       { "p5": 0.006, "p50": 0.011, "p95": 0.022, "mean": 0.012 },
    "co2e_total":          { "p5": 0.070, "p50": 0.130, "p95": 0.241, "mean": 0.138 }
  },
  "per_month": {
    "energy":      { "p5": 158.0, "p50": 314.5, "p95": 607.1, "mean": 337.6 },
    "water_total": { "p5": 521.7, "p50": 1037.1, "p95": 2000.8, "mean": 1113.0 },
    "co2e_total":  { "p5": 70.4, "p50": 129.7, "p95": 240.7, "mean": 138.2 }
  },
  "per_year": {
    "energy":      { "p5": 1896, "p50": 3775, "p95": 7285, "mean": 4051 },
    "water_total": { "p5": 6260, "p50": 12446, "p95": 24009, "mean": 13356 },
    "co2e_total":  { "p5": 844, "p50": 1556, "p95": 2888, "mean": 1659 }
  },
  "breakdown": {
    "accelerator_pct": 58, "host_cpu_memory_pct": 24,
    "idle_capacity_pct": 10, "facility_overhead_pct": 8,
    "prefill_pct": 52.68, "decode_pct": 47.32, "cache_savings_pct": 8.91
  },
  "equivalents": {
    "carbon": [{ "id": "tree-years", "label": "tree-years of sequestration", "value": 6.18 }],
    "energy": [{ "id": "phone-charges", "label": "smartphone charges", "value": 25786 }],
    "water":  [{ "id": "showers", "label": "8-minute showers", "value": 17.0 }]
  },
  "assumptions": {
    "model_id": "claude-fable-5", "model_name": "Claude Fable 5",
    "model_confidence": "estimated", "provider_name": "Anthropic",
    "hardware_name": "NVIDIA DGX B200 (8x B200)",
    "region_name": "United States (national average)",
    "workload_name": "General chat assistant",
    "queries_per_month": 1000000, "include_embodied": true, "samples": 4000
  },
  "confidence": {
    "overall": "estimated", "uncertainty_factor": 3.84,
    "drivers": ["This model's specs are undisclosed; its energy scalar is inferred from comparable open models."],
    "caveats": ["Off-site water intensity is the weakest coefficient; treat water as an order-of-magnitude guide."]
  },
  "warnings": [],
  "sources": [
    { "key": "oviedo", "citation": "Oviedo et al., 'Energy Use of AI Inference…', Joule (2026). arXiv:2509.20241" }
  ],
  "units": {
    "per_query.energy": "Wh", "per_query.water": "mL", "per_query.co2e": "g",
    "per_month.energy": "kWh", "per_month.water": "L", "per_month.co2e": "kg"
  },
  "data_version": "2026.08"
}

GET/v1/ai_energy/options

Get options

Returns everything you need to build a request or render a UI: the full catalog of models, providers, hardware, regions, workloads, regimes, and boundaries, plus the current default ids. The embedded coefficient catalog is the single source of truth, so you never have to hard-code an option list.

Response attributes

  • Name
    data_version
    Type
    string
    Description

    The coefficient dataset version, e.g. 2026.08. Compare it to your cached copy to know when to refresh.

  • Name
    schema_version
    Type
    string
    Description

    The catalog schema version, e.g. 1.0.0.

  • Name
    models
    Type
    array
    Description

    Every supported model with its id, display_name, provider, confidence, reasoning_mode, parameter counts, and a logo_url.

  • Name
    models_by_provider
    Type
    object
    Description

    The same models grouped by provider id, convenient for building grouped dropdowns.

  • Name
    providers
    Type
    object
    Description

    Provider metadata (cloud, PUE, water-use effectiveness, default region, whether they disclose per-query figures), keyed by provider id.

  • Name
    hardware
    Type
    object
    Description

    Serving hardware profiles (GPUs per node, node power, idle power), keyed by hardware ref.

  • Name
    regions
    Type
    array
    Description

    Grid & water regions with carbon intensity, water intensity, and water-stress level.

  • Name
    workloads
    Type
    array
    Description

    Task presets with their median input/output token counts and typical cache-hit rate.

  • Name
    regimes
    Type
    array
    Description

    Serving regimes with their energy multiplier and implied batch size.

  • Name
    boundaries
    Type
    array
    Description

    Energy boundaries (accelerator, node, comprehensive) and what each includes.

  • Name
    generative_units
    Type
    array
    Description

    Per-unit energy for generative media (image, video), for advanced multimodal estimates.

  • Name
    defaults
    Type
    object
    Description

    The default ids used when a field is omitted from a calculate request.

Request

GET
/v1/ai_energy/options
curl --location 'https://api.1clickimpact.com/v1/ai_energy/options' \
--header 'x-api-key: {PRODUCTION API KEY}'

Response (truncated)

{
  "data_version": "2026.08",
  "schema_version": "1.0.0",
  "models": [
    {
      "id": "claude-fable-5",
      "display_name": "Claude Fable 5",
      "provider": "anthropic",
      "confidence": "estimated",
      "reasoning_mode": "optional",
      "logo_url": "https://images.1clickimpact.com/ai/anthropic.svg"
    }
  ],
  "providers": {
    "anthropic": { "display_name": "Anthropic", "cloud": "AWS / Google Cloud", "pue": 1.12 }
  },
  "regions": [
    { "id": "us-average", "display_name": "United States (national average)" }
  ],
  "workloads": [
    { "id": "chat", "display_name": "General chat assistant" }
  ],
  "defaults": {
    "model_id": "generic-frontier",
    "workload_id": "chat",
    "regime_id": "production-saturated",
    "boundary_id": "comprehensive",
    "region_id": "us-average",
    "include_embodied": true
  }
}

Option reference

The tables below list the most common ids. Call GET /v1/ai_energy/options for the authoritative, always-current set (including all 45+ models and 30+ regions).

Workloads

idTask
chat-shortShort chat / Q&A
chatGeneral chat assistant (default)
long-chatMulti-turn conversation
ragRAG / document Q&A
summarizationSummarisation
code-completionCode completion
code-agentCoding agent
reasoningReasoning / problem solving
deep-agenticDeep agentic workflow

Serving regimes

idMeaning
production-saturatedLarge-scale production (default)
balancedModerate traffic
low-batchLatency-optimised / low batch
single-streamSingle request, no batching

Energy boundaries

idIncludes
acceleratorAccelerators (GPUs) only
nodeServer node + facility overhead (PUE)
comprehensiveFull serving stack, incl. idle capacity (default, recommended)

Popular regions

idRegionNotes
us-averageUnited States (national average)default
eu-averageEuropean Union (average)
frFranceVery low-carbon grid
deGermany
ukUnited Kingdom
inIndiaHigh-carbon grid
sgSingaporeHigh water stress

Offset the footprint

Once you have a monthly CO₂ estimate, neutralize it in one call with the Capture Carbon API. Wire it into checkout, a cron, or a Zapier zap so every AI request you make is offset in real time.

Offset a monthly estimate

curl --location 'https://api.1clickimpact.com/v1/capture_carbon' \
--header 'Content-Type: application/json' \
--header 'x-api-key: {PRODUCTION API KEY}' \
--data '{ "amount": 130 }'

Methodology

The AI Energy Calculator API builds energy from the tokens up, using the token-throughput model from the Joule (2026) study, then runs a Monte-Carlo over the uncertain coefficients so the answer is an honest range rather than a false-precise number.

  • Electricity: E_query = PUE · P_node[kW] · (tokens_eff / TPS) / 3.6, where tokens_eff accounts for prefill, decode, and prompt caching, and TPS (node throughput) is fitted from public benchmarks.
  • Water: a two-term model, on-site cooling water (E_IT · WUE_onsite) plus off-site grid water (E_total · EWIF(region)).
  • Carbon: reported both location-based (E · grid_intensity(region)) and market-based (E · provider_matched_intensity), with optional embodied emissions.

Closed models publish no specs, so those figures are inferred from comparable open-weight models and flagged estimated with a wider band. The engine replays published measurements on every build, if a coefficient drifts a result outside its measured band, the build fails.

Sources

  • Oviedo et al., "Energy Use of AI Inference," Joule (2026): the token-throughput energy model.
  • Google, "Measuring the environmental impact of AI inference" (2025): the only provider per-prompt disclosure.
  • EPA eGRID & Ember: grid carbon intensity; WRI Aqueduct: regional water stress.
  • Free AI Energy Calculator: try any model instantly in your browser.
  • Full methodology and FAQ.