API reference
Replay Parser
Upload a Fortnite .replay file and receive structured match data — metadata, the reporter's stats, the ordered elimination feed, and the list of participants.
Endpoint
/replay/parseBase URL https://api.zyron.pro/api/v1 — so the full URL is https://api.zyron.pro/api/v1/replay/parse.
Request
Send the replay as multipart/form-data with a single field named replay containing the .replay file.
Headers
| Header | Required | Value |
|---|---|---|
Authorization | Required | Bearer zyr_your_key |
Content-Type | Set by client | multipart/form-data (with boundary — let your HTTP client set it) |
Body field
| Field | Type | Description |
|---|---|---|
replayrequired | file | The Fortnite .replay file. Max 35 MB. Must be a valid Unreal replay — validated by the magic bytes 0x1CA2E27F at the start of the file. |
Constraints
35 MB are rejected with 413 file_too_large, and files that fail the magic-byte check are rejected with 415 unsupported_file.Examples
curl -X POST https://api.zyron.pro/api/v1/replay/parse \
-H "Authorization: Bearer zyr_your_key" \
-F "replay=@match.replay"Response
A 200 OK returns a JSON object with four top-level keys: meta, reporter, elims, and participants.
meta — object
| Field | Type | Description |
|---|---|---|
startedAt | string | Match start time, ISO 8601. |
lengthMs | number | Match length in milliseconds. |
build | string | null | Game build string, e.g. ++Fortnite+Release-41.00. May be null if absent from the replay. |
friendlyName | string | The replay's internal name. |
elimParseFailures | number | Elimination events that could not be decoded — usually 0. |
reporter — object
The uploader / recording player.
| Field | Type | Description |
|---|---|---|
placement | number | null | Final placement in the match. |
totalPlayers | number | null | Lobby size for the match. |
eliminations | number | The uploader's kill count. |
elims — array of objects
Every elimination and knock, sorted by time.
| Field | Type | Description |
|---|---|---|
t | number | Seconds since match start. |
eliminator | string | Epic account ID of the eliminator, or "" if a bot. |
eliminated | string | Epic account ID of the eliminated player, or "" if a bot. |
eliminatorIsBot | boolean | Whether the eliminator was a bot. |
eliminatedIsBot | boolean | Whether the eliminated player was a bot. |
knocked | boolean | True for a knock (down-but-not-out), false for a full elimination. |
participants — array of strings
| Field | Type | Description |
|---|---|---|
participants[] | string | Distinct Epic account IDs seen in the elimination feed. |
Example response
{
"meta": {
"startedAt": "2026-06-22T10:33:48.000Z",
"lengthMs": 1080000,
"build": "++Fortnite+Release-41.00",
"friendlyName": "UnsavedReplay-2026.06.22-10.33.48",
"elimParseFailures": 0
},
"reporter": {
"placement": 12,
"totalPlayers": 98,
"eliminations": 3
},
"elims": [
{
"t": 132.4,
"eliminator": "a1b2c3d4e5f60718293a4b5c6d7e8f90",
"eliminated": "",
"eliminatorIsBot": false,
"eliminatedIsBot": true,
"knocked": false
},
{
"t": 271.8,
"eliminator": "a1b2c3d4e5f60718293a4b5c6d7e8f90",
"eliminated": "0f1e2d3c4b5a69788796a5b4c3d2e1f0",
"eliminatorIsBot": false,
"eliminatedIsBot": false,
"knocked": true
},
{
"t": 604.1,
"eliminator": "0f1e2d3c4b5a69788796a5b4c3d2e1f0",
"eliminated": "a1b2c3d4e5f60718293a4b5c6d7e8f90",
"eliminatorIsBot": false,
"eliminatedIsBot": false,
"knocked": false
}
],
"participants": [
"a1b2c3d4e5f60718293a4b5c6d7e8f90",
"0f1e2d3c4b5a69788796a5b4c3d2e1f0"
]
}Errors for this endpoint
| Status | error | When |
|---|---|---|
400 | invalid_replay | The file is a replay but is corrupt or unsupported. |
413 | file_too_large | Upload exceeds 35 MB. |
415 | unsupported_file | Not a .replay (fails the magic-byte check). |
422 | parse_timeout | Parsing exceeded the time budget. |
See the full list, including auth and rate-limit errors, on the Errors page.
How it works & safety
Uploads are never stored or executed
GET /key
Returns your tier and today's usage. Useful for showing quota in a dashboard without spending a parse.
/key{
"tier": "pro",
"limits": { "perMinute": 60, "perDay": 2000 },
"usage": { "day": "2026-07-06", "dayCount": 137 }
}See Rate limits for what these numbers mean.