Skip to main content
Player prop markets let you get odds on individual player performance — points scored, rebounds, assists, and more. TheRundown V2 API models player props as markets with type of TYPE_PLAYER.

Player Prop Market IDs

Individual Stats

MarketIDDescription
Player Points29Over/Under on points scored
Player Turnovers33Over/Under on turnovers
Player Rebounds35Over/Under on rebounds
Three Pointers Made38Over/Under on 3PT made
Player Assists39Over/Under on assists
Double Double87Yes/No on recording a double-double
Triple Double88Yes/No on recording a triple-double
Player Blocks98Over/Under on blocks

Combo Markets

Combo markets combine two or three stats into a single over/under line.
MarketIDDescription
Player PRA93Points + Rebounds + Assists combined
Player Points + Assists99Points + Assists combined
Player Points + Rebounds297Points + Rebounds combined
Player Rebounds + Assists298Rebounds + Assists combined

Live / In-Play Variants

Live player props use separate market IDs but map to their prematch equivalents.
MarketIDPrematch Equivalent
Live Player Points9029
Live Player Assists9139
Live Three Pointers9238
Live Player Rebounds98235
Live Player Blocks98398
Live Player Turnovers98433
Live Double Double98587
Live Triple Double98688
Live Player PRA98793
Live Player Points + Rebounds988297
Live Player Points + Assists98999
Live Player Rebounds + Assists990298

Discovering Available Prop Markets

The tables above are a reference, but not every sport or event will have every prop market. Use the market discovery endpoints to see which prop markets are currently available.

By sport and date

Returns all markets with active pricing for a sport on a given date. Filter to player props by checking the proposition field — prop markets have proposition: true.
curl "https://therundown.io/api/v2/sports/4/markets/2026-02-12?key=YOUR_API_KEY&offset=300"

By event ID

Returns only the markets available for a specific event. Useful when building a props view for a single game.
curl "https://therundown.io/api/v2/events/EVENT_ID/markets?key=YOUR_API_KEY"
Pass the V2 event_id from the event payload into per-event endpoints. Do not substitute event_uuid. Use the discovered market IDs in the market_ids parameter when fetching events to get odds for those props.

Fetching Player Props

Request player prop markets by including the relevant market_ids in your events request.
# NBA player points, rebounds, assists, and 3PT props
curl "https://therundown.io/api/v2/sports/4/events/2026-02-12?\
key=YOUR_API_KEY&market_ids=29,35,38,39&affiliate_ids=19,23&offset=300"

Understanding Participants in Player Props

In player prop markets, participants represent the player (not the team). Each participant has:
FieldDescription
idUnique numeric identifier for the player
namePlayer name (e.g., “LeBron James”)
typeTYPE_PLAYER for player props
Within each participant, the lines array contains the over/under values and their prices from each sportsbook. Each line has a value field (a string, e.g., "25.5") and a prices map keyed by affiliate ID. Each price object includes the price, is_main_line boolean, and updated_at timestamp.

Example Response Structure

{
  "market_id": 29,
  "name": "Player Points",
  "period_id": 0,
  "participants": [
    {
      "id": 12345,
      "name": "LeBron James Over",
      "type": "TYPE_OVER",
      "lines": [
        {
          "value": "25.5",
          "prices": {
            "19": { "price": -115, "is_main_line": true, "updated_at": "2026-02-12T18:30:00Z" },
            "23": { "price": -110, "is_main_line": true, "updated_at": "2026-02-12T18:29:45Z" }
          }
        }
      ]
    },
    {
      "id": 12345,
      "name": "LeBron James Under",
      "type": "TYPE_UNDER",
      "lines": [
        {
          "value": "25.5",
          "prices": {
            "19": { "price": -105, "is_main_line": true, "updated_at": "2026-02-12T18:30:00Z" },
            "23": { "price": -110, "is_main_line": true, "updated_at": "2026-02-12T18:29:45Z" }
          }
        }
      ]
    }
  ]
}

Fetching Combo Props

Combo markets combine multiple stats. The request pattern is the same — just use the combo market IDs.
# Fetch combo props: PRA, PA, PR, RA
COMBO_MARKETS = "93,99,297,298"

response = requests.get(
    f"{BASE_URL}/sports/4/events/{date.today()}",
    params={
        "key": API_KEY,
        "market_ids": COMBO_MARKETS,
        "affiliate_ids": "19",
    }
)

data = response.json()
for event in data["events"]:
    print(f"\n{event['teams'][0]['name']} @ {event['teams'][1]['name']}")
    for market in event.get("markets", []):
        print(f"\n  {market['name']}:")
        for participant in market["participants"]:
            for line in participant["lines"]:
                price_obj = line["prices"].get("19", {})
                price = price_obj.get("price", "N/A")
                print(f"    {participant['name']}: {line.get('value')} ({price})")

Fetching All Props at Once

You can request all prop market IDs in a single call. This is useful if you want to build a comprehensive player props page.
# All individual + combo props
curl "https://therundown.io/api/v2/sports/4/events/2026-02-12?\
key=YOUR_API_KEY\
&market_ids=29,33,35,38,39,87,88,93,98,99,297,298\
&affiliate_ids=19,23"

Live Player Props

Live player props are available once a game starts. Use the live market IDs to fetch in-play prop odds.
# Live player points (90), assists (91), 3PT (92)
curl "https://therundown.io/api/v2/sports/4/events/2026-02-12?\
key=YOUR_API_KEY&market_ids=90,91,92&affiliate_ids=19"
You can also subscribe to live prop updates via the V2 Markets WebSocket:
const ws = new WebSocket(
  "wss://therundown.io/api/v2/ws/markets?key=YOUR_API_KEY&sport_ids=4&market_ids=90,91,92"
);

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  if (data.meta?.type === "heartbeat") return;

  console.log(`Live prop update: market=${data.market_id}`);
  for (const participant of data.participants || []) {
    console.log(`  ${participant.name}`);
  }
};

Building a Player Props Display

Here is a complete example that organizes props by player for display in a UI.
import requests
from collections import defaultdict
from datetime import date

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://therundown.io/api/v2"

MARKET_NAMES = {
    29: "Points", 35: "Rebounds", 38: "3PT Made",
    39: "Assists", 93: "PRA", 98: "Blocks",
    99: "Pts+Ast", 297: "Pts+Reb", 298: "Reb+Ast",
}

response = requests.get(
    f"{BASE_URL}/sports/4/events/{date.today()}",
    params={
        "key": API_KEY,
        "market_ids": ",".join(str(m) for m in MARKET_NAMES),
        "affiliate_ids": "19",
        "main_line": "true",
    }
)

data = response.json()

for event in data["events"]:
    home = event["teams"][1]["name"]
    away = event["teams"][0]["name"]
    print(f"\n{'=' * 60}")
    print(f"{away} @ {home}")
    print(f"{'=' * 60}")

    # Group props by player
    players = defaultdict(list)

    for market in event.get("markets", []):
        mid = market["market_id"]
        market_label = MARKET_NAMES.get(mid, market["name"])

        for participant in market["participants"]:
            # Extract player name (remove "Over"/"Under" suffix)
            player_name = participant["name"]
            for suffix in [" Over", " Under"]:
                player_name = player_name.replace(suffix, "")

            is_over = "Over" in participant.get("name", "") or \
                participant.get("type") == "TYPE_OVER"

            for line in participant["lines"]:
                price_obj = line["prices"].get("19", {})
                price = price_obj.get("price")
                if price == 0.0001:
                    price = None

                players[player_name].append({
                    "market": market_label,
                    "value": line.get("value"),
                    "side": "Over" if is_over else "Under",
                    "price": price,
                })

    # Display grouped by player
    for player, props in sorted(players.items()):
        print(f"\n  {player}:")
        for prop in props:
            price_str = f"{prop['price']:+d}" if prop["price"] else "N/A"
            print(f"    {prop['market']}: {prop['side']} {prop['value']} ({price_str})")

Next Steps

Market IDs Reference

Full list of all market IDs

Getting Live Odds

Core game odds (moneyline, spread, total)

WebSocket Streaming

Real-time updates for live props

Historical Odds

Track prop line movement over time