{"openapi":"3.1.0","info":{"title":"Roulette Odds API","version":"1.0.0","description":"Roulette odds maths as an API, computed locally and deterministically and exactly — the payout, the true probability and the house edge behind every bet, the numbers a fair game tells you and a casino would rather you ignore. The payout endpoint gives a bet's payout, winning numbers, win probability and house edge for a European (single-zero) or American (double-zero) wheel: a straight-up number pays 35 to 1 but wins only 1 in 37, an edge of 2.70 % European or 5.26 % American, the same on almost every bet because the payout simply ignores the zeros. The expected-value endpoint turns a stake into its expected value — stake × (win probability × (payout + 1) − 1), always negative and equal to minus the stake times the house edge — so €10 on a single number on a European wheel is worth −€0.27 every spin. The martingale endpoint exposes the doubling system: total risked = base × (2^steps − 1), the bet that explodes after a losing streak, and the bust probability — proof on the maths that no progression beats the zero. Everything is computed locally and deterministically, so it is instant and exact. Ideal for casino-game and odds apps, gambling-education and responsible-play tools, game-design back-ends, and probability teaching. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 compute endpoints. Educational — not betting advice; the house always wins long-run.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/roulette-api","description":"oanor gateway"}],"tags":[{"name":"Roulette"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/expected-value":{"get":{"operationId":"get_v1_expected_value","tags":["Roulette"],"summary":"Expected value of a stake","description":"","parameters":[{"name":"bet_type","in":"query","required":true,"description":"Bet type","schema":{"type":"string"},"example":"straight"},{"name":"stake","in":"query","required":true,"description":"Stake amount","schema":{"type":"string"},"example":"10"},{"name":"wheel","in":"query","required":false,"description":"european | american","schema":{"type":"string"},"example":"european"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Expected value = stake × (win probability × (payout + 1) − 1) — always negative, equal to minus the stake times the house edge (about 2.7 % European, 5.26 % American) no matter the bet. Over many spins you lose that fraction of everything you wager; no betting pattern changes it.","inputs":{"stake":10,"wheel":"european","bet_type":"straight"},"expected_loss":0.2703,"payout_on_win":350,"expected_value":-0.2703,"win_probability_pct":2.7},"meta":{"timestamp":"2026-06-06T15:30:39.373Z","request_id":"43894bd8-004b-4a95-9b83-215b2e348653"},"status":"ok","message":"Expected value","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/martingale":{"get":{"operationId":"get_v1_martingale","tags":["Roulette"],"summary":"Martingale exposure","description":"","parameters":[{"name":"base_bet","in":"query","required":true,"description":"Base bet","schema":{"type":"string"},"example":"5"},{"name":"steps","in":"query","required":true,"description":"Number of doubling steps","schema":{"type":"string"},"example":"5"},{"name":"wheel","in":"query","required":false,"description":"european | american","schema":{"type":"string"},"example":"european"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"The martingale doubles your even-money bet after every loss to recover with a one-unit profit — total risked = base × (2^steps − 1), and the bet explodes fast (10 losses on a $5 base risks $5,115). The losing streak that wipes you out is rare but real, and it always comes; table limits and the zero make it a guaranteed loser long-run.","inputs":{"steps":5,"wheel":"european","base_bet":5},"final_bet":80,"total_risked":155,"profit_if_win":5,"bust_probability_pct":3.571},"meta":{"timestamp":"2026-06-06T15:30:39.471Z","request_id":"dc25d813-4f77-4669-b15f-8890003e35b6"},"status":"ok","message":"Martingale","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/payout":{"get":{"operationId":"get_v1_payout","tags":["Roulette"],"summary":"Payout, probability & house edge","description":"","parameters":[{"name":"bet_type","in":"query","required":true,"description":"straight | split | street | corner | sixline | column | dozen | even","schema":{"type":"string"},"example":"straight"},{"name":"wheel","in":"query","required":false,"description":"european | american (default european)","schema":{"type":"string"},"example":"european"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"bet":"straight up (1 number)","note":"The payout is fixed but the wheel has one (European) or two (American) zeros that the payout ignores, which is the house edge: 2.70 % on a single-zero wheel, 5.26 % on a double-zero wheel, the same on almost every bet. Always prefer European (single-zero) — it halves the edge.","inputs":{"wheel":"european","bet_type":"straight"},"payout_to_1":35,"total_numbers":37,"house_edge_pct":2.7,"winning_numbers":1,"win_probability_pct":2.7},"meta":{"timestamp":"2026-06-06T15:30:39.564Z","request_id":"f3819618-a799-4960-ba6b-8395e077f82f"},"status":"ok","message":"Payout","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"notes":"Bets: straight, split, street, corner, sixline, column, dozen, even. Wheel european (37) or american (38). Edge 2.70 %/5.26 %. Educational — not betting advice; the house always wins long-run.","service":"roulette-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/payout":"Payout, win probability and house edge for a bet type and wheel.","GET /v1/martingale":"Total risked, final bet and bust probability of a martingale progression.","GET /v1/expected-value":"Expected value and loss of a stake on a bet."},"description":"Roulette maths: payout/probability/house-edge of a bet, the expected value of a stake, and martingale exposure."},"meta":{"timestamp":"2026-06-06T15:30:39.663Z","request_id":"e50998ea-e40f-4cab-8cbc-15c1a538927c"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":7500,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":405,"monthly_call_quota":98000,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1250,"monthly_call_quota":390000,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":3760,"monthly_call_quota":1700000,"rps_limit":48,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/roulette-api"}