Четыре способа забирать одни и те же данные. Ниже — таблица «задача → канал», настоящие кадры потока, лимиты соединений и что делать после разрыва.
Начните отсюда. Большинству хватает первых двух строк, и держать соединение вообще не нужно.
| Что вы делаете | Чем брать | Почему так |
|---|---|---|
| Страница матча, таблица, расписание на сайте | GET /v1/event/{id} GET /v1/events |
Обычные запросы плюс ваш кэш. Соединение держать не нужно, отладка — обычным curl. |
| Первая заливка истории к себе в базу | GET /v1/sync | Матчи с полной деталью порциями до 500 и курсор на следующую страницу. |
| Ночная сверка «у меня то же, что у вас» | GET /v1/sync | Тот же запрос с сохранённым курсором отдаёт только изменившееся — заливка и сверка одним кодом. |
| Счёт меняется прямо в открытой вкладке | GET /v1/stream | Поток событий (SSE). Браузер сам переподключается, и мы досылаем пропущенное. |
| Ваш сервер держит одно соединение и раздаёт всем | GET /v1/stream WS /v1/stream/ws |
Одно соединение вместо тысячи опросов от каждого клиента. |
| Нужен двусторонний обмен | WS /v1/stream/ws | WebSocket: у соединения есть обратный канал, и курсор едет в каждом кадре. |
| Соединение держать не хотите вовсе | вебхуки | Мы сами приходим к вам подписанным запросом — как это устроено. |
| Догнать пропущенное после сбоя | GET /v1/stream/replay | События по курсору за 7 суток назад, до 500 за запрос. |
Поток и вебхуки несут ОДИН И ТОТ ЖЕ конверт события — байт в байт. Перейти с одного канала на другой можно, не переписывая обработчик.
Одно долгое HTTP-соединение, по которому идут события. Ключ передаётся заголовком
x-api-key или параметром key — второе нужно браузерному
EventSource, который своих заголовков ставить не умеет.
sport, league, event_type — через запятую. Приедет только то, что попадает в фильтр и в ваш доступ.
Пока событий нет, раз в 15 секунд приходит служебная строка. Прокси не считает соединение мёртвым, и вы тоже.
Через 60 минут сервер просит переподключиться. Это нормальный цикл, а не сбой: он не даёт долгоживущему соединению тихо протухнуть.
Клиент возвращает последний id заголовком Last-Event-ID, мы досылаем всё, что было после него — до 500 событий.
: connected cursor=98213152 retry: 1000 id: 98213377 event: match.goal data: {"id":"evt_11220580_17","type":"match.goal", …} : keep-alive 1785686355 cursor=98213377 // через час: : server-cycle; reconnect with Last-Event-Id
// первый кадр {"type": "connected", "cursor": 98213152} // событие: курсор + тот же конверт {"cursor": 98213377, "id": "evt_11220580_17", "type": "match.goal", "data": { … }} // в тишине {"type": "heartbeat", "ts": 1785686355, "cursor": 98213377} // через час {"type": "reconnect", "cursor": 98213377}
Тот же поток, но кадрами JSON и с обратным каналом. Курсор едет в каждом кадре — хранить
отдельный счётчик не нужно, при переподключении он передаётся параметром cursor.
4401 — ключ не принят, 4402 — канал не входит в тариф, 4422 — фильтр не разобран, 4429 — превышен лимит соединений. Не «просто закрылось».
Браузерный WebSocket заголовков не ставит, поэтому ключ передаётся в key. С сервера можно и заголовком x-api-key.
Чтобы посчитать нагрузку заранее, а не упереться в неё на живом туре.
| Тариф | Запросов в секунду | Поток и вебхуки |
|---|---|---|
| Free | 500 запросов / мес | нет |
| Starter | 5 | нет |
| Pro | 20 | входят |
| Business | 100 | входят |
Суточных ограничений на число запросов нет — только запросы в секунду. Полный состав тарифов — на странице тарифов.
Разрыв соединения — обычное дело: мобильная сеть, перезапуск, часовой цикл. Порядок один и тот же.
В SSE это строка id:, в WebSocket — поле cursor кадра. Один целочисленный курсор на всё.
SSE — заголовок Last-Event-ID (браузер ставит его сам) или параметр last_event_id. WebSocket — параметр cursor.
До 500 событий сразу после подключения, дальше поток идёт как обычно.
Дозаберите его запросом: GET /v1/stream/replay?since={курсор}&limit=500. В ответе — next_cursor и has_more, листайте, пока не догоните.
Глубже 7 суток события уже не хранятся — сверяйтесь через GET /v1/sync, который идёт по самим матчам, а не по событиям.
Ограничения канала важнее его достоинств: по ним считается архитектура.
sequence внутри матча, повтор возможен — обработчик должен быть идемпотентным.Значения на странице сверены с боевой отдачей 5 августа 2026.
Начать можно с обычных запросов и перейти на поток, не переписывая обработчик.
Ответим в течение рабочего дня. Пробный доступ бесплатно.
Ответим на
в течение рабочего дня.