---
title: "Get measured visit engagement"
method: GET
path: "/v3/web-analytics/engagement"
tags: ["Web Analytics"]
---

# Get measured visit engagement

`GET /v3/web-analytics/engagement`

Visible-time averages and measurement coverage. Missing measurements return null averages rather than implying zero time. Requires web_analytics:read. The authenticated credential determines the business; no business_id override is accepted. Reporting and scope-option calls share a 600-request/hour limit per API key or OAuth installation, in addition to the normal burst and hourly limits. Responses contain recorded analytics, which may be lower than actual traffic because of consent choices, self-traffic exclusion, blockers, and unavailable attribution.

## Query parameters

- `from` string, date, required
- `to` string, date, required
- `timezone` string
- `store_id` integer
- `entity_type` 'landing_page' | 'product' | 'bundle_price_option' | 'store_home' | 'cart' | 'checkout' | 'payment_link' | 'order_detail' | 'order_success' | 'order_invoice' — Customer-facing page surface. The owner is a landing page, product, bundle price option, store, or protected payment-link scope; order surfaces use the store owner, never an order ID.
- `entity_id` string
- `entity_path` string
- `page_id` integer
- `page_host` string
- `page_path` string
- `ad_click` 'paid' | 'organic' | 'meta' | 'google' | 'tiktok'
- `limit` integer

## Response `200`

Success

- WebAnalyticsEngagement — Averages use measured visits only. Unreported visits are not zero-duration visits; show coverage alongside averages.
  - `avg_session_ms` integer, nullable, required — Average measured visible time per measured session; null when none were measured.
  - `avg_page_ms` integer, nullable, required — Average measured visible time per measured page visit; null when none were measured.
  - `session_coverage` number, nullable, required — Measured sessions as a percentage of all identified sessions, rounded to one decimal; null when the denominator is zero.
  - `page_coverage` number, nullable, required — Measured page visits as a percentage of all page visits, rounded to one decimal; null when the denominator is zero.
  - `sessions_measured` integer, required
  - `sessions_total` integer, required
  - `page_visits_measured` integer, required
  - `page_visits_total` integer, required
  - `visible_ms_total` integer, required — Total reported visible-page time in milliseconds.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `429` — Too Many Requests. Storefront public requests using `X-Scalev-Storefront-Api-Key` or `X-Scalev-Guest-Token` are rate-limited as direct client/browser requests. Machine-authenticated business requests are rate-limited per API key or OAuth installation. Rate-limit responses may be plain text instead of the normal JSON error shape.

## Changes

- **2026-09-20** `af4231e0cad9` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/scalev/apis/nexus-commerce-api/changes/v3/web-analytics/engagement/get.md)

---

[API](https://skmtc.dev/scalev/apis/nexus-commerce-api.md) · [All operations](https://skmtc.dev/scalev/apis/nexus-commerce-api/llms.txt) · [OpenAPI document](https://skmtc.dev/scalev/apis/nexus-commerce-api/revisions/215156c4eee0?raw)
