curl "https://platform.streampixel.io/api/v1/analytics/frontend-streaming-logs?sessionId=session_1790294409382_3035&projectId=664f1a2b3c4d5e6f7a8b9c0d&limit=1000" \
-H "x-api-key: $STREAMPIXEL_API_KEY"
const u = new URL('https://platform.streampixel.io/api/v1/analytics/frontend-streaming-logs');
u.search = new URLSearchParams({ sessionId: 'session_1790294409382_3035', projectId: '664f1a2b3c4d5e6f7a8b9c0d', limit: '1000' });
const { logs } = await (await fetch(u, { headers: { 'x-api-key': process.env.STREAMPIXEL_API_KEY } })).json();
const stats = logs.filter((r) => !r.logType && r.loadingText == null);
const maxFrames = Math.max(0, ...stats.map((r) => Number(r.framesDecoded) || 0));
console.log(maxFrames > 0 ? 'video delivered' : 'no video decoded');
import os, requests
r = requests.get(
"https://platform.streampixel.io/api/v1/analytics/frontend-streaming-logs",
params={"sessionId": "session_1790294409382_3035", "projectId": "664f1a2b3c4d5e6f7a8b9c0d", "limit": 1000},
headers={"x-api-key": os.environ["STREAMPIXEL_API_KEY"]},
)
rows = r.json()["logs"]
events = [x["event"] for x in rows if x.get("logType") == "Webrtc"]
{
"success": true,
"total": 412,
"count": 412,
"logs": [
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:31:40.000Z", "logType": "Webrtc", "event": "disconnected", "code": 1000 },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:31:35.000Z", "FPS": "60", "framesDecoded": "104812", "bitrate": "8120", "latency": "38", "packetLoss": "0", "videoCodec": "H264", "videoResolution": "1920x1080" },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:02:33.000Z", "logType": "Webrtc", "event": "videoInitialized" },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:02:32.000Z", "logType": "Webrtc", "event": "connected", "iceConnectionState": "connected" },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:02:31.000Z", "logType": "Webrtc", "event": "sdpAnswer" },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:02:30.000Z", "logType": "Webrtc", "event": "sdpOffer", "browser": "Chrome", "os": "Windows", "deviceType": "desktop", "geoData": { "country": "DE", "city": "Berlin" } }
]
}
Session Telemetry
What the viewer’s browser reported during a session: WebRTC events and periodic stream statistics.
GET
/
api
/
v1
/
analytics
/
frontend-streaming-logs
curl "https://platform.streampixel.io/api/v1/analytics/frontend-streaming-logs?sessionId=session_1790294409382_3035&projectId=664f1a2b3c4d5e6f7a8b9c0d&limit=1000" \
-H "x-api-key: $STREAMPIXEL_API_KEY"
const u = new URL('https://platform.streampixel.io/api/v1/analytics/frontend-streaming-logs');
u.search = new URLSearchParams({ sessionId: 'session_1790294409382_3035', projectId: '664f1a2b3c4d5e6f7a8b9c0d', limit: '1000' });
const { logs } = await (await fetch(u, { headers: { 'x-api-key': process.env.STREAMPIXEL_API_KEY } })).json();
const stats = logs.filter((r) => !r.logType && r.loadingText == null);
const maxFrames = Math.max(0, ...stats.map((r) => Number(r.framesDecoded) || 0));
console.log(maxFrames > 0 ? 'video delivered' : 'no video decoded');
import os, requests
r = requests.get(
"https://platform.streampixel.io/api/v1/analytics/frontend-streaming-logs",
params={"sessionId": "session_1790294409382_3035", "projectId": "664f1a2b3c4d5e6f7a8b9c0d", "limit": 1000},
headers={"x-api-key": os.environ["STREAMPIXEL_API_KEY"]},
)
rows = r.json()["logs"]
events = [x["event"] for x in rows if x.get("logType") == "Webrtc"]
{
"success": true,
"total": 412,
"count": 412,
"logs": [
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:31:40.000Z", "logType": "Webrtc", "event": "disconnected", "code": 1000 },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:31:35.000Z", "FPS": "60", "framesDecoded": "104812", "bitrate": "8120", "latency": "38", "packetLoss": "0", "videoCodec": "H264", "videoResolution": "1920x1080" },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:02:33.000Z", "logType": "Webrtc", "event": "videoInitialized" },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:02:32.000Z", "logType": "Webrtc", "event": "connected", "iceConnectionState": "connected" },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:02:31.000Z", "logType": "Webrtc", "event": "sdpAnswer" },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:02:30.000Z", "logType": "Webrtc", "event": "sdpOffer", "browser": "Chrome", "os": "Windows", "deviceType": "desktop", "geoData": { "country": "DE", "city": "Berlin" } }
]
}
Return the rows the player sent for one session. Two kinds share the list: event rows (
logType: "Webrtc") mark the WebRTC handshake and disconnects, and statistics rows (no logType) arrive every few seconds with FPS, decoded frames, bitrate, latency and packet loss. Together they answer “did this viewer actually see video, and how well”.
Scope:
read. Rows come newest first; pass logType=Webrtc to get only the events. projectId is required and must match the session.Query parameters
string
required
The session.
string
required
The project the session belongs to.
string
Webrtc to return event rows only.string
ISO 8601.
string
ISO 8601.
integer
default:"100"
Rows to return. A 30-minute session produces several hundred statistics rows; use
1000 to get them all.integer
default:"0"
Offset.
Headers
string
required
Your Streampixel API key.
Response
number
Rows matching the query.
number
Rows returned.
array
Show Event row (logType = Webrtc)
Show Event row (logType = Webrtc)
Show Statistics row (no logType)
Show Statistics row (no logType)
curl "https://platform.streampixel.io/api/v1/analytics/frontend-streaming-logs?sessionId=session_1790294409382_3035&projectId=664f1a2b3c4d5e6f7a8b9c0d&limit=1000" \
-H "x-api-key: $STREAMPIXEL_API_KEY"
const u = new URL('https://platform.streampixel.io/api/v1/analytics/frontend-streaming-logs');
u.search = new URLSearchParams({ sessionId: 'session_1790294409382_3035', projectId: '664f1a2b3c4d5e6f7a8b9c0d', limit: '1000' });
const { logs } = await (await fetch(u, { headers: { 'x-api-key': process.env.STREAMPIXEL_API_KEY } })).json();
const stats = logs.filter((r) => !r.logType && r.loadingText == null);
const maxFrames = Math.max(0, ...stats.map((r) => Number(r.framesDecoded) || 0));
console.log(maxFrames > 0 ? 'video delivered' : 'no video decoded');
import os, requests
r = requests.get(
"https://platform.streampixel.io/api/v1/analytics/frontend-streaming-logs",
params={"sessionId": "session_1790294409382_3035", "projectId": "664f1a2b3c4d5e6f7a8b9c0d", "limit": 1000},
headers={"x-api-key": os.environ["STREAMPIXEL_API_KEY"]},
)
rows = r.json()["logs"]
events = [x["event"] for x in rows if x.get("logType") == "Webrtc"]
{
"success": true,
"total": 412,
"count": 412,
"logs": [
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:31:40.000Z", "logType": "Webrtc", "event": "disconnected", "code": 1000 },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:31:35.000Z", "FPS": "60", "framesDecoded": "104812", "bitrate": "8120", "latency": "38", "packetLoss": "0", "videoCodec": "H264", "videoResolution": "1920x1080" },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:02:33.000Z", "logType": "Webrtc", "event": "videoInitialized" },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:02:32.000Z", "logType": "Webrtc", "event": "connected", "iceConnectionState": "connected" },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:02:31.000Z", "logType": "Webrtc", "event": "sdpAnswer" },
{ "sessionId": "session_1790294409382_3035", "timestamp": "2026-09-25T14:02:30.000Z", "logType": "Webrtc", "event": "sdpOffer", "browser": "Chrome", "os": "Windows", "deviceType": "desktop", "geoData": { "country": "DE", "city": "Berlin" } }
]
}
Reading it
| Pattern | Meaning |
|---|---|
| No rows at all | The player never reported: the tab was frozen while the app started, or an embedded player without telemetry. |
Events but framesDecoded never above 0 | Connected but no video: usually a codec the browser cannot decode, or the app never rendered. |
sdpAnswer but no connected | The media connection never came up: the viewer’s network blocks WebRTC. |
framesDecoded rising and FPS above 0 | Video delivered. |
Errors
| Status | Cause |
|---|---|
403 | projectId missing, or the session belongs to a different project or account. |