---
title: "Returns betting splits for a sport: handle (money) percent and ticket (bet) percent on each side of the spread, the total and the moneyline of each game, per book, from DraftKings, BetMGM (tickets only) and Circa Sports."
method: GET
path: "/api/v1/{sport}/splits"
tags: ["Betting splits"]
---

# Returns betting splits for a sport: handle (money) percent and ticket (bet) percent on each side of the spread, the total and the moneyline of each game, per book, from DraftKings, BetMGM (tickets only) and Circa Sports.

`GET /api/v1/{sport}/splits`

## Request

- Base URL: `https://api.owlsinsight.com`
- URL: `https://api.owlsinsight.com/api/v1/{sport}/splits`
- Auth: HTTP bearer

Returns betting splits for a sport: handle (money) percent and ticket (bet) percent on each side of the spread, the total and the moneyline of each game, per book, from DraftKings, BetMGM (tickets only) and Circa Sports.

event_id is the eventId /api/v1/{sport}/odds gives the same game ({sport}:{Away}@{Home}-{YYYYMMDD}), and home_team and away_team are the /odds team names, so splits join to odds on event_id. A game not on /odds gets an id built the same way from its scheduled start. Both games of a doubleheader share one event_id, as on /odds.

Each entry in splits carries as_of, when that book's figures were read. The books are read on different schedules, so two books on one game can show different times.

DraftKings figures run until kickoff. After kickoff the last pre-game DraftKings figures stay on the board for up to 4 hours, with the as_of of that last read.

A market a book has not published for a game is absent from that game rather than reported as zero.

meta.books lists the books on the board. meta.as_of is the oldest of their latest reads; a split kept after kickoff carries its own, older as_of. meta.source is a fixed value; read meta.books for the books.

meta.status is "ok" when every book has a recent read, "partial" when one does not (data may then be a subset) and "stale" when no book has one and the last full board, at most 12 hours old, is served instead; meta.age_seconds is then present. meta.partial_reason says which: "book_unavailable" (that book's figures could not be read; it is absent from meta.books), "upstream_limited" (the Circa figures were withheld) or "upstream_paused" (no book could be read and no board from the last 12 hours is available).

BetMGM publishes ticket percentages only, so its entries (book betmgm) carry the bets fields and no handle fields; a percentage absent from any book is not zero.

DraftKings lists splits for only about 50 games of a sport per day, so on a busy slate, such as a full college football Saturday, many games (mostly smaller-conference ones) have no DraftKings split.

## Path parameters

- `sport` string, required

## Response `200`

OK

- SplitsResponse
  - `data` SplitsGame[]
    - `away_team` string: The /odds team name (same string as {@link OddsEvent.away_team}).
    - `event_id` string: Our event id: the {@link OddsEvent.eventId} that `/api/v1/{sport}/odds` gives the same game, `{sport}:{Away}@{Home}-{YYYYMMDD}` (e.g. "nfl:Carolina Panthers@Cleveland Browns-20260927"), so splits join to odds on it. The date is the game's UTC start date, except MLB games starting from 2026-10-11T10:00Z, which carry the US Eastern date (as on /odds). A game not on /odds gets an id built the same way from its scheduled start. Both games of a doubleheader share one `event_id`, as on /odds. Before 2026-09-27 this was an upstream game code (e.g. "20260622MLB00030") that did not match /odds.
    - `home_team` string: The /odds team name (same string as {@link OddsEvent.home_team}).
    - `splits` SplitsBookEntry[]
      - `as_of` string: ISO 8601 time this book's figures were read. The books are read on different schedules, so two books on one game can show different times. DraftKings figures run until kickoff; the last pre-game DraftKings figures stay on the board for up to 4 hours after kickoff, with the `as_of` of that last read. Absent on responses from before 2026-09-27.
      - `book` string: Book key: 'dk' (DraftKings), 'betmgm' (BetMGM, tickets only, since 2026-09-29) or 'circa' (Circa Sports). Other keys may appear as books are added.
      - `moneyline` object
        - `away_bets_pct` number, double
        - `away_handle_pct` number, double
        - `away_price` number, double
        - `home_bets_pct` number, double
        - `home_handle_pct` number, double
        - `home_price` number, double
      - `spread` object
        - `away_bets_pct` number, double
        - `away_handle_pct` number, double
        - `away_line` number, double
        - `home_bets_pct` number, double
        - `home_handle_pct` number, double
        - `home_line` number, double
      - `title` string: Display name: 'DraftKings', 'BetMGM' or 'Circa Sports'.
      - `total` object
        - `line` number, double
        - `over_bets_pct` number, double
        - `over_handle_pct` number, double
        - `under_bets_pct` number, double
        - `under_handle_pct` number, double
  - `meta` object
    - `age_seconds` number, double: Only when `status` is 'stale': how old the served board is, in seconds.
    - `as_of` string: ISO time of the OLDEST of the books' latest reads behind this board, so it never overstates freshness. Each split also carries its own {@link SplitsBookEntry.as_of}; a DraftKings split kept after kickoff has an older one than this. Since API v2.362.0.
    - `books` string[]: The books on this board: 'draftkings', 'betmgm' and, while it is offered, 'circa'. Can be `['draftkings']` alone. (Each split's own `book` key is 'dk', 'betmgm' or 'circa'.) Read the book set from here, never from a fixed list: books are added.
    - `partial_reason` string: Only when `status` is 'partial': 'upstream_limited' = the Circa figures were withheld; 'book_unavailable' = one book has no recent read (that book is missing from `books`); 'upstream_paused' = no board at all is available: no book could be read and no board from the last 12 hours exists (`data` is empty).
    - `source` string: A fixed legacy value, 'circa_dk', whatever books are on the board. Do not read the book set from it: use `books`.
    - `status` string: 'ok' = every book on offer has a recent read. 'partial' = one does not (see `partial_reason`), so `data` may be a subset. 'stale' = no book has a recent read, and the last full board (at most 12 hours old, see `as_of` / `age_seconds`) is served instead. Absent on API versions before v2.346.0; 'stale' since v2.362.0.
    - `total_games` number, double: Number of games in `data`. Present on every response since API v2.346.0 (earlier: only on cache misses).
  - `sport` string

---

[API](https://skmtc.dev/owlsinsight/apis/owls-insight-api.md) · [All operations](https://skmtc.dev/owlsinsight/apis/owls-insight-api/llms.txt) · [OpenAPI document](https://skmtc.dev/owlsinsight/apis/owls-insight-api/revisions/76c1ea016ff1?raw)
