API reference

Every endpoint is a GET returning JSON. This page documents what the API actually does; every example response below was produced by the API's own code when this site was built.

29,184 stations and 39,640 chargers from EV Public Charging Stations Data till 26th October 2025.

Data: Bureau of Energy Efficiency (BEE), Ministry of Power, Government of India — "EV Public Charging Stations Data till 26th October 2025". Republished with attribution; not an official BEE service.

Conventions

Behaviour shared by every endpoint.

Base URL

https://ev-charging-stations-api.vercel.app

Authentication

None. No keys, headers or sign-up.

CORS

Access-Control-Allow-Origin: *

Rate limit

100 requests per 15 minutes per client address. A 429 carries Retry-After in seconds.

Caching

Successful responses and 404s are cacheable for an hour (s-maxage=3600); errors are no-store.

Attribution

Every success response carries meta.attribution and meta.source. Keep the attribution when you show this data.

Nothing is silently ignored: an unknown parameter, a repeated parameter or a malformed number is a 400, and an unknown value for an enum-like filter is a 404 that lists the valid values.

Power and vehicles

How the filters answer “can my vehicle charge here, and how fast?”

  • BEE lists one row per charger. A charger has one or more guns, and a vehicle draws the gun's rating, not the charger total: a Bharat AC-001 charger is 10 kW but each gun gives 3.3 kW. min_power_kw and max_power_kw use gun power.
  • Which vehicles a standard serves comes from the Ministry of Power charger table: CCS2 and CHAdeMO serve cars; Type 2 AC, Bharat AC-001 and Bharat DC-001 serve cars and two/three-wheelers; light-EV (LEV) points serve two/three-wheelers. 14,788 stations serve only two/three-wheelers.
  • connector, current, vehicle and min_power_kw are checked against one gun at a time: a station matches only if a single gun meets all of them.

GET /v1/stations/near

Stations within a radius of a point, nearest first.

ParameterTypeDefaultNotes
lat*number—Latitude, -90 to 90. Plain decimal only.
lng*number—Longitude, -180 to 180. Plain decimal only.
radiusnumber10Kilometres, 0.1 to 100.
statestring—State or union territory: name, 2-letter code (KA) or ISO code (IN-KA).
districtstring—District name as published, case- and punctuation-insensitive.
citystring—City or locality. Former names such as Bangalore or Gurgaon also match. A name shared by several states returns all of them; add state to narrow.
operatorstring—Charge point operator, exact name (case-insensitive). See /v1/operators.
ownershipgovt | private—Government or private operator.
connectorstring—Charging standard: CCS2, CHADEMO, TYPE2_AC, BHARAT_AC001, BHARAT_DC001, LEV_AC or LEV_DC. Common spellings such as CCS-2 or Type 2 also match.
vehiclecar | two_three_wheeler—Stations with a gun this vehicle class can use, per the Ministry of Power charger table.
currentac | dc—AC or DC charging.
min_power_kwnumber—Minimum power of one gun, in kW (0 to 1000). This is what one vehicle receives, not the charger total.
pageinteger11-based page number.
limitinteger25Results per page, 1 to 100.

Stations with suspect coordinates are never returned here. Filters apply before sorting and paging, so total_found counts every match inside the radius. Example: the nearest station where a car can draw at least 50 kW DC, from central Bengaluru.

Request
curl -s "https://ev-charging-stations-api.vercel.app/v1/stations/near?lat=12.9716&lng=77.5946&vehicle=car&current=dc&min_power_kw=50&limit=1"
Response · 200 · generated from the API at build time
{
  "success": true,
  "data": [
    {
      "id": "evs_ef45e67bd1",
      "operator": "Reliance BP",
      "ownership": "private",
      "state": "Karnataka",
      "state_code": "KA",
      "district": "Bengaluru Urban",
      "city": "Bengaluru",
      "address": "Opposite Mallya Hospital/ Kanteerava Stadium, Off Richmond Road Bangalore - 560027",
      "latitude": 12.96762,
      "longitude": 77.59391,
      "location_quality": "ok",
      "mixed_admin": false,
      "chargers": [
        {
          "type_raw": "CCS-II",
          "standards": [
            "CCS2"
          ],
          "lev_variant": null,
          "charger_kw": 60,
          "connectors_per_charger": 1,
          "guns": [
            {
              "standard": "CCS2",
              "kw": 60
            }
          ],
          "count": 2
        }
      ],
      "total_chargers": 2,
      "total_connectors": 2,
      "max_power_kw": 60,
      "max_kw_by_standard": {
        "CCS2": 60
      },
      "standards": [
        "CCS2"
      ],
      "currents": [
        "DC"
      ],
      "vehicle_classes": [
        "car"
      ],
      "distance_km": 0.45
    }
  ],
  "meta": {
    "center": {
      "lat": 12.9716,
      "lng": 77.5946
    },
    "radius_km": 10,
    "total_found": 10,
    "page": 1,
    "limit": 1,
    "count": 1,
    "total_pages": 10,
    "filters_applied": {
      "current": "dc",
      "vehicle": "car",
      "min_power_kw": 50
    },
    "source": {
      "name": "EV Public Charging Stations Data till 26th October 2025",
      "publisher": "Bureau of Energy Efficiency (BEE), Ministry of Power, Government of India",
      "url": "http://beeindia.gov.in/WriteReadData/RTF1984/EV_PCS_Data_29277.pdf",
      "snapshot_label": "till 26th October 2025"
    },
    "attribution": "Data: Bureau of Energy Efficiency (BEE), Ministry of Power, Government of India — \"EV Public Charging Stations Data till 26th October 2025\". Republished with attribution; not an official BEE service."
  }
}

GET /v1/stations

The whole directory, filtered and paged.

ParameterTypeDefaultNotes
statestring—State or union territory: name, 2-letter code (KA) or ISO code (IN-KA).
districtstring—District name as published, case- and punctuation-insensitive.
citystring—City or locality. Former names such as Bangalore or Gurgaon also match. A name shared by several states returns all of them; add state to narrow.
operatorstring—Charge point operator, exact name (case-insensitive). See /v1/operators.
ownershipgovt | private—Government or private operator.
connectorstring—Charging standard: CCS2, CHADEMO, TYPE2_AC, BHARAT_AC001, BHARAT_DC001, LEV_AC or LEV_DC. Common spellings such as CCS-2 or Type 2 also match.
vehiclecar | two_three_wheeler—Stations with a gun this vehicle class can use, per the Ministry of Power charger table.
currentac | dc—AC or DC charging.
min_power_kwnumber—Minimum power of one gun, in kW (0 to 1000). This is what one vehicle receives, not the charger total.
location_qualityok | suspect | anyanyFilter on the coordinate check. suspect marks stations whose published coordinates are impossible (for example latitude equal to longitude).
pageinteger11-based page number.
limitinteger25Results per page, 1 to 100.
Request
curl -s "https://ev-charging-stations-api.vercel.app/v1/stations?state=KA&connector=CCS2&min_power_kw=50&limit=1"
Response · 200 · generated from the API at build time
{
  "success": true,
  "data": [
    {
      "id": "evs_8237c510bf",
      "operator": "BPCL",
      "ownership": "govt",
      "state": "Karnataka",
      "state_code": "KA",
      "district": "Bengaluru Rural",
      "city": "ABICHIKANAHALLI, BANGALORE",
      "address": "NO. 37/1/25, ABICHIKKANAHALLI, KASABA HOBLI, , City=ABICHIKANAHALLI, BANGALORE, District=BANGALORE-RUR, State=Karnataka",
      "latitude": 13.282155,
      "longitude": 77.722215,
      "location_quality": "ok",
      "mixed_admin": false,
      "chargers": [
        {
          "type_raw": "CCS",
          "standards": [
            "CCS2"
          ],
          "lev_variant": null,
          "charger_kw": 120,
          "connectors_per_charger": 2,
          "guns": [
            {
              "standard": "CCS2",
              "kw": 120
            },
            {
              "standard": "CCS2",
              "kw": 120
            }
          ],
          "count": 1
        }
      ],
      "total_chargers": 1,
      "total_connectors": 2,
      "max_power_kw": 120,
      "max_kw_by_standard": {
        "CCS2": 120
      },
      "standards": [
        "CCS2"
      ],
      "currents": [
        "DC"
      ],
      "vehicle_classes": [
        "car"
      ]
    }
  ],
  "meta": {
    "total": 281,
    "page": 1,
    "limit": 1,
    "count": 1,
    "total_pages": 281,
    "filters_applied": {
      "state": "Karnataka",
      "connector": "CCS2",
      "min_power_kw": 50
    },
    "source": {
      "name": "EV Public Charging Stations Data till 26th October 2025",
      "publisher": "Bureau of Energy Efficiency (BEE), Ministry of Power, Government of India",
      "url": "http://beeindia.gov.in/WriteReadData/RTF1984/EV_PCS_Data_29277.pdf",
      "snapshot_label": "till 26th October 2025"
    },
    "attribution": "Data: Bureau of Energy Efficiency (BEE), Ministry of Power, Government of India — \"EV Public Charging Stations Data till 26th October 2025\". Republished with attribution; not an official BEE service."
  }
}

GET /v1/stations/{id}

One station, with the PDF pages it was read from.

Ids look like evs_1a2b3c4d5e and stay the same when BEE publishes a new list, as long as the operator and coordinates do not change. Anything else is a 400 INVALID_STATION_ID.

Request
curl -s "https://ev-charging-stations-api.vercel.app/v1/stations/evs_ef45e67bd1"
Response · 200 · generated from the API at build time
{
  "success": true,
  "data": {
    "id": "evs_ef45e67bd1",
    "operator": "Reliance BP",
    "ownership": "private",
    "state": "Karnataka",
    "state_code": "KA",
    "district": "Bengaluru Urban",
    "city": "Bengaluru",
    "address": "Opposite Mallya Hospital/ Kanteerava Stadium, Off Richmond Road Bangalore - 560027",
    "latitude": 12.96762,
    "longitude": 77.59391,
    "location_quality": "ok",
    "mixed_admin": false,
    "chargers": [
      {
        "type_raw": "CCS-II",
        "standards": [
          "CCS2"
        ],
        "lev_variant": null,
        "charger_kw": 60,
        "connectors_per_charger": 1,
        "guns": [
          {
            "standard": "CCS2",
            "kw": 60
          }
        ],
        "count": 2
      }
    ],
    "total_chargers": 2,
    "total_connectors": 2,
    "max_power_kw": 60,
    "max_kw_by_standard": {
      "CCS2": 60
    },
    "standards": [
      "CCS2"
    ],
    "currents": [
      "DC"
    ],
    "vehicle_classes": [
      "car"
    ],
    "source": {
      "page_first": 385,
      "page_last": 385,
      "row_count": 2
    }
  },
  "meta": {
    "source": {
      "name": "EV Public Charging Stations Data till 26th October 2025",
      "publisher": "Bureau of Energy Efficiency (BEE), Ministry of Power, Government of India",
      "url": "http://beeindia.gov.in/WriteReadData/RTF1984/EV_PCS_Data_29277.pdf",
      "snapshot_label": "till 26th October 2025"
    },
    "attribution": "Data: Bureau of Energy Efficiency (BEE), Ministry of Power, Government of India — \"EV Public Charging Stations Data till 26th October 2025\". Republished with attribution; not an official BEE service."
  }
}

GET /v1/cities

Valid city values, with district and station count.

ParameterTypeDefaultNotes
statestring—Limit the list to one state or union territory.
Request
curl -s "https://ev-charging-stations-api.vercel.app/v1/cities?state=GA"
Response · 200 · generated from the API at build time
{
  "success": true,
  "data": [
    {
      "city": "BICHOLIM",
      "district": "NORTH GOA",
      "state": "Goa",
      "state_code": "GA",
      "stations": 2
    },
    {
      "city": "BORIM",
      "district": "NORTH GOA",
      "state": "Goa",
      "state_code": "GA",
      "stations": 2
    },
    {
      "city": "Calangute",
      "district": "North Goa",
      "state": "Goa",
      "state_code": "GA",
      "stations": 2
    }
  ],
  "meta": {
    "count": 33,
    "filters_applied": {
      "state": "Goa"
    },
    "source": {
      "name": "EV Public Charging Stations Data till 26th October 2025",
      "publisher": "Bureau of Energy Efficiency (BEE), Ministry of Power, Government of India",
      "url": "http://beeindia.gov.in/WriteReadData/RTF1984/EV_PCS_Data_29277.pdf",
      "snapshot_label": "till 26th October 2025"
    },
    "attribution": "Data: Bureau of Energy Efficiency (BEE), Ministry of Power, Government of India — \"EV Public Charging Stations Data till 26th October 2025\". Republished with attribution; not an official BEE service."
  }
}

Response shortened to three cities.

Reference endpoints

Every endpoint at a glance.

/v1/stations/near

Stations within a radius of a point, nearest first. Never returns stations with suspect coordinates.

/v1/stations

The full directory with filters and paging.

/v1/stations/{id}

One station, including the PDF pages it came from.

/v1/states

Stations, chargers, DC stations and car fast-DC stations per state and union territory.

/v1/cities

Cities and localities with stations, with their district and station count.

/v1/operators

Charge point operators with ownership and station counts.

/v1/connectors

Charging standards: AC or DC, vehicles served, source, and station counts.

/v1/meta

Source, attribution, snapshot and dataset counts.

/v1

Endpoint index and the active rate limit.

/health

Liveness check.

Station fields

idStable id: evs_ + 10 hex digits, derived from operator and coordinates.
operator, ownershipCharge point operator and govt or private, as published.
state, state_code, district, city, addressLocation as published by BEE; state names and codes follow ISO 3166-2:IN.
latitude, longitudeAs published. Check location_quality before routing a driver there.
location_qualityok, or suspect when the coordinates are impossible (latitude equal to longitude, or outside India).
mixed_admintrue when BEE lists the same station with different district or city spellings.
chargers[]One entry per distinct charger: type_raw (as published), standards, lev_variant, charger_kw (charger total), connectors_per_charger, guns[] and count (identical chargers at the site).
chargers[].guns[]{ standard, kw }: the power one gun delivers to one vehicle.
max_power_kw, max_kw_by_standardHighest single-gun power, overall and per standard.
standards, currents, vehicle_classesEverything the station offers, as sorted lists.
total_chargers, total_connectorsChargers and guns at the site.
distance_kmOnly in /v1/stations/near results. Great-circle distance from the search point, 2 decimals.
sourceOnly in /v1/stations/{id} responses. The PDF pages and row count this station came from.

Known problems in the source and how they are handled are listed in the data notes.

Errors

CodeStatusMeaning
UNKNOWN_PARAMETER400A query parameter this endpoint does not accept. details.allowed lists the accepted ones.
INVALID_PARAMETER400A value is malformed (hex, exponent, Infinity, a suffix), out of range, or given twice.
MISSING_COORDINATES400lat or lng is missing or empty on /v1/stations/near.
INVALID_LATITUDE400lat is not a plain decimal between -90 and 90.
INVALID_LONGITUDE400lng is not a plain decimal between -180 and 180.
INVALID_STATION_ID400The id is not evs_ followed by 10 lowercase hex digits.
UNKNOWN_STATE404No state or union territory matches. details.valid_values lists all 36.
UNKNOWN_DISTRICT404No district matches (within the state, if given). details.hint points at /v1/cities.
UNKNOWN_CITY404No city matches (within the state, if given). details.hint points at /v1/cities.
UNKNOWN_OPERATOR404No operator has this name. details.valid_values lists them.
UNKNOWN_OWNERSHIP404ownership is not govt or private.
UNKNOWN_CONNECTOR404Not a charging standard in the dataset. details.valid_values lists them.
UNKNOWN_VEHICLE404vehicle is not car or two_three_wheeler.
UNKNOWN_CURRENT404current is not ac or dc.
UNKNOWN_LOCATION_QUALITY404location_quality is not ok, suspect or any.
STATION_NOT_FOUND404The id is well formed but no station has it.
ROUTE_NOT_FOUND404The path is not an endpoint. See /v1.
METHOD_NOT_ALLOWED405The API is read-only; only GET, HEAD and OPTIONS are accepted.
RATE_LIMIT_EXCEEDED429Per-client budget used up. Retry-After gives the wait in seconds.
INTERNAL_SERVER_ERROR500Unexpected failure. The response never includes internal details.
Request
curl -s "https://ev-charging-stations-api.vercel.app/v1/stations?min_power=50"
Response · 400 · generated from the API at build time
{
  "success": false,
  "error": {
    "code": "UNKNOWN_PARAMETER",
    "message": "Unknown query parameter 'min_power'.",
    "details": {
      "parameter": "min_power",
      "allowed": [
        "state",
        "district",
        "city",
        "operator",
        "ownership",
        "connector",
        "vehicle",
        "current",
        "min_power_kw",
        "location_quality",
        "page",
        "limit"
      ]
    }
  }
}

Next steps

Try the filters in the playground, or read the guides on route planning and charging standards.