List Markets
Returns a page of single-leg and multi-leg markets, ordered by ticker ascending. Filters combine, so a market must match every filter given.
/marketsAuthorization
Optional — this operation also accepts unauthenticated requests.
UDX-Access-KeyAPI key · headerOpaque API key ID.
UDX-Access-TimestampAPI key · headerUnix time in milliseconds, within 30 seconds of server time.
UDX-Access-SignatureAPI key · headerStandard-base64 RSA-PSS/SHA-256 signature with a 32-byte salt.
AuthorizationBearer token (JWT) · headerBearer token for an active signed-in UDX user.
An authenticated request is metered against the member's read bucket and returns RateLimit headers; an unauthenticated request shares the public per-client limit.
Header parameters
UDX-VersionstringDated API version (YYYY-MM-DD).
limitintegerMaximum number of items to return in one page.
pagestringOpaque token identifying the requested page.
statusMarketStatus[]Return only markets in any of these trading statuses. Repeat the parameter to include more than one status.
typestringSelect single-leg or multi-leg markets. Omit to include both.
single_legmulti_legtickerTicker[]Return only these markets. Repeat the parameter for each ticker. Tickers that don't name a market are ignored.
series_tickerstringReturn only markets in this series, the markets listed under the same contract terms.
event_tickerstringReturn only markets grouped under this ticker, such as the markets for one game in a series.
200A page of markets.
marketsMarket[]requiredOne page of markets.
Show propertiesHide properties
MarketlegsMarketLeg[]Present only for multi-leg markets; absent for single-leg markets. Each leg selects a component market outcome.
Show propertiesHide properties
MarketLegtickerTickerrequiredA human-meaningful natural key naming a single-leg or multi-leg market.
outcomestringrequiredThe outcome of this component market selected by the multi-leg market.
yesnoexternal_idsMarketExternalIdsIdentifiers this market carries in third-party data providers' systems.
Show propertiesHide properties
optic_oddsMarketExternalIdsOpticOddsIdentifiers in OpticOdds.
Show propertiesHide properties
fixture_idstringThe OpticOdds fixture this market is priced from.
market_idstringThe OpticOdds market this market is a selection of.
team_idstringThe OpticOdds team this market is about, when the market is about a team.
player_idstringThe OpticOdds player this market is about, when the market is about a player.
tickerTickerrequiredA human-meaningful natural key naming a single-leg or multi-leg market.
descriptionstringHuman-readable description of what the market resolves on.
statusMarketStatusrequiredMarket trading status.
unopenedopenpausedclosedexpiredtick_sizestringMinimum price increment, in dollars.
minimum_pricestringMinimum allowed order price, in dollars.
maximum_pricestringMaximum allowed order price, in dollars.
expires_atstring<date-time>The configured expiration instant.
external_idsMarketExternalIdsIdentifiers this market carries in third-party data providers' systems.
Show propertiesHide properties
optic_oddsMarketExternalIdsOpticOddsIdentifiers in OpticOdds.
Show propertiesHide properties
fixture_idstringThe OpticOdds fixture this market is priced from.
market_idstringThe OpticOdds market this market is a selection of.
team_idstringThe OpticOdds team this market is about, when the market is about a team.
player_idstringThe OpticOdds player this market is about, when the market is about a player.
series_tickerstringThe series the market is listed under.
event_tickerstringGroups markets on the same game or contest within a series.
titlestringShort display name for the market.
rulesstringThe rules that decide how the market resolves.
strikeMarketStrikeThe threshold the market's outcome is compared with.
Show propertiesHide properties
typeMarketStrikeTypeHow the outcome is compared with the strike value.
greatergreater_or_equallessless_or_equalequalvaluestringrequiredThe strike itself, such as a line or a team name.
unitMarketStrikeUnitHow to read the strike value.
decimalintegerpointsstringboolunknownopens_atstring<date-time>The configured instant the market opens for trading.
notional_valuestringWhat one YES contract pays if the market resolves YES, in dollars.
contract_terms_urlstring<uri>Link to the contract terms the market is listed under.
next_page_urlNextPageURL | nullrequiredRoot-relative URL for the next page. Null when there are no more items.
400The request doesn't conform to this spec.
typestring<uri-reference>requiredA stable URN identifying the kind of problem, for example urn:udx:problem:insufficient-permissions. Branch on it rather than on the localized detail. It is an identifier, not a URL to dereference.
titlestringrequiredA localized, human-readable summary of the error category. Stable for a given status code and resolved language — clients must not use it as a machine-readable discriminator.
statusintegerrequiredThe HTTP status code, repeated from the response itself.
detailstringA localized, human-readable explanation specific to this occurrence. Clients must not parse it for machine-readable information.
instancestring<uri-reference>An identifier for this specific occurrence, so it can be correlated with server-side logs if you need to report it.
429The request rate was exceeded. An unauthenticated request shares the public per-client limit; an authenticated request is metered against the member's read bucket.
typestring<uri-reference>requiredA stable URN identifying the kind of problem, for example urn:udx:problem:insufficient-permissions. Branch on it rather than on the localized detail. It is an identifier, not a URL to dereference.
titlestringrequiredA localized, human-readable summary of the error category. Stable for a given status code and resolved language — clients must not use it as a machine-readable discriminator.
statusintegerrequiredThe HTTP status code, repeated from the response itself.
detailstringA localized, human-readable explanation specific to this occurrence. Clients must not parse it for machine-readable information.
instancestring<uri-reference>An identifier for this specific occurrence, so it can be correlated with server-side logs if you need to report it.
500Something went wrong on UDX's side.
typestring<uri-reference>requiredA stable URN identifying the kind of problem, for example urn:udx:problem:insufficient-permissions. Branch on it rather than on the localized detail. It is an identifier, not a URL to dereference.
titlestringrequiredA localized, human-readable summary of the error category. Stable for a given status code and resolved language — clients must not use it as a machine-readable discriminator.
statusintegerrequiredThe HTTP status code, repeated from the response itself.
detailstringA localized, human-readable explanation specific to this occurrence. Clients must not parse it for machine-readable information.
instancestring<uri-reference>An identifier for this specific occurrence, so it can be correlated with server-side logs if you need to report it.
503Request admission is unavailable.
typestring<uri-reference>requiredA stable URN identifying the kind of problem, for example urn:udx:problem:insufficient-permissions. Branch on it rather than on the localized detail. It is an identifier, not a URL to dereference.
titlestringrequiredA localized, human-readable summary of the error category. Stable for a given status code and resolved language — clients must not use it as a machine-readable discriminator.
statusintegerrequiredThe HTTP status code, repeated from the response itself.
detailstringA localized, human-readable explanation specific to this occurrence. Clients must not parse it for machine-readable information.
instancestring<uri-reference>An identifier for this specific occurrence, so it can be correlated with server-side logs if you need to report it.
curl -X GET "https://api.underdogexchange.com/markets" \
-H "UDX-Access-Key: API_KEY_ID" \
-H "UDX-Access-Timestamp: UNIX_MILLISECONDS" \
-H "UDX-Access-Signature: BASE64_SIGNATURE"{
"markets": [
{
"ticker": "UDX-EXAMPLE-MARKET",
"description": "Will the example resolve YES?",
"status": "open",
"tick_size": "0.001",
"minimum_price": "0.001",
"maximum_price": "0.99",
"expires_at": "2026-06-21T00:00:00.000000Z"
},
{
"ticker": "UDX-EXAMPLE-MULTI",
"description": "The first market resolves YES and the second resolves NO.",
"status": "open",
"legs": [
{
"ticker": "UDX-EXAMPLE-MARKET-A",
"outcome": "yes"
},
{
"ticker": "UDX-EXAMPLE-MARKET-B",
"outcome": "no"
}
]
}
],
"next_page_url": "/markets?limit=10&page=eyJ2IjoxfQ"
}{
"markets": [],
"next_page_url": null
}{
"type": "urn:udx:problem:invalid-request-parameters",
"title": "Bad Request",
"status": 400,
"detail": "invalid request parameters",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:unknown-version",
"title": "Bad Request",
"status": 400,
"detail": "unknown UDX-Version \"1999-01-01\"; supported versions: 2026-07-15",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:unauthenticated-rate-limit-exceeded",
"title": "Too Many Requests",
"status": 429,
"detail": "this client has temporarily exceeded the public request rate",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:member-rate-limit-exceeded",
"title": "Too Many Requests",
"status": 429,
"detail": "this member has temporarily exceeded its request rate",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:internal-error",
"title": "Internal Server Error",
"status": 500,
"detail": "internal error",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}{
"type": "urn:udx:problem:request-admission-unavailable",
"title": "Service Unavailable",
"status": 503,
"detail": "request admission is temporarily unavailable",
"instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
}