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

Group: Tracking data

The match timeline of basketball, ice hockey and darts, oldest first — live, about 5 seconds behind play (since 2026-11-13): every shot with its location (made, missed, on target, blocked, saved), goals with scorer and assists, penalties with their minutes, faceoffs, hits, timeouts and period scores; in darts every dart (the bed it hit) and every visit (its score, the points still needed, legs and sets). Enterprise plan only.

Plans: Enterprise (other plans get 403 endpoint_not_in_plan).

Note: Withdrawn events and clock bookkeeping are left out. Basketball: a made basket is type goal with points. Basketball and ice hockey positions are 0–100 with the home side attacking x = 100 and the away side x = 0 all match. The source reports no attack direction (its ice hockey spots change ends every period, some basketball games at half-time), so per side and period we mirror (x → 100 − x, y → 100 − y) a side whose shots lie in the wrong half; a side with no shots in a period follows the other side and the neighbouring periods — live, an event of a period without shots yet can move once they come (an upsert frame). Darts: dartThrow (darts.score, number, multiplier, ring — single, double, treble, outerBull, bull, miss —, bed — a single’s inner or outer single as the source reports it, since 2026-11-13; null otherwise — and doubleAttempt), visit (darts.score = the visit’s total, dartsThrown, remaining = points each side still needs, legs, sets), checkout (the visit that won a leg, with checkoutDouble), legWon (homeScore / awayScore = legs), setWon, matchWon; position is always null. Some darts competitions report visits only. The source may revise an event while the match is live, or withdraw it: read again, or follow tracking:{id}. Empty for football and tennis.

## Parameters

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `id` | path | yes | our numeric id (positive integer) |

## Response

- `data`: `TimelineEvent[]`
- `meta`: count
- Objects: TimelineEvent (https://sportsapi.app/markdown/en/reference.md#timelineevent)

## Errors

- 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/timeline"
```

TypeScript:

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

Python:

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

Go:

```go
res, err := client.Tracking.Timeline(ctx, id)
```

CLI:

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

## Example response

```json
{ "data": [
    { "key": "9be1d07c3a55f26e", "type": "goal", "name": "Goal", "at": "2026-11-11T19:33:12.000Z", "side": "home", "minute": 6, "second": 305,
      "period": null, "position": { "x": 12, "y": 47, "z": null }, "player": "Gerry Fitzgerald", "assists": [ "Al Smith" ], "points": null,
      "penaltyMinutes": null, "homeScore": 1, "awayScore": 0, "darts": null },
    { "key": "c41e9a07b2d85f13", "type": "dartThrow", "name": "Dart throw", "at": "2026-11-13T00:09:17.000Z", "side": "home", "minute": null, "second": null,
      "period": null, "position": null, "player": null, "assists": [], "points": null, "penaltyMinutes": null, "homeScore": null, "awayScore": null,
      "darts": { "score": 60, "number": 20, "multiplier": 3, "ring": "treble", "bed": null, "doubleAttempt": false, "dartsThrown": null, "checkoutDouble": null,
        "remaining": null, "legs": null, "sets": null } }, … ],
  "meta": { "count": 412 } }
```

---

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/timeline · All docs: https://sportsapi.app/markdown/en/docs.md
