Use cases/Discord bots & news feeds
[UC 02]
How communities run esports Discord bots and news feeds on Cito
Seen in our API traffic
Community bots are some of the busiest apps on Cito, with one CS2 and Dota 2 bot making tens of thousands of calls a month.
{
"success": true,
"data": [
{
"matchId": "lol-match-117173205319911441",
"leagueName": "EMEA Masters",
"startTime": "2026-10-22T12:00:00.000Z",
"state": "unstarted",
"strategy": "Bo5",
"team1": { "slug": "gl", "name": "Galions", "code": "GL" },
"team2": { "slug": "sly", "name": "Solary", "code": "SLY" }
}
]
}Challenge
A bot has to post the right match at the right moment, every day, for every league its community follows, without the maintainer babysitting scrapers that break on match day.
Solution
Schedules, live states and results for every game behind one key, plus webhooks so the bot is told when something happens instead of polling all day.
What you get
- Daily schedules and live alerts per league or team
- Slash commands for player and team lookups
- Results and roster news posted automatically
- Webhooks instead of polling
Schedules first
Most bots start with a daily post: today's matches for the leagues the server follows. One call returns them with stable IDs you can store to follow each match through the day.
// discord.js: post today's LoL matches
const res = await fetch("https://api.citoapi.com/api/v1/lol/schedule/today", {
headers: { "x-api-key": process.env.CITO_API_KEY },
});
const { data } = await res.json();
await channel.send(data.map((m) => `${m.team1.name} vs ${m.team2.name}`).join("\n"));Alerts without polling
Subscribe to webhooks and Cito calls your bot when a match starts, a map ends or a series is decided. For CS2, the live stream pushes round-by-round changes.
Commands people use
Search turns whatever a user types into the right team or player ID, so /player s1mple and /team vitality just work. Cache profiles for a few minutes; they change slowly.
Endpoints used
| GET/lol/schedule/today | Today's matches across every league |
| GET/cs2/matches/live | What's live right now |
| GET/dota2/matches/upcoming | Upcoming Dota 2 matches |
| GET/cs2/transfers/recent | Roster moves for news posts |
| GET/cs2/search?q= | Resolve a team or player from a slash command |
Build it on a free key
500 requests a month, every game, no card.
More use cases