EV Charging Stations
Find the nearest EV charging stations by coordinates, with connector, power, and operator filters
GET Request
~100ms response (cached)
1 credit per request
Endpoint
GET https://api.carapi.dev/v1/charging-stationsQuery Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| lat | number | Required | Search center latitude, -90 to 90. |
| lon | number | Required | Search center longitude, -180 to 180. |
| radius | number | Optional | Search radius in kilometers. Default 10, min 0.1, max 50. Out-of-range values are rejected with 400, not clamped. |
| connectorType | enum | Optional | type2, ccs, or chademo. Only locations with at least one connector of this type are returned. |
| owner | string | Optional | Case-insensitive substring match on the operator name (1-100 characters), e.g. "ionity". |
| minPowerKw | number | Optional | Only locations with a connector at or above this power (kW). Combined with connectorType, applies to that connector type. |
| limit | integer | Optional | Max locations to return. Default 5, min 1, max 10. |
| token | string | Required | API authentication token. |
Request Examples
cURL
curl -X GET \
"https://api.carapi.dev/v1/charging-stations?lat=50.1175&lon=14.4908&minPowerKw=150&token=YOUR_API_KEY"JavaScript
const params = new URLSearchParams({
token: 'YOUR_API_KEY',
lat: '50.1175',
lon: '14.4908',
connectorType: 'ccs',
minPowerKw: '150'
});
const response = await fetch(
`https://api.carapi.dev/v1/charging-stations?${params.toString()}`
);
const data = await response.json();
console.log(data.stations);Python
import requests
response = requests.get(
"https://api.carapi.dev/v1/charging-stations",
params={
"token": "YOUR_API_KEY",
"lat": 50.1175,
"lon": 14.4908,
"connectorType": "ccs",
"minPowerKw": 150,
},
)
print(response.json())Response Examples
Stations found (200)
{
"search": {
"lat": 50.1175,
"lon": 14.4908,
"radiusKm": 10,
"connectorType": null,
"owner": null,
"minPowerKw": 150
},
"count": 2,
"stations": [
{
"name": "R378",
"owners": ["CEZ, a. s."],
"lat": 50.12241,
"lon": 14.51215,
"distanceKm": 1.62,
"stationCount": 4,
"address": {
"street": "Kbelská 919/31",
"city": "Praha 9 - Vysočany",
"zip": "190 00",
"country": "CZ"
},
"maxPowerKw": 300,
"connectors": {
"ccs": {
"maxPowerKw": 300,
"minPricePerKwh": null,
"parkingPricePerHour": null,
"freeParkingMinutes": null,
"plugs": 4
},
"type2": {
"maxPowerKw": 22,
"minPricePerKwh": null,
"parkingPricePerHour": null,
"freeParkingMinutes": null,
"plugs": 1
}
}
},
{
"name": "Novovysočanská HUB",
"owners": ["Pražská energetika, a.s."],
"lat": 50.0981,
"lon": 14.48085,
"distanceKm": 2.28,
"stationCount": 1,
"address": {
"street": "Novovysočanská",
"city": "Praha",
"zip": "19000",
"country": "CZ"
},
"maxPowerKw": 400,
"connectors": {
"ccs": {
"maxPowerKw": 400,
"minPricePerKwh": null,
"parkingPricePerHour": null,
"freeParkingMinutes": null,
"plugs": 1
}
}
}
]
}No stations in range (200)
{
"search": {
"lat": 30,
"lon": -40,
"radiusKm": 10,
"connectorType": null,
"owner": null,
"minPowerKw": null
},
"count": 0,
"stations": []
}Error Response (400)
{
"error": "radius must be a number between 0.1 and 50 (km)"
}Response Fields
| Field | Type | Description |
|---|---|---|
| search | object | Echo of the search parameters with defaults applied (unused filters are null) |
| count | number | Number of locations returned (max 10) |
| stations | Station[] | Physical charging locations, sorted by distance ascending |
| stations[].name | string | Location name as published by the operator |
| stations[].owners | string[] | Operator name(s) at this location — some sites host chargers from multiple operators |
| stations[].lat / lon | number | Location coordinates |
| stations[].distanceKm | number | Great-circle (straight-line) distance from the search point in km — NOT driving distance. 2 decimals. |
| stations[].stationCount | number | Individual charge points (EVSEs) grouped into this location |
| stations[].address | object | street, city, zip (nullable), country (ISO-2) |
| stations[].maxPowerKw | number|null | Highest charging power at the location across all connector types |
| stations[].connectors | object | Per-connector-type summary keyed by type2 / ccs / chademo (rarely other) |
| connectors.<type>.maxPowerKw | number|null | Highest power for this connector type at the location |
| connectors.<type>.minPricePerKwh | number|null | Lowest known price per kWh in EUR; null when the operator publishes no pricing |
| connectors.<type>.parkingPricePerHour | number|null | Parking price per hour in EUR, if any |
| connectors.<type>.freeParkingMinutes | number|null | Free parking duration in minutes, if any |
| connectors.<type>.plugs | number|null | Distinct charge-point configurations of this type at the location |
Error Codes
400
Bad Request
Missing lat/lon, or a filter out of range (out-of-range values are rejected, never clamped)
403
Forbidden
Invalid or missing API token
502
Bad Gateway
Failed to fetch charging station data upstream
500
Internal Server Error
Server encountered an error processing the request
Important Notes
- •
distanceKmis straight-line (great-circle) distance, not driving distance — the actual route by road will be longer. - •Results are physical locations: multiple charge points at the same site are grouped, with per-connector-type summaries.
stationCounttells you how many charge points were merged. - •Prices are in EUR.
minPricePerKwhis oftennull— many operators do not publish pricing through the roaming network. - •There is no pagination by design: at most 10 locations within at most 50 km per request. An empty area is a valid
200withcount: 0. - •Coverage is European (strongest in IT, DE, NL, AT, BE, FR, CZ, PL, HU, RO, SK); data refreshes monthly.
- •Each request consumes 1 API credit from your monthly allowance.