# GET /v2/fixtures/{id}/tracking/ball

Group: Tracking data

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.

Plans: Enterprise (other plans get 403 endpoint_not_in_plan).

Note: 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

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `id` | path | yes | our numeric id (positive integer) |
| `since` | query | no | only frames after this instant (ISO-8601, any offset; exclusive) — meta.next of the previous page, or the newest at you hold |
| `limit` | query | no | 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)
- Objects: BallFrame (https://sportsapi.app/markdown/en/reference.md#ballframe)

## Errors

- 400 bad_request — since or limit malformed
- 403 endpoint_not_in_plan — every plan but Enterprise
- 404 not_found — an id we never issued

Plus the common errors (https://sportsapi.app/markdown/en/docs.md#errors).

## Request

cURL:

```bash
curl -H "Authorization: Bearer sk_live_…" \
    "https://api.sportsapi.app/v2/fixtures/{id}/tracking/ball"
```

TypeScript:

```ts
const { data, meta } = await client.tracking.ball(id);
```

Python:

```python
res = client.tracking.ball(id)
```

Go:

```go
res, err := client.Tracking.Ball(ctx, id, &sportsapi.TrackingBallParams{})
```

CLI:

```bash
$ sportsapi tracking ball <id>
```

## Example response

```json
{ "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 } }
```

---

Base URL: https://api.sportsapi.app. Send your API key as `Authorization: Bearer <key>` on every /v2 request; keys are created in the dashboard (https://sportsapi.app/dashboard).
HTML: https://sportsapi.app/docs/tracking/ball · All docs: https://sportsapi.app/markdown/en/docs.md
