VLR API endpoint
Returns the Performance tab of one VLR.gg match for every map and for the whole match: player-versus-player kill matrices (overall kills and deaths, first kills and deaths, and Operator kills and deaths) and per-player advanced stats (2K to 5K multi-kills, 1v1 to 1v5 clutches, econ rating, spike plants and defuses). `available` is false while VLR has not published the tab.
/vlr/match-performanceReturns a VLR.gg match's performance statistics per map: kill matrices and multi-kill, clutch, plant and defuse counts.
Header: x-api-key required.
Parameters:
id: required numeric VLR match id from vlr-matches, vlr-results or vlr-event-matches.Notable response behavior:
kill_matrices[].mode has these values: overall, first_kills, op_kills. Each row is a player and vs lists that player's kills, deaths and difference against each opponent; pairs that never met are omitted.advanced[] gives multikills_2k to multikills_5k, clutches_1v1 to clutches_1v5, econ_rating, plants and defuses per player.available is false (and maps empty) while VLR shows "Stats from this match are not available yet". An unknown match id returns 404.| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| player | 10 | |
| agent | 10 | |
| multikills_2k | 10 | 6 to 18, median 11 |
| multikills_3k | 10 | 1 to 7, median 2 |
| multikills_4k | 10 | 0 to 1, median 0 |
| multikills_5k | 10 | 0 to 1, median 0 |
| clutches_1v1 | 10 | 0 to 2, median 1 |
| clutches_1v2 | 10 | 0 to 1, median 0 |
| clutches_1v3 | 10 | 0 |
| clutches_1v4 | 10 | 0 |
| clutches_1v5 | 10 | 0 |
| econ_rating | 10 | 43 to 60, median 50 |
| plants | 10 | 0 to 11, median 3 |
| defuses | 10 | 0 to 4, median 1 |
| 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-performance?id=754737" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://www.vlr.gg/match/tab/performance",
"fetched_at": "2026-10-28T10:00:00Z",
"id": "754737",
"available": true,
"maps": [],
"all_maps": {
"game_id": "all",
"map": "All maps",
"kill_matrices": [
{
"mode": "overall",
"rows": [
{
"player": {
"name": "erde",
"team": "LOUD"
},
"vs": [
{
"opponent": {
"name": "Jamppi",
"team": "VIT"
},
"kills": 11,
"deaths": 15,
"diff": -4
}
]
}
]
}
],
"advanced": [
{
"player": {
"name": "Darker",
"team": "LOUD"
},
"agent": "omen",
"multikills_2k": 13,
"multikills_3k": 1,
"multikills_4k": 1,
"multikills_5k": 0,
"clutches_1v1": 0,
"clutches_1v2": 0,
"clutches_1v3": 0,
"clutches_1v4": 0,
"clutches_1v5": 0,
"econ_rating": 49,
"plants": 8,
"defuses": 3
}
]
}
}
}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.MatchPerformance | No | ||||
| data.all_maps | vlr.PerformanceBlock | No | ||||
| data.all_maps.advanced | array | No | ||||
| data.all_maps.advanced[].agent | string | No | omen | |||
| data.all_maps.advanced[].clutches_1v1 | integer | No | 0 | |||
| data.all_maps.advanced[].clutches_1v2 | integer | No | 0 | |||
| data.all_maps.advanced[].clutches_1v3 | integer | No | 0 | |||
| data.all_maps.advanced[].clutches_1v4 | integer | No | 0 | |||
| data.all_maps.advanced[].clutches_1v5 | integer | No | 0 | |||
| data.all_maps.advanced[].defuses | integer | No | 3 | |||
| data.all_maps.advanced[].econ_rating | integer | No | 49 | |||
| data.all_maps.advanced[].multikills_2k | integer | No | 13 | |||
| data.all_maps.advanced[].multikills_3k | integer | No | 1 | |||
| data.all_maps.advanced[].multikills_4k | integer | No | 1 | |||
| data.all_maps.advanced[].multikills_5k | integer | No | 0 | |||
| data.all_maps.advanced[].plants | integer | No | 8 | |||
| data.all_maps.advanced[].player | vlr.MatrixPlayer | No | ||||
| data.all_maps.advanced[].player.name | string | No | erde | |||
| data.all_maps.advanced[].player.team | string | No | LOUD | |||
| data.all_maps.game_id | string | No | 283286 | |||
| data.all_maps.kill_matrices | array | No | ||||
| data.all_maps.kill_matrices[].mode | string | No | overall, first_kills, op_kills | overall | ||
| data.all_maps.kill_matrices[].rows | array | No | ||||
| data.all_maps.kill_matrices[].rows[].player | vlr.MatrixPlayer | No | ||||
| data.all_maps.kill_matrices[].rows[].player.name | string | No | erde | |||
| data.all_maps.kill_matrices[].rows[].player.team | string | No | LOUD | |||
| data.all_maps.kill_matrices[].rows[].vs | array | No | ||||
| data.all_maps.kill_matrices[].rows[].vs[].deaths | integer | No | 15 | |||
| data.all_maps.kill_matrices[].rows[].vs[].diff | integer | No | -4 | |||
| data.all_maps.kill_matrices[].rows[].vs[].kills | integer | No | 11 | |||
| data.all_maps.kill_matrices[].rows[].vs[].opponent | vlr.MatrixPlayer | No | ||||
| data.all_maps.kill_matrices[].rows[].vs[].opponent.name | string | No | erde | |||
| data.all_maps.kill_matrices[].rows[].vs[].opponent.team | string | No | LOUD | |||
| data.all_maps.map | string | No | Bind | |||
| data.all_maps.map_number | integer | No | 1 | |||
| 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[].advanced | array | No | ||||
| data.maps[].advanced[].agent | string | No | omen | |||
| data.maps[].advanced[].clutches_1v1 | integer | No | 0 | |||
| data.maps[].advanced[].clutches_1v2 | integer | No | 0 | |||
| data.maps[].advanced[].clutches_1v3 | integer | No | 0 | |||
| data.maps[].advanced[].clutches_1v4 | integer | No | 0 | |||
| data.maps[].advanced[].clutches_1v5 | integer | No | 0 | |||
| data.maps[].advanced[].defuses | integer | No | 3 | |||
| data.maps[].advanced[].econ_rating | integer | No | 49 | |||
| data.maps[].advanced[].multikills_2k | integer | No | 13 | |||
| data.maps[].advanced[].multikills_3k | integer | No | 1 | |||
| data.maps[].advanced[].multikills_4k | integer | No | 1 | |||
| data.maps[].advanced[].multikills_5k | integer | No | 0 | |||
| data.maps[].advanced[].plants | integer | No | 8 | |||
| data.maps[].advanced[].player | vlr.MatrixPlayer | No | ||||
| data.maps[].advanced[].player.name | string | No | erde | |||
| data.maps[].advanced[].player.team | string | No | LOUD | |||
| data.maps[].game_id | string | No | 283286 | |||
| data.maps[].kill_matrices | array | No | ||||
| data.maps[].kill_matrices[].mode | string | No | overall, first_kills, op_kills | overall | ||
| data.maps[].kill_matrices[].rows | array | No | ||||
| data.maps[].kill_matrices[].rows[].player | vlr.MatrixPlayer | No | ||||
| data.maps[].kill_matrices[].rows[].player.name | string | No | erde | |||
| data.maps[].kill_matrices[].rows[].player.team | string | No | LOUD | |||
| data.maps[].kill_matrices[].rows[].vs | array | No | ||||
| data.maps[].kill_matrices[].rows[].vs[].deaths | integer | No | 15 | |||
| data.maps[].kill_matrices[].rows[].vs[].diff | integer | No | -4 | |||
| data.maps[].kill_matrices[].rows[].vs[].kills | integer | No | 11 | |||
| data.maps[].kill_matrices[].rows[].vs[].opponent | vlr.MatrixPlayer | No | ||||
| data.maps[].kill_matrices[].rows[].vs[].opponent.name | string | No | erde | |||
| data.maps[].kill_matrices[].rows[].vs[].opponent.team | string | No | LOUD | |||
| data.maps[].map | string | No | Bind | |||
| data.maps[].map_number | integer | No | 1 | |||
| 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-performance?id=754737" \
-H "x-api-key: $CRAWLORA_API_KEY"