curl --request GET \
--url https://v2.55-tech.com/futures/markets \
--header 'x-api-key: <api-key>'import requests
url = "https://v2.55-tech.com/futures/markets"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://v2.55-tech.com/futures/markets', 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://v2.55-tech.com/futures/markets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://v2.55-tech.com/futures/markets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://v2.55-tech.com/futures/markets")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://v2.55-tech.com/futures/markets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"futureMarketId": 10001,
"sportId": 10,
"marketName": "Winner",
"marketType": null,
"futureCount": 1,
"futures": [
{
"futureId": "id1012639310001",
"seasonId": 126393,
"tournamentId": 17,
"startTime": 1760000000,
"endTime": null,
"statusId": 0,
"reissuedFutureId": null
}
]
}
]{
"detail": "Futures market listing is not yet available. ABP implements the OddsPAPI db-v2 futures identifier scheme only, and the feed still publishes the current-state one, so futures ingest is disabled (ODDSPAPI_FUTURES_ENABLED=false) and nothing is cached. This endpoint answers 501 rather than an empty 200 that would read as 'no odds'. Futures identifiers ARE validated here: a malformed request is a 400/422 even today."
}Get all futures markets (not yet available)
Returns the futures markets present in the OddsPAPI metadata cache, grouped by (sportId, futureMarketId), each with the futures (season × market) that carry it. Sorted by sportId, then futureMarketId.
This is the futures counterpart of GET /fixtures/markets, but it is derived from the cached futures themselves — OddsPAPI publishes no separate futures-market catalogue. Consequences worth knowing:
- It lists what is currently cached, not every market that has ever existed.
marketName/marketTypearenullunless OddsPAPI puts them on the future row. They are read, never inferred.- It does not list outcomes. A futures selection is
(futureOutcomeId, participantId), and the available pairs come from the odds onGET /futures/betslip, not from a market definition: on a participant-keyed market the outcome id is always the sentinel0and the participants are the selections.
Returns HTTP 501 today. ABP implements the OddsPAPI db-v2 futures identifier scheme only, and the feed still publishes the current-state one, so futures ingest is switched off and nothing is cached. This endpoint answers
501rather than an empty200that would read as “no odds” — and your request is validated first, so a malformedfutureId(a bare integer from the current feed is refused) or a selection pair that names nothing is still a400even today. The response shape below is what it serves the day futures turn on (expected late 2026-10).
curl --request GET \
--url https://v2.55-tech.com/futures/markets \
--header 'x-api-key: <api-key>'import requests
url = "https://v2.55-tech.com/futures/markets"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://v2.55-tech.com/futures/markets', 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://v2.55-tech.com/futures/markets",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://v2.55-tech.com/futures/markets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://v2.55-tech.com/futures/markets")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://v2.55-tech.com/futures/markets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"futureMarketId": 10001,
"sportId": 10,
"marketName": "Winner",
"marketType": null,
"futureCount": 1,
"futures": [
{
"futureId": "id1012639310001",
"seasonId": 126393,
"tournamentId": 17,
"startTime": 1760000000,
"endTime": null,
"statusId": 0,
"reissuedFutureId": null
}
]
}
]{
"detail": "Futures market listing is not yet available. ABP implements the OddsPAPI db-v2 futures identifier scheme only, and the feed still publishes the current-state one, so futures ingest is disabled (ODDSPAPI_FUTURES_ENABLED=false) and nothing is cached. This endpoint answers 501 rather than an empty 200 that would read as 'no odds'. Futures identifiers ARE validated here: a malformed request is a 400/422 even today."
}Authorizations
API key for authentication. Contact contact@55-tech.com to obtain a key.
Query Parameters
Filter by sport ID (e.g., 10 for Soccer)
Filter by tournament ID
Response
List of futures markets — the shape served once futures are enabled; today this endpoint answers 501
Future market identifier (the futureId's 5-digit tail).
10001
Sport identifier.
10
How many cached futures carry this market.
The futures carrying this market, newest start time first.
Show child attributes
Show child attributes
Market display name when OddsPAPI publishes one on the future row; null otherwise. Read, never inferred.
Market type slug when OddsPAPI publishes one on the future row; null otherwise.