A valid request URL is required to generate request examples{
"counts": [
{
"day": "<string>",
"name": "<string>",
"count": 123,
"distinct_contacts": 123
}
],
"source": "raw",
"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"
}
}Count events per day
Requires analytics:read. Events per UTC day and name — the read behind the explorer’s chart.
Two sources, one meaning. A range of 48 hours or less is aggregated from the raw table, because the hourly rollup’s lag would be exactly what a person watching today’s traffic is looking at; anything wider reads the pre-aggregated daily counts, which cost the same at any width. source says which answered. Both apply the same rules: duplicate event ids count once, and distinct_contacts counts identified contacts only — a visitor session carries a contact id too, and counting devices as people would inflate the one number the column exists to answer.
Days are UTC. Whose midnight a day belongs to is decided once, at storage; translating to your timezone is a display concern.
A valid request URL is required to generate request examples{
"counts": [
{
"day": "<string>",
"name": "<string>",
"count": 123,
"distinct_contacts": 123
}
],
"source": "raw",
"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.
Range start (inclusive). Default: 30 days ago.
Range end (exclusive). Default: now.
Resposta
One row per day and name.
Show child attributes
Show child attributes
Which table answered.
raw, rollup 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