Букмекерские коэффициенты
API возвращает коэффициенты двух уровней:
oddsBase— базовые рынки (1×2, Over/Under, Handicap). Бесплатно для всех тарифов.oddsBk— расширенные рынки от конкретных букмекеров. Поддерживаются четыре букмекера: Melbet (slugmelbet), Pari (slugpari), Marathon (slugmarathon) и Betboom (slugbetboom). Параметр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коэффициенты лежат вmarkets→stakes→factor/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.