DARTS API

Darts data, match by match

Results, three-dart averages, checkouts and 180s for every match on the tour. One clean JSON API for pricing models, betting tools and live apps.

  • Free key, no card needed
  • 40 endpoints
  • Webhooks and an MCP server

Luke Littler, last 12 months

Every match, in the order he played them

Matches
137
Won
116
Titles
12
Average
101.30
Won Lost Title 10-match average
European Tour 12, FinalTitle6 Sep 2026
Luke LittlerWon8
Luke Humphries6
Average
95.25
Darts
204
Points
6,477
vs his 12-month average of 101.30−6.05
GET/v1/players/pl_VEB8HM/matches200 OK
{  "date": "2026-09-06",  "competition": "European Tour 12",  "round": "Final",  "opponent": "Luke Humphries",  "score": "8-6",  "won": true,  "darts": 204,  "three_dart_avg": 95.25}

From the TV stage to the floor events

Results for every round of the draw, with each player's statistics for every match. History runs back to 1994, and new results arrive daily.

Matches
461,244
2 Jan 1994 to 3 Nov 2026
Players
45,208
20,982 with full statistics in 2026
Events
10,142
Across 2,091 tournaments

Matches by season

With the share carrying the full set of statistics

Matches held
446,254 matches with the full set since 2018, 98.4% of all heldCoverage by season

15 statistics on every match

For each player, in four groups

Scoring 5
Three-dart averageFirst 9First 3With the throwAgainst the throw
Big scores 4
180s171 to 180140s131 to 140
Finishing 3
Checkout %Highest checkoutFunctional doubles
Legs 3
Legs wonWon on the throwWon against the throw
Competitions

Majors: World Championship, Premier League, World Matchplay, World Grand Prix, Grand Slam, Players Championship Finals, UK Open, Masters.

Tours: European Tour, Players Championship, World Series, World Youth Championship.

All tournaments

Form, splits and records for every player

Player endpoints return the profile, the full match list and the splits a model needs: by stage of the draw, by competition and by how well they threw.

Luke Littler

ENG
pl_VEB8HM
Last 12 months
Matches
137
116 won, 21 lost
Titles
12
7 majors and 5 more
Average
101.30
Best 113.84, lowest 83.94
Last 10 matches
99.82

Win rate by his average in the match

100 or more72 of 7892.3%
Under 10044 of 5974.6%

By stage of the draw

His average climbs in finals

StageMatchesWin %Average
Earlier rounds3694.4%100.38
Last 162090.0%101.07
Quarter finals3281.3%100.29
Semi finals2969.0%101.96
Finals2090.0%102.72
All matches13784.7%101.30

Premier League nights count by their round.

By competition

Every event group he played

CompetitionMatchesWin %Average
Majors4397.7%102.46
Premier League3672.2%100.47
Players Championship2281.8%99.79
European Tour1586.7%101.80
World Series1376.9%98.86
World Youth Championship887.5%101.11
All matches13784.7%101.30

Majors: World Championship, World Matchplay, World Grand Prix, Grand Slam, Players Championship Finals, UK Open, Masters and European Championship.

Player endpoints GET /v1/players GET /v1/players/{player_id} GET /v1/players/{player_id}/matches GET /v1/players/{player_id}/splits GET /v1/players/{player_id}/form

Matches and head to head, joined up

Match endpoints return the round, the score and each player's figures. Head to head links every meeting, so a model can see how one player fares against another.

Littler v Humphries

15 meetings in the last 12 months

All 15 meetings
10–5Littler's record
100.52His average, −0.78 on his usual
DateMatchScoreAverage
6 SepEuropean Tour 12FinalW8–695.25
26 JunWorld Series of Darts 4FinalL7–899.50
6 JunWorld Series of Darts 3Semi finalL5–7100.85
28 MayPremier LeagueFinalW11–10111.67
21 MayPremier LeagueWeekly semi finalL1–695.97
14 MayPremier LeagueWeekly semi finalL3–699.86
7 MayPremier LeagueWeekly finalW6–5100.67
30 AprPremier LeagueWeekly finalW6–5104.11

Most frequent opponents

63 opponents, 44 met only once

OpponentMetRecordAverage
Luke Humphries1510–5100.52
Gerwyn Price1312–1101.13
Jonny Clayton85–398.45
Josh Rock88–0102.30
Michael van Gerwen76–1102.50
Gian van Veen64–2104.70
Danny Noppert43–1101.07
James Wade43–198.53

Record and average are Littler's, oldest result first in each strip.

Run to the World Matchplay title

18 to 26 July 2026

111.04Event average
1,391Darts
5–0Matches
  1. Last 32Niko Springer10–6109.53
  2. Last 16Nathan Aspinall11–8113.68
  3. Quarter finalJosh Rock16–7109.57
  4. Semi finalDirk van Duijvenbode17–5110.88
  5. FinalGerwyn Price18–9111.53

Scores in legs. Every match averaged 109.53 or better.

Match endpoints GET /v1/results GET /v1/fixtures GET /v1/matches/{match_id} GET /v1/matches/{match_id}/statistics GET /v1/head-to-head

40 endpoints, one consistent API

Eight groups, from coverage and draws to ratings, markets and probabilities. Choose any endpoint to see what it takes and what it returns.

Free key9 endpoints Data plans23 more Analyst8 model endpoints {data, meta} on every response Page or cursor on every list 422 for unknown parameters

Reference and coverage

5

Editions

4

Players

8

Matches

7

Ratings

3

Markets

6

Probability and props

4

Leaders, sync and usage

3
GET/v1/probability
AnalystProbability and props34 of 40

Any pairing in any format.

Parameters

player_a, player_b, best_of, unit, legs_per_set, as_of

GET https://api.dartsapi.com/v1/probability

Returns in data

{p_a, p_b, fair_price{a, b}, leg_p{a, b}, correct_score[{a, b, prob}], total_legs{mean, lines[{line, over, under}]}, handicaps[{line, a_covers, b_covers}]}
Alongside the 40 Webhooksmatch.finishedfixture.addedprice.updated MCP server/mcp

Priced for any pairing, in any format

Give the probability endpoint two players and a match length. It returns win chances, fair prices, every correct score, total legs and handicaps, worked for that exact format.

Luke Littler v Luke Humphries Littler wins 51.19% of legs, from 86 of 168 in their 13 meetings played over legs

Match odds

Best of 21 legs, first to 11

Analyst
Luke Littler54.40%Fair price 1.84
Luke Humphries45.60%Fair price 2.19

Once over this length, in the Premier League final: Littler won 11–10.

Longer matches stretch a small leg edge: 53.22% over 11 legs, 55.64% over 35.

Correct score

Most likely: 11–10 to Littler

8.9%
11–0Littler winsHumphries wins0–11

Total legs

Average 18.29 legs

LineOverUnder

Handicaps

Legs, Littler giving the start

LittlerCoversHumphriesCovers
GET/v1/probability?player_a=pl_VEB8HM&player_b=pl_PMAW5J&best_of=21&unit=legs

        
Analyst Also priced GET /v1/matches/{match_id}/probability GET /v1/props/180s GET /v1/props/finishing GET /v1/editions/{edition_id}/outrights POST /v1/simulate/bracket

SDKs for PHP and Python, and a lab to build on

The official clients cover all 40 endpoints. Every other language gets the OpenAPI file and a Postman collection, and the lab publishes open-source tools that run on your own key.

<?php
require __DIR__ . '/DartsApi.php';

$api = new DartsApi(getenv('DARTS_API_KEY'));

$page = $api->players->matches('pl_VEB8HM', [
    'from' => '2026-07-18',
    'to'   => '2026-07-26',
]);

foreach ($page['data']['matches'] as $m) {
    $date = substr($m['start_utc'], 0, 10);
    printf("%s  %-22s %s\n", $date, $m['opponent']['name'], $m['score']);
}
OutputGET /v1/players/{player_id}/matches
2026-07-18  Niko Springer          10-6
2026-07-21  Nathan Aspinall        11-8
2026-07-23  Josh Rock              16-7
2026-07-25  Dirk van Duijvenbode   17-5
2026-07-26  Gerwyn Price           18-9
PHP

PHP SDK

One file, no Composer, PHP 8.1 or later

View on GitHub
require 'DartsApi.php';
  • A method for each of the 40 endpoints
  • Cursor paging and Retry-After handled
Py

Python SDK

One file, standard library only

View on GitHub
from dartsapi import DartsApi
  • A method for each of the 40 endpoints
  • Cursor paging and Retry-After handled
{ }

Every other language

Generated from the same registry as the API

Lab

darts-card-pricer

Prices a day's card end to end in one command. It asks for the date, fetches the fixtures, prices every match and prints the result.

  • Asks for your key once and keeps it
  • Checks the key with /v1/usage before any work
  • Paces itself from your plan's rate-limit headers
  • Caches under data/, so nothing is fetched twice
  • Reads only the public API, like any customer
python price_card.py

$ python price_card.py

Date to price 2026-05-28

[09:12:04 +00:00] ✓ key checked with /v1/usage, Analyst plan

[09:12:05 +00:01] ✓ 1 fixture, cached under data/2026-05-28/

PREMIER LEAGUE FINAL best of 21 legs
Luke Littler54.40%1.84
Luke Humphries45.60%2.19
Most likely11–9 Littler9.2%
SettledLittler won 11–10

[09:12:05 +00:01] done: 1 match priced, nothing fetched twice

Live scores, a change feed and webhooks

Poll the live endpoint while matches are on, sync everything else from one change feed, or let a webhook tell your system the moment a match finishes.

Live scores

GET /v1/live
Data plans

Matches in play, with the freshness of the feed reported on every response.

seconds_behind
How far the feed trails the board
last_change
When anything last moved
poll_seconds
When to ask again

Change feed

GET /v1/changes
Data plans

Everything added or changed since your last cursor, so you never poll every list.

since
Start from a time or a cursor
types
matchpricestatisticsrating
next_cursor
Where to pick up next time

Webhooks

POST to your URL

Signed calls to your own endpoint, retried until they land and logged in your dashboard.

match.finished
A result is final
fixture.added
A match joins the schedule
price.updated
A price moves

How the European Tour 12 final reached you

6 September 2026, Luke Littler v Luke Humphries

  1. Before the finalfixture.addedLuke Littler v Luke Humphries, best of 15 legs
  2. During play/v1/liveThe score leg by leg, with seconds_behind on every response
  3. Final legmatch.finishedLittler wins 8–6
  4. After the matchstatisticsLittler's figures added: 95.25 average over 204 darts
  5. After the matchratingBoth players' ratings updated

Webhook events are shown in violet, the live endpoint in green and change feed types in blue.

POSThttps://your-app.example/hooks/darts
Dartsapi-Signature: t=…, v1=…
{
  "type": "match.finished",
  "created": "2026-09-06",
  "data": {
    "edition": "European Tour 12", "round": "Final",
    "players": ["Luke Littler", "Luke Humphries"],
    "score": { "first": 8, "second": 6, "unit": "legs" },
    "winner_id": "pl_VEB8HM"
  }
}

Recent deliveries

European Tour 12, 5 and 6 September

Failed
EventMatchStatus
match.finishedFinalLittler 8–6 Humphries200
match.finishedSemi finalLittler 7–3 van Gerwen200
match.finishedQuarter finalLittler 6–0 Noppert200
match.finishedLast 16Littler 6–3 Ratajski200
match.finishedLast 32Littler 6–4 Springer200

Before you build

What developers and analysts ask first.

How far back does the data go?
Results and three-dart averages reach back to 1994. Since 2018, 98.4% of matches carry the full set of statistics, 446,254 matches in all. The coverage endpoint reports every season, year by year.
What does the free key include?
A delayed window of real rows across nine endpoints: coverage, competitions, the calendar, player search, player profiles, head to head, fixtures, results and usage. No card is needed.
What is on the Analyst plan?
The eight model endpoints: title and round odds for a draw, bracket simulation, rating snapshots, value, probability for any pairing or a real fixture, and 180s and finishing props.
How are legs and sets told apart?
A score like 4–2 can be legs or sets, so every score carries its unit. The unit comes from the competition, and the method used is stored with it.
Can ratings leak the future into a backtest?
No. The ratings snapshot rebuilds the table exactly as it stood on any date, using only matches that started before it.
How fresh is the live feed?
Every live response says how many seconds it trails the board and when to poll again, so you never have to guess.
What happens to walkovers, voids and pairs events?
Walkovers, retirements and voids count in coverage but never feed ratings or calibration. Pairs events such as the World Cup of Darts stay out of individual ratings.
Which languages can I use?
Any. Official single-file clients cover PHP and Python, every other language gets the OpenAPI file and a Postman collection, and AI assistants connect through the MCP server.

Start with a free key

Real rows across nine endpoints and no card needed. Move up when your model needs the full window or the Analyst endpoints.

Your first call
curl https://api.dartsapi.com/v1/usage \
  -H "Authorization: Bearer $DARTS_API_KEY"
Returns your plan, your limits and today's counts.