API Reference · Enterprise · Carbon accounting
Time-Block Carbon & 24/7 Clean Power API
15-minute, state-level grid carbon intensity for India, with strict separation of average (Scope 2) and marginal (operational) signals — and a 24/7 hourly-matching engine that consumes both correctly.
Status: beta (intensity) · roadmap (24/7 matching) · ETA 2026 Q3 → Q4
Average / location-based intensity is in beta and backed by /api/intelligence/carbon-intensity-mix. Marginal signal and the 24/7 matching engine are on the roadmap. Product overview · IDCR 2026 for the data-centre 24/7 thesis.
Overview
Five endpoints split cleanly into two paths — disclosure (Scope 2) and operations (load shift, dispatch). The schema enforces the split.
Marginal vs average — non-negotiable
The schema enforces the split
Every carbon value carries an explicit signal_type: "average" | "marginal" discriminator. Clients consuming a marginal value as a Scope 2 number are rejected at the API layer. Average is for disclosure; marginal is for dispatch. Mixing them is the most common source of greenwashing exposure under BRSR audit and CBAM verification.
Authentication
X-API-Key header, Enterprise tier. See energymap.in/pricing.
GET /v1/carbon-intensity/latest/{state}
curl https://api.energymap.in/v1/carbon-intensity/latest/IN-MH \
-H 'X-API-Key: $KEY'{
"state": "IN-MH",
"block_start_ist": "2026-05-09T11:30:00+05:30",
"average": { "signal_type": "average", "kg_co2e_per_mwh": 712 },
"marginal": { "signal_type": "marginal", "kg_co2e_per_mwh": 982 },
"snapshot_id": "rldc-mh-2026-05-09-1130",
"sources": ["RLDC/WRLDC", "NLDC", "IEX", "CEA"]
}GET /v1/carbon-intensity/history
Historical 15-min series. Pass signal=average or signal=marginal explicitly.
POST /v1/scope2/location-based
Send a 15-min load profile, receive a BRSR-compliant Scope 2 number with a full audit trail. Marginal signal is unavailable on this endpoint by contract.
POST /v1/clean-power/hourly-match
Send a 15-min load profile and a contracted RE generation profile, receive 24/7 match %, an unmatched-block ledger with carbon impact per block, and recommended load-shift windows.
POST /v1/load-shift/emissions-impact
Δ-emissions in kg CO₂e for a proposed shift. Uses the marginal signal — for dispatch, not disclosure.
Restatement protocol
Any past block can be restated when its underlying RLDC schedule is corrected. Each restated value carries a restated_from block with the prior value, the restatement timestamp, and the reason. Downstream Scope 2 numbers compounded over restated blocks are also restated transitively.
| Field | Type | Notes |
|---|---|---|
| signal_type | enum | average | marginal — required on every value |
| snapshot_id | string | Replay handle — fetch the underlying grid-mix snapshot |
| restated_from | object? | Present only on restated values |
| sources | array<string> | RLDC, NLDC, IEX, CEA — with estimation flags |
