Nearby EV chargers with connectors, ports, network and distance.
EV Charging Stations finds electric vehicle charging stations within a radius of a point, a ZIP or postal code, or a city, across the US and Canada, sorted by distance. Each station returns its address, coordinates, distance, status, access, network, Level 1, Level 2 and DC fast port counts and connector types. Filter by connector, network, charging level or fast charging only. Paid plans add charging power in kW, pricing, access hours, phone, facility type and open dates.
Try it — live request, no key required
No key required to try it. Get a key to use it in your app.
{
"status": "ok",
"error": null,
"data": {
"count": 16,
"returned": 2,
"searchCenter": {
"latitude": 37.7749,
"longitude": -122.4194,
"source": "coordinates"
},
"radiusKm": 2,
"stations": [
{
"name": "HUDSON PACIFIC 1455 LOBBY 2",
"status": "open",
"access": "public",
"address": {
"street": "1455 Market St",
"city": "San Francisco",
"state": "CA",
"zip": "94103",
"country": "US"
},
"latitude": 37.775747,
"longitude": -122.418214,
"distanceKm": 0.14,
"distanceMiles": 0.09,
"network": "ChargePoint Network",
"ports": {
"level1": 0,
"level2": 0,
"dcFast": 1,
"total": 1
},
"fastCharging": true,
"connectors": [
{
"type": "chademo",
"name": "CHAdeMO",
"level": "dc_fast",
"ports": 1,
"maxPowerKw": 62.5
},
{
"type": "ccs",
"name": "CCS1 (J1772 Combo)",
"level": "dc_fast",
"ports": 1,
"maxPowerKw": 62
}
],
"maxPowerKw": 62.5,
"accessHours": "24 hours daily",
"pricing": null,
"facilityType": null,
"phone": "888-758-4389",
"networkWebsite": "https://www.chargepoint.com",
"openDate": "2022-11-18",
"expectedOpenDate": null,
"lastConfirmed": "2026-11-14"
},
{
"name": "HUDSON PACIFIC 1455 LOBBY 1",
"status": "open",
"access": "public",
"address": {
"street": "1455 Market St",
"city": "San Francisco",
"state": "CA",
"zip": "94103",
"country": "US"
},
"latitude": 37.775745,
"longitude": -122.418191,
"distanceKm": 0.14,
"distanceMiles": 0.09,
"network": "ChargePoint Network",
"ports": {
"level1": 0,
"level2": 0,
"dcFast": 1,
"total": 1
},
"fastCharging": true,
"connectors": [
{
"type": "chademo",
"name": "CHAdeMO",
"level": "dc_fast",
"ports": 1,
"maxPowerKw": 62.5
},
{
"type": "ccs",
"name": "CCS1 (J1772 Combo)",
"level": "dc_fast",
"ports": 1,
"maxPowerKw": 62
}
],
"maxPowerKw": 62.5,
"accessHours": "24 hours daily",
"pricing": null,
"facilityType": null,
"phone": "888-758-4389",
"networkWebsite": "https://www.chargepoint.com",
"openDate": "2022-11-18",
"expectedOpenDate": null,
"lastConfirmed": "2026-11-14"
}
]
}
}
About the EV Charging Stations API
An EV charging station API covering about 107,000 public and private charging locations in the United States and Canada, from the US Department of Energy's Alternative Fuels Data Center station locator. Search a true radius of up to 80 km around coordinates, a ZIP or postal code, or a city and state, and get stations sorted nearest first with the distance in kilometres and miles.
Each station returns its name, street address, latitude and longitude, status (open, planned or temporarily unavailable), public or private access, charging network such as Tesla, ChargePoint, Electrify America or EVgo, and its Level 1, Level 2 and DC fast port counts. Connectors are listed by type (J1772, CCS1, CHAdeMO, NACS/Tesla, NEMA outlets) with their port count and charging level. Filter by connector, network, level, fast charging only, access and status.
Paid plans add each connector's maximum power in kW and the station's top power, the pricing text, access hours, phone number, facility type (hotel, parking garage, car dealer and so on), network website, open date, expected open date of planned stations and the date the station was last confirmed. The data is refreshed daily.
How it works
Give the search centre as lat and lon, a zip (US ZIP or Canadian postal code), or city with state. ZIP and city searches start from the centroid of the stations listed in that place. A US ZIP with no station listed starts from the ZIP's own centroid, and a Canadian postal code with none starts from its forward sortation area (the first three characters); a city with none listed returns 404. The search is a true great-circle radius (radius, default 10 km, at most 80), not a bounding box, and results are sorted nearest first with distanceKm and distanceMiles. count reports every station in the radius that passes the filters and limit (default 20, at most 100) caps stations.
By default only open, public stations are returned; status and access widen that. connector takes one or more of j1772, ccs, chademo, nacs, nema515, nema520, nema1450 and mcs (tesla, j3400 and ccs1 are accepted as aliases), and a station passes when it has any of them. level keeps stations with ports at Level 1, Level 2 or DC fast, fastOnly=true keeps DC fast stations, and network is a substring match on the network name, so network=tesla matches both Tesla and Tesla Destination.
The data is the Alternative Fuels Data Center's electric station list, published through the NLR (formerly NREL) developer API and refreshed daily. Port counts are the station's EVSE counts by level; connectors and their power come from the per-unit charging detail where the station reports it, otherwise from its connector list with ports null. On the Free plan power, pricing, hours, phone, facility type, network website and the dates are null.
What people use it for
- Navigation and Trip Planning
- Find DC fast chargers with the right connector along a route or near a destination.
- EV Driver Apps
- Show the nearest chargers with ports, network, pricing and hours on a map.
- Real Estate and Hospitality
- Show how many chargers are within walking distance of a property, hotel or office.
- Fleet and Site Planning
- Measure charging coverage around depots and candidate sites by level and network.
Ways to call it
One endpoint, many ways in — REST with JSON, XML, YAML and CSV, plus GraphQL and an MCP interface for AI agents.
- JSON
- Default REST response
- XML
- Markup format
- YAML
- Human-readable
- CSV
- Tabular export
- GraphQL
- Query language
- MCP
- For AI agents
Other ways to use EV Charging Stations
Same data, same APIVerve account, same credit balance — one key works on all of them.
Which countries and stations are covered?
What does the Free plan return?
Does it show live charger availability?
How does the ZIP or city search work?
How many credits does a search use?
Request parameters — GET /v1/evchargingstations
Sent in the query string. Premium parameters are accepted on every plan but only take effect on plans that include them. Anything not listed here is dropped rather than passed through.
Optional
| Parameter | Type | Example | Description |
|---|---|---|---|
latOptional | number | 37.7749 | Latitude of the search centre. Use lat and lon, a zip, or a city and state range -90-90 |
lonOptional | number | -122.4194 | Longitude of the search centre range -180-180 |
zipOptional | string | 10001 | US ZIP code or Canadian postal code to search around length 0-10 |
cityOptional | string | Toronto | City to search around, with state length 0-60 |
stateOptional | string | ON | Two-letter US state or Canadian province code, with city length 0-2 |
radiusOptional | number | 10 | Search radius in kilometres, up to 80 default 10 · range 0.1-80 |
connectorOptional | string | ccs | Only stations with one of these connectors, comma-separated: j1772, ccs, chademo, nacs, nema515, nema520, nema1450, mcs length 0-60 |
networkOptional | string | Tesla | Only stations on a network whose name contains this, for example Tesla, ChargePoint or Electrify America length 0-60 |
levelOptional | string | 2 | Only stations with ports at this charging level12dc |
fastOnlyOptional | boolean | true | Only stations with DC fast charging default false |
accessOptional | string | public | Public stations (default), private ones, or allpublicprivatealldefault public |
statusOptional | string | open | Open stations (default), planned, temporarily unavailable, or allopenplannedtemporarily_unavailablealldefault open |
limitOptional | integer | 20 | Maximum number of stations to return, 1-100 default 20 · range 1-100 |
curl "https://api.apiverve.com/v1/evchargingstations?lat=37.7749&lon=-122.4194&zip=10001&city=Toronto&state=ON&radius=2&connector=ccs&network=Tesla&level=2&fastOnly=true&access=public&status=open&limit=20" \
-H "x-api-key: YOUR_API_KEY"Authentication
Send your key in the x-api-key header. That is the only auth step — no token exchange, and no per-endpoint scope to configure.
| Header | When | Value |
|---|---|---|
x-api-keyRequired | Every request | Your API key. Header names are case-insensitive, so X-API-Key is the same header. |
AuthorizationAlternate | Instead of the above | Bearer <key> — for clients that only expose bearer auth. Resolves to the same account and the same billing. |
A 401 means the key is missing, invalid or expired. A 403 means the key is valid but not permitted here — blocked by a key restriction or an IP allow-list. Running out of credits is a 429.
Response — GET /v1/evchargingstations
Every APIVerve endpoint returns the same three top-level keys, so one response handler covers your whole integration: status, error and data. Only data changes shape.
{
"status": "ok",
"error": null,
"data": {
"count": 16,
"returned": 2,
"searchCenter": {
"latitude": 37.7749,
"longitude": -122.4194,
"source": "coordinates"
},
"radiusKm": 2,
"stations": [
{
"name": "HUDSON PACIFIC 1455 LOBBY 2",
"status": "open",
"access": "public",
"address": {
"street": "1455 Market St",
"city": "San Francisco",
"state": "CA",
"zip": "94103",
"country": "US"
},
"latitude": 37.775747,
"longitude": -122.418214,
"distanceKm": 0.14,
"distanceMiles": 0.09,
"network": "ChargePoint Network",
"ports": {
"level1": 0,
"level2": 0,
"dcFast": 1,
"total": 1
},
"fastCharging": true,
"connectors": [
{
"type": "chademo",
"name": "CHAdeMO",
"level": "dc_fast",
"ports": 1,
"maxPowerKw": 62.5
},
{
"type": "ccs",
"name": "CCS1 (J1772 Combo)",
"level": "dc_fast",
"ports": 1,
"maxPowerKw": 62
}
],
"maxPowerKw": 62.5,
"accessHours": "24 hours daily",
"pricing": null,
"facilityType": null,
"phone": "888-758-4389",
"networkWebsite": "https://www.chargepoint.com",
"openDate": "2022-11-18",
"expectedOpenDate": null,
"lastConfirmed": "2026-11-14"
},
{
"name": "HUDSON PACIFIC 1455 LOBBY 1",
"status": "open",
"access": "public",
"address": {
"street": "1455 Market St",
"city": "San Francisco",
"state": "CA",
"zip": "94103",
"country": "US"
},
"latitude": 37.775745,
"longitude": -122.418191,
"distanceKm": 0.14,
"distanceMiles": 0.09,
"network": "ChargePoint Network",
"ports": {
"level1": 0,
"level2": 0,
"dcFast": 1,
"total": 1
},
"fastCharging": true,
"connectors": [
{
"type": "chademo",
"name": "CHAdeMO",
"level": "dc_fast",
"ports": 1,
"maxPowerKw": 62.5
},
{
"type": "ccs",
"name": "CCS1 (J1772 Combo)",
"level": "dc_fast",
"ports": 1,
"maxPowerKw": 62
}
],
"maxPowerKw": 62.5,
"accessHours": "24 hours daily",
"pricing": null,
"facilityType": null,
"phone": "888-758-4389",
"networkWebsite": "https://www.chargepoint.com",
"openDate": "2022-11-18",
"expectedOpenDate": null,
"lastConfirmed": "2026-11-14"
}
]
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
count | number | 16 | Number of stations in the radius that pass the filters |
returned | number | 2 | Number of stations in this response |
searchCenter | object | {...} | The point searched from |
latitude | number | 37.7749 | Latitude of the search centre |
longitude | number | -122.4194 | Longitude of the search centre |
source | string | "coordinates" | coordinates, zip or city |
radiusKm | number | 2 | Search radius in kilometres |
stations | array[2] | Stations nearest first | |
name | string | "HUDSON PACIFIC 1455 LOBBY 2" | Station name |
status | string | "open" | open, planned or temporarily_unavailable |
access | string | "public" | public or private |
address | object | {...} | Street address |
street | string | "1455 Market St" | Street |
city | string | "San Francisco" | City |
state | string | "CA" | State or province code |
zip | string | "94103" | ZIP or postal code |
country | string | "US" | US or CA |
latitude | number | 37.775747 | Latitude |
longitude | number | -122.418214 | Longitude |
distanceKm | number | 0.14 | Distance from the search centre in kilometres |
distanceMiles | number | 0.09 | Distance from the search centre in miles |
network | string | "ChargePoint Network" | Charging network, for example Tesla, ChargePoint Network or Non-Networked |
ports | object | {...} | Charging ports by level |
level1 | number | 0 | Level 1 ports |
level2 | number | 0 | Level 2 ports |
dcFast | number | 1 | DC fast ports |
total | number | 1 | All ports |
fastCharging | boolean | true | Whether the station has DC fast charging |
connectors | array[2] | Connector types at the station | |
type | string | "chademo" | j1772, ccs, chademo, nacs, nema515, nema520, nema1450 or mcs |
name | string | "CHAdeMO" | Connector name |
level | string | "dc_fast" | level1, level2 or dc_fast |
ports | number | 1 | Ports with this connector, when the station reports it |
maxPowerKwPremium | number | 62.5 | Highest power of this connector in kW, when reported |
maxPowerKwPremium | number | 62.5 | Highest charging power at the station in kW, when reported |
accessHoursPremium | string | "24 hours daily" | When the station is open |
pricingPremium | object | null | Pricing as the station reports it |
facilityTypePremium | object | null | Where the station is, for example hotel, pay_garage or car_dealer |
phonePremium | string | "888-758-4389" | Station phone number |
networkWebsitePremium | string | "https://www.chargepoint.com" | The charging network's website |
openDatePremium | string | "2022-11-18" | Date the station opened (YYYY-MM-DD) |
expectedOpenDatePremium | object | null | Expected opening date of a planned station |
lastConfirmedPremium | string | "2026-11-14" | Date the station details were last confirmed |
Response headers
Every response carries your balance, so your own code always knows where it stands without polling anything. All four are exposed to browsers through CORS.
| Header | What it carries |
|---|---|
x-api-remaining-credits | Credits left in the current cycle |
x-api-credits-used | Credits spent in the current cycle |
x-api-max-credits | The allowance for the cycle |
x-api-version | Version of the endpoint that answered |
Errors
Read the HTTP status first, then error for the specific reason. The body names the parameter that has to change.
| Status | Meaning | What to do |
|---|---|---|
400 | Input was rejected | Read error; it names the parameter that has to change. |
401 | Key missing or invalid | Check the header name and the key value. |
403 | Key valid, but not permitted here | A key restriction or an IP allow-list — never a bad key. |
429 | Rate limited, or out of credits | Read error to tell them apart, then back off or top up. |
What a call costs — 1 credits per call
Credits are shared across every APIVerve API — one balance, one key, one bill. Failed requests never count against it, so a rejected input costs nothing.
| Plan | Per month | Credits | EV Charging Stations calls | Per 1,000 calls |
|---|---|---|---|---|
| Free | Free | 200 | 200 | Free |
| Starter | $29.99 | 200,000 | 200,000 | $0.15 |
| Pro | $99.99 | 1,000,000 | 1,000,000 | $0.10 |
| Mega | $299.99 | 4,000,000 | 4,000,000 | $0.07 |
Calls are what the credits buy at this API's rate — spend them here, on any of the other APIs, or across both. Nothing is reserved per endpoint.
Call it from cURL — GET /v1/evchargingstations
No SDK to install — this is a plain HTTPS call to /v1/evchargingstations with your key in the x-api-key header. Swap in a real key and it runs as-is.
curl "https://api.apiverve.com/v1/evchargingstations" \
-H "x-api-key: YOUR_API_KEY"Resources
Call it from Node.js — GET /v1/evchargingstations
No SDK to install — this is a plain HTTPS call to /v1/evchargingstations with your key in the x-api-key header. Swap in a real key and it runs as-is.
const res = await fetch("https://api.apiverve.com/v1/evchargingstations", {
headers: { "x-api-key": "YOUR_API_KEY" },
});
const { data } = await res.json();
console.log(data);Resources
Call it from Python — GET /v1/evchargingstations
No SDK to install — this is a plain HTTPS call to /v1/evchargingstations with your key in the x-api-key header. Swap in a real key and it runs as-is.
import requests
res = requests.get(
"https://api.apiverve.com/v1/evchargingstations",
headers={"x-api-key": "YOUR_API_KEY"},
)
print(res.json()["data"])Resources
Call it from C# / .NET — GET /v1/evchargingstations
No SDK to install — this is a plain HTTPS call to /v1/evchargingstations with your key in the x-api-key header. Swap in a real key and it runs as-is.
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");
var json = await client.GetStringAsync("https://api.apiverve.com/v1/evchargingstations");
Console.WriteLine(json);Resources
Call it from Go — GET /v1/evchargingstations
No SDK to install — this is a plain HTTPS call to /v1/evchargingstations with your key in the x-api-key header. Swap in a real key and it runs as-is.
req, _ := http.NewRequest("GET", "https://api.apiverve.com/v1/evchargingstations", nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))Resources
Call it from PHP — GET /v1/evchargingstations
No SDK to install — this is a plain HTTPS call to /v1/evchargingstations with your key in the x-api-key header. Swap in a real key and it runs as-is.
$ch = curl_init("https://api.apiverve.com/v1/evchargingstations");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["x-api-key: YOUR_API_KEY"]);
$response = curl_exec($ch);
echo $response;Resources
Call it from Ruby — GET /v1/evchargingstations
No SDK to install — this is a plain HTTPS call to /v1/evchargingstations with your key in the x-api-key header. Swap in a real key and it runs as-is.
require "net/http"
uri = URI("https://api.apiverve.com/v1/evchargingstations")
req = Net::HTTP::Get.new(uri)
req["x-api-key"] = "YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.bodyResources
Zero-code embed — one snippet, no backend
Drop an interactive EV Charging Stations form onto any page. The widget calls the API for you, so no key ever appears in your markup and there is nothing to deploy.
Changelog — EV Charging Stations API
Every change to this endpoint, newest first. Breaking changes ship as a new version and the previous one keeps serving — response fields are added, never removed or retyped in place, so an integration written against v1 keeps working.
Entries are picked up from dated catalog snapshots, so the first one appears after the next snapshot that moves something. A period where nothing changed produces no entry — silence is a valid changelog for the EV Charging Stations API.
Transportation
- Aircraft Types
- Airline Lookup
- Airport Code Converter
- Airport Distance
- Airports Lookup
- DTC Lookup
- EV Charging Stations
- Motor Carrier Lookup
- Travel Entry Requirements
- US Car Models
- Vehicle Fuel Economy
- VIN Decoder
- Visa Requirements