Endpoint Playground
Returns a racket-sport match's point-by-point timeline, with sets and games in play order. Tennis sets list games and each game lists every point with the running score (`0`, `15`, `30`, `40`, `A`, or a plain count in a tie-break), the server, the game winner, a `description` of `ace` or `double_fault` where SofaScore flags it, and break point (`break_point`) or set or match point (`set_or_match_point`) markers per player. Table tennis and badminton sets list their points directly. The ace flag is a lower bound of the match's real ace count. Darts matches are not covered. Returns 404 when SofaScore has no point-by-point data for the match, which includes matches that have not started and sports without it.
14 Oct 2026: 3 sets; 2 fields had a value in every checked item.
Sample value profiles: set: 1 to 3, median 2; games: median 10 entries.
curl 'https://api.crawlora.net/api/v1/sofascore/event-point-by-point?id=17257382' \
-H "x-api-key: $CRAWLORA_API_KEY"| Parameter | Type | Required | Prefilled value | Description |
|---|---|---|---|---|
| id | string | Yes | 17257382 | Numeric SofaScore event (match) id |
{
"code": 200,
"msg": "OK",
"data": {
"event_id": 17257382,
"source_url": "https://api.sofascore.com/api/v1/event/17257382/point-by-point",
"fetched_at": "2026-10-07T17:00:00Z",
"set_count": 3,
"sets": [
{
"set": 1,
"games": [
{
"game": 1,
"score": {
"home_score": 1,
"away_score": 0,
"server": "home",
"winner": "home"
},
"points": [
{
"home_point": "15",
"away_point": "0",
"description_code": 0,
"home_point_type": 1,
"away_point_type": 5
},
{
"home_point": "15",
"away_point": "15",
"description_code": 0,
"home_point_type": 5,
"away_point_type": 1
},
{
"home_point": "30",
"away_point": "15",
"description_code": 0,
"home_point_type": 1,
"away_point_type": 5
}
]
},
"...",
{
"game": 13,
"score": {
"home_score": 7,
"away_score": 6,
"server": "away",
"winner": "home"
},
"points": [
{
"home_point": "1",
"away_point": "0",
"description_code": 0,
"home_point_type": 1,
"away_point_type": 5
},
{
"home_point": "2",
"away_point": "0",
"description": "double_fault",
"description_code": 2,
"home_point_type": 6,
"away_point_type": 5
},
{
"home_point": "6",
"away_point": "3",
"description_code": 0,
"home_point_type": 3,
"away_point_type": 6,
"home_marker": "set_or_match_point"
},
{
"home_point": "7",
"away_point": "3",
"description_code": 0,
"home_point_type": 5,
"away_point_type": 5
}
]
}
]
},
"...",
{
"set": 3,
"games": [
"...",
{
"game": 10,
"score": {
"home_score": 4,
"away_score": 6,
"server": "away",
"winner": "away"
},
"points": [
{
"home_point": "15",
"away_point": "30",
"description_code": 0,
"home_point_type": 5,
"away_point_type": 1
},
{
"home_point": "15",
"away_point": "40",
"description_code": 0,
"home_point_type": 5,
"away_point_type": 3,
"away_marker": "set_or_match_point"
}
]
}
]
}
]
}
}The sample response, schema and code snippets below work without an account. Sending a live request needs an API key.