BetMGM APImd.betmgm.com ↗
Live and pre-match eBasketball odds from BetMGM Maryland: moneyline, spread, game totals, and team totals in American odds via two clean endpoints.
What is the BetMGM API?
This API exposes BetMGM Maryland's eBasketball (GG League H2H) odds board through 2 endpoints, returning moneyline, spread, game total, and team total markets for every listed event. The get_board endpoint delivers the full board in one call sorted by start time, while get_event adds alternative spread and game-total lines for a single fixture identified by its compound event_id.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/78b897c0-e8e1-4762-81b8-62f66e0d1fe9/get_board' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace md-betmgm-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: BetMGM Maryland eBasketball odds — board scan and event detail."""
from parse_apis.md_betmgm_com_api import BetMGM, EventNotFound
client = BetMGM()
# Fetch the full eBasketball board in one call.
board = client.boards.get()
print(f"Board: {board.book} {board.region} — {board.total_events} events ({board.board_status})")
# Scan the first few events on the board.
for ev in (board.events or [])[:5]:
line = f" {ev.home_name} vs {ev.away_name} ({ev.stage}, {ev.market_status})"
if ev.moneyline_home is not None:
line += f" ML {ev.moneyline_home}/{ev.moneyline_away}"
print(line)
# Drill into the first event's full detail (alt spreads / alt totals).
first = (board.events or [None])[0] if board.events else None
if first is not None:
detail = first.details()
print(f"\nDetail: {detail.home_name} vs {detail.away_name}")
print(f" Spread: {detail.spread_home_line} ({detail.spread_home_price})")
print(f" Total: {detail.total_line} O {detail.over_price} / U {detail.under_price}")
print(f" Alt spreads: {len(detail.alt_spreads)}, Alt totals: {len(detail.alt_totals)}")
# Point lookup by a known event id from the board.
if first is not None:
try:
event = client.events.get(event_id=first.event_id)
print(f"\nLooked up {event.event_id}: {event.competition}")
except EventNotFound:
print(f"Event {first.event_id} no longer listed")
print("\nexercised: boards.get / EventSummary.details / events.get")
Returns the full BetMGM Maryland eBasketball board (live and pre-match, open and suspended) in one call, sorted by start time. One row per game with the main moneyline, spread, game total and, when offered, both team totals; every price is a signed American odds integer and a market the board does not show is null (never invented). market_status is 'open' when at least one main market is priced, 'suspended' when every main market is suspended, 'no_markets' when the game is listed without markets, and 'closed' when betting is closed. board_status is 'OK' when games are listed and 'EMPTY_BOARD' when the site lists none (events is then an empty array). Internally walks the feed in pages until the site's own total is reached, so the row count equals total_events. Times are given in UTC and converted to America/New_York.
No input parameters required.
{
"type": "object",
"fields": {
"book": "always 'BetMGM'",
"sport": "always 'eBasketball'",
"events": "array of game rows; each row carries event_id/fixture_id (same compound id, e.g. 5:1188675), start_time_utc, start_time_local (America/New_York), timezone, stage (Live|PreMatch), competition, home_name/away_name exactly as BetMGM shows them (player tag in parentheses), moneyline_home/away, spread_home_line/price and spread_away_line/price, total_line/over_price/under_price, team_total_home_line/over_price/under_price, team_total_away_line/over_price/under_price (all prices signed American integers or null), market_status, deep_link",
"region": "always 'MD'",
"scraped_at": "ISO-8601 UTC timestamp of this fetch",
"board_status": "'OK' when events are present, 'EMPTY_BOARD' when the site lists no eBasketball games",
"total_events": "integer count of eBasketball games the site reports; equals len(events)"
},
"sample": {
"data": {
"book": "BetMGM",
"sport": "eBasketball",
"events": [
{
"stage": "Live",
"event_id": "5:1188666",
"timezone": "America/New_York",
"away_name": "Orlando Magic (UNDERRATED)",
"deep_link": "https://www.md.betmgm.com/en/sports/events/5:1188666",
"home_name": "Denver Nuggets (CALAMITY)",
"fixture_id": "5:1188666",
"over_price": null,
"total_line": 117.5,
"competition": "eBasketball H2H GG League",
"under_price": -118,
"market_status": "open",
"moneyline_away": -250,
"moneyline_home": 180,
"start_time_utc": "2026-09-07T00:19:00Z",
"spread_away_line": -4.5,
"spread_home_line": 4.5,
"start_time_local": "2026-09-06T20:19:00-04:00",
"spread_away_price": -125,
"spread_home_price": -110,
"team_total_away_line": 60.5,
"team_total_home_line": 55.5,
"team_total_away_over_price": -125,
"team_total_home_over_price": -125,
"team_total_away_under_price": -110,
"team_total_home_under_price": -110
}
],
"region": "MD",
"scraped_at": "2026-09-07T00:26:06.913048+00:00",
"board_status": "OK",
"total_events": 20
},
"status": "success"
}
}About the BetMGM API
Board Endpoint
get_board returns the complete BetMGM Maryland eBasketball board in a single response with no required inputs. Each row in the events array carries a compound event_id (e.g. 5:1188675), start_time_utc, start_time_local in the America/New_York timezone, and the main market prices — moneyline, spread, game total, and team totals where offered. Every price is a signed American odds integer. The top-level board_status field is 'OK' when games are present or 'EMPTY_BOARD' when BetMGM lists none. total_events gives the integer count of games the site is currently reporting.
Event Endpoint
get_event takes a single required parameter, event_id, in the <source>:<number> form returned by get_board. It returns all the same fields as a board row — home_name, away_name, stage ('Live' or 'PreMatch'), deep_link to the BetMGM Maryland event page — plus two arrays: alt_spreads and alt_totals. Each entry in those arrays carries a line, over_price/under_price or equivalent side prices, and a status. These arrays are empty when only the main line is listed, which is the common case on this board.
Coverage and Freshness
Both endpoints reflect what BetMGM Maryland's eBasketball section currently shows, including suspended markets. The scraped_at field in get_board is an ISO-8601 UTC timestamp indicating when the data was fetched. book is always 'BetMGM', region is always 'MD', and sport is always 'eBasketball'. These fixed fields make it straightforward to combine output with data from other sportsbooks for cross-book comparison.
The BetMGM API is a managed, monitored endpoint for md.betmgm.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when md.betmgm.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official md.betmgm.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor live eBasketball moneyline and spread movements on BetMGM Maryland in real time using
scraped_attimestamps - Build a line-shopping tool comparing BetMGM Maryland game totals against other books using the
over_price/under_pricefields - Alert bettors when a game's
stageflips from'PreMatch'to'Live'using repeatedget_boardpolling - Track which BetMGM Maryland eBasketball games have alternative spread or total lines available via
alt_spreadsandalt_totalsinget_event - Populate a dashboard with upcoming GG League H2H matchups, team names, and start times sourced from
start_time_utc - Detect suspended markets by filtering events where market status is not active, using the
board_statusand per-market status fields
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does BetMGM have an official public developer API for odds data?+
What does `get_board` return when BetMGM Maryland has no eBasketball games scheduled?+
board_status is set to 'EMPTY_BOARD' and total_events is 0. The events array is empty. This can happen during off-hours or between GG League H2H sessions.Are alternative spread and total lines always included in `get_event`?+
alt_spreads and alt_totals are present in every get_event response but are empty arrays when BetMGM only offers the main line for that fixture, which is the typical case on this board. You only get populated alt-line arrays on games where BetMGM Maryland has actually listed them.Does this API cover other BetMGM states beyond Maryland, or other sports?+
region: 'MD') and only the eBasketball (GG League H2H) market. You can fork it on Parse and revise it to add endpoints targeting other BetMGM state domains or sport categories.