curl --request GET \
--url 'https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey='import requests
url = "https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey="
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey=")
.asString();require 'uri'
require 'net/http'
url = URI("https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body[
{
"fixtureId": "id1400003160574217",
"reissuedFixtureId": null,
"status": {
"live": false,
"statusId": 0,
"statusName": "Pre-Game"
},
"sport": {
"sportId": 14,
"sportName": "American Football"
},
"tournament": {
"tournamentId": 31,
"tournamentName": "NFL",
"categoryName": "USA"
},
"season": {
"seasonId": 31625,
"seasonName": "NFL 25/26",
"seasonRound": 16
},
"venue": {
"venueId": 5821,
"venueSlug": "ford-field",
"venueName": "Ford Field",
"venueLocation": "Detroit, MI, USA"
},
"startTime": 1766698200,
"participants": {
"participant1Id": 4423,
"participant1RotNr": 271,
"participant1Name": "Minnesota Vikings",
"participant1ShortName": "Minnesota",
"participant1Abbr": "MIN",
"participant2Id": 4419,
"participant2RotNr": 272,
"participant2Name": "Detroit Lions",
"participant2ShortName": "Detroit",
"participant2Abbr": "DET"
},
"scores": {},
"clock": {
"currentPeriod": null,
"currentTime": null,
"remainingTime": null,
"remainingTimeInPeriod": null,
"stopped": null
},
"expectedPeriods": 4,
"periodLength": 15,
"externalProviders": {
"betgeniusId": 13755104,
"betradarId": 60574217,
"pinnacleId": 1620331774
},
"odds": {
"bet365": {
"id1400003160574217:bet365:141:0": {
"bookmaker": "bet365",
"outcomeId": 141,
"playerId": 0,
"active": true,
"price": 3.8,
"marketActive": true,
"mainLine": true,
"priceAmerican": 280,
"marketId": 141,
"changedAt": 1766667441097
},
"id1400003160574217:bet365:146:0": {
"bookmaker": "bet365",
"outcomeId": 146,
"playerId": 0,
"active": true,
"price": 2.1,
"marketActive": true,
"mainLine": true,
"priceAmerican": 110,
"marketId": 146,
"changedAt": 1766667441097
}
}
},
"bookmakers": {
"bet365": {
"bookmaker": "bet365",
"bookmakerFixtureId": "186526495",
"fixturePath": null,
"hasOdds": true,
"staleOdds": false,
"suspended": false,
"participantsRotated": false,
"updatedAt": "2025-12-16T23:21:33.763847+00:00"
}
},
"parlay": {
"bet365": {
"id1400003160574217:bet365:141:0,id1400003160574217:bet365:146:0": {
"bookmaker": "bet365",
"active": true,
"price": 7.98,
"priceFractional": "349/50",
"priceAmerican": 698,
"singlesPrice": 7.98,
"changedAt": 1766667441097
}
}
}
}
]串关赔率
根据选定的 oddsIds 计算串关(accumulator)赔率。
各关按博彩公司分组,并在本地将每组的当前赔率相乘——不会向博彩公司发起请求,也不做相关性调整。各关可以跨多个赛事和运动项目;如需同场相关性定价,请使用 /fixtures/odds/sgp。
每个涉及的赛事返回一个普通赛事视图(按 fixtureId 排序),并新增 parlay 部分。跨赛事的串关会在每一个涉及的赛事上返回相同的条目。
每次请求最多 20 关。
curl --request GET \
--url 'https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey='import requests
url = "https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey="
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey=")
.asString();require 'uri'
require 'net/http'
url = URI("https://v5.oddspapi.io/zh/fixtures/odds/parlay?apiKey=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body[
{
"fixtureId": "id1400003160574217",
"reissuedFixtureId": null,
"status": {
"live": false,
"statusId": 0,
"statusName": "Pre-Game"
},
"sport": {
"sportId": 14,
"sportName": "American Football"
},
"tournament": {
"tournamentId": 31,
"tournamentName": "NFL",
"categoryName": "USA"
},
"season": {
"seasonId": 31625,
"seasonName": "NFL 25/26",
"seasonRound": 16
},
"venue": {
"venueId": 5821,
"venueSlug": "ford-field",
"venueName": "Ford Field",
"venueLocation": "Detroit, MI, USA"
},
"startTime": 1766698200,
"participants": {
"participant1Id": 4423,
"participant1RotNr": 271,
"participant1Name": "Minnesota Vikings",
"participant1ShortName": "Minnesota",
"participant1Abbr": "MIN",
"participant2Id": 4419,
"participant2RotNr": 272,
"participant2Name": "Detroit Lions",
"participant2ShortName": "Detroit",
"participant2Abbr": "DET"
},
"scores": {},
"clock": {
"currentPeriod": null,
"currentTime": null,
"remainingTime": null,
"remainingTimeInPeriod": null,
"stopped": null
},
"expectedPeriods": 4,
"periodLength": 15,
"externalProviders": {
"betgeniusId": 13755104,
"betradarId": 60574217,
"pinnacleId": 1620331774
},
"odds": {
"bet365": {
"id1400003160574217:bet365:141:0": {
"bookmaker": "bet365",
"outcomeId": 141,
"playerId": 0,
"active": true,
"price": 3.8,
"marketActive": true,
"mainLine": true,
"priceAmerican": 280,
"marketId": 141,
"changedAt": 1766667441097
},
"id1400003160574217:bet365:146:0": {
"bookmaker": "bet365",
"outcomeId": 146,
"playerId": 0,
"active": true,
"price": 2.1,
"marketActive": true,
"mainLine": true,
"priceAmerican": 110,
"marketId": 146,
"changedAt": 1766667441097
}
}
},
"bookmakers": {
"bet365": {
"bookmaker": "bet365",
"bookmakerFixtureId": "186526495",
"fixturePath": null,
"hasOdds": true,
"staleOdds": false,
"suspended": false,
"participantsRotated": false,
"updatedAt": "2025-12-16T23:21:33.763847+00:00"
}
},
"parlay": {
"bet365": {
"id1400003160574217:bet365:141:0,id1400003160574217:bet365:146:0": {
"bookmaker": "bet365",
"active": true,
"price": 7.98,
"priceFractional": "349/50",
"priceAmerican": 698,
"singlesPrice": 7.98,
"changedAt": 1766667441097
}
}
}
}
]授权
作为 apiKey 查询参数传入的 API 密钥。
查询参数
以逗号或空格分隔的 oddsIds,格式为 {fixtureId}:{bookmaker}:{outcomeId}:{playerId}。重复项会被去除,列表会被排序。每家博彩公司的各关构成一个串关。最多 20 关。
响应
每个涉及的赛事返回一个 FixtureParlayResponse,按 fixtureId 排序。
赛事标识符:{prefix}{sportId}{tournamentId}{nativeId} —— 参见核心概念 → ID 结构。
当一场被取消的赛事以新的 id 重新上架时,这里是替代它的那场赛事。null 才是常态:只有在赛事已被取消(status.statusId 为 3)且替代赛事确实已出现在数据流中时才会被填充,因此永久性取消会一直保持 null,而一场赛事也可能在您首次看到它被取消之后才从 null 变为具体的 id。只指向一跳:若该替代赛事本身也被取消,请继续跟随它自己的 reissuedFixtureId。
赛事的生命周期状态。
Show child attributes
Show child attributes
运动引用。
Show child attributes
Show child attributes
锦标赛引用。
Show child attributes
Show child attributes
赛季引用(如已解析)。
Show child attributes
Show child attributes
场馆引用(如已知)。
Show child attributes
Show child attributes
Epoch seconds (UTC).
双方参赛者,含名称、轮转号和缩写。
Show child attributes
Show child attributes
按赛段键组织的比分行(result、p1……)。
Show child attributes
Show child attributes
比赛进行中的实时计时。
Show child attributes
Show child attributes
该赛事在外部数据源(betradar、pinnacle 等)的原生标识符。
bookmakerSlug -> BookmakerFixtureMeta,仅包含所请求的博彩公司。
Show child attributes
Show child attributes
仅包含该赛事中所请求的各关——包括 inactive 的关(不做 activeOnly 过滤)。其结构与内容与 /fixtures/odds 返回的对应行完全一致。
Show child attributes
Show child attributes
bookmakerSlug -> (parlayId -> ParlayEntry)。parlayId 是去重并排序后的 oddsIds 以 , 连接而成。如果某家博彩公司的各关未能全部找到,它会被整体省略,因此该对象可能为 {}。
Show child attributes
Show child attributes
实际开始时间(ISO 8601,一旦已知)—— 可能与计划的 startTime 不同。
实际结束时间(ISO 8601,一旦已知)。
该赛事预期的常规赛段数 —— 结合 periodLength 用于按运动/联赛解读赛段键。
常规赛段的时长(分钟)。
该赛事中未能找到的已请求 oddsIds(未知的博彩公司、未知或已过期的 oddsId)。仅在至少有一关缺失时才会出现。