List session replays
List recorded sessions for the location, newest-first, within the 30-day retention window. Each row carries the session's full entry attribution (UTMs, landing page, referrer, device, geo — the same fields as GET /sessions in the Data API) plus identity, duration, and activity counters derived from the recording.
Filtering: accepts the same filters as GET /sessions — utm_source, utm_medium, utm_campaign, landing_page, device_type, browser, os, country, date_from/date_to, engaged, bounce, is_identified, min_duration — plus segment_id to scope to a saved segment's members:
GET /client/v1/data/replays?utm_source=Facebook&landing_page=/pricing
GET /client/v1/data/replays?segment_id=9f4e...&device_type=mobile
Recordings tab (person scoping): pass person_id (canonical id from the People API) or distinct_id (any raw identity value) to list one person's recordings, resolved through the identity graph — no more fetching the recent list and filtering client-side:
GET /client/v1/data/replays?person_id=019f69bc-...
curl -X GET "https://mythic-analytics.gulp.workers.dev/client/v1/data/replays?location_id=example_string&date_from=2024-12-25&date_to=2024-12-25&utm_source=example_string&utm_medium=example_string&utm_campaign=example_string&device_type=example_string&browser=example_string&os=example_string&country=USA&landing_page=example_string&engaged=true&bounce=true&is_identified=true&person_id=example_string&distinct_id=example_string&min_duration=42&segment_id=123e4567-e89b-12d3-a456-426614174000&limit=100&offset=0" \
-H "Content-Type: application/json" \
-H "X-Location-Id: example_string" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import json
url = "https://mythic-analytics.gulp.workers.dev/client/v1/data/replays?location_id=example_string&date_from=2024-12-25&date_to=2024-12-25&utm_source=example_string&utm_medium=example_string&utm_campaign=example_string&device_type=example_string&browser=example_string&os=example_string&country=USA&landing_page=example_string&engaged=true&bounce=true&is_identified=true&person_id=example_string&distinct_id=example_string&min_duration=42&segment_id=123e4567-e89b-12d3-a456-426614174000&limit=100&offset=0"
headers = {
"Content-Type": "application/json",
"X-Location-Id": "example_string",
"Authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://mythic-analytics.gulp.workers.dev/client/v1/data/replays?location_id=example_string&date_from=2024-12-25&date_to=2024-12-25&utm_source=example_string&utm_medium=example_string&utm_campaign=example_string&device_type=example_string&browser=example_string&os=example_string&country=USA&landing_page=example_string&engaged=true&bounce=true&is_identified=true&person_id=example_string&distinct_id=example_string&min_duration=42&segment_id=123e4567-e89b-12d3-a456-426614174000&limit=100&offset=0", {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Location-Id": "example_string",
"Authorization": "Bearer YOUR_API_TOKEN"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://mythic-analytics.gulp.workers.dev/client/v1/data/replays?location_id=example_string&date_from=2024-12-25&date_to=2024-12-25&utm_source=example_string&utm_medium=example_string&utm_campaign=example_string&device_type=example_string&browser=example_string&os=example_string&country=USA&landing_page=example_string&engaged=true&bounce=true&is_identified=true&person_id=example_string&distinct_id=example_string&min_duration=42&segment_id=123e4567-e89b-12d3-a456-426614174000&limit=100&offset=0", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Location-Id", "example_string")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://mythic-analytics.gulp.workers.dev/client/v1/data/replays?location_id=example_string&date_from=2024-12-25&date_to=2024-12-25&utm_source=example_string&utm_medium=example_string&utm_campaign=example_string&device_type=example_string&browser=example_string&os=example_string&country=USA&landing_page=example_string&engaged=true&bounce=true&is_identified=true&person_id=example_string&distinct_id=example_string&min_duration=42&segment_id=123e4567-e89b-12d3-a456-426614174000&limit=100&offset=0')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['X-Location-Id'] = 'example_string'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
response = http.request(request)
puts response.body
{
"success": true,
"data": [
{
"session_id": "example_string",
"started_at": "example_string",
"person_id": "example_string",
"distinct_id": "example_string",
"url": "example_string",
"landing_page": "example_string",
"utm_source": "example_string",
"utm_medium": "example_string",
"utm_campaign": "example_string",
"browser": "example_string",
"device_type": "example_string",
"duration_ms": 42,
"clicks": 42,
"keypresses": 42,
"console_errors": 42,
"network_count": 10
}
],
"cursor": "example_string"
}
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"error": "Forbidden",
"message": "You don't have permission to access this resource",
"code": 403
}
{
"error": "Not Found",
"message": "The requested resource was not found",
"code": 404
}
{
"error": "Too Many Requests",
"message": "Rate limit exceeded. Please try again later",
"code": 429,
"retryAfter": 3600
}
/replays
Target server for requests. Edit to use your own host.
Agency key (ak_) or location secret key (sk_) as a bearer token. Format: Bearer ak_... or Bearer sk_.... Scoped keys (mcp_) are accepted too and need replays:read. See Using an mcp_ key over HTTP.
ak_) or location secret key (sk_) as a bearer token. Format: Bearer ak_... or Bearer sk_.... Scoped keys (mcp_) are accepted too and need replays:read. See Using an mcp_ key over HTTP.
Alternative to the X-Location-Id header for agency (ak_) keys. Ignored for secret (sk_) keys.
Start date (YYYY-MM-DD), on session start time.
End date (YYYY-MM-DD).
Filter to sessions with this UTM source. Empty string = "no value set".
Filter to sessions with this UTM medium.
Filter to sessions with this UTM campaign.
Filter to sessions on this device type.
Filter to sessions on this browser.
Filter to sessions on this operating system.
Filter to sessions from this country (ISO code).
Filter to sessions whose entry path matches. Case-insensitive and trailing-slash-insensitive (/About/ matches /about). Query params never apply — the path is captured without them.
Filter by engagement (1/0, or true/false).
Filter by bounce (1/0, or true/false).
Filter to identified (1) or anonymous (0) sessions.
Scope to one person's recordings: the canonical person id from the People API. Matches every recorded session whose visitor id belongs to that person in the identity graph (anonymous ids, user ids, emails), so pre-identification recordings are included. Powers a profile view's Recordings tab. Composable with all other filters and the date window.
Scope to one person's recordings by any raw identity value (anonymous id, user id, or email), resolved through the identity graph to the owning person's full identity set. A value not in the graph (a never-identified visitor) falls back to an exact distinct_id match. Pass either this or person_id, not both (they AND together).
Minimum session duration in seconds.
Scope results to members of a saved segment (created via the Segments API). The segment decides WHICH PEOPLE qualify (a live definition, evaluated at query time); the date window decides which of their recorded sessions are returned. Composable with all other filters. Unknown or foreign id → 404 segment_not_found.
Max sessions to return (1–1000).
Row offset for pagination.
Location to scope the request to. Required for agency (ak_) keys. Ignored for secret (sk_) keys, which resolve their own location.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. Agency key (ak_) or location secret key (sk_) as a bearer token. Format: Bearer ak_... or Bearer sk_.... Scoped keys (mcp_) are accepted too and need replays:read. See Using an mcp_ key over HTTP.
Query Parameters
Alternative to the X-Location-Id header for agency (ak_) keys. Ignored for secret (sk_) keys.
Start date (YYYY-MM-DD), on session start time.
End date (YYYY-MM-DD).
Filter to sessions with this UTM source. Empty string = "no value set".
Filter to sessions with this UTM medium.
Filter to sessions with this UTM campaign.
Filter to sessions on this device type.
Filter to sessions on this browser.
Filter to sessions on this operating system.
Filter to sessions from this country (ISO code).
Filter to sessions whose entry path matches. Case-insensitive and trailing-slash-insensitive (/About/ matches /about). Query params never apply — the path is captured without them.
Filter by engagement (1/0, or true/false).
Filter by bounce (1/0, or true/false).
Filter to identified (1) or anonymous (0) sessions.
Scope to one person's recordings: the canonical person id from the People API. Matches every recorded session whose visitor id belongs to that person in the identity graph (anonymous ids, user ids, emails), so pre-identification recordings are included. Powers a profile view's Recordings tab. Composable with all other filters and the date window.
Scope to one person's recordings by any raw identity value (anonymous id, user id, or email), resolved through the identity graph to the owning person's full identity set. A value not in the graph (a never-identified visitor) falls back to an exact distinct_id match. Pass either this or person_id, not both (they AND together).
Minimum session duration in seconds.
Scope results to members of a saved segment (created via the Segments API). The segment decides WHICH PEOPLE qualify (a live definition, evaluated at query time); the date window decides which of their recorded sessions are returned. Composable with all other filters. Unknown or foreign id → 404 segment_not_found.
Max sessions to return (1–1000).
Row offset for pagination.
Headers
Location to scope the request to. Required for agency (ak_) keys. Ignored for secret (sk_) keys, which resolve their own location.
Responses
Reserved; currently always null (no pagination beyond the cap).