pnclFEED Free key

pinnacle odds api / player props / specials

Player props and specials in the Pinnacle odds API

GET/kit/v1/prematch/fixtures?include_specials=1

{ events: [.. specials ..] }200 OK

Beyond the main match markets, the feed carries Pinnacle's special markets: player props like anytime goalscorer, team props like winning margin or odd and even, exact scores and tournament futures. They are excluded by default, so existing integrations keep their payload size; pass include_specials=1 on the fixtures or markets call to receive them. The free key covers every request on this page: 20 a minute and 100 a day, figures checked 2026-10-28.

Create a free key

Each special is its own event row

A prop does not hide inside the match object: every special arrives as its own row with its own event_id, joined to the main match by parent_id. Three extra fields describe it: special names the market ("Anytime Goalscorer", "Winning Margin"), special_category groups it ("Player Props", "Team Props", "Exact Scores", "Futures"), and special_units says what the outcomes count, like corners or runs.

The flag has two shapes: include_specials=1 returns flat rows, the cheapest pairing with a since cursor, and include_specials=nested groups the specials under each parent event's own array when you want one row per match.

props.sh
# Player props in one soccer
# fixture list. The key and
# base URL come from your
# account and the docs.
export ODDS_API_KEY="your key"
export ODDS_BASE_URL="https://..."

U="$ODDS_BASE_URL/kit/v1/prematch/fixtures"
H="x-portal-apikey: $ODDS_API_KEY"

# Specials are off by default.
# Opt in flat (cheapest with a
# since cursor) or nested.
curl -s -H "$H" \
  "$U?sport_id=1&include_specials=1" \
  | jq -r '.events[]
    | select(.special_category)
    | [.parent_id, .special_category,
       .special] | @tsv' | head

GET/kit/v1/prematch/markets?event_id=..

named outcomes per period200 OK

Read a special's prices

Once a special's event_id is known, pass it to the prematch markets endpoint; no flag is needed there. Its prices live under special_markets, keyed by period: each entry carries a prices array where name is the outcome label (a player, "Yes", "2-1", "4+"), price is the decimal odds, and max_risk is the book's maximum stake for that market.

Treat specials as slower-moving than the board: the drop alerts and the prematch drop stream track the main markets, so a poller with a since cursor on the fixtures call is the honest way to watch prop prices, at the cadence your plan allows. The Python page shows the cursor loop that carries this script into a scheduled job.

What people ask about specials

Short answers before you build on prop markets.

Are props available on the free key?

Yes, the same plan rules apply to every endpoint on this page. The free key's 100 calls a day is the cap to watch when you poll fixtures with specials turned on.

Which sports carry specials?

Documentation examples are soccer, and coverage follows what the board prices. Call the fixtures endpoint with the flag on and count special_category values to see the current supply before you promise a market.

Do props show up in drop alerts?

The documentation presents specials on the prematch fixtures and markets endpoints; the drop streams track the main markets. Poll the specials you care about instead of waiting for an alert.

How do I join a prop to its match?

Read parent_id on the special row; it is the main match's event_id. With include_specials=nested the rows arrive already grouped under the parent.

NEXTbash props.sh

One flag, a second market universe

The free key runs everything on this page. When a props board needs more than 100 calls a day, the pricing page shows the plan that lifts the cap.