curl --request POST \
--url https://{environment}.plugsurfing.com/emp/v1/geosearch/radius \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"filters": {
"connectorStandards": [
"Type2"
],
"capabilities": [
"REMOTE_START_STOP_CAPABLE"
]
}
}
'import requests
url = "https://{environment}.plugsurfing.com/emp/v1/geosearch/radius"
payload = { "filters": {
"connectorStandards": ["Type2"],
"capabilities": ["REMOTE_START_STOP_CAPABLE"]
} }
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({
filters: {connectorStandards: ['Type2'], capabilities: ['REMOTE_START_STOP_CAPABLE']}
})
};
fetch('https://{environment}.plugsurfing.com/emp/v1/geosearch/radius', 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/radius",
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([
'filters' => [
'connectorStandards' => [
'Type2'
],
'capabilities' => [
'REMOTE_START_STOP_CAPABLE'
]
]
]),
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/radius"
payload := strings.NewReader("{\n \"filters\": {\n \"connectorStandards\": [\n \"Type2\"\n ],\n \"capabilities\": [\n \"REMOTE_START_STOP_CAPABLE\"\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/radius")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"connectorStandards\": [\n \"Type2\"\n ],\n \"capabilities\": [\n \"REMOTE_START_STOP_CAPABLE\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{environment}.plugsurfing.com/emp/v1/geosearch/radius")
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 \"filters\": {\n \"connectorStandards\": [\n \"Type2\"\n ],\n \"capabilities\": [\n \"REMOTE_START_STOP_CAPABLE\"\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 locations around a point
Search for charging locations within a specified radius around a geographic point. The center point is passed via the latitude and longitude query parameters; the request body contains only filters and options. Returns up to 300 locations.
curl --request POST \
--url https://{environment}.plugsurfing.com/emp/v1/geosearch/radius \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"filters": {
"connectorStandards": [
"Type2"
],
"capabilities": [
"REMOTE_START_STOP_CAPABLE"
]
}
}
'import requests
url = "https://{environment}.plugsurfing.com/emp/v1/geosearch/radius"
payload = { "filters": {
"connectorStandards": ["Type2"],
"capabilities": ["REMOTE_START_STOP_CAPABLE"]
} }
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({
filters: {connectorStandards: ['Type2'], capabilities: ['REMOTE_START_STOP_CAPABLE']}
})
};
fetch('https://{environment}.plugsurfing.com/emp/v1/geosearch/radius', 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/radius",
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([
'filters' => [
'connectorStandards' => [
'Type2'
],
'capabilities' => [
'REMOTE_START_STOP_CAPABLE'
]
]
]),
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/radius"
payload := strings.NewReader("{\n \"filters\": {\n \"connectorStandards\": [\n \"Type2\"\n ],\n \"capabilities\": [\n \"REMOTE_START_STOP_CAPABLE\"\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/radius")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"filters\": {\n \"connectorStandards\": [\n \"Type2\"\n ],\n \"capabilities\": [\n \"REMOTE_START_STOP_CAPABLE\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{environment}.plugsurfing.com/emp/v1/geosearch/radius")
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 \"filters\": {\n \"connectorStandards\": [\n \"Type2\"\n ],\n \"capabilities\": [\n \"REMOTE_START_STOP_CAPABLE\"\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
Distance in m
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.
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
Geosearch request centered on a point with radius-based criteria. The body is optional filter data only; use {} for a search without filters.
Filtering criteria for location selection.
Show child attributes
Show child attributes
Response
OK
Response payload containing matching locations and aggregate metadata for a geosearch query.