SX Bet enforces an odds ladder to prevent diming (posting odds in tiny increments to gain an unfair edge). Your percentageOdds value must land exactly on one of the allowed steps, or your order will be rejected.The ladder works in intervals of the implied probability. The current step size is 0.125%, meaning valid implied odds are:
50.000%, 50.125%, 50.250%, 50.375%, 50.500%, ...
An offer of 50.25% is valid. An offer of 50.20% is not.
Orders with odds not on the ladder will be rejected and will not be posted.
Full example: implied probability to valid percentageOdds
A common workflow: you have a fair probability (e.g., from your model), add margin, and need to convert it to a valid percentageOdds value.
def implied_to_valid_odds(implied: float) -> int: """Convert an implied probability to the nearest valid percentageOdds (rounded down).""" raw = int(implied * ODDS_PRECISION) return round_odds_down(raw)# Your model says 54.3% implied, you want to post at that priceodds = implied_to_valid_odds(0.543)print(f"percentageOdds: {odds}")# 54250000000000000000 (54.250%)print(f"Implied: {odds / ODDS_PRECISION:.3%}")# 54.250%print(f"Valid: {is_odds_valid(odds)}")# True
Always round down when posting maker orders. Rounding up would give worse odds for you. If you need to round to the nearest step in either direction, compare the distance to the step above and below.