BO3 API endpoint
Returns one BO3.gg match by slug: teams with scores and winner, status, best-of, tier, start and end time, tournament, stage and round, the maps played with scores, the site's AI prediction, live and recorded streams and the key-fact insights for each team. The slug comes from bo3-match-history.
/bo3/matchHeader: x-api-key required.
Parameters:
slug: required match slug from bo3-match-history, lowercase letters, digits and hyphens.Notable response behavior:
status is upcoming, current (live), finished, defwin (default win), canceled or postponed; tier is s, a, b, c or d; event_type is lan or online; each map status is upcoming, current or finished; a stream platform is twitch, youtube, kick or other.maps lists the maps with winner score and loser score, prediction is the site's AI forecast and insights the key facts per team (English). Lineups are not part of this route: use bo3-team for rosters and bo3-match-players for player statistics. An unknown slug returns 404. The response is cached for up to ten minutes.| Field | Filled in, of 32 checked | Values in the sample |
|---|---|---|
| platform | 32 | twitch (21), youtube (6), kick (5) |
| name | 32 | “PGL” and 29 other values |
| language | 32 | “en” and 15 other values |
| official | 32 | true in 8 of 32 |
| viewer_count | 29 | 0 to 35,362, median 963 |
| url | 32 | youtube.com and 2 other hosts |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| slug | string | Yes | Match slug from bo3-match-history, for example vitality-vs-natus-vincere-27-10-2026 | vitality-vs-natus-vincere-27-10-2026 |
curl -X GET "https://api.crawlora.net/api/v1/bo3/match?slug=vitality-vs-natus-vincere-27-10-2026" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://api.bo3.gg/api/v1/match",
"fetched_at": "2026-10-28T10:00:00Z",
"id": 132243,
"slug": "vitality-vs-natus-vincere-27-10-2026",
"url": "https://bo3.gg/matches/vitality-vs-natus-vincere-27-10-2026",
"game": "cs2",
"status": "finished",
"best_of": 3,
"tier": "s",
"stage": "PGL Masters Bucharest 2026 Group Stage",
"round": "Round 4",
"event_type": "lan",
"teams": [
{
"id": 667,
"slug": "vitality",
"name": "Vitality",
"score": 2,
"winner": true
},
{
"id": 787,
"slug": "natus-vincere",
"name": "Natus Vincere",
"score": 0,
"winner": false
}
],
"tournament": {
"id": 5338,
"slug": "pgl-masters-bucharest-2026",
"name": "PGL Masters Bucharest 2026",
"tier": "s"
},
"maps": [
{
"number": 1,
"status": "finished",
"map": "inferno",
"winner_score": 13,
"loser_score": 8
}
],
"streams": [
{
"platform": "youtube",
"name": "PGL",
"official": false,
"url": "https://www.youtube.com/watch?v=example"
}
],
"insights": []
}
}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.MatchInfo | No | ||||
| data.best_of | integer | No | 3 | |||
| data.end_time | string | No | ||||
| data.event_type | string | No | lan, online | lan | ||
| data.fetched_at | string | No | 2026-10-28T10:00:00Z | |||
| data.game | string | No | cs2 | |||
| data.id | integer | No | 132241 | |||
| data.insights | array | No | ||||
| data.insights[].facts | array | No | ||||
| data.insights[].team | string | No | Spirit | |||
| data.live_coverage | boolean | No | true | |||
| data.maps | array | No | ||||
| data.maps[].begin_at | string | No | ||||
| data.maps[].loser_score | integer | No | 2 | |||
| data.maps[].map | string | No | nuke | |||
| data.maps[].number | integer | No | 1 | |||
| data.maps[].status | string | No | upcoming, current, finished | finished | ||
| data.maps[].winner_score | integer | No | 13 | |||
| data.maps[].winner_team_id | integer | No | 654 | |||
| data.maps[].winner_team_name | string | No | Spirit | |||
| data.prediction | bo3.Prediction | No | ||||
| data.prediction.team1_score | integer | No | 2 | |||
| data.prediction.team2_score | integer | No | 1 | |||
| data.prediction.winner_team_id | integer | No | 654 | |||
| data.round | string | No | Round 4 | |||
| data.slug | string | No | spirit-vs-mouz-cs2-27-10-2026 | |||
| data.source_url | string | No | https://bo3.gg/matches/current | |||
| data.stage | string | No | PGL Masters Bucharest 2026 Group Stage | |||
| data.stars | integer | No | 4 | |||
| data.start_time | string | No | 2026-10-27T14:35:00Z | |||
| data.status | string | No | upcoming, current, finished, defwin, canceled, postponed | current | ||
| data.streams | array | No | ||||
| data.streams[].language | string | No | en | |||
| data.streams[].name | string | No | PGL | |||
| data.streams[].official | boolean | No | true | |||
| data.streams[].platform | string | No | twitch, youtube, kick, other | twitch | ||
| data.streams[].url | string | No | https://www.twitch.tv/pgl | |||
| data.streams[].viewer_count | integer | No | 205 | |||
| data.teams | array | No | ||||
| data.teams[].country | string | No | Russian Federation | |||
| data.teams[].country_code | string | No | RU | |||
| data.teams[].id | integer | No | 654 | |||
| data.teams[].logo_url | string | No | ||||
| data.teams[].name | string | No | Spirit | |||
| data.teams[].rank | integer | No | 1 | |||
| data.teams[].score | integer | No | 1 | |||
| data.teams[].slug | string | No | spirit | |||
| data.teams[].winner | boolean | No | false | |||
| data.tier | string | No | s, a, b, c, d | s | ||
| data.tournament | bo3.TournamentRef | No | ||||
| data.tournament.id | integer | No | 5338 | |||
| data.tournament.name | string | No | PGL Masters Bucharest 2026 | |||
| data.tournament.prize_usd | integer | No | 1250000 | |||
| data.tournament.slug | string | No | pgl-masters-bucharest-2026 | |||
| data.tournament.tier | string | No | s, a, b, c, d | s | ||
| data.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 |
| 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/bo3/match?slug=vitality-vs-natus-vincere-27-10-2026" \
-H "x-api-key: $CRAWLORA_API_KEY"