curl --request POST \
--url https://{environment}.plugsurfing.com/emp/v1/geosearch/route \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"points": [
{
"latitude": 52.52,
"longitude": 13.405
},
{
"latitude": 52.37,
"longitude": 4.9
}
],
"filters": {
"connectorStandards": [
"Combo"
]
}
}
'import requests
url = "https://{environment}.plugsurfing.com/emp/v1/geosearch/route"
payload = {
"points": [
{
"latitude": 52.52,
"longitude": 13.405
},
{
"latitude": 52.37,
"longitude": 4.9
}
],
"filters": { "connectorStandards": ["Combo"] }
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
points: [{latitude: 52.52, longitude: 13.405}, {latitude: 52.37, longitude: 4.9}],
filters: {connectorStandards: ['Combo']}
})
};
fetch('https://{environment}.plugsurfing.com/emp/v1/geosearch/route', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{environment}.plugsurfing.com/emp/v1/geosearch/route",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'points' => [
[
'latitude' => 52.52,
'longitude' => 13.405
],
[
'latitude' => 52.37,
'longitude' => 4.9
]
],
'filters' => [
'connectorStandards' => [
'Combo'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{environment}.plugsurfing.com/emp/v1/geosearch/route"
payload := strings.NewReader("{\n \"points\": [\n {\n \"latitude\": 52.52,\n \"longitude\": 13.405\n },\n {\n \"latitude\": 52.37,\n \"longitude\": 4.9\n }\n ],\n \"filters\": {\n \"connectorStandards\": [\n \"Combo\"\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{environment}.plugsurfing.com/emp/v1/geosearch/route")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"points\": [\n {\n \"latitude\": 52.52,\n \"longitude\": 13.405\n },\n {\n \"latitude\": 52.37,\n \"longitude\": 4.9\n }\n ],\n \"filters\": {\n \"connectorStandards\": [\n \"Combo\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{environment}.plugsurfing.com/emp/v1/geosearch/route")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"points\": [\n {\n \"latitude\": 52.52,\n \"longitude\": 13.405\n },\n {\n \"latitude\": 52.37,\n \"longitude\": 4.9\n }\n ],\n \"filters\": {\n \"connectorStandards\": [\n \"Combo\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"locations": [
{
"id": "8rMCionje8s2LtheVGEK90mYnJdJe5OZd48ecF/w1StRJSodFFzfQ3GhJbYbxG0gQhJv/Yjp5FXBJt14SccU9zFRdnC4SV7juPdCRaWkEZo=",
"name": "Ebee Smart Technologies",
"coordinates": {
"latitude": "52.475911",
"longitude": "13.350794"
},
"evses": [
{
"uid": "8rMCionje8s2LtheVGEK90mYnJdJe5OZd48ecF/w1StRJSodFFzfQ3GhJbYbxG0g3wFt7gLfnV3ulxmnoAzR4W/DFEMs63CndZpPK6L2aJG9qMC0Dp9OqeegGRXmiTOE",
"evse_id": "+49*839*030*000074",
"physical_reference": "4",
"status": "AVAILABLE",
"connectors": [
{}
],
"capabilities": [
"RESERVABLE",
"PLUG_AND_CHARGE_CAPABLE",
"PLUG_AND_CHARGE_CAPABLE"
],
"last_updated": "2025-01-15T10:30:00Z"
}
],
"operator": {
"id": "881941",
"name": "Ebee Smart Technologies",
"hotline": "+498944255071",
"external_id": "DE*ABC"
},
"operator_display_name": "Sub-operator X",
"opening_times": {
"twentyfourseven": false,
"regular_hours": [
{
"weekday": 1,
"period_begin": "00:10",
"period_end": "29:59"
}
],
"exceptional_openings": [
{
"period_begin": "2025-01-15T10:30:00Z",
"period_end": "2025-01-15T10:30:00Z"
}
],
"exceptional_closings": [
{
"period_begin": "2025-01-15T10:30:00Z",
"period_end": "2025-01-15T10:30:00Z"
}
]
},
"directions": [
{
"language": "DE",
"text": "example"
}
],
"country": "DEU",
"state": "Bayern",
"city": "Berlin",
"postal_code": 10829,
"address": "EUREF CAMPUS 4-5",
"openNow": false,
"is_green_energy": false,
"last_updated": "2024-03-15T14:30:00Z"
}
],
"aggregates": [
{
"coordinates": {
"latitude": "52.475911",
"longitude": "13.350794"
},
"count": 1
}
]
}{
"message": "Invalid request payload",
"details": [
"field X is required"
]
}{
"message": "Resource not found"
}Search for locations along a route
Search for locations along a route. The max number of points in a route is 300.
curl --request POST \
--url https://{environment}.plugsurfing.com/emp/v1/geosearch/route \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"points": [
{
"latitude": 52.52,
"longitude": 13.405
},
{
"latitude": 52.37,
"longitude": 4.9
}
],
"filters": {
"connectorStandards": [
"Combo"
]
}
}
'import requests
url = "https://{environment}.plugsurfing.com/emp/v1/geosearch/route"
payload = {
"points": [
{
"latitude": 52.52,
"longitude": 13.405
},
{
"latitude": 52.37,
"longitude": 4.9
}
],
"filters": { "connectorStandards": ["Combo"] }
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
points: [{latitude: 52.52, longitude: 13.405}, {latitude: 52.37, longitude: 4.9}],
filters: {connectorStandards: ['Combo']}
})
};
fetch('https://{environment}.plugsurfing.com/emp/v1/geosearch/route', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{environment}.plugsurfing.com/emp/v1/geosearch/route",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'points' => [
[
'latitude' => 52.52,
'longitude' => 13.405
],
[
'latitude' => 52.37,
'longitude' => 4.9
]
],
'filters' => [
'connectorStandards' => [
'Combo'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{environment}.plugsurfing.com/emp/v1/geosearch/route"
payload := strings.NewReader("{\n \"points\": [\n {\n \"latitude\": 52.52,\n \"longitude\": 13.405\n },\n {\n \"latitude\": 52.37,\n \"longitude\": 4.9\n }\n ],\n \"filters\": {\n \"connectorStandards\": [\n \"Combo\"\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{environment}.plugsurfing.com/emp/v1/geosearch/route")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"points\": [\n {\n \"latitude\": 52.52,\n \"longitude\": 13.405\n },\n {\n \"latitude\": 52.37,\n \"longitude\": 4.9\n }\n ],\n \"filters\": {\n \"connectorStandards\": [\n \"Combo\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{environment}.plugsurfing.com/emp/v1/geosearch/route")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"points\": [\n {\n \"latitude\": 52.52,\n \"longitude\": 13.405\n },\n {\n \"latitude\": 52.37,\n \"longitude\": 4.9\n }\n ],\n \"filters\": {\n \"connectorStandards\": [\n \"Combo\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"locations": [
{
"id": "8rMCionje8s2LtheVGEK90mYnJdJe5OZd48ecF/w1StRJSodFFzfQ3GhJbYbxG0gQhJv/Yjp5FXBJt14SccU9zFRdnC4SV7juPdCRaWkEZo=",
"name": "Ebee Smart Technologies",
"coordinates": {
"latitude": "52.475911",
"longitude": "13.350794"
},
"evses": [
{
"uid": "8rMCionje8s2LtheVGEK90mYnJdJe5OZd48ecF/w1StRJSodFFzfQ3GhJbYbxG0g3wFt7gLfnV3ulxmnoAzR4W/DFEMs63CndZpPK6L2aJG9qMC0Dp9OqeegGRXmiTOE",
"evse_id": "+49*839*030*000074",
"physical_reference": "4",
"status": "AVAILABLE",
"connectors": [
{}
],
"capabilities": [
"RESERVABLE",
"PLUG_AND_CHARGE_CAPABLE",
"PLUG_AND_CHARGE_CAPABLE"
],
"last_updated": "2025-01-15T10:30:00Z"
}
],
"operator": {
"id": "881941",
"name": "Ebee Smart Technologies",
"hotline": "+498944255071",
"external_id": "DE*ABC"
},
"operator_display_name": "Sub-operator X",
"opening_times": {
"twentyfourseven": false,
"regular_hours": [
{
"weekday": 1,
"period_begin": "00:10",
"period_end": "29:59"
}
],
"exceptional_openings": [
{
"period_begin": "2025-01-15T10:30:00Z",
"period_end": "2025-01-15T10:30:00Z"
}
],
"exceptional_closings": [
{
"period_begin": "2025-01-15T10:30:00Z",
"period_end": "2025-01-15T10:30:00Z"
}
]
},
"directions": [
{
"language": "DE",
"text": "example"
}
],
"country": "DEU",
"state": "Bayern",
"city": "Berlin",
"postal_code": 10829,
"address": "EUREF CAMPUS 4-5",
"openNow": false,
"is_green_energy": false,
"last_updated": "2024-03-15T14:30:00Z"
}
],
"aggregates": [
{
"coordinates": {
"latitude": "52.475911",
"longitude": "13.350794"
},
"count": 1
}
]
}{
"message": "Invalid request payload",
"details": [
"field X is required"
]
}{
"message": "Resource not found"
}Authorizations
API key for authentication
Query Parameters
Width of the searching path in meters. 0.5 of the width on each side.
Number of locations returned in the response (doesn't apply when aggregation is enabled)
x <= 300If true, the results will be aggregated. For large radius it makes the response much faster.
Value between 2 and 9. The bigger value is, the smaller is the cell size of the grid for aggregation. If not passed, a default value, based on radius, is assumed. Grid sizes: 2=1252.3km x 624.1km, 3=156.5km x 156km, 4=39.1km x 19.5km, 5=4.9km x 4.9km, 6=1.2km x 609.4m, 7=152.9m x 152.4m, 8=38.2m x 19m, 9=4.8m x 4.8m
2 <= x <= 9Optional - the id of the fleet organization, will be used to look up locations available for this fleet. If fleet id is not provided, the locations available to the EMP will be provided
Supported languages: en, bg, cy, de, es, fi, fr, hu, is, it, lt, nb, nl, pl, pt, ro, sv.
2Body
The request takes up to 300 points for the route
Response
OK
Response payload containing matching locations and aggregate metadata for a geosearch query.