BO3 API endpoint
Returns BO3.gg esports tournaments for one game with paging and filters: `status` (`current`, `upcoming`, `finished`, `canceled`, `postponed`), `tier` (`s` to `d`), `event_type` (`lan`, `online`) and `sort` (`newest`, `oldest`, `prize` for the largest prize pool first), up to 100 per page. Each tournament has its slug, name, status, tier, event type, prize pool in USD, dates and image; `total` and `has_more` page through the full list (over 3,000 CS2 events).
/bo3/tournamentsHeader: x-api-key required.
Parameters:
game: optional; allowed values: cs2, valorant, lol, dota2, r6siege, mlbb. Defaults to cs2.status: optional; allowed values: current, upcoming, finished, canceled, postponed.tier: optional; allowed values: s, a, b, c, d (s is the top tier).event_type: optional; allowed values: lan, online.sort: optional; allowed values: newest, oldest, prize. Defaults to newest.offset: optional zero-based offset; limit: optional page size, 1 to 100, default 20.Notable response behavior:
status on each tournament is current, upcoming, finished, canceled or postponed; tier is s, a, b, c or d; event_type is lan or online. prize_usd is the prize pool.total is the number of tournaments that fit the filters and has_more says whether another page exists. BO3.gg ignores date, name and country filters on this list, so none is offered; sort by newest or oldest and page instead.400. The response is cached for up to ten minutes.| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| id | 40 | |
| slug | 40 | |
| name | 40 | “Thunderpick World Championship 2026” and 39 other values |
| game | 40 | cs2 in all 40 |
| status | 40 | finished in all 40 |
| tier | 40 | s in all 40 |
| event_type | 40 | lan (37), online (3) |
| prize_usd | 36 | 0 to 2,000,000, median 1,000,000 |
| start_date | 40 | 2025-07-15 to 2026-10-13 |
| end_date | 40 | 2025-07-20 to 2026-10-18 |
| image_url | 40 | files.bo3.gg |
| url | 40 | bo3.gg |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| game | string | No | cs2 | Game; one of cs2, valorant, lol, dota2, r6siege, mlbb; defaults to cs2 Allowed values: cs2, valorant, lol, dota2, r6siege, mlbb. | |
| status | string | No | Tournament status; one of current, upcoming, finished, canceled, postponed Allowed values: current, upcoming, finished, canceled, postponed. | ||
| tier | string | No | Tournament tier; one of s, a, b, c, d Allowed values: s, a, b, c, d. | ||
| event_type | string | No | Event type; one of lan, online Allowed values: lan, online. | ||
| sort | string | No | newest | Order; one of newest, oldest, prize; defaults to newest Allowed values: newest, oldest, prize. | |
| offset | integer | No | 0 | Zero-based offset; defaults to 0 Minimum: 0. | |
| limit | integer | No | 20 | Page size, 1 to 100; defaults to 20 Minimum: 1. Maximum: 100. |
curl -X GET "https://api.crawlora.net/api/v1/bo3/tournaments?game=cs2&status=current&tier=s&event_type=lan&sort=newest&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://api.bo3.gg/api/v1/tournaments",
"fetched_at": "2026-10-28T10:00:00Z",
"game": "cs2",
"total": 3248,
"offset": 0,
"limit": 20,
"count": 1,
"has_more": true,
"tournaments": [
{
"id": 5338,
"slug": "pgl-masters-bucharest-2026",
"name": "PGL Masters Bucharest 2026",
"game": "cs2",
"status": "current",
"tier": "s",
"event_type": "lan",
"prize_usd": 1250000,
"start_date": "2026-10-24T07:00:00Z",
"end_date": "2026-10-30T23:00:00Z",
"url": "https://bo3.gg/tournaments/pgl-masters-bucharest-2026"
}
]
}
}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 | bo3.TournamentListResponse | No | ||||
| data.count | integer | No | 20 | |||
| data.fetched_at | string | No | 2026-10-28T10:00:00Z | |||
| data.game | string | No | cs2 | |||
| data.has_more | boolean | No | true | |||
| data.limit | integer | No | 20 | |||
| data.offset | integer | No | 0 | |||
| data.source_url | string | No | https://bo3.gg/matches/current | |||
| data.total | integer | No | 3248 | |||
| data.tournaments | array | No | ||||
| data.tournaments[].end_date | string | No | ||||
| data.tournaments[].event_type | string | No | lan, online | lan | ||
| data.tournaments[].game | string | No | cs2 | |||
| data.tournaments[].id | integer | No | 5338 | |||
| data.tournaments[].image_url | string | No | ||||
| data.tournaments[].name | string | No | PGL Masters Bucharest 2026 | |||
| data.tournaments[].prize_usd | integer | No | 1250000 | |||
| data.tournaments[].slug | string | No | pgl-masters-bucharest-2026 | |||
| data.tournaments[].start_date | string | No | ||||
| data.tournaments[].status | string | No | current, upcoming, finished, canceled, postponed | current | ||
| data.tournaments[].tier | string | No | s, a, b, c, d | s | ||
| data.tournaments[].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/bo3/tournaments?game=cs2&status=current&tier=s&event_type=lan&sort=newest&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"