Docs·Visitors and people
GET
/api/v1/event/analytics/web-analytics/visitors/:visitorId/sessionsList a visitor's sessions
The sessions of one profile that started in the date range, newest first and paged: the Sessions view on a profile page. Takes a visitor id or a person id, and a person's sessions cover every device they used. Rows have the same fields as /sessions; for the individual events, call /events/feed with profileId.
Keys: an account key. Getting started explains both kinds.
Parameters
| Prop | In | Type | Notes |
|---|---|---|---|
visitorId | path | string | A visitor id (id on a visitor row) or a person id (contactId). A person id covers every device that person used. |
contactListId | query | string | The id of the audience (the tracked site) to read, a UUID: anything else returns a 400. You must be a member of the workspace the audience belongs to, or the call returns a 401. An id that matches no audience is not an error: the call returns no data. |
startDate | query | string | Start of the date range, read as UTC: a date such as 2026-09-01 (from midnight), or an exact time such as 2026-09-01T09:30:00Z. Use one of these two forms. |
endDate | query | string | End of the date range, read as UTC. A date such as 2026-09-30 includes that whole day; an exact time such as 2026-09-30T18:00:00Z ends the range right before that moment. If the workspace has gone past its plan's event allowance this billing period, the range is cut short at the moment the allowance ran out. |
page | query | number | Page number, starting at 0. |
pageSize | query | number | Rows per page. |
search? | query | string | Keep only sessions whose entry path, entry hostname, visitor email or visitor id contains this text, ignoring case. |
Response
| Prop | Type | Notes |
|---|---|---|
content | SessionListRow[] | One row per session, newest first. |
size | number | The pageSize you asked for. |
page | number | The page you asked for, counted from 0. |
totalItems | number | Rows across all pages. |
totalPages | number | totalItems divided by size, rounded up. |
Each item in content
| Prop | Type | Notes |
|---|---|---|
id | string | The session id. |
visitorId | string | The visitor (browser) the session belongs to. |
visitorDisplay | string | The visitor's email when identified, else the visitor id. |
contactId | string | The person id when the visitor is identified. Left out for anonymous visitors. |
startedAt | string | When the session started, in UTC with milliseconds, such as 2026-09-30 14:03:12.345+00. |
duration | number | Length in milliseconds as last reported, 0 until the session first ends. |
pageCount | number | Page views in the session. |
entryPath | string | Path of the first page. |
entryHostname | string | Hostname of the first page. |
isBounce | boolean | true when the session had one page and no interactions (your own events or link clicks; the automatic scroll event does not count). It is set when the session ends, so it reads false until then. |
exitPath | string | Path of the last page viewed so far. |
exitHostname | string | Hostname of that last page. |
eventCount | number | Everything recorded in the session: page views, your own events, scroll and link-click events. |
channel | string | Channel the visit came through, such as Organic Search or Direct. |
referrerSource | string | Source of the visit, such as Google, '' when none. |
country | string | Two-letter country code, '' when unknown. |
region | string | Region, '' when unknown. |
city | string | City, '' when unknown. |
browser | string | Browser, such as Chrome. |
os | string | Operating system, such as Windows. |
device | string | Desktop, Mobile or Tablet. |
Request
curl 'https://app.spreelytics.com/api/v1/event/analytics/web-analytics/visitors/:visitorId/sessions?contactListId=…&startDate=…&endDate=…&page=…&pageSize=…' \
-H 'Authorization: Bearer YOUR_API_KEY'
const url = new URL('https://app.spreelytics.com/api/v1/event/analytics/web-analytics/visitors/:visitorId/sessions');
url.searchParams.set('contactListId', '…');
url.searchParams.set('startDate', '…');
url.searchParams.set('endDate', '…');
url.searchParams.set('page', '…');
url.searchParams.set('pageSize', '…');
const res = await fetch(url, {
headers: { Authorization: 'Bearer YOUR_API_KEY' },
});
const data = await res.json();
import requests
res = requests.get(
"https://app.spreelytics.com/api/v1/event/analytics/web-analytics/visitors/:visitorId/sessions",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"contactListId": "…", "startDate": "…", "endDate": "…", "page": "…", "pageSize": "…"},
)
data = res.json()
Response
{
"content": [
{
"id": "string",
"visitorId": "string",
"visitorDisplay": "string",
"contactId": "string",
"startedAt": "string",
"duration": 0,
"pageCount": 0,
"entryPath": "string",
"entryHostname": "string",
"isBounce": true,
"exitPath": "string",
"exitHostname": "string",
"eventCount": 0,
"channel": "string",
"referrerSource": "string",
"country": "string",
"region": "string",
"city": "string",
"browser": "string",
"os": "string",
"device": "string"
}
],
"size": 0,
"page": 0,
"totalItems": 0,
"totalPages": 0
}