Перейти к основному содержимому

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.

Рекомендации по экономии лимита​

  • Кэшируйте ответы завершённых матчей, когда scoreStatus.final === true, и отменённых (canceled) — такой результат больше не меняется. Пока final: false (низшие и любительские лиги), счёт может корректироваться ещё несколько дней — перепроверяйте такие матчи раз в сутки по ids= либо держите WebSocket-подписку на матч: исправление придёт обычным match_delta. См. Структура Match → scoreStatus.
  • Используйте WebSocket для live-данных вместо polling — это не учитывается в REST-лимите.
  • Фильтруйте запросы через query-параметры (status, tournament_id, date, category_ids) — это уменьшит payload и заодно отдаст только нужные матчи.
  • Используйте ids= с CSV-списком до 100 ID матчей за один запрос, вместо 100 одиночных запросов.