Download OpenAPI specification:Download
Real-time sports data — leagues, matches, statistics, lineups, standings.
The Scorelytics REST API exposes everything you need to build a live-score product, a fantasy app, an analytics dashboard or a sportsbook frontend.
https://api.scorelytics.pro
All endpoints under /v1/{sport}/* (where sport is football or basketball) require an API key. Pass it as
X-API-Key, as a Bearer token, or as the ?api_key= query parameter.
See Authentication for details.
next_cursor; pass it back as ?after=.Reach us at support@scorelytics.pro or open a ticket from the dashboard.
Live and historical matches. Includes scores, period/minute, events, statistics, lineups and standings snapshots.
Returns a paginated list of matches. Combine filters to narrow the result set. The list is sorted by kickoff time ascending.
Tip — for a daily live scoreboard, call ?status=live and
re-poll every 5–10 seconds, or use the WebSocket stream
for push updates.
| sport required | string Enum: "football" "basketball" Sport identifier — |
| status | string Enum: "live" "scheduled" "finished" Filter by lifecycle status. |
| league_id | string Restrict results to a single league. |
| date | string <date> Example: date=2026-05-04 Filter by kickoff date in UTC ( |
| after | integer <int64> Cursor for pagination. Pass the |
| limit | integer [ 1 .. 200 ] Default: 50 Page size, between 1 and 200. |
{- "data": [
- {
- "id": "abc123",
- "league_id": "DEf456",
- "season": "2025/26",
- "home_team": "Real Madrid",
- "away_team": "Barcelona",
- "home_score": 2,
- "away_score": 1,
- "status_code": 2,
- "minute": 67,
- "kickoff_ts": 1746369000,
- "updated_at": "2026-05-04T16:32:11Z",
}, - {
- "id": "xyz789",
- "league_id": "UvW111",
- "season": "2025/26",
- "home_team": "Liverpool",
- "away_team": "Arsenal",
- "home_score": 0,
- "away_score": 0,
- "status_code": 2,
- "minute": 12,
- "kickoff_ts": 1746367200,
- "updated_at": "2026-05-04T16:32:09Z",
- "home_logo": null,
- "away_logo": null
}
], - "total": 2,
- "limit": 50
}Returns the full record for a match, including referee, venue, attendance, formations and half-time scores.
| sport required | string Enum: "football" "basketball" Sport identifier — |
| id required | string Match identifier returned by |
{- "id": "string",
- "league_id": "string",
- "season": "string",
- "home_team": "string",
- "away_team": "string",
- "home_score": 0,
- "away_score": 0,
- "home_ht_score": 0,
- "away_ht_score": 0,
- "status_code": 0,
- "period": 0,
- "minute": 0,
- "added_time": 0,
- "kickoff_ts": 0,
- "finished_at": "2019-08-24T14:15:22Z",
- "home_formation": "4-3-3",
- "away_formation": "string",
- "referee": "string",
- "venue": "string",
- "attendance": 0,
- "updated_at": "2019-08-24T14:15:22Z",
}Chronological event timeline for a match: goals, cards, substitutions,
penalties and own goals. Sorted by minute then added_time.
| sport required | string Enum: "football" "basketball" Sport identifier — |
| id required | string Match identifier returned by |
{- "match_id": "string",
- "events": [
- {
- "id": 0,
- "match_id": "string",
- "type": "goal",
- "team": 1,
- "minute": 0,
- "added_time": 0,
- "player": "string",
- "player_in": "string"
}
]
}Returns the live in-game statistics for a match — possession, shots, corners, fouls, offsides, saves, etc. for football and FG%, 3P%, FT%, rebounds, assists and turnovers for basketball.
The stats field is a JSON pass-through whose shape varies per sport.
See Statistics shape for the
canonical field reference.
| sport required | string Enum: "football" "basketball" Sport identifier — |
| id required | string Match identifier returned by |
{- "match_id": "string",
- "stats": [
- { }
]
}Starting XI and bench for both teams, ordered home first, starters before substitutes.
| sport required | string Enum: "football" "basketball" Sport identifier — |
| id required | string Match identifier returned by |
{- "match_id": "string",
- "lineups": [
- {
- "team": 1,
- "is_starter": true,
- "player_id": "string",
- "name": "string",
- "jersey_no": 0,
- "country": "string",
- "position": 0
}
]
}Returns the league table as it stood at this match's kickoff. Useful
for retrospective analysis. For the current league standings, use
/v1/{sport}/leagues/{id}/standings.
| sport required | string Enum: "football" "basketball" Sport identifier — |
| id required | string Match identifier returned by |
{- "match_id": "string",
- "table": [
- { }
]
}Recent meetings between the two teams of the requested match.
| sport required | string Enum: "football" "basketball" Sport identifier — |
| id required | string Match identifier returned by |
{ }All competitions tracked on your account, ordered by country and name.
| sport required | string Enum: "football" "basketball" Sport identifier — |
{- "data": [
- {
- "id": "string",
- "country": "Spain",
- "name": "LaLiga",
- "season": "2025/26",
}
]
}Returns the latest standings snapshot for a league. Standings are recomputed after every match in that league.
| sport required | string Enum: "football" "basketball" Sport identifier — |
| id required | string |
{- "league_id": "string",
- "standings": [
- { }
]
}Always returns 200, even when downstream components are degraded.
Use this for load balancer liveness checks.
{- "status": "ok",
- "components": {
- "postgres": {
- "ok": true,
- "error": "string"
}, - "redis": {
- "ok": true,
- "error": "string"
}, - "nats": {
- "ok": true,
- "error": "string"
}
}, - "timestamp": "2019-08-24T14:15:22Z"
}Returns 200 only when every downstream component (Postgres, Redis,
NATS) is healthy. Returns 503 otherwise. Use this to gate routing
decisions at the load balancer.
{- "status": "ok",
- "components": {
- "postgres": {
- "ok": true,
- "error": "string"
}, - "redis": {
- "ok": true,
- "error": "string"
}, - "nats": {
- "ok": true,
- "error": "string"
}
}, - "timestamp": "2019-08-24T14:15:22Z"
}