BO3 API endpoint
Returns BO3.gg's editorial feed for one game with paging and filters: `section` (`news`, `article`, `wiki`, `predictions`, `reviews`), a `locale` (16 languages, `en` by default), a `category` id from bo3-news-categories and `sort` (`newest`, `oldest`), up to 100 per page. Each item has slug, title, description, category, publish time, author, tags, image and canonical URL; `total` and `has_more` page through the archive (over 100,000 items across games).
/bo3/news-feedHeader: x-api-key required.
Parameters:
game: optional; allowed values: cs2, valorant, lol, dota2, r6siege, mlbb, games. Defaults to cs2. games is BO3's general gaming news (for example console and AAA game news, not an esports title); it holds about a quarter of all BO3 news items and exists for this route only.section: optional; allowed values: news, article, wiki, predictions, reviews. Defaults to news. reviews holds game reviews and only has items for game=games (133 in English on 2026-10-28).tag: optional tag slug, for example team-liquid or pgl-masters-bucharest-2026; only items carrying that tag are returned. Tags are team, player, tournament and topic slugs: take them from the tags of any item this route returns. The set is open; a slug nobody has used returns an empty list, and a value that is not a slug returns 400. The response repeats it in tag.locale: optional language of the items; allowed values: en, ru, pt, es, de, fr, tr, pl, id, vi, ja, ko, ua, ms, tl, da. Defaults to en. These 16 languages are the whole archive: their item counts add up exactly to the 415,624 items BO3 holds.category: optional category id from bo3-news-categories; an id that is not in that list returns 400.sort: optional; allowed values: newest, oldest. Defaults to newest.offset: optional zero-based offset; limit: optional page size, 1 to 100, default 20.Notable response behavior:
section selects where the items live on the site: news under /news/, article under /articles/, wiki under /wiki/ and predictions under /predictions/; each item's url is built accordingly (items of game=games, items of the reviews section and items in any locale other than en have an empty url, because the site's page path for them could not be verified). Categories are independent of sections.total counts the items that fit the filters and has_more says whether another page exists. Items carry the text of the requested locale (English by default); the response repeats it in locale. An invalid game, section, sort, category or page size returns 400.| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| id | 40 | |
| slug | 40 | |
| title | 40 | median 71 characters |
| game | 40 | |
| category | 40 | |
| category_id | 40 | |
| published_at | 40 | 2026-02-20 to 2026-10-29 |
| author | 40 | |
| tags | 40 | median 1 entry |
| image_url | 40 | files.bo3.gg |
| likes | 40 | 0 to 6, median 0 |
| pinned | 40 | true in 0 of 40 |
| url | 0 |
| 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, games (general gaming news); defaults to cs2 Allowed values: cs2, valorant, lol, dota2, r6siege, mlbb, games. | |
| section | string | No | news | Editorial section; one of news, article, wiki, predictions, reviews (game reviews, game=games only); defaults to news Allowed values: news, article, wiki, predictions, reviews. | |
| tag | string | No | Tag slug such as team-liquid or pgl-masters-bucharest-2026 (team, player, tournament or topic tag); an unknown tag returns an empty list | team-liquid | |
| locale | string | No | en | Language of the items; one of en, ru, pt, es, de, fr, tr, pl, id, vi, ja, ko, ua, ms, tl, da; defaults to en Allowed values: en, ru, pt, es, de, fr, tr, pl, id, vi, ja, ko, ua, ms, tl, da. | |
| category | integer | No | Category id from bo3-news-categories, for example 38 (Predictions) Minimum: 1. | ||
| sort | string | No | newest | Order by publish time; one of newest, oldest; defaults to newest Allowed values: newest, oldest. | |
| 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/news-feed?game=cs2§ion=news&locale=en&sort=newest&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://api.bo3.gg/api/v1/news-feed",
"fetched_at": "2026-10-28T10:00:00Z",
"game": "cs2",
"section": "predictions",
"category": 38,
"total": 1302,
"offset": 0,
"limit": 20,
"count": 1,
"has_more": true,
"items": [
{
"id": 41871,
"slug": "liquid-vs-furia-match-prediction-and-analysis-pgl-masters-bucharest-2026-group-stage",
"title": "Liquid vs FURIA Match Prediction and Analysis",
"game": "cs2",
"category": "Predictions",
"category_id": 38,
"published_at": "2026-10-27T20:42:22Z",
"author": {
"id": 14,
"slug": "pers1valle",
"nickname": "Pers1valle"
},
"tags": [],
"likes": 0,
"pinned": false,
"url": "https://bo3.gg/predictions/liquid-vs-furia-match-prediction-and-analysis-pgl-masters-bucharest-2026-group-stage"
}
]
}
}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.NewsFeedResponse | No | ||||
| data.category | integer | No | 38 | |||
| 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.items | array | No | ||||
| data.items[].author | bo3.PersonRef | No | ||||
| data.items[].author.id | integer | No | 14 | |||
| data.items[].author.nickname | string | No | Pers1valle | |||
| data.items[].author.slug | string | No | pers1valle | |||
| data.items[].category | string | No | News | |||
| data.items[].category_id | integer | No | 1 | |||
| data.items[].description | string | No | ||||
| data.items[].game | string | No | cs2 | |||
| data.items[].id | integer | No | 41867 | |||
| data.items[].image_url | string | No | ||||
| data.items[].likes | integer | No | 0 | |||
| data.items[].pinned | boolean | No | false | |||
| data.items[].published_at | string | No | ||||
| data.items[].slug | string | No | spirit-navi-furia-liquid-pgl-masters-bucharest-2026 | |||
| data.items[].tags | array | No | ||||
| data.items[].tags[].id | integer | No | 4698 | |||
| data.items[].tags[].name | string | No | PGL Masters Bucharest 2026 | |||
| data.items[].tags[].slug | string | No | pgl-masters-bucharest-2026 | |||
| data.items[].title | string | No | ||||
| data.items[].url | string | No | ||||
| data.limit | integer | No | 20 | |||
| data.locale | string | No | en, ru, pt, es, de, fr, tr, pl, id, vi, ja, ko, ua, ms, tl, da | en | ||
| data.offset | integer | No | 0 | |||
| data.section | string | No | news, article, wiki, predictions, reviews | news | ||
| data.source_url | string | No | https://bo3.gg/matches/current | |||
| data.tag | string | No | team-liquid | |||
| data.total | integer | No | 4401 | |||
| 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/news-feed?game=cs2§ion=news&locale=en&sort=newest&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"