LLevel Wiki
СайтКабинет
Справка›Level Odds API

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 — пакеты

Порядок обмена:

  1. Сервер первым присылает hello: версию протокола, доступные потоки, время сервера и интервал пульса.
  2. Клиент отправляет subscribe со списком потоков. Пустой список — все потоки ключа.
  3. Сервер отвечает subscribed с принятыми потоками. Данные принимайте только после этого кадра.
  4. Для каждого потока приходит снимок: lifecycle «снимок начат», кадры снимка, lifecycle «снимок завершён». Поток пригоден к работе только после завершения снимка.
  5. Дальше приходят изменения: 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.