curl --request GET \
--url https://api.extole.io/v5/persons/{person_id}/locations \
--header 'Authorization: <api-key>'import requests
url = "https://api.extole.io/v5/persons/{person_id}/locations"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.extole.io/v5/persons/{person_id}/locations', 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://api.extole.io/v5/persons/{person_id}/locations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <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"
"net/http"
"io"
)
func main() {
url := "https://api.extole.io/v5/persons/{person_id}/locations"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.extole.io/v5/persons/{person_id}/locations")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.extole.io/v5/persons/{person_id}/locations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"accuracy_radius_km": 123,
"city": {
"name": "<string>"
},
"country": {
"isoCode": "<string>",
"name": "<string>"
},
"created_date": "2025-10-24T02:00:00-07:00",
"device_id": "<string>",
"ip_address": "<string>",
"location": {
"createdDate": "<string>",
"deviceId": "<string>",
"geoIp": {
"accuracyRadiusKm": 123,
"city": {
"name": "<string>"
},
"country": {
"isoCode": "<string>",
"name": "<string>"
},
"ipAddress": "<string>",
"location": "<unknown>",
"state": {
"isoCode": "<string>",
"name": "<string>"
},
"zipCode": "<string>"
}
},
"state": {
"isoCode": "<string>",
"name": "<string>"
},
"zip_code": "<string>"
}
]List person locations
Returns request context location records for the specified person, sorted by created date in descending order. Locations capture the geographic context (country, region, city) observed at the time of person interactions.
curl --request GET \
--url https://api.extole.io/v5/persons/{person_id}/locations \
--header 'Authorization: <api-key>'import requests
url = "https://api.extole.io/v5/persons/{person_id}/locations"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.extole.io/v5/persons/{person_id}/locations', 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://api.extole.io/v5/persons/{person_id}/locations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <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"
"net/http"
"io"
)
func main() {
url := "https://api.extole.io/v5/persons/{person_id}/locations"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.extole.io/v5/persons/{person_id}/locations")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.extole.io/v5/persons/{person_id}/locations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"accuracy_radius_km": 123,
"city": {
"name": "<string>"
},
"country": {
"isoCode": "<string>",
"name": "<string>"
},
"created_date": "2025-10-24T02:00:00-07:00",
"device_id": "<string>",
"ip_address": "<string>",
"location": {
"createdDate": "<string>",
"deviceId": "<string>",
"geoIp": {
"accuracyRadiusKm": 123,
"city": {
"name": "<string>"
},
"country": {
"isoCode": "<string>",
"name": "<string>"
},
"ipAddress": "<string>",
"location": "<unknown>",
"state": {
"isoCode": "<string>",
"name": "<string>"
},
"zipCode": "<string>"
}
},
"state": {
"isoCode": "<string>",
"name": "<string>"
},
"zip_code": "<string>"
}
]Authorizations
Path Parameters
The Extole unique profile identifier of this user at Extole.
Response
Successful response
Accuracy radius in kilometres for the geo-IP lookup. Absent if not available.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
RFC 3339 or RFC 9557 date-time with a numeric UTC offset and an optional IANA time-zone suffix in square brackets. Precision up to milliseconds.
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])(\[[^\]]+\])?$"2025-10-24T02:00:00-07:00"
Device identifier associated with the request.
IP address of the request that produced this location record.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Postal/ZIP code derived from the IP address. Absent if not resolvable.
