API
The same numbers, inside your own tools
Every call takes a key. The first one is free.
Pricing
What a key buys
Call volume, not reserved data. Cancel in one click.
Before you pay
What you are committing to
- Stop whenever you like
- One click in your billing page, no mail to write and no notice to give. You keep the allowance until the end of the period you have already paid for.
- Stopping breaks nothing
- Your key is never revoked and never suspended. It goes back to the free plan and keeps answering the same routes, with nothing to change in your code.
- We never see your card
- Payment happens on Stripe's own page. No number, no token and no last four digits ever reach this product.
- A failed card is not a cut-off
- An expired card is retried for two weeks and we write to you. Your full allowance runs throughout, and you are never charged twice.
How it works
One key. Your own allowance
When the free key runs short, you buy a larger one: the data is the same at every price.
Every answer carries your allowance and your usage for the month.
What is served
The routes, and where to start
The same data the site's pages show, at the same addresses.
- The catalogue, to start with
- Every published discipline with its slug, its bases and its views. Every other call starts here.
/catalog- Ratings and rankings
- Every published ranking, per discipline, with the rules it was settled under.
/rankings- The ledger behind a rating
- Each change with its cause and its before-and-after values, the same rows the site shows.
/competitors/{id}/rating-changes- Matches as read
- The results the engine ingested, with their source and the date precision it was given.
/competitors/{id}/matches
Every route, with its parameters and the values it takes: API docs
What it looks like
One request, and what comes back
JSON over HTTP. Nothing to install, nothing to generate.
Request
# what is published, and under which slugs:
curl -H "Authorization: Bearer arpelo_7f3a91c2.<secret>" \
"http://api:8000/catalog"
# one of them, ranked:
curl -H "Authorization: Bearer arpelo_7f3a91c2.<secret>" \
"http://api:8000/rankings?sport=darts&view=current&per_page=2"Response, trimmed to one entry
{
"sport": "darts-pdc-singles",
"view": "current",
"model_version": "elo@1",
"cutoff_at": "2026-09-07T00:00:00Z",
"published_at": "2026-09-08T04:12:31Z",
"rules": {
"minimum_matches": 20,
"include_provisional": false,
"include_inactive": false,
"activity_window_days": 730
},
"total": 412,
"page": 1,
"per_page": 2,
"entries": [
{
"rank": 1,
"competitor": "c-4d21f8",
"name": "...",
"rating": 2118.4,
"matches_played": 183,
"status": "active",
"last_match": "2026-09-06T00:00:00Z",
"previous_rank": 2
}
]
}Every ranking comes with the rule it was settled under (match threshold, activity window) and its three dates: source checked, latest data, published.
Tell us what you are building.
What you need, at what rate, and for which disciplines.