Skip to main content

Data hierarchy

Market data on SX Bet is organized in a hierarchy. Understanding this structure will help you navigate the API efficiently. A market row carries no odds — prices live at the book level, not on the market. The two pricing routes are not interchangeable. The snapshot gives full depth for one market. Best odds gives the top of book for up to a hundred. See Active markets. Each level of this table paginates differently, and two of them do not paginate at all. GET /markets/active uses pageSize + paginationKey, the newer list routes use perPage + nextKey, and GET /sports, /leagues/active and /fixture/active return everything in one response.

Try it yourself

Run the script below in your terminal. It walks you through the full hierarchy interactively. Select a sport, then a league, then a fixture. It then displays all available main-line markets for that fixture.

Sports

SX Bet covers a wide range of sports. Each sport is identified by a numeric sportId. Pass a sportId to other endpoints (such as /leagues/active) to filter results by sport.
This list may not be exhaustive. Query GET /sports for the full, up-to-date list.

Leagues

SX Bet supports many leagues across all sports. Each league is identified by a leagueId. There are two ways to fetch leagues:
  1. GET /leagues/active — Returns only leagues that currently have active fixtures. Pass a sportId to filter by sport.
  2. GET /leagues — Returns all leagues supported by SX Bet, including those without any active fixtures. Also accepts an optional sportId filter.

Fixtures

A fixture on SX Bet represents an individual game or event — for example, Toronto Raptors vs. Detroit Pistons on March 10th, 2026. Many markets exist for any given fixture. To fetch active fixtures, query GET /fixture/active with a leagueId. Each fixture is identified by a unique eventId. Example fixture response:
The startDate field contains the scheduled start time of the game in UTC. The status field indicates the current state of the fixture:
The wrong spelling of the event id returns 200, not an error. Validation strips the unknown query field, so /markets/active?sportXeventId=… returns every market with your filter ignored.
One identifier has three spellings, and the casing matters:
  • You read sportXeventId — lowercase e — from market, fixture and search rows.
  • You pass eventId to every route and channel.
  • GET /live-scores and GET /fixture/status take a third form: sportXEventIds, capital E and plural. Lowercase there is a 400 ["sportXEventIds must be a string"].

Markets

A market represents a single binary outcome you can bet on — for example, “Over 2.5 Total Goals” vs. “Under 2.5 Total Goals”. Many markets exist for any given fixture. Every market on SX Bet is identified by a unique marketHash, which is used throughout the API to fetch orderbooks, post orders, and query trades.

Fetching markets

Querying active markets from the API.
Last modified on August 11, 2026