curl --request GET \
--url https://api.splashsports.com/predictions-service/api/sub_categoriesconst options = {method: 'GET'};
fetch('https://api.splashsports.com/predictions-service/api/sub_categories', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.splashsports.com/predictions-service/api/sub_categories"
response = requests.get(url)
print(response.text){
"sub_categories": [
{
"id": "nfl",
"name": "Pro Football",
"icon_url": "https://res.cloudinary.com/...",
"active": true,
"filters": [
{
"title": "Games",
"types": [
"gameline"
]
},
{
"title": "Futures",
"types": [
"future_team_champion"
]
}
]
},
{
"id": "mlb",
"name": "MLB",
"icon_url": "https://res.cloudinary.com/...",
"active": true,
"filters": [
{
"title": "Futures",
"types": [
"future_team_champion"
]
}
]
},
{
"id": "nba",
"name": "Pro Basketball (M)",
"icon_url": "https://res.cloudinary.com/...",
"active": false,
"filters": []
}
],
"status": "success"
}{
"status": "error",
"error": "INTERNAL_ERROR",
"message": "An internal error has occured and the request could not be handled."
}List sub-categories
The leagues currently enabled for prediction markets. Membership is the configured league list and is independent of current market inventory; active and filters are derived from live market data. This is the only endpoint that returns those two fields.
Ordering. Active leagues first, then by active trading volume descending, then by the standard display order (nfl, ncaaf, nba, ncaab, pga, mlb, nhl, epl), then by id. The busiest leagues lead; when nothing is trading the response falls back to the display order. There is no seasonal pin.
active is true when the league has at least one market with status = active, regardless of volume. A league can be offered and out of season, so use active, not presence in the list, to tell “offered” from “tradeable right now”.
filters are the tabs to render for the league. Render them from filters, not from active: non-empty filters implies active, but a league can be active: true with filters: []. Entry order is the same for every league, so tabs never reshuffle. A tab appears only when GET /prediction_markets?type= would return at least one group for it.
Cached for 5 minutes.
curl --request GET \
--url https://api.splashsports.com/predictions-service/api/sub_categoriesconst options = {method: 'GET'};
fetch('https://api.splashsports.com/predictions-service/api/sub_categories', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.splashsports.com/predictions-service/api/sub_categories"
response = requests.get(url)
print(response.text){
"sub_categories": [
{
"id": "nfl",
"name": "Pro Football",
"icon_url": "https://res.cloudinary.com/...",
"active": true,
"filters": [
{
"title": "Games",
"types": [
"gameline"
]
},
{
"title": "Futures",
"types": [
"future_team_champion"
]
}
]
},
{
"id": "mlb",
"name": "MLB",
"icon_url": "https://res.cloudinary.com/...",
"active": true,
"filters": [
{
"title": "Futures",
"types": [
"future_team_champion"
]
}
]
},
{
"id": "nba",
"name": "Pro Basketball (M)",
"icon_url": "https://res.cloudinary.com/...",
"active": false,
"filters": []
}
],
"status": "success"
}{
"status": "error",
"error": "INTERNAL_ERROR",
"message": "An internal error has occured and the request could not be handled."
}
