VLR API endpoint
Returns the round log (the 2D replay data) of one VLR.gg match for every map that has one: for each round the score after it, the winner, the attacking team, every player's agent, credits left, spend, armor and weapon, and the ordered events (kills with weapon, spike plants and defuses) with their round clock. `available` is false when VLR has no replay for the match.
/vlr/match-roundsReturns a VLR.gg match's round-by-round log: loadouts and the kill, plant and defuse feed of every round.
Header: x-api-key required.
Parameters:
id: required numeric VLR match id from vlr-matches, vlr-results or vlr-event-matches.Notable response behavior:
score_after (team1, team2 in match order), winner_team, attacking_team, spike_detonated, ten loadouts and the events feed. events[].type has these values: kill, plant, defuse. weapon is set on kills.available is false (and maps empty) when none exists. Round positions and coordinates are not returned. An unknown match id returns 404.| Field | Filled in, of 1 checked | Values in the sample |
|---|---|---|
| game_id | 1 | |
| map_number | 1 | 1 |
| map | 1 | “Summit” |
| rounds | 1 | median 24 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| id | string | Yes | Numeric VLR match id from vlr-matches, vlr-results or vlr-event-matches | 754737 |
curl -X GET "https://api.crawlora.net/api/v1/vlr/match-rounds?id=754737" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://www.vlr.gg/match/tab/logs",
"fetched_at": "2026-10-28T10:00:00Z",
"id": "754737",
"available": true,
"maps": [
{
"game_id": "283286",
"map_number": 1,
"map": "Summit",
"rounds": [
{
"round": 1,
"score_after": {
"team1": 0,
"team2": 1
},
"winner_team": "Team Vitality",
"attacking_team": "LOUD",
"spike_detonated": false,
"loadouts": [
{
"team": "LOUD",
"player": "erde",
"agent": "Sage",
"credits_left": 0,
"spent": 800,
"weapon": "Ghost"
}
],
"events": [
{
"time": "0:02",
"type": "kill",
"player": "Derke",
"player_team": "VIT",
"victim": "lukxo",
"weapon": "Headhunter"
}
]
}
]
}
]
}
}Request schema
No body schema
Response schema
Inline response schema
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | vlr.MatchRounds | No | ||||
| data.available | boolean | No | true | |||
| data.fetched_at | string | No | 2026-10-27T10:00:00Z | |||
| data.id | string | No | 754737 | |||
| data.maps | array | No | ||||
| data.maps[].game_id | string | No | 283286 | |||
| data.maps[].map | string | No | Summit | |||
| data.maps[].map_number | integer | No | 1 | |||
| data.maps[].rounds | array | No | ||||
| data.maps[].rounds[].attacking_team | string | No | LOUD | |||
| data.maps[].rounds[].events | array | No | ||||
| data.maps[].rounds[].events[].player | string | No | Derke | |||
| data.maps[].rounds[].events[].player_team | string | No | VIT | |||
| data.maps[].rounds[].events[].time | string | No | 0:02 | |||
| data.maps[].rounds[].events[].type | string | No | kill, plant, defuse | kill | ||
| data.maps[].rounds[].events[].victim | string | No | lukxo | |||
| data.maps[].rounds[].events[].weapon | string | No | Headhunter | |||
| data.maps[].rounds[].loadouts | array | No | ||||
| data.maps[].rounds[].loadouts[].agent | string | No | Sage | |||
| data.maps[].rounds[].loadouts[].armor | string | No | Light armor | |||
| data.maps[].rounds[].loadouts[].credits_left | integer | No | 0 | |||
| data.maps[].rounds[].loadouts[].player | string | No | erde | |||
| data.maps[].rounds[].loadouts[].spent | integer | No | 800 | |||
| data.maps[].rounds[].loadouts[].team | string | No | LOUD | |||
| data.maps[].rounds[].loadouts[].weapon | string | No | Ghost | |||
| data.maps[].rounds[].round | integer | No | 1 | |||
| data.maps[].rounds[].score_after | vlr.RoundScore | No | ||||
| data.maps[].rounds[].score_after.team1 | integer | No | 0 | |||
| data.maps[].rounds[].score_after.team2 | integer | No | 1 | |||
| data.maps[].rounds[].spike_detonated | boolean | No | false | |||
| data.maps[].rounds[].winner_team | string | No | Team Vitality | |||
| data.source_url | string | No | https://www.vlr.gg/matches | |||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/vlr/match-rounds?id=754737" \
-H "x-api-key: $CRAWLORA_API_KEY"