There is a new optional query param on the /grader/odds endpoint (void_substitutes
) that will let you override the default behavior. So if you do not want to void subs in soccer, you can pass void_substitutes=False
.
A small sampling of markets below, use the /markets/settleable endpoint for a full list.
1st Inning Both Teams To Score
1st Inning Correct Score
2nd Inning Both Teams To Score
2nd Inning Correct Score
3rd Inning Both Teams To Score
3rd Inning Correct Score
4th Inning Both Teams To Score
4th Inning Correct Score
5th Inning Both Teams To Score
5th Inning Correct Score
6th Inning Both Teams To Score
6th Inning Correct Score
7th Inning Both Teams To Score
7th Inning Correct Score
8th Inning Both Teams To Score
8th Inning Correct Score
9th Inning Both Teams To Score
9th Inning Correct Score
1st 3 Innings Both Teams To Score
1st 3 Innings Correct Score
1st Half Both Teams To Score
1st Half Correct Score
1st 7 Innings Both Teams To Score
1st 7 Innings Correct Score
Both Teams To Score
Correct Score
Player Hits + Runs + Errors
Player Pitches Thrown
Player Runs + RBIs
Team Total Errors
Team Total Hits
Team Total Home Runs
Total Bases
Total Doubles
Total Hits
Total Hits + Runs + Errors
Total Home Runs
Total Strikeouts
Total Triples
To simplify things, we have merged Goal Spread
into Asian Handicap
, so that there is only a single spread market for prematch soccer.
We also are breaking out live Asian Handicaps that are relative to the current score into Asian Handicap (Relative)
to make comparisons correct.
You can now pass BetRivers
as a sportsbook to the parlay endpoint.
The grader will now void props for players who did not start the match.
Added a gender field on the data returned from /leagues
- Launched RabbitMQ ingestion support for clients needing scalable, queue-based odds delivery
- Added setup instructions and sample Python code to connect and consume messages via RabbitMQ
- Clarified ingestion options: REST API (polling), SSE (streaming), and RabbitMQ (queue-based)
- Documented all supported message types (ping, copilot-odds, copilot-locked-odds, copilot-settled-odds)
- Added safeguards and messaging around queue overflow (10,000+ unread messages)
We added an endpoint that can be used to programmatically see which markets have settlement for given leagues.
https://opticodds.readme.io/reference/get_markets-settleable
Due to the ever changing nature of our id system, we are now introducing numerical ids as another option on all of our sports/leagues/teams/players/fixtures/tournaments models.
Currently, the first step is just exposing these, the next part will be allowing users to make requests using them.
In addition, we have gotten some requests from users about wanting a way to know whether the player is the same across leagues. Currently, Lionel Messi
has a different ID
per league, we are also introducing a base_id
on the Team and Player model that can be used to identify that the player is the same across leagues. Request support will be coming in the future.
You can now filter with is_live=true
to only get live odds returned, is_live=false
to only get prematch odds. We also return is_live
as part of the response so if you do not pass this parameter, you can still tell whether odds are prematch or live.