Free API key

A free darts API key, in one click

Every result back to 1994, 38,047 players and their head to heads, on 16 endpoints. Sign in with Google and the key is waiting on your dashboard. No card, and it does not expire.

  • No card
  • 500 calls a day
  • Key on your dashboard at once
GET /v1/results200 OK
curl "https://api.dartsapi.com/v1/results?player_id=pl_VEB8HM&limit=2" \
  -H "Authorization: Bearer da_live_..."

{
  "data": [
    {
      "match_id": "mt_0CWS66BSK1H725020W3E",
      "played_on": "2026-09-20",
      "round": "quarter_final",
      "winner": { "player_id": "pl_NWEKMD", "name": "Jonny Clayton", "score": 10 },
      "loser": { "player_id": "pl_VEB8HM", "name": "Luke Littler", "score": 4 },
      "event": {
        "event_id": "ev_FTY24C",
        "competition_id": "cp_X645YM",
        "name": "World Series of Darts Finals",
        "date": "2026-09-20",
        "tier": "majors"
      }
    }
  ],
  "meta": {
    "count": 2,
    "next_cursor": "c_wNtb1hAe7JeTmTE0b7_JOxd-O_9qjVH0ImWP2tfhAvAT-UQ",
    "plan": "analyst",
    "window": "everything, including the model endpoints",
    "data_as_of": "2026-09-30T18:38:38Z"
  }
}
447,955matches, 1994 to last week
38,047players with a profile
16endpoints on the free key
500calls a day, 60 a minute

What the key reaches

16 endpoints, each with its own page of parameters, fields and a real example.

Every endpoint
GET/v1/coverageMeasured coverage, with close seasons told apart from real gaps. GET/v1/competitionsEvery competition with its tier and format. GET/v1/calendarEditions across a date range with status. GET/v1/playersSearch and list, with accents and particles folded. GET/v1/players/{id}Profile. GET/v1/head-to-headA full rivalry. GET/v1/fixturesUpcoming matches, with the best price only where one was held: no live prices are held since 20 March 2026. GET/v1/resultsSettled matches. GET/v1/results/yesterdayEvery match settled yesterday, UTC, on every plan including the free key. GET/v1/usagePlan, window, limits and today's counters. Lab tools check this before doing any work. GET/v1/history/world-championshipsThe world championships the match archive does not hold, the BDO's from 1978 to 2020 and the WDF's of 2023 and 2024: champion, runner-up and what is held for each. GET/v1/order-of-meritThe PDC Order of Merit as it stood on a day: position, places moved, player and ranking prize money. Today's, or date= for another day held. GET/v1/order-of-merit/seasonsThe seasons whose start-of-season Order of Merit is held (2017 on), with how many players each lists. GET/v1/order-of-merit/listsEvery other ranking table held, with its seasons: the Order of Merit after each World Championship and year to date, the qualification races for the majors, the Players Championship and European Tour tables, the Challenge Tour, Development Tour, Women's Series, Asian Tour and Nordic & Baltic, from 2019. GET/v1/history/majorsThe televised majors of 2004 to 2017 the match archive does not hold, from published draws: each event, its dates and how many matches are held. major= for one. GET/v1/major-editionsEvery edition of the main tournaments since 1994: dates, venue, town and country, organiser, sponsor, field size and prize pool, with our edition ids. major= for one.

From nothing to data in two minutes

No forms and nothing to confirm by email.

1Sign in with Google

One click. We use your Google account only to know who you are.

Continue with Google
2Copy your key

It is on your dashboard the moment you land, ready to copy, and you can see it again any time.

da_live_7f3a••••••••••••
3Make your first call

Send it as a bearer token. Every response says how many calls you have left today.

X-Allowance-Remaining: 499
Python
players.py
import requests

r = requests.get(
    "https://api.dartsapi.com/v1/players",
    params={"q": "littler"},
    headers={"Authorization": "Bearer da_live_..."},
)
for p in r.json()["data"]:
    print(p["name"], p["player_id"])
What comes back
Keenan Littlerpl_60FSJP
Leon Littlerpl_0A1EQ8

Names and ids, ready to feed into /v1/players/{id} or /v1/head-to-head.

When you need more

The free key is the whole archive, a week behind. The paid plans add the last week, live scores, prices and the model.

Compare every plan
Free keyLiveCompleteAnalyst
Every result back to 1994At least 7 days oldLast 30 daysEverythingEverything
Endpoints164444All 52
Live scores
Closing prices
Model and probability endpoints
Calls500 a day250,000 a month600,000 a month1,000,000 a month
PriceFree$39 a month$99 a month$149 a month

Questions about the free key

Ask us anything else
Do I need a card?

No. Sign in with Google and the key is on your dashboard straight away. There is nothing to cancel, because nothing is charged.

Why is it a week behind?

The free key sees every result the archive holds, back to 1994, once it is 7 days old. The last week and the live feed are what the paid plans are for.

What happens at 500 calls?

Calls answer 429 until the allowance resets at midnight UTC. Every response carries your remaining allowance in its headers, so a script can pace itself.

Does it expire?

No. The key works for as long as the account is open. You can rotate it from the dashboard at any time, and the old one stops working the moment you do.

Can I move to a paid plan later?

Yes, from the dashboard, whenever you like. The same key then reaches everything the plan includes, so nothing in your code changes.

Is there a limit on what I build?

Build what you like on the data, including commercially. The one thing the terms rule out is reselling the dataset itself.

Your key is one click away

Sign in with Google, copy the key from your dashboard, and your first call is two minutes from now.

Your first call
GET /v1/players?q=littler
500 calls a day, every day, free.