curl "https://platform.streampixel.io/api/v1/analytics/log-files/66b1c2d3e4f5a6b7c8d9e0f1/download?projectId=664f1a2b3c4d5e6f7a8b9c0d" \
-H "x-api-key: $STREAMPIXEL_API_KEY" -o Showroom.log
grep -n -E "Fatal error|=== Critical error|GPU Crash" Showroom.log | head
import { createWriteStream } from 'node:fs';
import { Readable } from 'node:stream';
import { pipeline } from 'node:stream/promises';
const u = new URL('https://platform.streampixel.io/api/v1/analytics/log-files/66b1c2d3e4f5a6b7c8d9e0f1/download');
u.searchParams.set('projectId', '664f1a2b3c4d5e6f7a8b9c0d');
const res = await fetch(u, { headers: { 'x-api-key': process.env.STREAMPIXEL_API_KEY } });
await pipeline(Readable.fromWeb(res.body), createWriteStream('Showroom.log'));
import os, re, requests
with requests.get(
"https://platform.streampixel.io/api/v1/analytics/log-files/66b1c2d3e4f5a6b7c8d9e0f1/download",
params={"projectId": "664f1a2b3c4d5e6f7a8b9c0d"},
headers={"x-api-key": os.environ["STREAMPIXEL_API_KEY"]},
stream=True,
) as r:
for line in r.iter_lines(decode_unicode=True):
if re.search(r"Fatal error|=== Critical error|GPU Crash", line):
print(line)
Download Log
Stream an Unreal Engine log file as plain text.
GET
/
api
/
v1
/
analytics
/
log-files
/
{logFileId}
/
download
curl "https://platform.streampixel.io/api/v1/analytics/log-files/66b1c2d3e4f5a6b7c8d9e0f1/download?projectId=664f1a2b3c4d5e6f7a8b9c0d" \
-H "x-api-key: $STREAMPIXEL_API_KEY" -o Showroom.log
grep -n -E "Fatal error|=== Critical error|GPU Crash" Showroom.log | head
import { createWriteStream } from 'node:fs';
import { Readable } from 'node:stream';
import { pipeline } from 'node:stream/promises';
const u = new URL('https://platform.streampixel.io/api/v1/analytics/log-files/66b1c2d3e4f5a6b7c8d9e0f1/download');
u.searchParams.set('projectId', '664f1a2b3c4d5e6f7a8b9c0d');
const res = await fetch(u, { headers: { 'x-api-key': process.env.STREAMPIXEL_API_KEY } });
await pipeline(Readable.fromWeb(res.body), createWriteStream('Showroom.log'));
import os, re, requests
with requests.get(
"https://platform.streampixel.io/api/v1/analytics/log-files/66b1c2d3e4f5a6b7c8d9e0f1/download",
params={"projectId": "664f1a2b3c4d5e6f7a8b9c0d"},
headers={"x-api-key": os.environ["STREAMPIXEL_API_KEY"]},
stream=True,
) as r:
for line in r.iter_lines(decode_unicode=True):
if re.search(r"Fatal error|=== Critical error|GPU Crash", line):
print(line)
Return the log’s full text, decompressed, as a streamed
text/plain response. There is no size cap: a session whose application logged the same error thousands of times a minute can produce a log of tens of megabytes, and those are exactly the ones you need. Read it as a stream.
Scope:
read. The sibling GET /analytics/log-files/{logFileId}?projectId=… returns the file’s metadata plus a short-lived downloadUrl if you prefer to fetch from storage directly.Path parameters
string
required
The
_id from Session Logs.Query parameters
string
required
The project the log belongs to.
Headers
string
required
Your Streampixel API key.
Response
200 with Content-Type: text/plain and the log lines, e.g.
[2026.09.25-14.02.20:113][ 0]LogInit: Engine Version: 5.4.4-35576357+++UE5+Release-5.4
[2026.09.25-14.02.21:002][ 0]LogD3D12RHI: Display: Adapter Name: NVIDIA RTX A5000
[2026.09.25-14.02.24:410][ 1]LogPixelStreaming2: Display: Connected to signalling server
…
curl "https://platform.streampixel.io/api/v1/analytics/log-files/66b1c2d3e4f5a6b7c8d9e0f1/download?projectId=664f1a2b3c4d5e6f7a8b9c0d" \
-H "x-api-key: $STREAMPIXEL_API_KEY" -o Showroom.log
grep -n -E "Fatal error|=== Critical error|GPU Crash" Showroom.log | head
import { createWriteStream } from 'node:fs';
import { Readable } from 'node:stream';
import { pipeline } from 'node:stream/promises';
const u = new URL('https://platform.streampixel.io/api/v1/analytics/log-files/66b1c2d3e4f5a6b7c8d9e0f1/download');
u.searchParams.set('projectId', '664f1a2b3c4d5e6f7a8b9c0d');
const res = await fetch(u, { headers: { 'x-api-key': process.env.STREAMPIXEL_API_KEY } });
await pipeline(Readable.fromWeb(res.body), createWriteStream('Showroom.log'));
import os, re, requests
with requests.get(
"https://platform.streampixel.io/api/v1/analytics/log-files/66b1c2d3e4f5a6b7c8d9e0f1/download",
params={"projectId": "664f1a2b3c4d5e6f7a8b9c0d"},
headers={"x-api-key": os.environ["STREAMPIXEL_API_KEY"]},
stream=True,
) as r:
for line in r.iter_lines(decode_unicode=True):
if re.search(r"Fatal error|=== Critical error|GPU Crash", line):
print(line)
What to look for
| Pattern | Meaning |
|---|---|
GPU Crash | The graphics device was lost: driver or shader fault, or video memory exhausted. |
Fatal error:, === Critical error: ===, Unhandled Exception, EXCEPTION_ACCESS_VIOLATION | The application crashed. The lines just before name the cause. |
FPlatformMisc::RequestExit with nothing above | A clean, requested exit: the platform stopped the app when the viewer left. Not a crash. |
No Connected to signalling server line | The Pixel Streaming plugin never connected; sessions end with code 4005. |
Errors
| Status | Cause |
|---|---|
403 | projectId missing, or the log belongs to a different project or account. |
404 | No log file with that id. |