Level Odds API
Level Odds — поток коэффициентов букмекеров по API. Это та же лента, с которой работают боты Level: события и рынки уже сопоставлены и приведены к одному формату, а вместе с ценой приходят счёт, статус рынка и время цены.
Сервис готовится к запуску. Подключение — по заявке в поддержку.
Что входит
- Букмекеры: BC.game, Stake, PS3838.
- Режимы: live и prematch.
- Виды спорта: футбол, баскетбол, теннис, бейсбол, хоккей, американский футбол, волейбол, CS2, Dota 2, League of Legends.
Состав зависит от тарифа. В тарифе также задаются:
- число одновременных подключений на организацию;
- задержка ленты;
- как часто приходят изменения;
- суточный объём трафика (считается по суткам UTC);
- срок подписки.
Ключ доступа
Ключ выдаёт Level. Один ключ открывает одного букмекера в одном режиме и выбранные виды спорта из тарифа; для других сочетаний нужны отдельные ключи.
- Ключ показывается один раз — сохраните его сразу. Level хранит только проверочное значение и восстановить ключ не может.
- Если ключ попал к посторонним, попросите замену: старый ключ отзывается, новый выдаётся с той же областью.
- При отзыве ключа, окончании подписки или изменении тарифа открытые соединения закрываются.
Не передавайте ключ в адресе, куки или логах.
Подключение
Соединение — WebSocket через TLS.
| Параметр | Значение |
|---|---|
| Адрес | wss://api.level-bot.com/odds/external/v1 |
| Ключ | заголовок Authorization: Bearer <ключ> |
| Протокол | Sec-WebSocket-Protocol: level-odds.v1 — кадры JSON; level-odds.v2 — пакеты |
Порядок обмена:
- Сервер первым присылает
hello: версию протокола, доступные потоки, время сервера и интервал пульса. - Клиент отправляет
subscribeсо списком потоков. Пустой список — все потоки ключа. - Сервер отвечает
subscribedс принятыми потоками. Данные принимайте только после этого кадра. - Для каждого потока приходит снимок:
lifecycle«снимок начат», кадры снимка,lifecycle«снимок завершён». Поток пригоден к работе только после завершения снимка. - Дальше приходят изменения:
upsert— новая или изменённая котировка,removal— рынок или событие сняты. При тишине сервер присылаетheartbeat.
Поток называется книга|режим|спорт, например stake|live|soccer.
Котировка
upsert содержит объект котировка. Основные поля:
| Поле | Смысл |
|---|---|
book, book_event_id |
книга и номер события у книги |
sport, league, home, away, starts |
вид спорта, лига, команды, начало матча |
live |
live или prematch |
market, side, line, period |
рынок, исход, линия, период |
price |
коэффициент |
status |
open, suspended или not_exists |
score_home, score_away |
счёт в live |
ts, ts_native |
время цены и признак, что его подтвердил источник |
removal снимает конкретный рынок или, если рынок не указан, всё событие. Отсутствие котировки в данных не означает, что рынок снят.
Порядок и пересинхронизация
У каждого кадра данных есть позиция с номером sequence. После снимка номер растёт ровно на единицу.
- Пропуск, повтор или откат номера, кадр
resetилиlifecycle«требуется пересинхронизация» означают: очистите данные потока и дождитесь нового полного снимка. Не держите старые рынки. heartbeatподтверждает только, что соединение живо. Свежесть цены проверяйте поts: приts_native: falseвозраст цены не подтверждён.- После переподключения можно продолжить с сохранённых позиций командой
resume. Если позиции устарели, сервер пришлётresetи новый снимок.
Ошибки
| Код закрытия | Причина |
|---|---|
4401 |
ключа нет, он неверен или отозван |
4403 |
поток вне области ключа, подписка неактивна или изменился тариф |
4406 |
неподдерживаемая версия протокола |
4429 |
превышен лимит подключений, частоты запросов или суточного объёма |
1013 |
сервис временно недоступен — повторите позже |
1011 |
клиент не успевает читать данные |
Отказ ещё до установки соединения, в том числе по лимиту, приходит как ответ HTTP 403 без кода закрытия. Запрос потока вне области ключа даёт кадр error. Автоматически переподключаться стоит только после кода 1012: с паузами 0,5, 1 и 2 секунды, не дольше 30 секунд в сумме.
Клиент на Python
Для подключения есть готовый клиент на Python: он проверяет порядок кадров, хранит позиции и сам запрашивает новый снимок при разрыве. Клиент и пример запуска выдаёт поддержка вместе с ключом.
Поддержка
Вопросы по ключам, тарифам и подключению — в поддержку: чат в кабинете, @TheLevel_supportbot или support@level-bot.com.