Live match stats API
The live stats bet365 shows next to its in-play odds, served right alongside the prices. Free and no key needed
What you get
Every live match bet365 tracks comes with its stats, attacks, possession, shots and corners in soccer, quarter scores and fouls in basketball, aces and break points in tennis, map and round scores in CS2 and a lot more. They're opt-in so you only get them when you ask
Over REST
Add stats=1 to /odds or /catalog:
curl --compressed "https://moviodds.com/odds?in_play=1&groups=1777&stats=1"
A real soccer match from the response, trimmed:
"stats": {
"sport": "soccer",
"home": {"attacks": 92, "dangerous_attacks": 51, "possession": 69, "shots": 11, "shots_on_target": 5,
"corners": 8, "yellow_cards": 1, "red_cards": 0, "offsides": 0},
"away": {"attacks": 44, "dangerous_attacks": 13, "possession": 31, "shots": 1, "shots_on_target": 1,
"corners": 0, "yellow_cards": 1, "red_cards": 0, "offsides": 0},
"updated_at": "2026-10-19T10:23:47Z"
}
And a CS2 match:
"stats": {
"sport": "esports", "game": "cs2", "format": "best_of_3", "current_map": 3, "current_round": 12,
"maps": [{"number": 1, "name": "Ancient", "home": 11, "away": 13},
{"number": 2, "name": "Mirage", "home": 13, "away": 10},
{"number": 3, "name": "Nuke", "home": 6, "away": 5}],
"home": {"maps_won": 1, "rounds": 6, "side": "T"},
"away": {"maps_won": 1, "rounds": 5, "side": "CT"}
}
After the match /results?stats=1 gives the full time stats
Over the WebSocket
Send "stats": true with your subscribe and you get a stats message for each match whenever its stats change, at most one a second per match. Each one is the full set so just replace your copy
{"op": "subscribe", "stats": true}
Sports and fields
- Soccer: xG where bet365 has it, attacks, dangerous attacks, possession, shots on and off target, corners, cards, offsides, recent form and a timeline
- Basketball: points, threes, twos, free throws, fouls, timeouts left and points per quarter
- Tennis: aces, double faults, first serve %, break points, games, sets, the point score and who's serving
- Ice hockey: goals per period, penalties and power plays
- American football: points per quarter, downs, yards, plays and player passing, rushing and receiving
- Baseball: runs per inning and hits, plus batter and pitcher lines on MLB
- Rugby union: points, tries, possession and territory
- Darts: legs, 180s, 3-dart average and checkout %
- Volleyball: points per set, serve and streaks
- Esports: CS2 and VALORANT maps and rounds, plus esoccer and ebasketball
Every field is listed in the API docs
FAQ
Is the match stats API free?
Yes, no sign-up and no key, it's part of the odds feed
Which sports have live stats?
Soccer, basketball, tennis, ice hockey, American football, rugby union, baseball, darts, volleyball, esoccer, ebasketball, CS2 and VALORANT
Do I get xG?
Yes for the soccer matches where bet365 shows it. Lower leagues often only have attacks, possession, shots and corners
How often do stats update?
On the WebSocket you get a message whenever a match's stats change, at most one a second per match
Are these bet365's stats?
Yes, the same live stats bet365 shows on its in-play pages. MoviOdds is an independent project and is not affiliated with bet365
More: live WebSocket · historical odds · all 24 sports · Python · API docs