馬連
curl --request GET \
--url https://api.beter-keiba.com/v1/races/{raceId}/odds/quinella \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.beter-keiba.com/v1/races/{raceId}/odds/quinella"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.beter-keiba.com/v1/races/{raceId}/odds/quinella', 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://api.beter-keiba.com/v1/races/{raceId}/odds/quinella",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api.beter-keiba.com/v1/races/{raceId}/odds/quinella"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.beter-keiba.com/v1/races/{raceId}/odds/quinella")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beter-keiba.com/v1/races/{raceId}/odds/quinella")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"code": "SUCCESS",
"data": {
"raceId": "ra_2024052605021211",
"dataType": "3",
"dataUpdatedAt": 1716715200,
"announcedAt": 1716704000,
"entryCount": 18,
"starterCount": 18,
"createdAt": 1716704005,
"id": "o2_2024052605021211",
"saleFlag": 7,
"odds": [
{
"key": "05-12",
"odds": 46.6,
"popularity": 9
}
],
"totalVotes": 350000000
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "リクエストの形式が正しくありません。"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "有効なAPIキーが必要です。"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "指定されたIDのリソースが見つかりませんでした。"
}
}{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "サーバー内部で予期せぬエラーが発生しました。"
}
}Odds
馬連
GET
/
races
/
{raceId}
/
odds
/
quinella
馬連
curl --request GET \
--url https://api.beter-keiba.com/v1/races/{raceId}/odds/quinella \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.beter-keiba.com/v1/races/{raceId}/odds/quinella"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.beter-keiba.com/v1/races/{raceId}/odds/quinella', 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://api.beter-keiba.com/v1/races/{raceId}/odds/quinella",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api.beter-keiba.com/v1/races/{raceId}/odds/quinella"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.beter-keiba.com/v1/races/{raceId}/odds/quinella")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beter-keiba.com/v1/races/{raceId}/odds/quinella")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"code": "SUCCESS",
"data": {
"raceId": "ra_2024052605021211",
"dataType": "3",
"dataUpdatedAt": 1716715200,
"announcedAt": 1716704000,
"entryCount": 18,
"starterCount": 18,
"createdAt": 1716704005,
"id": "o2_2024052605021211",
"saleFlag": 7,
"odds": [
{
"key": "05-12",
"odds": 46.6,
"popularity": 9
}
],
"totalVotes": 350000000
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "リクエストの形式が正しくありません。"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "有効なAPIキーが必要です。"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "指定されたIDのリソースが見つかりませんでした。"
}
}{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "サーバー内部で予期せぬエラーが発生しました。"
}
}Authorizations
APIダッシュボードで発行された sk_live_... または sk_test_... キーを入力してください。prefix は mode を示し、両 mode とも同じ API URL で利用できます (sk_live_* = live mode / 本番、sk_test_* = test mode / 開発・自動テスト)。
Path Parameters
Race entity ID。JV-Data RA レコード由来の合成 PK (開催年月日 8 桁 + 場コード 2 桁 + 開催回 2 桁 + 開催日目 2 桁 + レース番号 2 桁)。場コード 2 桁は国内競馬場では数字だが、日本馬が出走する海外国際レースでは英大文字コードになる (JV-Data コード表 2001「競馬場コード」)。例: A6 はイギリス (GB) を表し、英ダービー等は ra_20190601A6000005 の形式になる。場コードの一覧は CourseCode を参照。
Pattern:
^ra_[0-9A-Z]{16}$Example:
"ra_2024052605021211"
Query Parameters
人気順で上位N件のみ取得 (1 以上 28 以下。中央競馬は最大 18 頭、海外国際レースは最大 28 頭まで)
Required range:
1 <= x <= 28指定したオッズ以上の組み合わせを抽出 (0 以上)
Required range:
x >= 0指定したオッズ以下の組み合わせを抽出 (0 以上)
Required range:
x >= 0その馬番が含まれる組み合わせのみ抽出 (1 以上 28 以下。中央競馬は最大 18 頭、海外国際レースは最大 28 頭まで)
Required range:
1 <= x <= 28取得するフィールドの絞り込み(カンマ区切り)
Maximum string length:
500Response
Success
成功レスポンスの共通ラッパー。code は常に "SUCCESS"、data にエンドポイント固有のレスポンスボディ、extensions に補助情報 (pagination や統計など) を含みます。