curl --request GET \
--url https://api.aws53.cloud/v1/data/visitors/{visitorId}/sessions \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.aws53.cloud/v1/data/visitors/{visitorId}/sessions"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.aws53.cloud/v1/data/visitors/{visitorId}/sessions', 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.aws53.cloud/v1/data/visitors/{visitorId}/sessions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.aws53.cloud/v1/data/visitors/{visitorId}/sessions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<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.aws53.cloud/v1/data/visitors/{visitorId}/sessions")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aws53.cloud/v1/data/visitors/{visitorId}/sessions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [],
"meta": {
"limit": 50,
"hasMore": false,
"nextCursor": null,
"timeframe": "30d",
"asOf": "2026-09-03T12:00:00.000Z",
"pixelId": null,
"coverage": {
"partial": false
}
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request data"
},
"meta": {
"timestamp": "2026-09-03T12:00:00.000Z",
"request_id": "req_01J0ZTRW5K49C1A6X4S9TW0FZP"
}
}{
"error": {
"code": "AUTHENTICATION_ERROR",
"message": "Authentication required"
},
"meta": {
"timestamp": "2026-09-03T12:00:00.000Z",
"request_id": "req_01J0ZTRW5K49C1A6X4S9TW0FZP"
}
}{
"error": {
"code": "AUTHORIZATION_ERROR",
"message": "Insufficient permissions"
},
"meta": {
"timestamp": "2026-09-03T12:00:00.000Z",
"request_id": "req_01J0ZTRW5K49C1A6X4S9TW0FZP"
}
}{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests, please try again later"
},
"meta": {
"timestamp": "2026-09-03T12:00:00.000Z",
"request_id": "req_01J0ZTRW5K49C1A6X4S9TW0FZP"
}
}{
"error": {
"code": "HTTP_ERROR",
"message": "Service unavailable"
},
"meta": {
"timestamp": "2026-09-03T12:00:00.000Z",
"request_id": "req_01J0ZTRW5K49C1A6X4S9TW0FZP"
}
}List privacy-bounded session summaries
Returns deterministic, cursor-paginated session summaries without detailed events, page sequences, full URLs, query strings, or fragments. visitorId is the lowercase SHA-256 value returned as emailHash by the visitor list and qualification endpoints. The signed cursor is bound to the API-key organization, visitor, timeframe, optional pixel scope, and frozen asOf; do not construct, edit, or reuse it with different filters. Sessions are ordered by start time and stable session identifier, both descending. limit defaults to 50 and is capped at 100. An empty page returns an empty data array and null nextCursor. Recent events can revise a session summary and therefore change its version after a short processing delay.
curl --request GET \
--url https://api.aws53.cloud/v1/data/visitors/{visitorId}/sessions \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.aws53.cloud/v1/data/visitors/{visitorId}/sessions"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.aws53.cloud/v1/data/visitors/{visitorId}/sessions', 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.aws53.cloud/v1/data/visitors/{visitorId}/sessions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.aws53.cloud/v1/data/visitors/{visitorId}/sessions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<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.aws53.cloud/v1/data/visitors/{visitorId}/sessions")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aws53.cloud/v1/data/visitors/{visitorId}/sessions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [],
"meta": {
"limit": 50,
"hasMore": false,
"nextCursor": null,
"timeframe": "30d",
"asOf": "2026-09-03T12:00:00.000Z",
"pixelId": null,
"coverage": {
"partial": false
}
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request data"
},
"meta": {
"timestamp": "2026-09-03T12:00:00.000Z",
"request_id": "req_01J0ZTRW5K49C1A6X4S9TW0FZP"
}
}{
"error": {
"code": "AUTHENTICATION_ERROR",
"message": "Authentication required"
},
"meta": {
"timestamp": "2026-09-03T12:00:00.000Z",
"request_id": "req_01J0ZTRW5K49C1A6X4S9TW0FZP"
}
}{
"error": {
"code": "AUTHORIZATION_ERROR",
"message": "Insufficient permissions"
},
"meta": {
"timestamp": "2026-09-03T12:00:00.000Z",
"request_id": "req_01J0ZTRW5K49C1A6X4S9TW0FZP"
}
}{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests, please try again later"
},
"meta": {
"timestamp": "2026-09-03T12:00:00.000Z",
"request_id": "req_01J0ZTRW5K49C1A6X4S9TW0FZP"
}
}{
"error": {
"code": "HTTP_ERROR",
"message": "Service unavailable"
},
"meta": {
"timestamp": "2026-09-03T12:00:00.000Z",
"request_id": "req_01J0ZTRW5K49C1A6X4S9TW0FZP"
}
}Authorizations
Organization API key (sk_...). Get yours from Settings > API Keys in the dashboard.
Path Parameters
Visitor SHA-256 identifier from DataApiVisitor.emailHash
^[A-Fa-f0-9]{64}$"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Query Parameters
Time window fixed when the first cursor page is requested.
24h, 7d, 14d, 30d, 90d, all "30d"
Session rows per page. Defaults to 50; maximum 100.
1 <= x <= 10050
Opaque signed nextCursor from the previous response. Do not construct or modify it.
1 - 1024"eyJzIjoxNzU2NzE5MjAwLCJrIjoiYWFhYSIsImEiOjE3NTY3MjAwMDB9"
Restrict sessions to one pixel owned by the API-key organization. An inaccessible or deleted pixel returns 403.
"00000000-0000-4000-8000-000000000001"
Was this page helpful?