curl --request GET \
--url https://api.extole.io/v5/persons/{person_id}/device-history \
--header 'Authorization: <api-key>'import requests
url = "https://api.extole.io/v5/persons/{person_id}/device-history"
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}/device-history', 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}/device-history",
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}/device-history"
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}/device-history")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.extole.io/v5/persons/{person_id}/device-history")
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[
{
"last_seen_at": "2025-10-24T02:00:00-07:00",
"person_id": "<string>",
"status": "CURRENT"
}
]List the devices that claimed a person's identity
Returns the devices recorded as having claimed the specified person’s identity, most recently seen first. A device that claims an identity without verifying it keeps its own activity, so this history is how to find that activity from the identity. Each entry says whether the device still points at this identity, so an entry is a record that the device was here, not a claim that it still is, and its last_seen_at is refreshed at most once a day, so it can trail the device’s latest activity. Extole started recording this history in September 2026 and does not backfill it, so a device that claimed an identity before then appears only after it saves again. The history is bounded to the most recently seen devices, so a flood of claims evicts the ones seen longest ago, and it carries no marker of what it dropped. It is for support: Extole’s own engine, targeting and reporting never read it.
curl --request GET \
--url https://api.extole.io/v5/persons/{person_id}/device-history \
--header 'Authorization: <api-key>'import requests
url = "https://api.extole.io/v5/persons/{person_id}/device-history"
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}/device-history', 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}/device-history",
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}/device-history"
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}/device-history")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.extole.io/v5/persons/{person_id}/device-history")
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[
{
"last_seen_at": "2025-10-24T02:00:00-07:00",
"person_id": "<string>",
"status": "CURRENT"
}
]Authorizations
Path Parameters
The Extole unique profile identifier of this user at Extole.
Response
Successful response
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"
The Extole person id of the device profile that claimed this identity.
CURRENT when the device still points at this identity, MOVED when it has since been re-identified to another identity, DELETED when the device profile no longer exists.
CURRENT, DELETED, MOVED Was this page helpful?
