Health and release status
Returns service health, release identity, frozen row counts and runtime-gate status.
Multi-state Indian electricity tariff calculation, commercial bill verification, regulatory evidence and fail-closed execution through one authenticated API contract.
Base URL: https://powerexpertindia.com/v1
API version: PEI Verified Tariff API V1.2.0
Controller: PEI Unified Multi-State Controller
Release ID: BR-2026-27-VERIFIED-STRICT-BASE-V1
Every API request requires a dedicated client key. Use one of the following header methods.
export PEI_API_KEY='pei_live_your_key_here'
curl --request GET \
--url 'https://powerexpertindia.com/v1/health' \
--header 'Accept: application/json' \
--header "X-API-Key: ${PEI_API_KEY}"export PEI_API_KEY='pei_live_your_key_here'
curl --request GET \
--url 'https://powerexpertindia.com/v1/states' \
--header 'Accept: application/json' \
--header "Authorization: Bearer ${PEI_API_KEY}"Each key has its own scopes, state allowlist, CORS allowlist and rate-limit profile.
{
"status": "ok",
"api_version": "PEI Verified Tariff API V1.2.0",
"request_id": "req_...",
"data": {},
"meta": {}
}{
"status": "error",
"api_version": "PEI Verified Tariff API V1.2.0",
"request_id": "req_...",
"error": {
"code": "API_KEY_REQUIRED",
"message": "A valid API key is required."
}
}Every response includes an X-Request-ID header and matching request_id field for support and traceability. Money uses integer paise. A corresponding *_rupees two-decimal string may be returned beside a paise field.
Returns service health, release identity, frozen row counts and runtime-gate status.
Returns an explicit fail-closed matrix showing enabled, evidence-only and blocked bill components.
| Parameter | Type | Use | Example | Notes |
|---|---|---|---|---|
state_code |
string | Optional | BR |
Use /states and /capabilities for the current state-specific release, verification and payable status. |
Lists states currently approved for verified-strict public serving. The V1 public state inventory includes Bihar, Maharashtra, Gujarat, Tamil Nadu, Rajasthan, Odisha and Telangana. Availability, verification tier and payable status are state-specific.
Returns verified State-specific tariff categories and subcategories and the calculation inputs required by each category.
| Parameter | Type | Use | Example | Notes |
|---|---|---|---|---|
state_code |
string | Optional | BR |
Integrated state code: BR, MH, GJ, TN, RJ, OD, TS or JH. Use /states and /capabilities as the authoritative discovery contract. |
effective_on |
date | Optional | 2026-04-01 |
Exact YYYY-MM-DD date on or after the release effective date. |
Returns approved schedule rows with integer-paise money fields and public source references.
| Parameter | Type | Use | Example | Notes |
|---|---|---|---|---|
state_code |
string | Optional | BR |
Integrated state code: BR, MH, GJ, TN, RJ, OD, TS or JH. Use /states and /capabilities as the authoritative discovery contract. |
effective_on |
date | Optional | 2026-04-01 |
Exact YYYY-MM-DD date. |
subcategory_code |
string | Optional | BR_DS_II |
Exact Bihar state subcategory code. |
supply_type |
string | Optional | low_tension |
Case-insensitive supply-type filter. |
area_type |
string | Optional | urban |
Case-insensitive area applicability filter. |
Evaluates the verified Bihar domestic entitlement in units only. It does not calculate a rupee subsidy or reduce the base tariff amount.
| Parameter | Type | Use | Example | Notes |
|---|---|---|---|---|
state_code |
string | Optional | BR |
Use BR for this Bihar-only endpoint; other states fail closed or return an explicit not-covered response. |
consumer_class |
string | Optional | domestic |
Only domestic consumers are covered. |
billing_days |
integer | Optional | 30 |
Executable values are 25, 30 and 40 only. Other values fail closed. |
consumption_units |
integer | Optional | 126 |
Whole units. Requires billing_days when supplied. |
Returns verified historical period evidence. It never selects or applies a current FPPAS rate to a bill.
| Parameter | Type | Use | Example | Notes |
|---|---|---|---|---|
state_code |
string | Optional | BR |
Use BR for this Bihar-only endpoint; other states fail closed or return an explicit not-covered response. |
period_month |
YYYY-MM | Optional | 2026-01 |
Exact historical calculation period. |
recovery_month |
YYYY-MM | Optional | 2026-03 |
Exact recovery month when available or derived. |
authority |
string | Optional | SBPDCL |
Accepted values: NBPDCL or SBPDCL. |
Returns approved traceability metadata and schedule-row mappings without exposing raw evidence bodies or server paths.
| Parameter | Type | Use | Example | Notes |
|---|---|---|---|---|
state_code |
string | Optional | BR |
Integrated state code: BR, MH, GJ, TN, RJ, OD, TS or JH. Use /states and /capabilities as the authoritative discovery contract. |
Runs state-aware tariff calculation and bill-verification workflows across released and Verified Shadow scopes. Use /states and /capabilities for the current state-specific contract. Unresolved payable components remain fail-closed.
Use this route before calculation when an integration needs to distinguish production-enabled features from evidence-only or blocked components.
export PEI_API_KEY='pei_live_your_key_here'
curl --request GET \
--url 'https://powerexpertindia.com/v1/capabilities?state_code=BR' \
--header 'Accept: application/json' \
--header "X-API-Key: ${PEI_API_KEY}"{
"base_tariff_calculation": "enabled",
"subsidy_entitlement": "enabled_non_monetary",
"fppas": "historical_evidence_available_current_blocked",
"monetary_subsidy_amount": "blocked",
"current_fppas_numeric_regime": "blocked",
"statutory_levies": "blocked",
"exact_current_net_bill": "blocked"
}Power Expert India uses state- and licensee-specific routing. A state appearing in the API does not automatically mean every bill component is payable-enabled. Unsupported or unverified components remain fail-closed.
GET /v1/states GET /v1/health?state_code=BR GET /v1/health?state_code=MH GET /v1/health?state_code=GJ GET /v1/health?state_code=TN # Then use the canonical state/licensee/category identifiers # returned by /states and /categories. GET /v1/categories?state_code=BR GET /v1/categories?state_code=MH&licensee_code=<canonical_licensee_code> GET /v1/categories?state_code=GJ&licensee_code=<canonical_licensee_code> GET /v1/categories?state_code=TN
This route exposes the verified Bihar domestic 125-unit entitlement contract. The frozen official billing-day examples remain fail-closed: 25 days → 104 units, 30 days → 125 units and 40 days → 167 units. In POST /calculate, supported domestic requests may additionally use the verified monetary subsidy core.
export PEI_API_KEY='pei_live_your_key_here'
curl --request GET \
--url 'https://powerexpertindia.com/v1/subsidy-entitlement?state_code=BR&consumer_class=domestic&billing_days=30&consumption_units=126' \
--header 'Accept: application/json' \
--header "X-API-Key: ${PEI_API_KEY}"{
"billing_days": 30,
"entitlement_units": 125,
"consumption_units": 126,
"subsidised_units": 125,
"chargeable_units": 1,
"contract_application": "official_example_exact_match",
"monetary_calculation_performed": false
}This route provides verified Bihar FPPAS period evidence. Filters may be applied by period month, recovery month or authority. POST /calculate may use only an explicitly approved exact-month FPPAS version whose recovery-month and billing-contract conditions match.
export PEI_API_KEY='pei_live_your_key_here'
curl --request GET \
--url 'https://powerexpertindia.com/v1/fppas-periods?state_code=BR&authority=SBPDCL&period_month=2026-01' \
--header 'Accept: application/json' \
--header "X-API-Key: ${PEI_API_KEY}"{
"available_period_months": [
"2025-08",
"2026-01",
"2026-02",
"2026-03"
],
"current_rate_released": false,
"current_fppas_engine_ready": false,
"historical_evidence_only": true,
"rate_applied_to_bill": false
}One-call Bihar domestic solar workflow for solar companies. The endpoint resolves a caller-declared domestic classification, calculates verified before-solar and after-solar base-tariff costs, evaluates optional approved FPPAS data and returns proposal evidence.
curl -X POST "https://powerexpertindia.com/v1/solar-savings" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"state_code": "BR",
"consumer_type": "domestic",
"domestic_class": "urban",
"connected_load": "2",
"load_unit": "kw",
"existing_monthly_units": 450,
"post_solar_import_units": 150,
"billing_month": "2026-05",
"discom_code": "SBPDCL",
"verification_tier": "verified_strict",
"release_id": "BR-2026-27-VERIFIED-STRICT-BASE-V1"
}'
| Field | Required | Purpose |
|---|---|---|
state_code |
Yes | Currently BR. |
consumer_type |
With domestic_class | Currently domestic. |
domestic_class |
Alternative to subcategory_code | Caller-declared classification: urban, general, rural or lifeline. |
subcategory_code |
Alternative to domestic_class | Existing integrations may send the verified Bihar subcategory directly. |
connected_load |
Category-dependent | Connected load used by the tariff calculation. |
load_unit |
With connected_load | Use kw; input is case-insensitive. |
existing_monthly_units |
Yes | Current monthly grid consumption. |
post_solar_import_units |
Yes | Expected monthly grid import after solar, supplied by the client. |
billing_month |
No | YYYY-MM month used by the verified Bihar FPPAS selector. |
discom_code |
No | NBPDCL or SBPDCL. |
verification_tier |
Yes | Must be verified_strict. |
release_id |
Yes | Must match the active verified Bihar release. |
| domestic_class | Resolved category | Canonical category |
|---|---|---|
urban |
BR_DS_II |
DOMESTIC_URBAN |
general |
BR_DS_III |
DOMESTIC_GENERAL |
rural |
BR_DS_I_RURAL |
DOMESTIC_RURAL |
lifeline |
BR_KUTIR_JYOTI |
DOMESTIC_LIFELINE |
| Object | Meaning |
|---|---|
before_solar |
Verified base-tariff calculation before solar. |
after_solar |
Verified base-tariff calculation using post-solar grid-import units. |
savings |
Monthly and annualized base or total comparison. |
fppas_comparison |
Optional approved FPPAS evaluation for both scenarios. If unavailable, the response explicitly falls back to verified base tariff. |
subsidy_entitlement_comparison |
Non-monetary entitlement evaluation. No monetary subsidy amount is calculated or deducted. |
proposal_evidence |
Machine-verifiable release, calculation and proposal evidence. |
| HTTP | Error code | Reason |
|---|---|---|
| 409 | CATEGORY_CLASSIFICATION_CONFLICT |
domestic_class and subcategory_code identify different tariff categories. |
| 409 | RELEASE_ID_MISMATCH |
The supplied release is not the active release. |
| 422 | INVALID_DOMESTIC_CLASS |
The domestic classification is unsupported. |
| 422 | INPUT_PAIR_REQUIRED |
connected_load and load_unit were not supplied together. |
| 422 |
POST_SOLAR_IMPORT_EXCEEDS_EXISTING_USAGE
|
Post-solar grid import exceeds existing consumption. |
| 404 | NOT_COVERED |
State or consumer type is not onboarded. |
Send Content-Type: application/json. Use category metadata from GET /categories to determine which load or demand fields are required for a subcategory.
| Field | Type | Use | Example | Rules |
|---|---|---|---|---|
state_code |
string | Recommended | BR |
Use the canonical state code returned by /states. Current integrated codes include BR, MH, GJ, TN, RJ, OD, TS and JH. State-specific execution and payable status must be read from /capabilities and the calculation response. |
licensee_code |
string | State-specific | MH_AEML |
Use an explicit canonical licensee where the selected state contract requires or permits it. Maharashtra requires explicit routing. Jharkhand may resolve from verified location/service context or an explicit licensee signal; no silent JBVNL fallback is allowed. |
financial_year |
YYYY-YY | Recommended for MH | 2026-27 |
Current verified Maharashtra public release financial year. |
category_id |
string | Required for MH | MH_MSEDCL_HT_I_INDUSTRY |
Canonical Maharashtra category returned by GET /categories. |
subcategory_code |
string | State-specific | BR_DS_II |
Use where required by the selected state contract. Bihar and Gujarat use canonical category/subcategory identifiers. Jharkhand V1 uses its location/use/supply routing contract and does not inherit the Bihar subcategory requirement. |
district |
string | JH routing | Ranchi |
Jharkhand district/location signal used by the fail-closed licensee resolver. |
city / area |
string | JH routing | Ranchi |
Optional Jharkhand city or service-area signal when needed for routing. |
supply_type |
string | JH state-specific | LT |
Jharkhand supply type such as LT or HT. |
use |
string | JH state-specific | DOMESTIC |
Jharkhand consumer-use signal. |
area_class |
string | JH conditional | RURAL |
Required where the resolved Jharkhand tariff/category needs an area classification. |
consumption |
number | JH calculation | 100 |
Jharkhand metered consumption for VERIFIED_TARIFF_ESTIMATION_V1. |
consumption_unit |
string | JH calculation | kWh |
Unit for the Jharkhand consumption value. |
energy_units |
integer or digit string | Required | 126 |
Non-negative whole units from 0 to 100,000,000. |
consumption_units |
number | Conditional for MH | 1000 |
Use for Maharashtra tariff rows billed on kWh. |
consumption_kvah |
number | Conditional for MH | 10000 |
Use for Maharashtra tariff rows billed on kVAh. No automatic kWh-to-kVAh conversion. |
billing_demand_kva |
decimal | Conditional for MH | 400 |
Billing demand in kVA where required by the verified Maharashtra tariff row. |
billing_demand_kw |
decimal | Conditional for MH | 50 |
Billing demand in kW where required by the verified Maharashtra tariff row. |
billing_date |
date | Conditional for MH | 2026-08-10 |
Use for TPC-D, AEML and BEST where applicable. MSEDCL rejects billing_date and uses timestamp when date/time context is required. |
subtype |
string | Conditional for MSEDCL | GENERAL |
Required for MSEDCL HT I Industry; supported values include GENERAL and SEASONAL. |
timestamp |
ISO-8601 | Conditional for MSEDCL/ToD | 2026-08-13T18:00:00+05:30 |
Required where MSEDCL or ToD needs date/time context. Include timezone offset. |
connected_load |
decimal string | Conditional | 1 |
Required for per-kW, per-HP or applicable per-kVA fixed charges. Gujarat connected-load requirements are category/licensee specific. Maximum three decimal places. |
recorded_demand |
decimal string | Conditional | 11 |
Required where billing-demand rules apply and for applicable HT calculations. |
contract_demand |
decimal string | Conditional | 10 |
Required where billing-demand rules apply and for applicable HT calculations. |
tod_period |
string | Optional | off_peak |
Tariff-dependent Time-of-Day period code. |
rts_voltage_mode |
string | Optional | standard |
Allowed values: standard, above_132kv, below_132kv. |
apply_htss_11kv_surcharge |
boolean | Optional | false |
Must be a JSON boolean, not a string. |
effective_on |
date | Optional | 2026-04-01 |
Exact YYYY-MM-DD date on or after the released effective date. |
billing_days |
integer | Optional | 30 |
Domestic subsidy-entitlement evaluation only. Accepted values: 25, 30 or 40. Base money remains unchanged. |
export PEI_API_KEY='pei_live_your_key_here'
curl --request POST \
--url 'https://powerexpertindia.com/v1/calculate' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header "X-API-Key: ${PEI_API_KEY}" \
--data '{
"state_code": "BR",
"subcategory_code": "BR_DS_II",
"energy_units": 126,
"connected_load": "1",
"billing_days": 30
}'Gujarat requests must use the canonical licensee and tariff category identifiers returned by the discovery endpoints. No automatic licensee fallback is performed.
curl -X POST "https://powerexpertindia.com/v1/calculate" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"state_code": "GJ",
"licensee_code": "GJ_TPL_SURAT",
"subcategory_code": "RGP",
"energy_units": 250,
"connected_load": 3,
"load_unit": "KW",
"billing_days": 30
}'
Jharkhand is live in VERIFIED_TARIFF_ESTIMATION_V1 mode. The calculation route uses location-aware, fail-closed licensee routing. This is a verified tariff/base-bill estimation release, not a final payable-bill claim.
curl -X POST "https://powerexpertindia.com/v1/calculate" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"state_code": "JH",
"district": "Ranchi",
"use": "DOMESTIC",
"supply_type": "LT",
"area_class": "RURAL",
"consumption": 100,
"consumption_unit": "kWh"
}'
Tamil Nadu discovery and health routing are live, but FY 2026-27 payable calculation remains intentionally held until the operational tariff implementation is fully verified.
curl -X POST "https://powerexpertindia.com/v1/calculate" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"state_code": "TN",
"subcategory_code": "LT_IA",
"energy_units": 100,
"connected_load": 1,
"load_unit": "KW",
"billing_date": "2026-08-22"
}'
HTTP 409
{
"status": "error",
"error": {
"code": "TN_FY2026_27_PAYABLE_TARIFF_PENDING",
"message": "Tamil Nadu payable calculation is temporarily unavailable until the FY 2026-27 operational tariff implementation is verified.",
"details": {
"state_code": "TN",
"release_status": "READY_WITH_FY2026_27_PAYABLE_HOLD",
"notice_code": "TN_FY2026_27_OPERATIONAL_TARIFF_PENDING",
"payable_available": false,
"fail_closed": true,
"silent_fy2025_26_fallback": false,
"shadow_payable": false,
"reason": "FY2026_27_OPERATIONAL_TARIFF_CONFIRMATION"
}
}
}
{
"status": "ok",
"api_version": "PEI Verified Tariff API V1.2.0",
"request_id": "req_...",
"data": {
"state_code": "BR",
"subcategory_code": "BR_DS_II",
"calculation_scope": "verified_base_tariff_plus_non_monetary_subsidy_entitlement",
"result": {
"energy_charge_paise": 93492,
"fixed_charge_paise": 8000,
"fixed_charge_basis": "per_kw_or_part_per_month",
"base_total_paise": 101492,
"base_total_paise_rupees": "1014.92",
"currency": "INR",
"integer_paise_only": true
},
"subsidy_entitlement": {
"status": "evaluated_non_monetary",
"billing_days": 30,
"entitlement_units": 125,
"consumption_units": 126,
"subsidised_units": 125,
"chargeable_units": 1,
"monetary_subsidy_amount_paise": null,
"monetary_calculation_performed": false,
"base_tariff_amount_adjusted_for_subsidy": false,
"fppas_included": false
},
"excluded_components": [
"monetary_subsidy_amount",
"fppas_fpppa",
"corrigendum_composition",
"statutory_levies"
]
},
"meta": {
"release_id": "BR-2026-27-VERIFIED-STRICT-BASE-V1",
"controller_version": "PEI Unified Multi-State Controller"
}
}const response = await fetch(
'https://powerexpertindia.com/v1/tariffs?state_code=BR&subcategory_code=BR_DS_II',
{
method: 'GET',
headers: {
'Accept': 'application/json',
'X-API-Key': apiKey
}
}
);
const payload = await response.json();
if (!response.ok) {
throw new Error(`${payload.error.code}: ${payload.error.message}`);
}
console.log(payload.data);<?php
$apiKey = getenv('PEI_API_KEY');
$url = 'https://powerexpertindia.com/v1/categories?state_code=BR';
$curl = curl_init($url);
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Accept: application/json',
'Authorization: Bearer ' . $apiKey,
],
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
]);
$body = curl_exec($curl);
$status = (int) curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($body === false) {
throw new RuntimeException(curl_error($curl));
}
curl_close($curl);
$data = json_decode($body, true, 64, JSON_THROW_ON_ERROR);
if ($status >= 400) {
throw new RuntimeException(
($data['error']['code'] ?? 'API_ERROR') . ': ' .
($data['error']['message'] ?? 'Request failed')
);
}Browser access also requires the page origin to be present in the client key’s CORS allowlist. Server-to-server requests do not send a browser Origin header.
| HTTP | Code | Meaning |
|---|---|---|
| 400 | API_KEY_CONFLICT |
X-API-Key and Bearer headers contain different keys. |
| 400 | INVALID_QUERY_PARAMETER |
A query parameter exceeds its allowed length. |
| 400 | JSON_BODY_REQUIRED |
POST /calculate has no JSON body. |
| 400 | INVALID_JSON |
The request body is malformed JSON. |
| 400 | JSON_OBJECT_REQUIRED |
The JSON body is not an object. |
| 401 | API_KEY_REQUIRED |
No valid API key was supplied. |
| 401 | API_KEY_INVALID |
The supplied API key is malformed, inactive, expired or unknown. |
| 401 | API_KEY_SCHEME_INVALID |
Authorization does not use the Bearer scheme. |
| 401 | API_KEY_QUERY_NOT_ALLOWED |
An API key was placed in the URL query string. |
| 403 | API_SCOPE_DENIED |
The key does not include the route’s required scope. |
| 403 | API_STATE_ACCESS_DENIED |
The key is not allowed to access the requested state. |
| 403 | CORS_ORIGIN_DENIED |
The browser origin is not in the active registry allowlist. |
| 404 | STATE_NOT_RELEASED |
The requested tariff state is not released. |
| 404 | SUBSIDY_ENTITLEMENT_STATE_NOT_SUPPORTED |
The subsidy-entitlement contract is available only for Bihar. |
| 404 | FPPAS_PERIODS_STATE_NOT_SUPPORTED |
The historical FPPAS evidence catalogue is available only for Bihar. |
| 404 | SUBCATEGORY_NOT_FOUND |
The subcategory is not in the verified release. |
| 404 | TARIFF_NOT_EFFECTIVE |
The released tariff was not effective on the requested date. |
| 404 | ROUTE_NOT_FOUND |
The route does not exist. |
| 405 | METHOD_NOT_ALLOWED |
The route was called with an unsupported HTTP method. |
| 409 | AMBIGUOUS_TARIFF_VARIANT |
A tariff variant selector is required. |
| 413 | REQUEST_BODY_TOO_LARGE |
The request body exceeds 65,536 bytes. |
| 415 | UNSUPPORTED_MEDIA_TYPE |
POST /calculate did not use application/json. |
| 422 | REQUIRED_INPUT_MISSING |
A required calculation field is missing. |
| 422 | INVALID_CALCULATION_INPUT |
An integer calculation input is outside its allowed range. |
| 422 | INVALID_DECIMAL_INPUT |
A load or demand value is not a valid non-negative decimal string. |
| 422 | INVALID_BOOLEAN_INPUT |
A boolean input was supplied using the wrong JSON type. |
| 422 | INVALID_TOD_PERIOD |
The requested Time-of-Day period is unavailable. |
| 422 | INVALID_EFFECTIVE_DATE |
effective_on is not an exact YYYY-MM-DD date. |
| 422 | INVALID_INTEGER_QUERY |
A subsidy query value is not a non-negative integer. |
| 422 | INTEGER_QUERY_OUT_OF_RANGE |
A subsidy query integer is outside the supported range. |
| 422 | NON_DOMESTIC_NOT_ELIGIBLE |
The released 125-unit entitlement applies only to domestic consumers. |
| 422 | SUBSIDY_BILLING_DAYS_REQUIRED |
billing_days is required when consumption_units is supplied. |
| 422 | SUBSIDY_PRORATION_RULE_NOT_VERIFIED |
The requested billing-day entitlement is not frozen in the official-example contract. |
| 422 | SUBSIDY_ENTITLEMENT_NOT_APPLICABLE |
billing_days was supplied for a non-domestic calculation. |
| 422 | INVALID_FPPAS_MONTH |
period_month or recovery_month does not use YYYY-MM. |
| 422 | INVALID_FPPAS_AUTHORITY |
authority is not NBPDCL or SBPDCL. |
| 429 | RATE_LIMIT_EXCEEDED |
The per-minute or burst allowance has been reached. |
| 500 | INTERNAL_SERVER_ERROR |
The API request could not be completed. |
| 503 | VERIFIED_RUNTIME_UNAVAILABLE |
Required verified serving evidence is unavailable. |
The launch default is 60 requests per minute per API key, with a 20-request burst allowance within 10 seconds. Limits are registry-driven and may differ by client agreement.
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Configured per-minute limit for the authenticated key. |
X-RateLimit-Remaining | Remaining accepted requests in the active minute window. |
X-RateLimit-Reset | Unix epoch when the oldest active request leaves the minute window. |
Retry-After | Seconds to wait after a 429 response. |
Clients should respect Retry-After and use bounded exponential backoff rather than immediate retry loops.
Current release: BR-2026-27-VERIFIED-STRICT-BASE-V1. Public contract changes require a versioned documentation and OpenAPI update plus complete regression review before monetary or current-regime capabilities are enabled.
Maharashtra provides statewide verified public tariff calculation for MSEDCL, TPC-D, AEML and BEST, with reference data using human-verified tariff rows and traceable evidence. It is not represented as exact utility-bill reproduction.
export PEI_API_KEY='pei_live_your_key_here'
curl --request POST \
--url 'https://powerexpertindia.com/v1/calculate' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header "X-API-Key: ${PEI_API_KEY}" \
--data '{
"state_code": "MH",
"licensee_code": "MH_MSEDCL",
"category_id": "MH_MSEDCL_HT_I_INDUSTRY",
"subtype": "GENERAL",
"financial_year": "2026-27",
"billing_demand_kva": 400,
"consumption_units": 10000,
"timestamp": "2026-08-13T18:00:00+05:30"
}'export PEI_API_KEY='pei_live_your_key_here'
curl --request POST --url 'https://powerexpertindia.com/v1/calculate' --header 'Content-Type: application/json' --header "X-API-Key: ${PEI_API_KEY}" --data '{"state_code":"MH","licensee_code":"MH_TPCD","category_id":"HT_INDUSTRY","financial_year":"2026-27","billing_demand_kva":400,"consumption_kvah":10000,"billing_date":"2026-08-13"}'export PEI_API_KEY='pei_live_your_key_here'
curl --request POST --url 'https://powerexpertindia.com/v1/calculate' --header 'Content-Type: application/json' --header "X-API-Key: ${PEI_API_KEY}" --data '{"state_code":"MH","licensee_code":"MH_AEML","category_id":"HT_INDUSTRY","financial_year":"2026-27","billing_demand_kva":400,"consumption_kvah":10000,"billing_date":"2026-08-13"}'export PEI_API_KEY='pei_live_your_key_here'
curl --request POST --url 'https://powerexpertindia.com/v1/calculate' --header 'Content-Type: application/json' --header "X-API-Key: ${PEI_API_KEY}" --data '{"state_code":"MH","licensee_code":"MH_BEST","category_id":"HT_INDUSTRY","financial_year":"2026-27","billing_demand_kva":400,"consumption_kvah":10000,"billing_date":"2026-08-13"}'
MH_MSEDCL,
MH_TPCD,
MH_AEML,
MH_BEST
Odisha is available through the public
/v1/calculate route in verified shadow mode.
Four licensees are explicitly supported:
OD_TPCODL,
OD_TPNODL,
OD_TPWODL and
OD_TPSODL.
Automatic licensee fallback is disabled.
Use state_code=OD,
subcategory_code=DOMESTIC,
energy_units, an explicit
licensee_code, and a supported load input.
Odisha V1 remains shadow-only and
production_payable=false.
Gross metering is activated only by explicitly supplying
metering_mode=gross_metering.
generation_kwh is required for that mode.
Supplying generation_kwh alone does not activate
gross metering.
The gross-metering route currently requires load in kW. PEI does not guess kVA-to-kW or HP-to-kW conversions. Caller-supplied gross FiT values are not accepted.
The gross-metering mechanism and generation quantity accounting
are verified, but a generic current OERC gross FiT has not yet
been verified for monetary execution. Therefore the response
remains partial_verified,
export rate is null,
export credit is null,
combined settlement is null, and
production_payable=false.
{
"state_code": "OD",
"licensee_code": "OD_TPCODL",
"subcategory_code": "DOMESTIC",
"energy_units": 100,
"connected_load": 1,
"load_unit": "kw",
"metering_mode": "gross_metering",
"generation_kwh": 40
}
Odisha SDK examples:
JavaScript
·
Python.
Both examples use the frozen Odisha request fields
subcategory_code=DOMESTIC,
energy_units and explicit
licensee_code.