HeatmapsPage background for the overlay

Page background for the overlay

Two rrweb events — a Meta and the FullSnapshot that follows it — pulled from a real recording of the page. Feed data.events into an rrweb player (rrweb-player) to rebuild the DOM, then draw the cells on top: multiply x_rel by data.width, and use y_px as-is.

Requires session replay to be enabled for the client. Candidates are recorded page loads of this URL from the last 30 days, newest first, so mid-funnel pages work without a session_id. Pass the same viewport_min/viewport_max as the click request: the background is then captured inside that range, so the DOM under the dots is the layout the clicks happened on. A different breakpoint is never substituted. With no match the endpoint returns 404.

height is the captured VIEWPORT height, not the document height — sizing a stage from it hides every click below the fold. Take the document height from /heatmap/scroll's page_height, or from the deepest y_px you received, and stretch the rebuilt page to it.

Cells with target_fixed: true were captured on a position fixed/sticky element; their y_px is viewport-relative, not page-absolute, so they belong wherever that element sits — not at the page offset.

curl -X GET "https://mythic-analytics.gulp.workers.dev/client/v1/data/heatmap/snapshot?location_id=example_string&url=acme.com%2Fpricing&viewport_min=1280&viewport_max=20000&state=loaded&min_page_height=2500&session_id=example_string" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
{
  "success": true,
  "data": {
    "page": "acme.com/pricing",
    "session_id": "example_string",
    "window_id": "example_string",
    "state": "loaded",
    "ended_at": 42,
    "captured_at": 42,
    "width": 1440,
    "height": 900,
    "events": [
      {}
    ]
  }
}
GET
/client/v1/data/heatmap/snapshot
GET
Base URLstring

Target server for requests. Edit to use your own host.

Bearer Token
Bearer Tokenstring
Required

Agency key (ak_) or location secret key (sk_). Scoped keys (mcp_) are accepted too and need heatmaps:read. See Using an mcp_ key over HTTP.

Agency key (ak_) or location secret key (sk_). Scoped keys (mcp_) are accepted too and need heatmaps:read. See Using an mcp_ key over HTTP.
query
location_idstring

Required with an agency key (ak_); ignored with a location key (sk_). Can also be sent as the X-Location-Id header.

query
viewport_mininteger

Only use a snapshot captured at a viewport width >= this (px).

query
viewport_maxinteger

Only use a snapshot captured at a viewport width <= this (px).

query
statestring

loaded (default): the Meta + FullSnapshot pair, the page as it loaded. final: every event of one recorded visit of the page, up to the next page. Replay it to its LAST event and the background shows the page as the visitor last saw it (a form step opened, a section expanded).

Options: loaded, final
query
min_page_heightinteger

Only use visits whose page ended at least this tall (px, from the visit's scroll-depth measurement). Pair with state=final to get a background from a visit where the page grew. Answered only from indexed recordings, so a page with none returns 404.

query
session_idstring

Take the snapshot from this recording instead of searching. The viewport range still applies.

Request Preview
Response

Response will appear here after sending the request

Authentication

header
Authorizationstring
Required

Bearer token. Agency key (ak_) or location secret key (sk_). Scoped keys (mcp_) are accepted too and need heatmaps:read. See Using an mcp_ key over HTTP.

Query Parameters

location_idstring

Required with an agency key (ak_); ignored with a location key (sk_). Can also be sent as the X-Location-Id header.

urlstring
Required
Example:
acme.com/pricing
viewport_mininteger

Only use a snapshot captured at a viewport width >= this (px).

Example:
1280
viewport_maxinteger

Only use a snapshot captured at a viewport width <= this (px).

Example:
20000
statestring

loaded (default): the Meta + FullSnapshot pair, the page as it loaded. final: every event of one recorded visit of the page, up to the next page. Replay it to its LAST event and the background shows the page as the visitor last saw it (a form step opened, a section expanded).

Allowed values:loadedfinal
min_page_heightinteger

Only use visits whose page ended at least this tall (px, from the visit's scroll-depth measurement). Pair with state=final to get a background from a visit where the page grew. Answered only from indexed recordings, so a page with none returns 404.

Example:
2500
session_idstring

Take the snapshot from this recording instead of searching. The viewport range still applies.

Responses

successboolean
dataobject