A valid request URL is required to generate request examples{
"events": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"anonymous_id": "<string>",
"properties": {},
"occurred_at": "2023-11-07T05:31:56Z",
"received_at": "2023-11-07T05:31:56Z",
"source": "sdk"
}
],
"range": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"retention_days": 123,
"clamped": true
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Explore events
Requires analytics:read. The raw events, newest first: what happened, to whom, and when — the read behind the panel’s explorer.
Filters are conjunctive: name narrows to one event, contact_id to one person, and from/to bound the range (default: the last 7 days, UTC). The range is always bounded — the events table is partitioned by month precisely so a read never touches the months it did not ask about.
contact_id is null on events nobody was signed in for; anonymous_id is the device cookie and is an empty string when the SDK sent none. source says where the event entered: sdk (your pages), auth (UserKit’s own auth facts, the $-prefixed names), or server.
A valid request URL is required to generate request examples{
"events": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"anonymous_id": "<string>",
"properties": {},
"occurred_at": "2023-11-07T05:31:56Z",
"received_at": "2023-11-07T05:31:56Z",
"source": "sdk"
}
],
"range": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"retention_days": 123,
"clamped": true
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Autorizações
A staff session token, uk_st_…. Minted by sign-up, sign-in or the two-factor exchange. Only a 401 means it is spent; not_a_member (403) is about the organization named in X-Organization-Id and leaves the token good for the others.
Cabeçalhos
The organization the caller is acting on — the org_… code that appears in the panel URL. It identifies; the membership JOIN is what authorizes, so a forged code reads nothing: the answer is not_a_member (403), which does not mean the session is over. Absent, the session's default organization answers, or — if that membership was revoked while the session was open — any other one the caller still holds.
Parâmetros de consulta
Which environment to act in. A view parameter, valid only on the staff surface — a machine credential never chooses its environment, it is resolved from the key.
live, test One event name, $-prefixed platform names included.
Only this contact's events.
Range start (inclusive). Default: 7 days ago.
Range end (exclusive). Default: now.
Page size. Values outside 1–200 fall back to 50.
1 <= x <= 200x >= 0Resposta
The events, newest first.
Show child attributes
Show child attributes
The window the read actually answered over, and what the plan did to it.
Every analytics read carries one. analytics_retention is a plan LIMIT and never a gate: asking for a year on a plan that keeps a month answers 200 over the month, with clamped true and from moved forward to the horizon — there is no 402 anywhere in this module.
Unlike the staff audit window, which only filters a read, this horizon is also enforced in storage: a nightly sweep deletes analytics past each organization's retention. So data beyond from is not merely hidden, and an upgrade recovers the horizon rather than the history.
Show child attributes
Show child attributes