Product

UK Player Props API — Goalscorer, Shots & Cards Across Bookmakers

A player props API returns bookmaker prices on player-level football markets — anytime goalscorer, shots, assists, cards, and similar — as structured JSON. Most global odds APIs are weak here for the UK: they skip retail depth, cover props on one book only, or force you to scrape five apps.

UK Odds API is a UK-first football odds API. It aggregates pre-match odds from major UK bookmakers and exchanges into one REST/OpenAPI contract so you can build comparison tools, tipster products, alerts, and scanners without scrapers.

This hub explains what UK Odds API is, what it covers, which player-prop market types exist, and how to fetch them. For a full copy-paste scanner, see the goalscorer Python tutorial.

What is UK Odds API?

UK Odds API is a developer API for UK pre-match football odds. Instead of integrating Bet365, Sky Bet, Paddy Power, William Hill, and others one by one (or scraping their sites), you call a single HTTP API and receive normalised fixtures, markets, and prices.

In practice that means:

  • One schema for events, markets, and selections across books
  • Stable bookmaker codes (UO###) you can filter and store
  • Best-odds helpers when you want the top price per selection
  • Core vs full packages so match markets and deep player markets are explicit
  • OpenAPI docs / playground at api.ukoddsapi.com/docs

Scope to keep in mind: football, pre-match (not a racing API, not an NFL feed). Player props live in the full odds package on fixtures where bookmakers actually price those markets.

Bookmaker and product coverage

UK Odds API is built around UK retail bookmakers and exchanges — the books UK users actually hold accounts with. Coverage includes household names such as:

  • Bet365
  • Sky Bet
  • Paddy Power
  • William Hill
  • Coral
  • Ladbrokes
  • Betfair (exchange)
  • Plus additional UK books and exchanges returned by GET /v1/bookmakers

See the live map on bookmaker coverage and filter odds with bookmaker_codes when your product only needs a subset.

On the football side you get:

Layer What you get
Fixtures GET /v1/football/events — dates, leagues, teams, event_id
Match markets 1X2, BTTS, totals, handicaps, corners, and more via package=core
Player props & depth Goalscorer, player shots/passes/assists, cards, and extended markets via package=full
Best prices GET .../odds/best for comparison-style UIs
Catalog GET /v1/football/markets — documented market groups and keys

League coverage spans major UK and European competitions offered in the feed (Premier League and others — see league coverage). Exact prop availability is always fixture- and bookmaker-dependent: treat payloads as sparse.

What are player props (in betting terms)?

Player props are bets on something a named player does in a match — for example “Haaland anytime goalscorer” or “Salah over 2.5 shots” — rather than only the match result or total goals.

Why developers care:

  • Prices for the same prop often differ widely across UK books
  • Content and tipster products need player markets, not just 1X2
  • Value / CLV workflows need bookmaker prices, not just stats APIs

A stats API tells you what happened (or projected performance). A player props API tells you what bookmakers are offering on those outcomes right now (pre-match), with bookmaker IDs attached.

Player prop market types in UK Odds API

Browse groups with GET /v1/football/markets. The props-relevant groups include:

Scorer markets

Player scoring outcomes, for example:

  • Anytime Goalscorer
  • First Goalscorer
  • Last Goalscorer
  • To Score a Hat-Trick
  • Related “to score” style lines when offered

Player performance markets

Named-player lines beyond scoring, for example:

  • Player Shots / Shots on Target
  • Player Passes
  • Player Assists
  • Player Tackles
  • Goalkeeper Saves

Cards and team-adjacent depth

On deeper packages you also see bookings / cards and other extended football markets that often sit next to props in product UIs. Use the markets catalog rather than hard-coding names — labels vary slightly by book even when normalised.

How props are delivered

There is no separate /player-props URL. You:

  1. Resolve an event_id from /v1/football/events
  2. Call /v1/football/events/{event_id}/odds?package=full
  3. Optionally filter by market / market_key from the catalog
  4. Read markets[].selections[] rows (each row has odds + bookmaker_code)

That design keeps match odds and player props in one consistent contract.

Who needs a UK player props API

  • Odds comparison / “best goalscorer price” tools
  • Tipster and content platforms showing player markets
  • Value scanners comparing retail props vs Betfair
  • Fantasy-adjacent products that need bookmaker prices, not only stats

If you only need 1X2 / totals / BTTS, stay on package=core. If you sell or trade player markets, you need full.

Core vs full (why props need full)

Package Typical use Player props
core Match markets, totals, corners, main lines Limited — not the full props tree
full Deep football coverage Scorer + player markets + extended lines

Details: Core vs Full docs.

How to fetch player props (Python)

import os
import requests
from datetime import date

API_KEY = os.environ["UKODDSAPI_KEY"]
BASE = "https://api.ukoddsapi.com"
headers = {"X-Api-Key": API_KEY}

# 1) Pick a fixture
events = requests.get(
    f"{BASE}/v1/football/events",
    headers=headers,
    params={
        "schedule_date": date.today().isoformat(),
        "has_odds": "true",
        "league": "premier-league",
        "per_page": 5,
    },
    timeout=30,
).json().get("events", [])

event_id = events[0]["event_id"]

# 2) Full package for player markets
odds = requests.get(
    f"{BASE}/v1/football/events/{event_id}/odds",
    headers=headers,
    params={
        "package": "full",
        "odds_format": "decimal",
        # Optional: narrow with market / market_key from /v1/football/markets
    },
    timeout=90,
).json()

for market in odds.get("markets", []):
    name = (market.get("market_name") or market.get("market_key") or "").lower()
    if "goalscorer" in name or "player" in name or "shots" in name:
        print(market.get("market_name") or market.get("market_key"))
        for sel in market.get("selections", [])[:6]:
            print(
                " ",
                sel.get("selection_name") or sel.get("name"),
                sel.get("odds"),
                sel.get("bookmaker_code"),
            )

For best price per selection across books, also call /odds/best with the same event (and filters your plan supports).

Sample shape (what to expect in JSON)

Odds responses are organised as markets → selections, where each selection row carries the bookmaker:

{
  "event_id": "evt_…",
  "markets": [
    {
      "market_key": "anytime_goalscorer",
      "market_name": "Anytime Goalscorer",
      "selections": [
        {
          "selection_name": "Erling Haaland",
          "odds": 1.72,
          "bookmaker_code": "UO004",
          "bookmaker_name": "Bet365"
        },
        {
          "selection_name": "Erling Haaland",
          "odds": 1.80,
          "bookmaker_code": "UO018",
          "bookmaker_name": "Paddy Power"
        }
      ]
    }
  ]
}

Exact field names follow the live OpenAPI schema — use the playground on a real fixture to export a full payload. Keys and which players appear change by match.

Why most “odds APIs” disappoint on UK props

Global / US-first providers often:

  • Skip UK retail depth on player markets
  • Cover props for one book only
  • Use inconsistent player naming across books

UK Odds API’s focus is UK bookmaker depth with stable codes so you can compare the same prop across books without scraping five apps.

Common mistakes

  • Requesting package=core and wondering where goalscorer markets went
  • Matching players only on messy display strings with no normalisation strategy
  • Assuming every book prices every prop on every fixture
  • Building UI only on /odds/best when you still need the full grid for audit / execution
  • Confusing a stats feed with a bookmaker odds feed

FAQ

What is a player props data API?

It is an API that returns player-level betting markets (goalscorer, shots, cards, etc.) as JSON, usually with bookmaker identifiers and decimal odds — not just match 1X2.

What is UK Odds API?

UK Odds API is a UK-first REST API for pre-match football odds across major UK bookmakers and exchanges, including deep markets such as player props on package=full.

Does UK Odds API support anytime goalscorer odds?

Yes. Goalscorer and related scorer markets are available on fixtures where bookmakers offer them, typically via package=full. Availability is fixture-dependent.

Which UK bookmakers are included?

Major UK books and exchanges such as Bet365, Sky Bet, Paddy Power, William Hill, Coral, Ladbrokes, and Betfair, plus others listed by GET /v1/bookmakers and on bookmaker coverage.

How is this different from a stats API?

Stats APIs return historical or live performance data. A player props API returns bookmaker prices on those markets so you can compare, alert, or scan for value.

Can I compare goalscorer odds across Bet365 and Sky Bet?

Yes. Pull package=full odds and filter or group selections by bookmaker_code (for example Bet365 UO004). See the Python goalscorer tutorial for a full scanner walkthrough.

Is there a separate player props endpoint?

No separate path. Use the standard football odds endpoints with package=full (and optional market filters). Discover keys via GET /v1/football/markets.

Get UK player props without scraping

Create an account, open the OpenAPI playground, request package=full on a Premier League fixture, and filter for goalscorer / player markets. That is the fastest way to see real coverage on a live match.

Start free trial · Docs: markets · Tutorial: goalscorer scanner in Python · Bookmaker coverage