VLR API endpoint
Returns a page (30) of VLR.gg forum threads, newest activity first, for one `category` (`valorant-discussion`, `off-topic`, `site-feedback`) or the combined list: title, reply count, pinned flag, category, author, post age, frags (score) and the last poster. Thread titles and usernames are public community content; thread bodies and replies are not returned.
/vlr/forum-threadsHeader: x-api-key required.
Parameters:
category: optional; allowed values: valorant-discussion, off-topic, site-feedback. Omit for the combined list.page: optional 1-based page, default 1; each page has up to 30 threads.sort: optional order of the list; allowed values: hot, new, top. Omit it for the site default (recent activity, with stickied threads first). It works with or without category and on every page, and the response repeats it in sort.Notable response behavior:
pinned threads are stickies. posted and last_active are the site's relative strings such as 5 years ago. frags is the thread score and can be negative or omitted.has_more is true while older pages exist. Only thread list metadata is returned, not post bodies.| Field | Filled in, of 29 checked | Values in the sample |
|---|---|---|
| id | 29 | |
| url | 29 | vlr.gg |
| title | 29 | |
| replies | 29 | 1 to 30, median 6 |
| pinned | 29 | true in 0 of 29 |
| category | 29 | |
| category_name | 29 | |
| author | 29 | |
| posted | 29 | |
| last_poster | 29 | |
| last_active | 29 | |
| frags | 1 | 1 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| category | string | No | Forum category; one of valorant-discussion, off-topic, site-feedback; omit for the combined list Allowed values: valorant-discussion, off-topic, site-feedback. | ||
| page | integer | No | 1 | 1-based page number; defaults to 1 Minimum: 1. Maximum: 500. | |
| sort | string | No | Order; one of hot, new, top; omit for the site default (recent activity) Allowed values: hot, new, top. |
curl -X GET "https://api.crawlora.net/api/v1/vlr/forum-threads?category=valorant-discussion&page=1&sort=hot" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://www.vlr.gg/forums",
"fetched_at": "2026-10-28T10:00:00Z",
"category": "valorant-discussion",
"page": 1,
"count": 1,
"has_more": true,
"threads": [
{
"id": "780920",
"url": "https://www.vlr.gg/780920/zak9-cane-is-back",
"title": "Zak9: Cane is back",
"replies": 1,
"pinned": false,
"category": "valorant-discussion",
"category_name": "Valorant Discussion",
"author": "enigma",
"posted": "5 years ago",
"frags": 2408,
"last_poster": "enigma",
"last_active": "5 years ago"
}
]
}
}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.ForumThreadsResponse | No | ||||
| data.category | string | No | valorant-discussion | |||
| data.count | integer | No | 30 | |||
| data.fetched_at | string | No | 2026-10-27T10:00:00Z | |||
| data.has_more | boolean | No | true | |||
| data.page | integer | No | 1 | |||
| data.sort | string | No | hot, new, top | new | ||
| data.source_url | string | No | https://www.vlr.gg/matches | |||
| data.threads | array | No | ||||
| data.threads[].author | string | No | enigma | |||
| data.threads[].category | string | No | valorant-discussion | |||
| data.threads[].category_name | string | No | Valorant Discussion | |||
| data.threads[].frags | integer | No | 2408 | |||
| data.threads[].id | string | No | 780920 | |||
| data.threads[].last_active | string | No | 5 years ago | |||
| data.threads[].last_poster | string | No | enigma | |||
| data.threads[].pinned | boolean | No | false | |||
| data.threads[].posted | string | No | 5 years ago | |||
| data.threads[].replies | integer | No | 1 | |||
| data.threads[].title | string | No | Zak9: Cane is back | |||
| data.threads[].url | string | No | ||||
| 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/forum-threads?category=valorant-discussion&page=1&sort=hot" \
-H "x-api-key: $CRAWLORA_API_KEY"