India Energy Atlas

API Reference · Enterprise

Bharat Landed-Cost API

Landed ₹/kWh for any C&I site in India, across grid retail, Green Open Access, group captive, IEX RTM and hybrid RE+BESS. Each response cites the underlying SERC order and a regulatory-risk delta since the last revision.

Status: roadmap · ETA 2026 Q3

This reference is published ahead of implementation so customers can build against a stable contract. Endpoints currently respond with 501 Not Implemented and a roadmap pointer. MVP cuts: Karnataka, Maharashtra, Gujarat, Tamil Nadu, Rajasthan, and Uttar Pradesh HT-industrial. Full 30-state coverage planned by 2026 Q4. Product overview.

Overview

Five endpoints cover the C&I open-access decision. compare is the headline call — five offtake structures on one request. The remaining four expose the building blocks: tariff schedules, open-access charges, full PPA economics, and a regulatory change feed for cache-invalidation on any downstream system.

Authentication

Send API keys in the X-API-Key header. Enterprise tier required. Plans and limits live on energymap.in/pricing.

POST /v1/landed-cost/compare

Compare landed ₹/kWh across grid retail, Green Open Access, group captive, IEX RTM, and hybrid RE+BESS for a single consumer.

bash
curl -X POST https://api.energymap.in/v1/landed-cost/compare \
  -H 'X-API-Key: $KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "state": "RJ",
    "discom": "JVVNL",
    "voltage_class": "HT-5",
    "contract_demand_kva": 2500,
    "load_profile_id": "std_continuous_3shift",
    "modes": ["grid", "goa", "group-captive", "rtm", "hybrid"]
  }'
json
{
  "consumer": { "state": "IN-RJ", "discom": "JVVNL", "voltage_class": "HT-5" },
  "as_of": "2026-05-09",
  "results": [
    {
      "mode": "grid",
      "landed_inr_per_kwh": 9.42,
      "p10": 9.31, "p50": 9.42, "p90": 9.55,
      "components": {
        "energy_charge": 7.10,
        "demand_charge_inr_per_kvah": 1.12,
        "fac": 0.45,
        "electricity_duty": 0.75
      },
      "confidence": 0.95,
      "sources": [
        { "type": "serc_order", "id": "RERC-2025-26-Tariff", "url": "..." }
      ],
      "regulatory_risk_delta_since_last": "+0.18 INR/kWh (FAC revision Q1 2026)"
    }
    /* ... goa, group-captive, rtm, hybrid */
  ]
}

GET /v1/tariffs/{state}/{discom}

Current tariff schedule by voltage class. Pass ?as_of=YYYY-MM-DD to replay the schedule that applied on a given day.

bash
curl 'https://api.energymap.in/v1/tariffs/IN-MH/MSEDCL?voltage_class=HT-1&as_of=2026-04-01' \
  -H 'X-API-Key: $KEY'

GET /v1/open-access/charges/{state}

Wheeling, cross-subsidy surcharge, additional surcharge, scheduling fees, and applicable waivers, with applicable-from and applicable-to dates.

POST /v1/ppa/economics

Full PPA underwriting on a specified contract structure (tariff escalation, banking, curtailment treatment) and a 15-minute load profile. Returns IRR, NPV, capture-rate sensitivities, and a regulatory-risk band.

GET /v1/regulatory-change-feed

Every SERC order, amendment, and rate revision since a timestamp. Use this to invalidate downstream caches when a relevant order drops.

bash
curl 'https://api.energymap.in/v1/regulatory-change-feed?since=2026-04-01T00:00:00Z&state=IN-KA' \
  -H 'X-API-Key: $KEY'

Errors

StatusCodeWhen
400INVALID_LOAD_PROFILELoad profile ID unknown or 15-min granularity not provided.
402TIER_REQUIREDCaller is not on the Enterprise tier.
404TARIFF_NOT_FOUNDNo tariff order found for state/discom/voltage_class at as_of.
409STALE_TARIFFTariff order exists but has been superseded; retry with as_of=null for current.
501NOT_IMPLEMENTEDEndpoint is on the roadmap; see status banner.