Skip to content

Props

/v1/sports/{sport}/props returns only fixtures that have not started. /props/live returns fixtures in play now: started and not finished. It needs in-play odds (Growth and up), NOT the live feed add-on. Selectors and formats work on both lists; aggregate soccer and tennis lists have no date cap.

Player props require the Growth plan or above (x-plan-min: growth in the OpenAPI file). GET /v1/sports/{sport}/props covers one or more fixtures in a sport at once; GET /v1/sports/{sport}/events/{id}/props scopes the same shape to one fixture. Both count once against your plan's request allowance, and a key on a lower plan is refused with a PLAN_REQUIRED error rather than an empty list.

The markets parameter is required

Unlike the odds endpoints, markets is required here: there is no default set of props. Keys are named like player_pass_yds, player_anytime_td, batter_hits and pitcher_strikeouts; the Market keys reference explains how a key is built. A key we do not recognise is rejected; a key we recognise that no book is pricing for that fixture simply returns no rows.

One row per player, stat and line

Each row's outcomes[] holds every side for that one line together: an Over and an Under for a numeric prop, or Yes and, where offered, No for a binary one such as anytime touchdown. A binary prop has no point at all, because there is no number to beat. Where only one side is posted, only that side appears.

Pick'em payouts

PrizePicks offers pick'em lines with the offered sides and no price. Underdog publishes prices and may also publish a per-pick payout_multiplier: this optional number appears on that exact outcome when available, such as 3.34 or 0.65. It keeps the same value in either odds format. A missing multiplier is omitted, never filled with a default or null.

GET /v1/pickem/payouts provides static, published entry payout tables, authenticated with the same X-API-Key header and free on every plan. Each book has source_url, as_of, entries and note. Each entry has type (power or flex), picks and pays, whose keys are the number of correct picks. For example, {"type":"flex","picks":2,"pays":{"2":2,"1":0.5}} gives the published multipliers for two or one correct picks. PrizePicks entries are as published on October 19, 2026; goblin/demon lineups pay altered rates the book does not publish. Underdog entries are as published on October 4, 2026, with its standard entries listed as type power. Entry payouts are separate from live per-pick data; we do not infer prices or probabilities from them.

Coverage

Use GET /v1/bookmakers and its has_player_props field to discover the current supported prop sources. This means the book has a props integration in at least one sport. The optional player_props_sports field lists verified sport groups; when it is absent, sport-specific coverage has not been verified. BetUS supports MLB/NHL, SBOBET supports WNBA, SportBet supports NBA/WNBA, and bet365 supports NFL/NBA/NHL. Circa supports NFL, NCAAF, NBA, NCAAB, NHL and MLB props. Shuffle supports NFL, NCAAF, NBA, WNBA, NHL and MLB props; availability varies by fixture and time. It does not promise that every book prices every fixture or requested market. Which books price a given fixture changes through the day: most post their prop board within hours of kickoff, so a fixture several days out may carry prices from none of them while the same fixture on matchday carries prices from most.

On October 4, 2026, a live NFL coverage check found props from 30 distinct books across the slate. On each of the next 14 fixtures, the number of books pricing props ranged from 26 to 29. A fixture further out carried props from just one book, and later fixtures had none. These counts cover all available prop markets together; selecting a particular market can return fewer books. Coverage and depth vary by sport, fixture and time.

Soccer props use the aggregate soccer key. Discover the available market names through GET /v1/markets; scorer, assist, card, shot and goal-threshold markets keep their own settlement claims. Full-game prop openers, checkpoints and closing prices are available through prop history on Scale and Business, from each sport's first archived month (see the coverage page).

unmatched_bookmakers lists every requested book with no props returned for this fixture and the selected markets. With bookmakers=, it covers those named books; without it, it covers every props-capable book in GET /v1/bookmakers. The reason can be missing markets, no props for the fixture, an unsafe fixture match or expired prices. It is not an outage diagnosis. GET /v1/markets lists the books with a supported mapping for each prop market where that capability is known; this describes coverage, not current prices.

Example

GET/v1/sports/nfl/props?markets=player_anytime_td,player_pass_yds
curl --request GET \
  --url "https://oddslink.app/v1/sports/nfl/props?markets=player_anytime_td,player_pass_yds" \
  --header "X-API-Key: ok_live_..." \
  --compressed
200 OKresponse.json
[
  {
    "id": "nfl:atlantafalcons-carolinapanthers:2026-09-20",
    "sport_key": "nfl",
    "sport_title": "NFL",
    "commence_time": "2026-09-20T17:00:00.000Z",
    "is_live": false,
    "home_team": "Atlanta Falcons",
    "away_team": "Carolina Panthers",
    "props": [
      {
        "bookmaker": {
          "key": "betrivers",
          "title": "BetRivers",
          "link": "https://ny.betrivers.com/?page=sportsbook#event/1022761843",
          "last_update": "2026-09-18T18:07:25.000Z"
        },
        "player": "Bijan Robinson",
        "stat": "player_anytime_td",
        "outcomes": [
          {
            "name": "Yes",
            "price": -195
          }
        ]
      },
      {
        "bookmaker": {
          "key": "bovada",
          "title": "Bovada",
          "last_update": "2026-09-18T18:07:31.000Z"
        },
        "player": "Bryce Young",
        "stat": "player_pass_yds",
        "point": 224.5,
        "outcomes": [
          {
            "name": "Over",
            "price": -115
          },
          {
            "name": "Under",
            "price": -105
          }
        ]
      }
    ],
    "unmatched_bookmakers": []
  }
]