UFC fight card in Discord
Post the next UFC card to a Discord channel with one REST call. Free 500 calls a month.
const API = "https://api.citoapi.com/api/v1/ufc";
const key = process.env.CITO_API_KEY;
const hook = process.env.DISCORD_WEBHOOK_URL;
const res = await fetch(`${API}/events/upcoming?includeBouts=true&limit=1`, {
headers: { "x-api-key": key },
});
const json = await res.json();
const event = json.data?.[0];
if (!event) throw new Error("No upcoming card");
const lines = (event.bouts || []).slice(0, 12).map((bout) => {
const names = (bout.fighters || [])
.map((f) => f.fighterName || f.name)
.filter(Boolean)
.join(" vs ");
const slot = bout.cardPosition || bout.cardSection || "";
return `${slot} ${names}`;
});
await fetch(hook, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
content: `**${event.title || event.name}**\n${lines.join("\n")}`,
}),
});{
"success": true,
"data": [
{
"title": "UFC Fight Night: Nurmagomedov vs Song",
"slug": "ufc-fight-night-august-29-2026",
"bouts": [
{
"cardPosition": "Main Card 1",
"fighters": [
{ "fighterName": "Umar Nurmagomedov" },
{ "fighterName": "Song Yadong" }
]
}
]
}
]
}What data is returned
GET /events/upcomingNext scheduled card; includeBouts=true for the fight list
bouts[].fightersCorners with fighterName for the Discord line
cardPosition / cardSectionMain Card vs Prelims labels
DISCORD_WEBHOOK_URLChannel webhook. No Discord bot token required for this sample
Rate limitsFree 500/month. A daily card post fits. High-traffic bots need a paid plan
When to use this
- Gym, media, or fan servers that want the next card in a channel
- A first Cito integration before you build a full slash-command bot
- Any product that already posts to Discord and needs UFC names, not HTML scrape
Full reference docs citoapi.com/docs/api/ufc