CDPGuidesSupport

Web Analytics

Query privacy-first website traffic metrics, timeseries, and page, source, location, device, and journey breakdowns through the REST API.

Query privacy-first website traffic reports for an inclusive calendar-day range. Scope results to one web source or aggregate across the account, and use the JSON-encoded filters query parameter to narrow reports by supported dimensions.

GET
/rest/v1/web-analytics/overview
AuthorizationBearer <token>

Ours Privacy API key

In: header

Query Parameters

from*string

Inclusive lower bound of the analysis window as YYYY-MM-DD.

Match^\d{4}-\d{2}-\d{2}$
Formatdate
to*string

Inclusive upper bound of the analysis window as YYYY-MM-DD.

Match^\d{4}-\d{2}-\d{2}$
Formatdate
webSourceId?string

Optional web source UUID. Omit to aggregate all web sources in the account.

Formatuuid
excludeBots?boolean

Exclude detected bot sessions. Defaults to true.

filters?string

Optional JSON-encoded array of up to 20 filters. Dimensions: page, entry_page, exit_page, source, medium, campaign, content, term, referrer, country, region, city, device, browser, os. Each filter has a dimension, optional operator (IS, IS_NOT, CONTAINS, NOT_CONTAINS; defaults to IS), and one or more values. Example: [{"dimension":"country","values":["United States"]}].

interval*string

Timeseries bucket interval. Minute queries are capped to the most recent 24 hours.

Value in

  • "minute"
  • "day"
  • "week"
  • "month"
metric*string

Value in

  • "unique_visitors"
  • "total_visits"
  • "pageviews"
  • "views_per_visit"
  • "bounce_rate"
  • "visit_duration"
realtimeFrom?string

Optional ISO timestamp used as the lower bound for realtime queries.

Formatdate-time

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/rest/v1/web-analytics/overview?from=2026-07-01&to=2026-07-31&interval=minute&metric=unique_visitors"
{  "metrics": {    "uniqueVisitors": 0,    "totalVisits": 0,    "pageviews": 0,    "viewsPerVisit": 0,    "bounceRate": 0,    "visitDuration": 0  },  "timeseries": [    {      "date": "string",      "value": 0    }  ],  "dataUpdatedAt": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
GET
/rest/v1/web-analytics/sources
AuthorizationBearer <token>

Ours Privacy API key

In: header

Query Parameters

from*string

Inclusive lower bound of the analysis window as YYYY-MM-DD.

Match^\d{4}-\d{2}-\d{2}$
Formatdate
to*string

Inclusive upper bound of the analysis window as YYYY-MM-DD.

Match^\d{4}-\d{2}-\d{2}$
Formatdate
webSourceId?string

Optional web source UUID. Omit to aggregate all web sources in the account.

Formatuuid
excludeBots?boolean

Exclude detected bot sessions. Defaults to true.

filters?string

Optional JSON-encoded array of up to 20 filters. Dimensions: page, entry_page, exit_page, source, medium, campaign, content, term, referrer, country, region, city, device, browser, os. Each filter has a dimension, optional operator (IS, IS_NOT, CONTAINS, NOT_CONTAINS; defaults to IS), and one or more values. Example: [{"dimension":"country","values":["United States"]}].

dimension*string

Value in

  • "referrer"
  • "campaign"
  • "source"
  • "medium"
  • "content"
  • "term"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/rest/v1/web-analytics/sources?from=2026-07-01&to=2026-07-31&dimension=referrer"
{  "rows": [    {      "name": "string",      "visitors": 0    }  ],  "totalCount": 0,  "dataUpdatedAt": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
GET
/rest/v1/web-analytics/pages
AuthorizationBearer <token>

Ours Privacy API key

In: header

Query Parameters

from*string

Inclusive lower bound of the analysis window as YYYY-MM-DD.

Match^\d{4}-\d{2}-\d{2}$
Formatdate
to*string

Inclusive upper bound of the analysis window as YYYY-MM-DD.

Match^\d{4}-\d{2}-\d{2}$
Formatdate
webSourceId?string

Optional web source UUID. Omit to aggregate all web sources in the account.

Formatuuid
excludeBots?boolean

Exclude detected bot sessions. Defaults to true.

filters?string

Optional JSON-encoded array of up to 20 filters. Dimensions: page, entry_page, exit_page, source, medium, campaign, content, term, referrer, country, region, city, device, browser, os. Each filter has a dimension, optional operator (IS, IS_NOT, CONTAINS, NOT_CONTAINS; defaults to IS), and one or more values. Example: [{"dimension":"country","values":["United States"]}].

view*string

Value in

  • "top"
  • "entry"
  • "exit"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/rest/v1/web-analytics/pages?from=2026-07-01&to=2026-07-31&view=top"
{  "rows": [    {      "pageHostname": "string",      "pagePath": "string",      "pageviews": 0,      "bounceRate": 0,      "timeOnPage": 0,      "entries": 0,      "visitors": 0,      "exits": 0,      "exitRate": 0    }  ],  "totalCount": 0,  "dataUpdatedAt": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
GET
/rest/v1/web-analytics/locations
AuthorizationBearer <token>

Ours Privacy API key

In: header

Query Parameters

from*string

Inclusive lower bound of the analysis window as YYYY-MM-DD.

Match^\d{4}-\d{2}-\d{2}$
Formatdate
to*string

Inclusive upper bound of the analysis window as YYYY-MM-DD.

Match^\d{4}-\d{2}-\d{2}$
Formatdate
webSourceId?string

Optional web source UUID. Omit to aggregate all web sources in the account.

Formatuuid
excludeBots?boolean

Exclude detected bot sessions. Defaults to true.

filters?string

Optional JSON-encoded array of up to 20 filters. Dimensions: page, entry_page, exit_page, source, medium, campaign, content, term, referrer, country, region, city, device, browser, os. Each filter has a dimension, optional operator (IS, IS_NOT, CONTAINS, NOT_CONTAINS; defaults to IS), and one or more values. Example: [{"dimension":"country","values":["United States"]}].

dimension*string

Value in

  • "country"
  • "region"
  • "city"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/rest/v1/web-analytics/locations?from=2026-07-01&to=2026-07-31&dimension=country"
{  "rows": [    {      "name": "string",      "code": "string",      "visitors": 0    }  ],  "totalCount": 0,  "dataUpdatedAt": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
GET
/rest/v1/web-analytics/devices
AuthorizationBearer <token>

Ours Privacy API key

In: header

Query Parameters

from*string

Inclusive lower bound of the analysis window as YYYY-MM-DD.

Match^\d{4}-\d{2}-\d{2}$
Formatdate
to*string

Inclusive upper bound of the analysis window as YYYY-MM-DD.

Match^\d{4}-\d{2}-\d{2}$
Formatdate
webSourceId?string

Optional web source UUID. Omit to aggregate all web sources in the account.

Formatuuid
excludeBots?boolean

Exclude detected bot sessions. Defaults to true.

filters?string

Optional JSON-encoded array of up to 20 filters. Dimensions: page, entry_page, exit_page, source, medium, campaign, content, term, referrer, country, region, city, device, browser, os. Each filter has a dimension, optional operator (IS, IS_NOT, CONTAINS, NOT_CONTAINS; defaults to IS), and one or more values. Example: [{"dimension":"country","values":["United States"]}].

dimension*string

Value in

  • "device"
  • "browser"
  • "os"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/rest/v1/web-analytics/devices?from=2026-07-01&to=2026-07-31&dimension=device"
{  "rows": [    {      "name": "string",      "visitors": 0    }  ],  "totalCount": 0,  "dataUpdatedAt": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
GET
/rest/v1/web-analytics/current-visitors
AuthorizationBearer <token>

Ours Privacy API key

In: header

Query Parameters

webSourceId?string

Optional web source UUID. Omit to count visitors across all account web sources.

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/rest/v1/web-analytics/current-visitors"
{  "count": 0}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
GET
/rest/v1/web-analytics/journey
AuthorizationBearer <token>

Ours Privacy API key

In: header

Query Parameters

from*string

Inclusive lower bound of the analysis window as YYYY-MM-DD.

Match^\d{4}-\d{2}-\d{2}$
Formatdate
to*string

Inclusive upper bound of the analysis window as YYYY-MM-DD.

Match^\d{4}-\d{2}-\d{2}$
Formatdate
webSourceId?string

Optional web source UUID. Omit to aggregate all web sources in the account.

Formatuuid
excludeBots?boolean

Exclude detected bot sessions. Defaults to true.

filters?string

Optional JSON-encoded array of up to 20 journey filters. Supports web analytics dimensions plus event_name, ep_currency, ep_appointment_id, ep_appointment_status, ep_service_line, ep_provider_id, ep_location_id, ep_booking_channel, ep_revenue_type, ep_call_outcome, and ep_staff_id. Each filter has a dimension, optional operator (IS, IS_NOT, CONTAINS, NOT_CONTAINS; defaults to IS), and one or more values.

path*string

JSON-encoded ordered path of opaque journey step keys. Use an empty array to request first-column candidates.

direction?string

Value in

  • "forward"
  • "reverse"
stepKind?string

Value in

  • "PAGE"
  • "EVENT"
search?string
Lengthlength <= 500
limit?integer
Range1 <= value <= 1000

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/rest/v1/web-analytics/journey?from=2026-07-01&to=2026-07-31&path=string"
{  "anchorSessions": 0,  "steps": [    {      "key": "string",      "kind": "PAGE",      "label": "string",      "isTerminal": true,      "isOther": true,      "sessions": 0    }  ],  "hasMore": true}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}
{  "error": "string",  "details": "string"}

How is this guide?