curl --request POST \
--url 'https://api.flashcat.cloud/rum/session-replay/segments?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"limit": 20,
"session_id": "0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81",
"url_mode": true
}
'import requests
url = "https://api.flashcat.cloud/rum/session-replay/segments?app_key="
payload = {
"limit": 20,
"session_id": "0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81",
"url_mode": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({limit: 20, session_id: '0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81', url_mode: true})
};
fetch('https://api.flashcat.cloud/rum/session-replay/segments?app_key=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.flashcat.cloud/rum/session-replay/segments?app_key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'limit' => 20,
'session_id' => '0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81',
'url_mode' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.flashcat.cloud/rum/session-replay/segments?app_key="
payload := strings.NewReader("{\n \"limit\": 20,\n \"session_id\": \"0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81\",\n \"url_mode\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.flashcat.cloud/rum/session-replay/segments?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"limit\": 20,\n \"session_id\": \"0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81\",\n \"url_mode\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/rum/session-replay/segments?app_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"limit\": 20,\n \"session_id\": \"0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81\",\n \"url_mode\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"items": [
"<string>"
],
"search_after_ctx": "<string>"
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "InvalidParameter",
"message": "The specified parameter is not valid."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "Unauthorized",
"message": "You are unauthorized."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "RequestTooFrequently",
"message": "Request too frequently."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "InternalError",
"message": "We encountered an internal error, and it has been reported. Please try again later."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}List session replay segments
Page through the recorded replay segments of a session, as presigned URLs or a raw stream.
curl --request POST \
--url 'https://api.flashcat.cloud/rum/session-replay/segments?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"limit": 20,
"session_id": "0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81",
"url_mode": true
}
'import requests
url = "https://api.flashcat.cloud/rum/session-replay/segments?app_key="
payload = {
"limit": 20,
"session_id": "0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81",
"url_mode": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({limit: 20, session_id: '0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81', url_mode: true})
};
fetch('https://api.flashcat.cloud/rum/session-replay/segments?app_key=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.flashcat.cloud/rum/session-replay/segments?app_key=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'limit' => 20,
'session_id' => '0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81',
'url_mode' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.flashcat.cloud/rum/session-replay/segments?app_key="
payload := strings.NewReader("{\n \"limit\": 20,\n \"session_id\": \"0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81\",\n \"url_mode\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.flashcat.cloud/rum/session-replay/segments?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"limit\": 20,\n \"session_id\": \"0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81\",\n \"url_mode\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/rum/session-replay/segments?app_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"limit\": 20,\n \"session_id\": \"0a4a2e64-8a4f-4b9a-9c1e-3a2f9e6d7c81\",\n \"url_mode\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"items": [
"<string>"
],
"search_after_ctx": "<string>"
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "InvalidParameter",
"message": "The specified parameter is not valid."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "Unauthorized",
"message": "You are unauthorized."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "RequestTooFrequently",
"message": "Request too frequently."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}{
"error": {
"code": "InternalError",
"message": "We encountered an internal error, and it has been reported. Please try again later."
},
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
}Restrictions
| Aspect | Value |
|---|---|
| Rate limits | 1,000 requests/minute; 50 requests/second per account |
| Permissions | None — any valid app_key can call this operation |
Usage
- When
url_modeisfalse(default), the response streamsapplication/x-ndjson— one decompressed replay segment JSON object per line — and is not wrapped in the standard envelope. The pagination cursor for the next call is returned in theX-Search-After-Ctxresponse header instead of a body field. - When
url_modeistrue, the response is a normal JSON envelope containing presigned download URLs (valid 1 hour) instead of the raw segment bytes. - Pass
tsto seek to the most recent full-snapshot segment at or before that time, instead of paging from the start of the session. limitaccepts 1-99; values of 100 or more are rejected.
Authorizations
App key issued from the Flashduty console under Account → APP Keys. Required on every public API call. Keep it secret — it grants the same access as the owning account.
Body
Page through the recorded replay segments of a session, or a single view within it.
RUM session ID (the session.id attribute on RUM events).
Maximum number of segments to return. 1-99, default 20.
1 <= x <= 99Pagination cursor from a previous call. Take it from the search_after_ctx field (URL mode) or the X-Search-After-Ctx response header (streaming mode).
Unix timestamp in milliseconds. When set (and search_after_ctx is empty), seeks to the most recent full-snapshot segment at or before this time instead of starting from the beginning.
When true, return presigned download URLs as a JSON envelope instead of streaming segment bytes. Defaults to false.
Restrict results to segments belonging to this view. Omit to page through the entire session.
Response
Success. Shape depends on url_mode — see Usage.
Success response envelope. On every 2xx response, request_id identifies the call (also mirrored in the Flashcat-Request-Id header) and data holds the endpoint-specific payload. Failure responses use a different shape — see ErrorResponse.
Was this page helpful?