Skip to content

Reports and templates ​

Discover the catalog ​

GET /catalog lists every dimension and metric with its ID, label, scope (event, session, segment, page, user, element), type and description. GET /templates lists the 30 built-in reports, GET /templates/{id} one of them with its widgets.

Run any report ​

POST /properties/{pid}/reports/run

json
{
  "date_range": "last_28_days",
  "compare": "previous_period",
  "actor": "humans_and_agents",
  "dimensions": ["channel_group", "navigation_mode"],
  "metrics": ["sessions", "conversions", "revenue"],
  "filters": { "and": [{ "field": "device_type", "op": "eq", "value": "mobile" }] },
  "order_by": [{ "field": "sessions", "dir": "desc" }],
  "limit": 20
}
Field
metrics1 to 20 metric IDs from the catalog (required)
dimensions0 to 5 dimension IDs
scopeOptional: force the level of the report (event, session, segment, page, user, element); otherwise deduced from the metrics
filtersA tree: leaf {field, op, value} or {and: […]}, {or: […]}, {not: {…}}. Operators: eq, neq, contains, not_contains, starts_with, regex, not_regex, in, not_in, gt, gte, lt, lte
segment_idA saved segment to apply
order_byUp to 5 {field, dir: "asc" | "desc"}
limit1 to 10,000 rows (default 1,000)

Response:

json
{
  "columns": [
    { "id": "channel_group", "label": "Channel", "kind": "dimension" },
    { "id": "navigation_mode", "label": "Navigation mode", "kind": "dimension" },
    { "id": "sessions", "label": "Sessions", "kind": "metric", "format": "integer" },
    { "id": "conversions", "label": "Conversions", "kind": "metric", "format": "integer" },
    { "id": "revenue", "label": "Revenue", "kind": "metric", "format": "currency" }
  ],
  "rows": [["Organic Search", "human", 4210, 71, 6120.5], ["AI Assistants", "mixed", 212, 41, 5388.0]],
  "totals": { "sessions": 9874, "conversions": 233, "revenue": 24310.2 },
  "compare": { … },
  "meta": { "property_id": "AH-1A2B3C", "timezone": "Europe/Paris", "date_range": { "start": "2026-10-02", "end": "2026-10-29" }, "actor": "humans_and_agents", "scope": "session", "cached": false }
}

Dimensions and metrics must come from the catalog; values are always sent to the database as parameters, never concatenated into queries.

Run a template ​

POST /properties/{pid}/templates/{id}/run with {date_range, actor?, compare?} returns every widget of the template with its result, for example humans_vs_agents, traffic_acquisition, agent_funnels or ai_reads.

Headline summary ​

GET /properties/{pid}/summary?date_range=last_28_days&actor=all returns the agents vs humans vs bots headline: sessions_by_navigation_mode, by_actor_family, top_agents, agent_session_share, ai_assistants_channel and totals. It is the quickest way to feed a KPI dashboard.

Agents & humans, every visit counts!