New ATP/WTA/ATP Challenger fixtures will now have a tournament and a tournament stage populated.

{
  "data": [
    {
      "id": "202605050C4F220C",
      "numerical_id": 851849,
      "sport": {
        "id": "tennis",
        "name": "Tennis",
        "numerical_id": 25
      },
      "league": {
        "id": "atp",
        "name": "ATP",
        "numerical_id": 20
      },
      "tournament": {
        "id": "993CAF204CD42D50",
        "name": "Rome, Italy",
        "numerical_id": 16186,
        "start_date": "2026-05-04T00:00:00Z",
        "end_date": "2026-05-17T00:00:00Z"
      },
      "tournament_stage": "Qualification",

There is a new extra field that will be included on the fixtures response. For now this will only be supported on esports fixtures and will include the following fields:

  • level : The tier of the match / tournament.
  • sub_league : The sub league of the esports game.
  • num_periods : The best of number of games/maps.
{
            "id": "2026010512854E5A",
            "numerical_id": 600030,
            "game_id": "35252-16764-2026-01-05-00",
            "start_date": "2026-01-05T08:00:00Z",
            "home_competitors": [
                {
                    "id": "9D67F088FACFA029",
                    "name": "OlyBet SB",
                    "numerical_id": 90354,
                    "base_id": 68483,
                    "abbreviation": "",
                    "logo": "https://cdn.oddsjam.com/team-logos/unknown.jpg"
                }
            ],
            "away_competitors": [
                {
                    "id": "A94EAEA85A31",
                    "name": "AaB esport",
                    "numerical_id": 57500,
                    "base_id": 42535,
                    "abbreviation": "AAB",
                    "logo": "https://cdn.opticodds.com/team-logos/esports/42535.png"
                }
            ],
            "home_team_display": "OlyBet SB",
            "away_team_display": "AaB esport",
            "status": "completed",
            "is_live": false,
            "season_type": "Urban Riga",
            "season_year": "Open#2 2026",
            "season_week": "playoffs",
            "venue_name": null,
            "venue_location": null,
            "venue_neutral": false,
            "sport": {
                "id": "esports",
                "name": "eSports",
                "numerical_id": null
            },
            "league": {
                "id": "cs2",
                "name": "CS2",
                "numerical_id": null
            },
            "home_starter": null,
            "home_starter_id": null,
            "home_record": null,
            "home_seed": null,
            "home_rotation_number": null,
            "away_starter": null,
            "away_starter_id": null,
            "away_record": null,
            "away_seed": null,
            "away_rotation_number": null,
            "tournament": null,
            "tournament_stage": null,
            "has_odds": false,
            "broadcast": "https://www.twitch.tv/aabesport | https://kick.com/urbancontenders",
            "result": null,
            "lineups": {
                "home": [],
                "away": []
            },
            "weather": null,
            "weather_temp": null,
            "extra": {
                "level": "D",
                "sub_league": "Urban Riga",
                "num_periods": 3
            },
            "source_ids": {}
        },

To make things simpler and easier to maintain, we are consolidating the following markets into a single one (To Advance).

  • To Lift The Cup
  • To Qualify

exclude_fees

You can pass exclude_fees=True to exclude any exchange commission. This will modify the price and the order_book to return the prices without fees where applicable.


Order Book

We are now exposing the order books for the exchanges we support that expose it. This can help provide a bigger picture of where users want to place bets.

Source Ids

We are now exposing the source ids for some exchanges to help facilitate matching. This is useful for hyper latency sensitive applications that connect directly to the exchange's apis and don't want to rely on our poll rate for pricing. This way you can make a single call to our api, get the necessary ticker / token / source ids for the exchange of interest and subscribe to the exchange directly or make orders via API.

Example:

These are available on both the /fixtures/odds and the /stream/odds endpoints.

{
                    "id": "40294-35775-2025-11-30:kalshi:moneyline:new_york_knicks",
                    "sportsbook": "Kalshi",
                    "market": "Moneyline",
                    "name": "New York Knicks",
                    "is_main": true,
                    "selection": "New York Knicks",
                    "normalized_selection": "new_york_knicks",
                    "market_id": "moneyline",
                    "selection_line": null,
                    "player_id": null,
                    "team_id": "6A36E386117E",
                    "price": 1.31,
                    "timestamp": 1764536802.4131637,
                    "grouping_key": "default",
                    "points": null,
                    "deep_link": null,
                    "limits": {
                        "max": 108.25
                    },
                    "order_book": [
                        [
                            1.31,
                            108.25
                        ],
                        [
                            1.293,
                            91866.72
                        ],
                        [
                            1.278,
                            25744.13
                        ]
                    ],
                    "source_ids": {
                        "market_id": "KXNBAGAME-25NOV30TORNYK-NYK",
                        "selection_id": "yes"
                    }
                },