Календарь матчей за месяц
Эндпоинт /v2/{sportSlug}/matches/{yearMonth}/calendar возвращает по каждому дню месяца количество турниров и матчей. Подходит для рендеринга календаря-сетки без загрузки самих матчей.
yearMonth — строка вида YYYY-MM (например, 2026-05).
Запрос
curl -H "Authorization: YOUR_API_KEY" \
"https://api.api-sport.ru/v2/football/matches/2026-05/calendar"
Ответ
{
"month": "2026-05",
"totalDays": 31,
"days": [
{ "date": "2026-05-01", "totalTournaments": 12, "totalMatches": 24 },
{ "date": "2026-05-02", "totalTournaments": 9, "totalMatches": 18 },
{ "date": "2026-05-03", "totalTournaments": 0, "totalMatches": 0 }
/* ...всего totalDays элементов, включая пустые дни */
]
}
Дни без матчей возвращаются как { totalTournaments: 0, totalMatches: 0 } — массив всегда покрывает весь месяц.
Загрузка матчей на конкретную дату
Когда пользователь выбрал день — отдельный запрос на список матчей с фильтром date=:
curl -H "Authorization: YOUR_API_KEY" \
"https://api.api-sport.ru/v2/football/matches?date=2026-05-15&page_size=100"
React-пример (псевдокод)
function MatchCalendar({ sport, yearMonth }: { sport: string; yearMonth: string }) {
const [calendar, setCalendar] = useState<CalendarResponse | null>(null);
const [matches, setMatches] = useState<Match[]>([]);
const [selectedDate, setSelectedDate] = useState<string | null>(null);
useEffect(() => {
fetch(`https://api.api-sport.ru/v2/${sport}/matches/${yearMonth}/calendar`, {
headers: { Authorization: API_KEY },
})
.then((r) => r.json())
.then(setCalendar);
}, [sport, yearMonth]);
useEffect(() => {
if (!selectedDate) return;
fetch(
`https://api.api-sport.ru/v2/${sport}/matches?date=${selectedDate}&page_size=100`,
{ headers: { Authorization: API_KEY } }
)
.then((r) => r.json())
.then(({ matches }) => setMatches(matches));
}, [selectedDate, sport]);
return (
<div>
<CalendarGrid days={calendar?.days ?? []} onSelect={setSelectedDate} />
<MatchList matches={matches} />
</div>
);
}
Полезные дополнительные фильтры
Эндпоинт /calendar принимает те же фильтры, что и /matches:
tournament_id=1,2,3— оставить только указанные турниры.category_ids=1,2— оставить только указанные категории (страны).team_id=12345— только матчи с участием этой команды.season_id=...— конкретный сезон.exclude_amateur=true— исключить amateur/editor матчи.
Кэширование
- Календарь прошлых месяцев — не меняется. Кэшируйте навсегда.
- Текущий и будущие месяцы — могут пополняться. Кэшируйте на 1–6 часов.