curl --request GET \
--url 'https://v5.oddspapi.io/en/futures?apiKey='import requests
url = "https://v5.oddspapi.io/en/futures?apiKey="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://v5.oddspapi.io/en/futures?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/en/futures?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/en/futures?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/en/futures?apiKey=")
.asString();require 'uri'
require 'net/http'
url = URI("https://v5.oddspapi.io/en/futures?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[
{
"futureId": "id100000261286891",
"reissuedFutureId": null,
"previousFutureId": null,
"status": {
"live": true,
"statusId": 1,
"statusName": "Live"
},
"sport": {
"sportId": 10,
"sportName": "Soccer"
},
"tournament": {
"tournamentId": 26,
"tournamentName": "U21 UEFA European Championship, Qualification",
"categoryName": "International Youth"
},
"season": {
"seasonId": 128689,
"seasonName": "U21 UEFA European Championship 2027, Qualification"
},
"startTime": 1749081600,
"endTime": 1794959999,
"market": {
"marketId": 1,
"marketName": null,
"marketType": null
},
"participants": [],
"externalProviders": {
"betradarId": 128689,
"flashscoreId": null,
"opticoddsId": null,
"polymarketId": null,
"kalshiId": null,
"sofascoreId": null
},
"bookmakers": {}
}
]Futures Filtered
List futures.
Lookup mode: futureIds OR sportId OR tournamentId (at least one).
curl --request GET \
--url 'https://v5.oddspapi.io/en/futures?apiKey='import requests
url = "https://v5.oddspapi.io/en/futures?apiKey="
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://v5.oddspapi.io/en/futures?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/en/futures?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/en/futures?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/en/futures?apiKey=")
.asString();require 'uri'
require 'net/http'
url = URI("https://v5.oddspapi.io/en/futures?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[
{
"futureId": "id100000261286891",
"reissuedFutureId": null,
"previousFutureId": null,
"status": {
"live": true,
"statusId": 1,
"statusName": "Live"
},
"sport": {
"sportId": 10,
"sportName": "Soccer"
},
"tournament": {
"tournamentId": 26,
"tournamentName": "U21 UEFA European Championship, Qualification",
"categoryName": "International Youth"
},
"season": {
"seasonId": 128689,
"seasonName": "U21 UEFA European Championship 2027, Qualification"
},
"startTime": 1749081600,
"endTime": 1794959999,
"market": {
"marketId": 1,
"marketName": null,
"marketType": null
},
"participants": [],
"externalProviders": {
"betradarId": 128689,
"flashscoreId": null,
"opticoddsId": null,
"polymarketId": null,
"kalshiId": null,
"sofascoreId": null
},
"bookmakers": {}
}
]Authorizations
Your API key as the apiKey query parameter.
Query Parameters
Comma-separated internal future IDs.
Single sport ID.
Single tournament ID.
Earliest startTime (epoch seconds, inclusive).
Latest startTime (epoch seconds, inclusive).
If provided, includes bookmakers meta per future AND filters by mapping. Note: no future currently carries a bookmaker mapping, so passing any value — including * or empty — returns an empty result set.
Response
Returns FutureMeta[]
Future identifier: {prefix}{sportId}{seasonId}{futureMarketId} — see Core Concepts → Future IDs. Tournament is a field on the future, not a segment of this ID.
The future that replaced this one, when a cancelled future has been re-listed under a new id. null is the normal value: it is only ever populated on a cancelled future (status.statusId 3) whose replacement already exists in the feed, so permanent cancellations stay null, and a future can go from null to an id after you first saw it cancelled. One hop: if the replacement was itself cancelled, follow its own reissuedFutureId.
The inverse of reissuedFutureId: the cancelled future this one replaced. Unlike the forward pointer this sits on a normal open future, so a future carries its own history even if you never saw the cancelled one. null is the normal value. One hop and one predecessor at most — follow it repeatedly to walk back to the start of a chain. Cleared again if a cancellation is reverted.
Lifecycle status of the future.
Show child attributes
Show child attributes
Sport (or prediction-market topic) reference.
Show child attributes
Show child attributes
Tournament reference.
Show child attributes
Show child attributes
Season reference.
Show child attributes
Show child attributes
Epoch seconds (UTC).
Epoch seconds (UTC).
Future market reference (e.g. Winner).
Show child attributes
Show child attributes
Participants attached to this future. Not currently populated in production — every future returns [] (0 of 2,018 sampled across 40 sports carried any participant), so resolve names via /participants or the tournament/season metadata instead.
Show child attributes
Show child attributes
Native identifiers of this future at external providers (polymarket, kalshi, …).
Per-bookmaker metadata for this future. Contains only bookmakers that currently offer valid realtime odds (empty object when none do).
Show child attributes
Show child attributes