curl --request GET \
--url 'https://v5.oddspapi.io/zh/fixtures/odds/sgp?apiKey='import requests
url = "https://v5.oddspapi.io/zh/fixtures/odds/sgp?apiKey="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://v5.oddspapi.io/zh/fixtures/odds/sgp?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/sgp?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/sgp?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/sgp?apiKey=")
.asString();require 'uri'
require 'net/http'
url = URI("https://v5.oddspapi.io/zh/fixtures/odds/sgp?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",
"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"
}
},
"sgp": {
"bet365": {
"id1400003160574217:bet365:141:0,id1400003160574217:bet365:146:0": {
"bookmaker": "bet365",
"active": true,
"price": 6.5,
"priceFractional": "11/2",
"priceAmerican": 550,
"limit": 500,
"singlesPrice": 7.98,
"changedAt": 1766667441097,
"bookmakerParlayId": "B365-2493810567",
"bookmakerChangedAt": 1766667440813,
"betslip": "https://www.bet365.com/dl/sportsbookredirect?bs=..."
}
}
}
}同场串关(SGP)赔率
根据选定的 oddsIds 计算带相关性的同场串关(SGP)赔率。
所有 oddsIds 必须属于同一个赛事。各关由博彩公司自己定价,因此 price 体现了各关之间的相关性;singlesPrice 是简单相乘的结果,两者之差即为相关性加成。可以一次请求多家博彩公司并列返回。
返回一个赛事视图,并新增 sgp 部分。
每次请求最多 20 关。
curl --request GET \
--url 'https://v5.oddspapi.io/zh/fixtures/odds/sgp?apiKey='import requests
url = "https://v5.oddspapi.io/zh/fixtures/odds/sgp?apiKey="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://v5.oddspapi.io/zh/fixtures/odds/sgp?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/sgp?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/sgp?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/sgp?apiKey=")
.asString();require 'uri'
require 'net/http'
url = URI("https://v5.oddspapi.io/zh/fixtures/odds/sgp?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",
"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"
}
},
"sgp": {
"bet365": {
"id1400003160574217:bet365:141:0,id1400003160574217:bet365:146:0": {
"bookmaker": "bet365",
"active": true,
"price": 6.5,
"priceFractional": "11/2",
"priceAmerican": 550,
"limit": 500,
"singlesPrice": 7.98,
"changedAt": 1766667441097,
"bookmakerParlayId": "B365-2493810567",
"bookmakerChangedAt": 1766667440813,
"betslip": "https://www.bet365.com/dl/sportsbookredirect?bs=..."
}
}
}
}授权
作为 apiKey 查询参数传入的 API 密钥。
查询参数
以逗号或空格分隔的 oddsIds,格式为 {fixtureId}:{bookmaker}:{outcomeId}:{playerId}。重复项会被去除,列表会被排序。每家博彩公司的各关构成一个串关。最多 20 关。 所有 oddsIds 必须属于同一个赛事。
响应
为各关所属的赛事返回一个 FixtureSgpResponse。
赛事标识符:{prefix}{sportId}{tournamentId}{nativeId} —— 参见核心概念 → ID 结构。
赛事的生命周期状态。
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 过滤)。
Show child attributes
Show child attributes
bookmakerSlug -> (parlayId -> SgpEntry)。parlayId 的构造方式与 /fixtures/odds/parlay 完全相同,因此两者可直接比较。以下两种情况该博彩公司会被整体省略(对象可能为 {}):各关未能全部找到;或各关都已找到但该博彩公司自己的定价服务无法报价——后者不会出现 missingOddsIds。
Show child attributes
Show child attributes
实际开始时间(ISO 8601,一旦已知)—— 可能与计划的 startTime 不同。
实际结束时间(ISO 8601,一旦已知)。
该赛事预期的常规赛段数 —— 结合 periodLength 用于按运动/联赛解读赛段键。
常规赛段的时长(分钟)。
该赛事中未能找到的已请求 oddsIds(未知的博彩公司、未知或已过期的 oddsId)。仅在至少有一关缺失时才会出现。