Skip to Content
API ReferenceBetting Splits

Betting Splits

Get public betting splits (handle % and bet %) from DraftKings and Circa Sports.

GET /api/v1/splits

Authentication

Requires API key. Requires Pro tier ($229/mo) or higher.

What are betting splits?

Handle % is the percentage of total money wagered on each side. Bet % is the percentage of total tickets (bets placed) on each side.

The gap between bet % and handle % reveals sharp money. If 30% of tickets carry 60% of the money, sharp bettors are on that side.

Data Sources

SourceTypeUpdate Frequency
DraftKingsRecreational book (~35% US market share)Every 5 minutes
Circa SportsSharp-friendly book (attracts professionals)Every 5 minutes

Comparing DraftKings (recreational) vs Circa (sharp) splits reveals where professional money diverges from the public.

Query Parameters

ParameterTypeDescription
sportstringFilter by sport (comma-separated). Example: basketball
leaguestringFilter by league (comma-separated). Example: nba,ncaab
sportsbookstringFilter by splits source. Example: draftkings,circa
event_idstringFilter by canonical event ID (comma-separated)
marketstringFilter to events that carry a given split market (comma-separated). One or more of spread, total, moneyline.
limitintegerMax results (default 100, max 200)
offsetintegerPagination offset (default 0)

Response

{ "data": [ { "event_id": "mlb_guardians_orioles_2026-04-16", "sport": "baseball", "league": "mlb", "sportsbook": "draftkings", "away_team": "Baltimore Orioles", "home_team": "Cleveland Guardians", "spread": { "away_odds": -1.5, "home_odds": 1.5, "handle_pct": { "away": 0.22, "home": 0.78 }, "bets_pct": { "away": 0.20, "home": 0.80 } }, "total": { "line": 8, "handle_pct": { "over": 0.53, "under": 0.47 }, "bets_pct": { "over": 0.57, "under": 0.43 } }, "moneyline": { "away_odds": 104, "home_odds": -126, "handle_pct": { "away": 0.28, "home": 0.72 }, "bets_pct": { "away": 0.33, "home": 0.67 } }, "fetched_at": "2026-04-16T19:25:28.363825+00:00" } ], "pagination": { "limit": 100, "offset": 0, "count": 1, "total": 41, "has_more": false, "next_offset": null }, "updated_at": "2026-04-16T19:29:38.920698424Z" }

In the /splits response the spread carries line values inside the away_odds/home_odds keys (e.g. -1.5 / +1.5) — the field naming is a known inconsistency. The historical endpoint uses away_line/home_line for the same data.

Response Fields

FieldTypeDescription
event_idstringCanonical event ID — use this to join with /odds data
sportstringAtlas-normalized sport name
leaguestringAtlas-normalized league name
sportsbookstringSource sportsbook for the splits data (draftkings or circa)
away_teamstringAway team name
home_teamstringHome team name
spread.away_oddsnumberAway spread line value (e.g., -1.5) — see callout above
spread.home_oddsnumberHome spread line value (e.g., +1.5)
spread.handle_pctobjectMoney % on each side (away, home; 0.0-1.0)
spread.bets_pctobjectTicket % on each side (away, home; 0.0-1.0)
total.linenumberOver/under line (e.g., 225.5)
total.handle_pctobjectMoney % (over, under; 0.0-1.0)
total.bets_pctobjectTicket % (over, under; 0.0-1.0)
moneyline.away_oddsnumberAway moneyline odds (American format)
moneyline.home_oddsnumberHome moneyline odds (American format)
moneyline.handle_pctobjectMoney % on each side (away, home; 0.0-1.0)
moneyline.bets_pctobjectTicket % on each side (away, home; 0.0-1.0)
fetched_atstringISO 8601 timestamp when data was last scraped

The event_id field uses the same canonical ID format as the /odds endpoint, so you can join splits with odds data directly. For example, fetch odds for a specific game and compare with its splits:

GET /api/v1/odds?event_id=nba_thunder_timberwolves_2026-03-15 GET /api/v1/splits?event_id=nba_thunder_timberwolves_2026-03-15

Per-Selection Bet % (BetMGM)

In addition to the game-level splits from this endpoint, BetMGM odds items in the /odds response include an inline public_bet_pct field (0.0-1.0) representing ticket percentage per selection. This is available on NBA (100%), MLB (100%), and NHL (~60%) prematch markets.

Examples

curl "https://api.sharpapi.io/api/v1/splits?league=nba" \ -H "X-API-Key: YOUR_API_KEY"

Splits History

Track how splits shift over time for a specific event.

GET /api/v1/splits/history?event_id={event_id}

Query Parameters

ParameterTypeRequiredDescription
event_idstringYesCanonical event ID
sportsbookstringNoFilter by book (comma-separated). When set, limit is applied client-side after fetching all matching entries.
start_timestringNoLower bound. RFC 3339 (2026-04-16T13:00:00Z) or Unix seconds (1776344602).
end_timestringNoUpper bound, same formats.
limitintegerNoMax entries (default 100, max 200).

Response

Entries are sorted oldest-first. This endpoint emits the success envelope (success/data/meta) — distinct from /splits which emits data/pagination/updated_at.

The history payload uses book (not sportsbook) and the spread carries away_line/home_line (not away_odds/home_odds). Both are known inconsistencies vs /splits.

{ "success": true, "data": [ { "book": "circa", "ts": "2026-04-16T13:03:21.071966+00:00", "timestamp": 1776344602.36, "spread": { "away_line": -1.5, "home_line": 1.5, "handle_pct": { "away": 0.37, "home": 0.63 }, "bets_pct": { "away": 0.27, "home": 0.73 } }, "total": { "line": 8, "handle_pct": { "over": 0.43, "under": 0.57 }, "bets_pct": { "over": 0.55, "under": 0.45 } }, "moneyline": { "away_odds": 104, "home_odds": -126, "handle_pct": { "away": 0.35, "home": 0.65 }, "bets_pct": { "away": 0.35, "home": 0.65 } } } ], "meta": { "event_id": "mlb_guardians_orioles_2026-04-16", "total": 3, "books": ["circa", "draftkings"], "oldest": "2026-04-16T13:03:22.360588312Z", "newest": "2026-04-16T13:08:41.199237823Z", "updated_at": "2026-04-16T19:28:50.525875452Z" } }

Data is collected every ~5 minutes and retained for 48 hours via a Valkey sorted set (splits_history:{event_id}) scored by Unix timestamp.

curl "https://api.sharpapi.io/api/v1/splits/history?event_id=nba_thunder_timberwolves_2026-03-15" \ -H "X-API-Key: YOUR_API_KEY"

Interpreting Splits

SignalWhat it means
Bet % high, Handle % lowPublic side — lots of small bets
Bet % low, Handle % highSharp side — fewer but larger bets
DK and Circa agreeMarket consensus — both public and sharp aligned
DK and Circa divergeSharp-public split — Circa (sharp) disagrees with DK (public)

Splits data only comes from recreational books (DraftKings) and one sharp-adjacent book (Circa). No sharp book publishes splits. Use splits as one signal alongside line movement and +EV analysis, not in isolation.

Last updated on