VLR API endpoint
Returns the Valorant match schedule from VLR.gg: upcoming and live matches grouped by day with both teams, country flags, event, stage, ETA and whether stats or VODs exist. `status` is `upcoming`, `live` or `completed`. `time_label` is the time shown on the site, whose timezone is not guaranteed; use vlr-match for an exact UTC start time. Use vlr-results for finished matches.
/vlr/matchesHeader: x-api-key required.
Parameters:
page: optional 1-based page number, default 1.Notable response behavior:
status has these values: upcoming, live, completed. eta is the time until an upcoming match starts; for a live match it is empty.date is the day heading on the site (YYYY-MM-DD). time_label is the time text shown by the site; its timezone is not guaranteed. Call vlr-match for an exact start_time_utc.has_stats and has_vods report whether the site lists match statistics or VODs for the card. teams[].score is omitted until a score exists.| Field | Filled in, of 9 checked | Values in the sample |
|---|---|---|
| id | 9 | |
| url | 9 | vlr.gg |
| date | 9 | 2026-10-30 to 2026-11-01 |
| time_label | 9 | “5:00 AM” and 5 other values |
| status | 9 | upcoming in all 9 |
| eta | 9 | “14h 21m” and 8 other values |
| teams | 9 | median 2 entries |
| event | 9 | VCT 2026: China Threshold (5), Game Changers 2026: Championshi… (4) |
| series | 9 | “Week 2–Quarterfinals” and 6 other values |
| has_stats | 9 | true in 0 of 9 |
| has_vods | 9 | true in 0 of 9 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| page | integer | No | 1 | 1-based page number; defaults to 1 Minimum: 1. Maximum: 500. |
curl -X GET "https://api.crawlora.net/api/v1/vlr/matches?page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://www.vlr.gg/matches",
"fetched_at": "2026-10-27T10:00:00Z",
"page": 1,
"count": 1,
"has_more": false,
"matches": [
{
"id": "777957",
"url": "https://www.vlr.gg/777957/wolves-esports-vs-world-sports-invictus-gaming-vct-2026-china-threshold-week-2-ro12",
"date": "2026-10-27",
"time_label": "8:50 PM",
"status": "upcoming",
"eta": "18m",
"teams": [
{
"name": "Wolves Esports",
"country_code": "cn",
"winner": false
},
{
"name": "World Sports Invictus Gaming",
"country_code": "cn",
"winner": false
}
],
"event": "VCT 2026: China Threshold",
"series": "Week 2–Round of 12",
"has_stats": false,
"has_vods": false
}
]
}
}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.MatchListResponse | No | ||||
| data.count | integer | No | 50 | |||
| data.fetched_at | string | No | 2026-10-27T10:00:00Z | |||
| data.has_more | boolean | No | true | |||
| data.matches | array | No | ||||
| data.matches[].date | string | No | 2026-10-27 | |||
| data.matches[].eta | string | No | 3h 33m | |||
| data.matches[].event | string | No | VCT 2026: China Threshold | |||
| data.matches[].has_stats | boolean | No | true | |||
| data.matches[].has_vods | boolean | No | false | |||
| data.matches[].id | string | No | 777956 | |||
| data.matches[].note | string | No | ||||
| data.matches[].series | string | No | Week 2–Round of 12 | |||
| data.matches[].status | string | No | upcoming, live, completed | completed | ||
| data.matches[].teams | array | No | ||||
| data.matches[].teams[].country_code | string | No | cn | |||
| data.matches[].teams[].name | string | No | Unsettled Resentment | |||
| data.matches[].teams[].score | integer | No | 2 | |||
| data.matches[].teams[].winner | boolean | No | true | |||
| data.matches[].time_label | string | No | 5:00 PM | |||
| data.matches[].url | string | No | https://www.vlr.gg/777956/unsettled-resentment-vs-victory-no-limits-gaming-vct-2026-china-threshold-week-2-ro12 | |||
| data.page | 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 |
| 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/matches?page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"