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

Букмекерские коэффициенты

API возвращает коэффициенты двух уровней:

  • oddsBase — базовые рынки (1×2, Over/Under, Handicap). Бесплатно для всех тарифов.
  • oddsBk — расширенные рынки от конкретных букмекеров. Поддерживаются четыре букмекера: Melbet (slug melbet), Pari (slug pari), Marathon (slug marathon) и Betboom (slug betboom). Параметр bookmaker_ids принимает melbet, pari, marathon, betboom (можно через запятую). Дополнительные букмекеры будут добавлены в следующих версиях — следите за Changelog.

Pari (slug pari) доступен для футбола, хоккея, баскетбола, тенниса, волейбола и киберспорта (настольный теннис не поддерживается). Набор рынков базовый: исход (1×2), двойной шанс, фора, тотал.

Marathon (slug marathon) доступен для всех семи видов спорта — футбол, хоккей, баскетбол, теннис, настольный теннис, волейбол, киберспорт. Набор рынков (зависит от вида спорта): исход (1×2 / 2 исхода), двойной шанс, фора, тотал, индивидуальные тоталы команд, «обе забьют», тотал чёт/нечёт.

Betboom (slug betboom) доступен для всех семи видов спорта — футбол, хоккей, баскетбол, теннис, настольный теннис, волейбол, киберспорт. Набор рынков (зависит от вида спорта): исход (1×2 — для видов спорта с ничьей), фора, тотал. Для футбола дополнительно доступны те же рынки по таймам (1-й и 2-й тайм) — слаги вида 1st_half_total, 2nd_half_handicap, 1st_half_result.

Фильтрация матчей с коэффициентами

# Только матчи с букмекерскими коэффициентами
curl -H "Authorization: YOUR_KEY" \
"https://api.api-sport.ru/v2/football/matches?has_bk_odds=true"

# Включить рынки конкретных букмекеров в payload
curl -H "Authorization: YOUR_KEY" \
"https://api.api-sport.ru/v2/football/matches/12345678?with_bk_odds=true&bookmaker_ids=melbet,pari,marathon,betboom"

Структура oddsBk

oddsBk — объект, где ключи — слаги букмекеров (melbet, pari, marathon, betboom). Значение — данные букмекера (BookmakerOddsData):

{
"oddsBk": {
"melbet": {
"slug": "melbet",
"name": { "en": "Melbet", "ru": "Мелбет" },
"updatedAt": 1717000000000,
"isBettingActive": true,
"markets": {
"result": {
"name": { "en": "Result", "ru": "Исход" },
"hasArgument": false,
"stakeKeys": ["w1", "x", "w2"],
"stakes": {
"w1": { "name": { "en": "Win1", "ru": "П1" }, "factor": 1.85 },
"x": { "name": { "en": "X", "ru": "X" }, "factor": 3.40 },
"w2": { "name": { "en": "Win2", "ru": "П2" }, "factor": 4.20 }
}
},
"total": {
"name": { "en": "Total", "ru": "Тотал" },
"hasArgument": true,
"stakeKeys": ["over", "under"],
"stakes": {
"over": { "name": { "en": "Over", "ru": "Больше" }, "lines": [ { "argument": 2.5, "factor": 1.95, "dateUpdateMs": 1717000000000 } ] },
"under": { "name": { "en": "Under", "ru": "Меньше" }, "lines": [ { "argument": 2.5, "factor": 1.88, "dateUpdateMs": 1717000000000 } ] }
}
}
}
},
"pari": {
"slug": "pari",
"name": { "en": "Pari", "ru": "Пари" },
"updatedAt": 1717000000000,
"isBettingActive": true,
"markets": {
"result": {
"name": { "en": "Result", "ru": "Исход" },
"hasArgument": false,
"stakeKeys": ["w1", "x", "w2"],
"stakes": {
"w1": { "name": { "en": "Win1", "ru": "П1" }, "factor": 1.80 },
"x": { "name": { "en": "X", "ru": "X" }, "factor": 3.50 },
"w2": { "name": { "en": "Win2", "ru": "П2" }, "factor": 4.40 }
}
}
}
},
"marathon": {
"slug": "marathon",
"name": { "en": "Marathon", "ru": "Марафон" },
"updatedAt": 1717000000000,
"isBettingActive": true,
"markets": {
"result": {
"name": { "en": "Result", "ru": "Исход" },
"hasArgument": false,
"stakeKeys": ["w1", "x", "w2"],
"stakes": {
"w1": { "name": { "en": "Win1", "ru": "П1" }, "factor": 2.40 },
"x": { "name": { "en": "X", "ru": "X" }, "factor": 3.30 },
"w2": { "name": { "en": "Win2", "ru": "П2" }, "factor": 2.90 }
}
}
}
},
"betboom": {
"slug": "betboom",
"name": { "en": "BetBoom", "ru": "БетБум" },
"updatedAt": 1717000000000,
"isBettingActive": true,
"markets": {
"result": {
"name": { "en": "Result", "ru": "Исход" },
"hasArgument": false,
"stakeKeys": ["w1", "x", "w2"],
"stakes": {
"w1": { "name": { "en": "Win1", "ru": "П1" }, "factor": 1.90 },
"x": { "name": { "en": "X", "ru": "X" }, "factor": 3.60 },
"w2": { "name": { "en": "Win2", "ru": "П2" }, "factor": 3.90 }
}
},
"1st_half_total": {
"name": { "en": "1st Half: Total", "ru": "1st Half: Total" },
"hasArgument": true,
"stakeKeys": ["over", "under"],
"stakes": {
"over": { "name": { "en": "Over", "ru": "Больше" }, "lines": [ { "argument": 1.5, "factor": 1.85, "dateUpdateMs": 1717000000000 } ] },
"under": { "name": { "en": "Under", "ru": "Меньше" }, "lines": [ { "argument": 1.5, "factor": 1.90, "dateUpdateMs": 1717000000000 } ] }
}
}
}
}
}
}

Ключевые моменты (схемы BookmakerOdds / BookmakerOddsData / BkOddsMarket / BkOddsStake / BkOddsLine):

  • Все букмекеры используют одни и те же слаги рынков и исходов — например рынок result с исходами w1 / x / w2, рынок total с over / under. Это позволяет сравнивать коэффициенты разных букмекеров по одному ключу.
  • markets — это объект, ключи которого — слаги рынков (result, total, handicap, double_chance, …; у некоторых букмекеров — также рынки по периодам/таймам, напр. 1st_half_total, 2nd_half_handicap), а не массив. Порядок исходов — в stakeKeys.
  • stakes — тоже объект, ключи — слаги исходов (w1, over, …).
  • hasArgument: false → у исхода поле factor (коэффициент).
  • hasArgument: true → вместо factor у исхода массив lines[]: каждый элемент имеет argument (значение тотала/гандикапа), factor (коэффициент) и dateUpdateMs. lines отсортирован по argument.
  • name везде — мультиязычный объект { en, ru }.
  • updatedAt — время обновления коэффициентов (timestamp в мс); isBettingActive — активны ли ставки сейчас.

⚠️ Не путайте с oddsBase: там другой формат — массив OddsMarket[] с choices[].decimal. У oddsBk коэффициенты лежат в marketsstakesfactor / lines[].factor, как показано выше.

Поле hasBkOdds

Всегда присутствует в Match — по флагу на каждого букмекера:

{ "hasBkOdds": { "melbet": true, "pari": false, "marathon": true, "betboom": true } }

Это позволяет быстро отфильтровать матчи без загрузки полных коэффициентов. Наличие коэффициентов у букмекеров независимо: у матча могут быть данные только одного из них, обоих или ни одного.

Словарь рынков

Полное описание market'ов (английские названия, ID, переводы) — /v2/BkOddsDict.json:

curl https://api.api-sport.ru/v2/BkOddsDict.json

Это статический файл (~МБ), кэшируйте на 24 часа.

Изменение коэффициентов в реальном времени

Коэффициенты приходят через WebSocket: match_snapshot включает oddsBk всех подключённых букмекеров, а при изменении кэфов подписчикам матча приходит match_delta с блоком changes.updated.oddsBk.<bookmaker> целиком (применять заменой блока, не deep-merge). Дельта отправляется только при реальном изменении значений. Подробнее — WebSocket → Snapshot vs Delta.