Product 02

One key. Entities, and the values computed on top of them.

Normalized fixtures, teams, players and venues, plus the standings, form, records and head-to-head summaries we compute from them. REST, JSON, versioned paths, quota returned on every response.

Read the docs See plans

Surface

Acquired resources, and computed ones beside them.

Computed resources sit on the same paths as the acquired ones and are marked in the payload, so you always know whether a number was fetched or calculated.

Acquired

GET/v1/fixturesFixtures by competition, season, team or date.
GET/v1/fixtures/{id}One fixture with events, lineups and statistics.
GET/v1/fixtures/liveCurrently in-play fixtures.
GET/v1/teamsTeams, with squad and venue relationships.
GET/v1/players/{id}Player identity, career and season records.
GET/v1/competitionsCompetitions and the seasons held for each.

Computed

GET/v1/standingsLeague table, with the calculation version that produced it.
GET/v1/teams/{id}/formRolling form over a configurable window.
GET/v1/teams/{id}/recordsStreaks, bests and season records.
GET/v1/h2hHead-to-head summary for a canonical team pair.

i Paths are illustrative for this page. The documentation is the authority on the final resource list, parameters and payload shapes.

Why computed

Every calculated value says so.

A computed response tells you it was calculated and which version of the calculation ran, so a number you publish can be explained later.

Marked

derived: true

Present on computed resources. Acquired resources do not carry it, so the two are never confused in your own storage.

Versioned

formula

Names the calculation and its version. When a calculation changes, the version changes with it.

Retained

History accumulates

Finished seasons are kept rather than re-fetched, so computed history deepens over time.

Operating it

Quotas and failures are part of the contract.

200 · normal
✓
Quota on every response

Remaining requests and the reset time come back as headers, so you never guess how much budget is left.

429 · over quota
▪
Requests stop, billing does not start

Overage has to be switched on deliberately. Without it you get a 429 and the reset time.

503 · warming
⌛
Not an error to retry blindly

A resource being prepared returns 503 with Retry-After. Wait that long and it will be there.

Responses

Pick an endpoint, see what comes back.

Real response shapes with the quota headers that accompany them. Values are sample data; the structure is what your key returns.

Response explorer Sample responses

League table for a competition and season.

{
  "league": { "id": 39, "name": "Premier League" },
  "season": 2025,
  "derived": true,
  "formula": "standings.v2",
  "table": [
    { "rank": 1, "team": "Arsenal", "played": 24, "points": 55 },
    { "rank": 2, "team": "Liverpool", "played": 24, "points": 53 }
  ]
}
X-Quota-Remaining: 249,613X-Quota-Reset: 1 Nov 00:00 UTC

Integration

No SDK. Any language that can send a header.

Plain JSON over HTTP. Nothing to install, nothing to keep in sync with a client library.

JSON OVER HTTP JSPYPHPGORBC#JAVAcURLNODERUSTSWIFTKT
Same request, four ways No SDK required
$ curl https://api.sportpedia.io/v1/standings?league=39 \
  -H "Authorization: Bearer $SPORTPEDIA_KEY"

Quickstart

Three steps to a first response.

01Create a keyScoped per site, revocable, usage reported per key.
02Send it as a bearer tokenNo SDK, no signing step, no session to maintain.
03Read the quota headersBack off on 429, honour Retry-After on 503.
# the smallest useful call
$ curl https://api.sportpedia.io/v1/fixtures/live \
  -H "Authorization: Bearer $SPORTPEDIA_KEY"

# computed, with the calculation version attached
$ curl https://api.sportpedia.io/v1/teams/541/form?window=5 \
  -H "Authorization: Bearer $SPORTPEDIA_KEY"