Odds360 Basketball
Odds360 basketball follows the same pattern as the basketball pages in sportmicro-frontend:
- discover the match in the regular SportMicro basketball service
- load bookmaker-specific Odds360 prices for that
match_id - subscribe to live
updatesandoverrides
Service URLs
SportMicro basketball data: https://basketball.sportmicro.com/
Odds360 basketball feed: https://odds360.sportmicro.com/
Two access patterns
- Public Odds360 API:
https://odds360.sportmicro.com/basketball - Dashboard and bookmaker flow used by
sportmicro-frontend:/bookmaker/{bookmakerId}/basketball/...
Supported basketball odd groups
The frontend shows these groups when they are present in the match payload:
quarter-timehalf-timefull-time
Odd group mapping
quarter-time->odds.quarterTimehalf-time->odds.halfTimefull-time->odds.fullTime
Recommended integration flow
1. Discover the match in SportMicro
Use the basketball data endpoints to obtain the match_id and metadata:
https://basketball.sportmicro.com/matches-livehttps://basketball.sportmicro.com/matches-by-datehttps://basketball.sportmicro.com/matcheshttps://basketball.sportmicro.com/leagueshttps://basketball.sportmicro.com/classes
Important fields:
idormatch_idleague_idleague_namehome_team_nameaway_team_namestart_timestatus_type
2. Confirm that the bookmaker can access basketball
The dashboard first loads:
GET /bookmaker/{bookmakerId}
The bookmaker response contains the allowed sports list.
3. Load the basketball match list with available Odds360 prices
This is the list endpoint used by /dashboard/odds360/{bookmakerId}/predictions:
GET /bookmaker/{bookmakerId}/basketball/matches?page=0
GET /bookmaker/{bookmakerId}/basketball/matches?page=0&status=live
GET /bookmaker/{bookmakerId}/basketball/matches?page=0&homeTeam=Lakers
Available query parameters:
pageleaguehomeTeamawayTeamstatuswithliveorupcoming
Backend behavior:
- page size is
100 - postponed and finished matches are excluded
- only matches with
totalOdds > 0are returned
4. Load the full basketball odds payload
This is the match endpoint used by /dashboard/odds360/{bookmakerId}/basketball/{matchId}:
GET /bookmaker/{bookmakerId}/basketball/{matchId}
Important response shape:
{
"matchId": 2450840,
"sport": "basketball",
"odds": {
"quarterTime": {},
"halfTime": {},
"fullTime": {}
},
"override": []
}
The frontend also loads:
GET /bookmaker/{bookmakerId}/basketball/{matchId}/verify
5. Use the raw Odds360 REST service
GET https://odds360.sportmicro.com/basketball
GET https://odds360.sportmicro.com/basketball-history
GET https://odds360.sportmicro.com/basketball-classes
GET https://odds360.sportmicro.com/basketball-leagues
6. Subscribe to live updates
Updates
wss://odds360.sportmicro.com/live/{bookmaker_id}/basketball/{match_id}/updates
https://odds360.sportmicro.com/live/{bookmaker_id}/basketball/{match_id}/updates
Overrides
wss://odds360.sportmicro.com/live/{bookmaker_id}/basketball/{match_id}/overrides
https://odds360.sportmicro.com/live/{bookmaker_id}/basketball/{match_id}/overrides
Dashboard subscriptions:
GET /bookmaker/{bookmakerId}/basketball/{matchId}/updates
GET /bookmaker/{bookmakerId}/basketball/{matchId}/overrides
7. Optional manual overrides
PATCH /bookmaker/{bookmakerId}/basketball/{matchId}/{oddType}
Typical body:
{
"oddKey": "market_name#outcome_key",
"oddValue": 1.85,
"durationSeconds": 3600,
"suspended": false
}
WebSocket example
const ws = new WebSocket(
"wss://odds360.sportmicro.com/live/<bookmaker_id>/basketball/<match_id>/updates"
);
ws.addEventListener("message", (ev) => console.log(JSON.parse(ev.data)));
SSE example
const es = new EventSource(
"https://odds360.sportmicro.com/live/<bookmaker_id>/basketball/<match_id>/updates"
);
es.addEventListener("message", (ev) => console.log(JSON.parse(ev.data)));
Notes
match_idshould come from the basketball SportMicro match feed.bookmaker_idis the UUID assigned to your Odds360 bookmaker./bookmaker/...routes are the authenticated dashboard routes used bysportmicro-frontend.https://odds360.sportmicro.com/...routes are the public Odds360 API routes.- The frontend only shows odd groups that are present and non-empty for the match.