Rate limits и тарифные планы
Дневной лимит
Каждый API-ключ имеет дневной лимит REST-запросов (dailyRequestLimit), привязанный к тарифному плану. Счётчик сбрасывается раз в сутки.
WebSocket-трафик в этот лимит не входит — это отдельный канал. Однако параллельные WS-соединения ограничены пятью на один API-ключ (см. WebSocket → Overview → Лимиты).
Превышение лимита
При превышении дневного лимита REST-сервер вернёт 429 Too Many Requests:
{
"code": 429,
"error": "tariff_rate_limit",
"message": "You plan is out of usage for today (limit <N> api requests per day for plan \"<name>\"), wait until next date or buy unlimited usage plan"
}
В сообщении <N> — числовое значение лимита, <name> — название тарифного плана.
Доступ к спортам
Не все тарифы включают все 7 спортов. Если спорт не доступен в тарифе, REST-сервер вернёт 400 Bad Request с кодом user_has_no_access:
{
"code": 400,
"error": "user_has_no_access",
"message": "You have no access for this service with this plan \"<name>\"), use another plan"
}
Для WebSocket-подписки на недоступный спорт вернётся error с кодом NO_ACCESS (WebSocket → Error codes).
Конструктор тарифов и доступных спортов — на app.api-sport.ru.
Заголовки rate-limit
Заголовки X-RateLimit-Limit / X-RateLimit-Remaining на момент v2.0.8 не выставляются в ответах API (соответствующая настройка CORS в сервере отключена). Текущий лимит и остаток можно узнать только по 429-ответу (счётчик исчерпан) или в личном кабинете на app.api-sport.ru.
Эта функциональность планируется к реализации в ближайших версиях API. Следите за Changelog.
Рекомендации по экономии лимита
- Кэшируйте ответы матчей с финальным статусом (
finished,canceled) — они не меняются. - Используйте WebSocket для live-данных вместо polling — это не учитывается в REST-лимите.
- Фильтруйте запросы через query-параметры (
status,tournament_id,date,category_ids) — это уменьшит payload и заодно отдаст только нужные матчи. - Используйте
ids=с CSV-списком до 100 ID матчей за один запрос, вместо 100 одиночных запросов.