赔率是足球数据里最活跃的一类,赛前它随市场情绪缓慢移动,开赛后它跟着场上每一次射门、每一个进球实时跳动。
很多开发者在接入赔率数据时最头疼的,不是拿不到数字,而是数据结构太散:赛前一套、滚球一套,让分线藏在哪、盘口怎么归类、多语言怎么显示,往往要翻好几份文档才拼得起来。
AnySport 把赔率数据收敛成了两个端点:赛前赔率和滚球赔率。它们共用同一个 match_id、同一套响应信封、同一种十进制赔率格式。
一、两个端点,一个 match_id
AnySport 的赔率数据由两个 REST 端点提供:
| 端点 | 阶段 | 更新方式 |
|---|---|---|
GET /odds/prematch | 赛前 | 轮询更新(看 updated_at) |
GET /odds/live | 滚球(比赛进行中) | 秒级实时变化 |
基址是 https://data.anysport.io/v1/soccer,所有请求带一个请求头认证:
apikey: YOUR_API_KEY两个端点接受的 match_id 与赛程 GET /matches 完全一致,从赛程发现到比分、事件、赔率,全程一个 ID 走到底,不需要任何映射表。这是 AnySport 数据模型最省心的地方,赔率接口也不例外。
赔率来源目前统一为 bet365(响应里的 bookmaker 字段)。这个字段是为将来接入多家赔率源预留的,现在恒为该值即可。
二、赛前赔率:GET /odds/prematch
赛前赔率返回一场比赛在开赛前的赔率快照,覆盖 60+ 种盘口,胜平负、让球、进球数、角球、黄牌、正确比分等等。你可以用 match_id 查单场,也可以用 league(联赛名)批量查询。
GET /v1/soccer/odds/prematch?match_id=as_37f0da0520bb4e9a9588f80994cefc5b{
"success": true,
"data": [
{
"match_id": "as_37f0da0520bb4e9a9588f80994cefc5b",
"home": "England",
"away": "Argentina",
"bookmaker": "bet365",
"phase": "prematch",
"main_market": "match_winner",
"home_odd": 2.62,
"draw_odd": 3.0,
"away_odd": 3.0,
"markets": [
{
"market_code": "match_winner",
"options": [
{ "name": "Home", "odd": 2.62 },
{ "name": "Draw", "odd": 3.0 },
{ "name": "Away", "odd": 3.0 }
]
},
{
"market_code": "asian_handicap",
"options": [
{ "name": "Home -1.25", "odd": 4.8 },
{ "name": "Away +1.25", "odd": 1.18 }
]
}
]
}
]
}几个关键字段:
main_market+home_odd/draw_odd/away_odd:主盘口是全场胜平负(match_winner),三个赔率直接平铺在顶层,做主推展示时不用再去markets里翻。markets[]:全部盘口列表,每个是{ market_code, options: [{ name, odd }] }。market_code是 snake_case 的英文枚举(如match_winner、asian_handicap),会随时间扩充。odd:十进制赔率(decimal odds)。
⚠️ 赛前的让分值嵌在选项名里。赛前赔率没有盘口级别的
handicap字段,让球/大小球这类盘口把盘口线直接写进name,例如亚盘Home -1.25/Away +1.25(成对出现,两边数值互为相反数),大小球Over 2.5/Under 2.5。同一个盘口里可以同时存在多条盘口线。
三、滚球赔率:GET /odds/live
滚球赔率返回进行中比赛的实时赔率。不带 match_id 时,它会返回所有正在进行、有活跃盘口的比赛。这本身就能当作实时比赛查询的一个入口;带 match_id 时,查询单场的全部活跃盘口。
一场比赛在滚球阶段同时可以有 70–80 个活跃盘口实例,覆盖约 11 大类。
GET /v1/soccer/odds/live?match_id=as_3b37c382f39a4235aa93705f053b2da4{
"success": true,
"data": [
{
"match_id": "as_3b37c382f39a4235aa93705f053b2da4",
"home": "Argentina",
"away": "Switzerland",
"league": "World Cup 2026",
"bookmaker": "bet365",
"phase": "live",
"main_market": "fulltime_result",
"home_odd": 13.0,
"draw_odd": 1.04,
"away_odd": 51.0,
"markets": [
{
"market_code": "asian_handicap",
"handicap": -0.5,
"options": [
{ "name": "1", "odd": 1.90 },
{ "name": "2", "odd": 1.90 }
]
}
]
}
]
}和赛前相比,滚球有两个结构性差异,接入时务必注意:
⚠️ 选项标签不一样:赛前用
Home/Draw/Away,滚球用1/X/2。如果你想让赛前和滚球复用同一套渲染逻辑,必须先做一层标签映射。⚠️ 让分值的位置不一样:滚球把盘口线放在盘口级别的
handicap字段里(如亚盘-0.5表示主队让半球),而不是像赛前那样写进选项名。没有让分概念的盘口,这个字段会直接省略(不下发,而不是给null)。
部分滚球盘口一览
下面是滚球盘口按类别的部分示例,帮你快速建立结构直觉(完整目录见文末链接):
| 类别 | 盘口示例 | 选项 | 是否有 handicap |
|---|---|---|---|
| 胜负 | 全场 1X2(主盘)、上半场 1X2、双胜、半全场 | 1 / X / 2 等 | 否 |
| 让球 | 亚洲让球盘、欧洲三向让球 | 1 / 2(欧盘含 X) | 是 |
| 大小球 | 进球 / 角球 / 射门 / 黄牌等大小球 | Over / Under | 是 |
| 正确比分 | 全场正确比分 | 1:0 / 2:1 / 0:0… | 否 |
| 是 / 否 | 双方是否都进球、是否再进球 | Yes / No | 视盘口而定 |
| 球员进球 | 下一个进球球员、任意时间进球球员 | 球员名字列表 | 视盘口而定 |
⚠️ 滚球盘口是动态的:比赛临近结束时盘口会收缩,进球后盘口会被撤下再重新挂出,终场后
markets可能变成空数组[]。客户端要能优雅处理这种收缩,别假设盘口一直存在。📖 完整滚球盘口目录(约 11 大类、45 种玩法、含每个
market_code)请见:滚球盘口完整文档
四、多语言支持:lang 参数
两个赔率端点都支持 lang 参数(默认 en,当前可选 en / zh-CN,后续会增加)。它的行为很克制、也很安全:
- 原始 code 字段永远不变:
main_market/market_code/ 选项name始终是英文原值,你的解析逻辑不用跟着语言变。 - 额外下发
*_label平行字段:main_market_label/market_code_label/options[].name_label提供本地化文本(如 zh-CN 下全场胜平负)用于直接展示。
GET /v1/soccer/odds/prematch?match_id=as_...&lang=zh-CN⚠️ 不是每个值都有本地化文本(例如
2:1这种比分字符串就没有),没有时对应的*_label字段会直接省略。渲染时优先用*_label,取不到就回退到原始name。此外,球队名 / 联赛名(home/away/league)目前还不随lang本地化。
五、接入要点速查
| # | 要点 | 说明 |
|---|---|---|
| 1 | 认证 | 请求头 apikey: KEY,仅此一种 |
| 2 | 一个 match_id 通用 | 赛程 / 比分 / 事件 / 赔率同一 ID |
| 3 | 赔率格式 | 十进制赔率(decimal odds) |
| 4 | 主盘口平铺 | home_odd / draw_odd / away_odd 在顶层 |
| 5 | 标签差异 | 赛前 Home/Draw/Away,滚球 1/X/2 |
| 6 | 让分位置 | 赛前在选项名里,滚球在 markets[].handicap |
| 7 | 无让分时 | handicap 字段省略,不是 null |
| 8 | 滚球盘口动态 | 会收缩,终场后 markets 可能为 [] |
| 9 | 多语言 | lang 只影响 *_label,原始 code 不变 |
| 10 | 未知盘口 | market_code 是开放枚举,容错未知值 |
六、开始接入
AnySport 的赔率接口把最繁琐的部分:ID 对齐、赛前/滚球统一模型、多语言标签,都替你收敛好了。你要做的只有三步:
- 从
GET /matches拿到match_id - 赛前用
GET /odds/prematch取赔率快照 - 开赛后切到
GET /odds/live获取秒级滚球赔率
赛前赔率包含在 Pro 套餐,滚球赔率与 WebSocket 推送包含在 Premium 套餐。现在就去 anysport.io 注册,免费试用 7 天,用你自己的 Key 把上面的示例跑一遍。