SofaScore API endpoint
Returns a match's momentum graph as minute and value points (positive values favour the home side) plus period length information, from SofaScore. Covers football, ice hockey and basketball. An empty `points` list is a valid response (a live match that has just started). Returns 404 when SofaScore has no momentum graph for the match, which includes matches that have not started and sports without one such as tennis and baseball.
/sofascore/event-graphQuery parameters:
id: required. Numeric SofaScore event (match) id of a football, ice hockey or basketball match, e.g. 16363867 (football), 15950163 (ice hockey) or 15939382 (basketball).Notable response behavior:
value favours the home side and a negative value the away side; minute can be fractional (for example 90.5 for stoppage time).period_time is the regular period length in minutes, period_count the number of regular periods, and overtime_length and overtime_count describe extra time; each is omitted when SofaScore sends null.points array is a valid response (a live match that has just started), not an error.period_time is the period length in minutes: 45 for football, 20 for ice hockey (3 periods) and 12 for the NBA game checked (4 periods; the Australian NBL game checked used 10-minute periods).404 when SofaScore has no momentum graph for the match. This includes matches that have not started, the tennis and baseball matches checked, and the lower-tier hockey fixture checked (a junior MHL match).| Field | Filled in, of 92 checked | Values in the sample |
|---|---|---|
| minute | 92 | 1 to 90.5, median 45.5 |
| value | 92 | -85 to 81, median 2 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Numeric SofaScore event (match) id | 16363867 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/event-graph?id=16363867" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"event_id": 16363867,
"source_url": "https://api.sofascore.com/api/v1/event/16363867/graph",
"fetched_at": "2026-07-08T00:00:00Z",
"period_time": 45,
"period_count": 2,
"overtime_length": 15,
"count": 92,
"points": [
{
"minute": 1,
"value": -2
},
{
"minute": 2,
"value": -4
},
{
"minute": 3,
"value": -4
}
]
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.eventGraphResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.EventGraphResponse | No | ||||
| data.count | integer | No | ||||
| data.event_id | integer | No | 16363867 | |||
| data.fetched_at | string | No | ||||
| data.overtime_count | integer | No | ||||
| data.overtime_length | integer | No | 15 | |||
| data.period_count | integer | No | 2 | |||
| data.period_time | integer | No | 45 | |||
| data.points | array | No | ||||
| data.points[].minute | number | No | 45.5 | |||
| data.points[].value | number | No | -12 | |||
| data.source_url | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 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/event-graph?id=16363867" \
-H "x-api-key: $CRAWLORA_API_KEY"