Tracking data
Ball track
GET/v2/fixtures/{id}/tracking/ballEnterprise
The live ball track, oldest first — football (about 14 positions a minute in play, 0–100 pitch) and tennis (about one per shot, millimetres). A page of up to limit frames after since; the next page: since = meta.next. Enterprise plan only.
Empty for a fixture without a ball track (basketball, ice hockey, matches the source does not track). Polling a live match: pass the newest at you hold as since; or subscribe to tracking:{id} for every frame within about a second.
Parameters
id
our numeric id (positive integer)
since
only frames after this instant (ISO-8601, any offset; exclusive) — meta.next of the previous page, or the newest at you hold
limit
frames per page, 1–5000 (default 5000 — a whole football match)
Response
- data
BallFrame[]- meta
- count, hasNextPage, next (the since of the next page, or null)
- errors
- 400 bad_request — since or limit malformed403 endpoint_not_in_plan — every plan but Enterprise404 not_found — an id we never issued
Every /v2 call can also answer the common errors.
$ curl -H "Authorization: Bearer sk_live_…" \ "https://api.sportsapi.app/v2/fixtures/{id}/tracking/ball"
Example
{ "data": [ { "at": "2026-11-11T20:05:31.412Z", "x": 61.5, "y": 38.2 }, { "at": "2026-11-11T20:05:35.906Z", "x": 70.1, "y": 44 }, … ], "meta": { "count": 1384, "hasNextPage": false, "next": null } }