SofaScore API endpoint
Lists every sport key the SofaScore endpoints accept (the `sport` enum of live-events, categories, and scheduled-tournaments), with live and total event counts when available. The list is fixed and always complete; if the live counts cannot be read, `counts_available` is `false` and the per-sport counts are omitted instead of failing the call. Counts are also omitted for a sport the count feed does not cover (for example `mma`). Accepted sport keys: `american-football`, `aussie-rules`, `badminton`, `bandy`, `baseball`, `basketball`, `beach-volley`, `cricket`, `darts`, `esports`, `floorball`, `football`, `futsal`, `handball`, `ice-hockey`, `mma`, `minifootball`, `padel`, `rugby`, `snooker`, `table-tennis`, `tennis`, `volleyball`, `waterpolo`.
/sofascore/sportsLists every sport key the SofaScore endpoints accept, with live and total event counts when SofaScore's count feed is readable. Use it to pick a valid sport for live-events, categories, and scheduled-tournaments.
Query parameters: none.
Notable response behavior:
key). It does not depend on SofaScore being reachable.live_events and total_events come from SofaScore's live count feed. If that feed cannot be read (blocked, timed out, or malformed), the call still succeeds with counts_available: false and no per-sport counts. This is not an error.mma, aussie-rules, bandy, beach-volley) is listed with no counts even when counts_available is true; absent counts mean "unknown", not zero.motorsport and cycling are not listed: SofaScore tracks them as stage-based competitions, so their match, category, and schedule feeds are always empty. Use the sofascore/stage-* endpoints for them (stage-categories, stage-schedule, stage-substages, stage-standings).| Field | Filled in, of 24 checked | Values in the sample |
|---|---|---|
| key | 24 | |
| name | 24 | “American Football” and 23 other values |
| live_events | 19 | 0 to 87, median 2 |
| total_events | 19 | 1 to 1,163, median 40 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/sports" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"count": 24,
"counts_available": true,
"source_url": "https://api.sofascore.com/api/v1/sport/0/event-count",
"fetched_at": "2026-10-07T14:00:00Z",
"sports": [
{
"key": "american-football",
"name": "American Football",
"live_events": 0,
"total_events": 3
},
{
"key": "football",
"name": "Football",
"live_events": 3,
"total_events": 1441
},
{
"key": "mma",
"name": "MMA"
},
{
"key": "tennis",
"name": "Tennis",
"live_events": 26,
"total_events": 534
}
]
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.sportsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.SportsResponse | No | ||||
| data.count | integer | No | 24 | |||
| data.counts_available | boolean | No | CountsAvailable is false when the live count feed could not be read; the sport list itself is always complete. | |||
| data.fetched_at | string | No | ||||
| data.source_url | string | No | ||||
| data.sports | array | No | ||||
| data.sports[].key | string | No | football | |||
| data.sports[].live_events | integer | No | 3 | |||
| data.sports[].name | string | No | Football | |||
| data.sports[].total_events | integer | No | 1441 | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/sofascore/sports" \
-H "x-api-key: $CRAWLORA_API_KEY"