Developer API · Tariffs
Query one jurisdiction, utility, category and schedule at a time. Every response is authenticated, metered, bounded and sourced to the effective regulator order.
No public dataset download
The national tariff corpus is not published as CSV, PDF or raw JSON. The public /tariffs page is for human review; integrations must use this API. A determined user can always record values that are visibly rendered, but there is no official unmetered bulk-export surface.
Send your key in X-API-Key. Tariff endpoints inherit the Developer API's hashed-key authentication, per-minute and per-day quotas, rolling export controls, request audit log, plan headers, and response watermark. Raw keys are shown once and are never stored.
| Control | Behaviour |
|---|---|
| Entitlement | Institutional, Starter, Growth and Enterprise keys |
| Scope | One state per request; one utility/category/schedule for rate data |
| Rate limits | Plan-specific; returned in X-RateLimit-* headers |
| Audit | Key id, endpoint, status, latency, row count and request metadata |
| Caching | Never expose API keys in browser code; call from your server |
Keep the API key server-side
Do not put a tariff key in NEXT_PUBLIC_*, a client component, mobile bundle or source-controlled configuration. Proxy requests through your own backend and rotate a key immediately if it appears in browser developer tools.
/developer/v1/tariff/cataloguestarter+Discover utilities and exact regulator schedule codes inside one state. Omitting utility returns metadata only; it never returns a national rate dump.
statestringRequiredutilitystringrate_classstringcurl --get 'https://api.energymap.in/developer/v1/tariff/catalogue' --header 'X-API-Key: iea_live_…' --data-urlencode 'state=maharashtra' --data-urlencode 'utility=msedcl'/developer/v1/tariff/currentstarter+Resolve the verified marginal energy rate and the ToD/ToU band at an IST instant. Ambiguous utilities and schedules fail closed with their valid choices.
statestringRequiredutilitystringrate_classstringdefault: residentialschedule_codestringatISO-8601monthly_kwhnumbercontract_demand_kwnumbercontract_demand_kvanumbermeter_typesmart | tod | othercurl --get 'https://api.energymap.in/developer/v1/tariff/current' \
--header 'X-API-Key: iea_live_…' \
--data-urlencode 'state=andhra-pradesh' \
--data-urlencode 'utility=apcpdcl' \
--data-urlencode 'rate_class=industrial' \
--data-urlencode 'schedule_code=HT-I-A' \
--data-urlencode 'contract_demand_kva=500' \
--data-urlencode 'meter_type=tod'/developer/v1/tariff/estimatestarter+Calculate a base residential estimate only when the reviewed source explicitly marks the schedule bill-ready and every required unit and slab bound is exact.
curl 'https://api.energymap.in/developer/v1/tariff/estimate' \
--request POST \
--header 'X-API-Key: iea_live_…' \
--header 'Content-Type: application/json' \
--data '{
"state": "andhra-pradesh",
"utility": "apcpdcl",
"rate_class": "residential",
"schedule_code": "LT-I-A",
"monthly_kwh": 250,
"connected_load_kw": 3
}'estimate_not_supported instead of a plausible but incomplete number.Rate responses preserve the dimensions needed to audit a number:
Rates are not state averages
A tariff belongs to a utility, consumer category and regulator schedule. Never label one schedule as “the electricity price” for an entire state. Preserve the response's query echo and source object in downstream records.
| Status | Code | Meaning |
|---|---|---|
| 401 | invalid_api_key | Key missing, revoked or invalid |
| 403 | upgrade_required | Key is valid but lacks Tariff API entitlement |
| 404 | state_not_found / utility_not_found | Requested jurisdiction is not resolved |
| 422 | utility_required / schedule_required | Request is ambiguous; use the returned choices |
| 422 | estimate_not_supported | The schedule cannot be calculated without inventing a billing rule |
| 429 | quota_exceeded | Per-minute, daily or rolling export allowance reached |