# GET https://sportsapi.app/embed/tracker

Group: Widgets

Enterprise plan only. The live match tracker for football, tennis, basketball, ice hockey and darts matches with tracking data (GET /v2/fixtures/{id}/tracking answers for them), a few seconds behind play — and, once the match is over, a replay with play, speed and scrub. Football: the ball on the pitch with its trail, the attack zones (ball safe, attack, dangerous attack), set pieces, shots, goals with the score, cards, VAR and substitutions. Tennis (since 2026-11-13): the court in the match’s surface (hard, clay, grass) with the home player on the left (the court turns with the change of ends), every rally with the ball’s flight, height and bounce marks, the server, fault / second serve / let, the score point by point with a board after each point (ace, double fault, deuce), game, break, set and match points, games, breaks and sets won, the change of ends and set break with the set table, statistics between points (aces, double faults, service points won, break points won) and a strip of aces, double faults, breaks and sets; a rally plays at its real pace about 10 seconds behind play. Basketball (since 2026-11-13): the court with home shooting to the right in every period, who has the ball (a band in the team colour, “free throws” during a trip to the line), every shot at its spot with its flight to the rim (made: the points over the rim; missed: a ring), free throws one by one, fouls, rebounds (offensive or not), steals, turnovers, blocks and jump balls, the score, the period and the game clock, team fouls and the bonus, timeouts left, runs (8–0 and more), the marks of the period’s shots, centred cards for timeouts, video reviews, period ends and half-time with the score by period, and a strip of three-pointers, lead changes, runs, timeouts and period ends; NBA games add every player as a numbered disc in the team colour moving on the court, the ball with its height, the ball carrier’s name and the shot clock (the players are not in the replay). A game plays about 9 seconds behind play, at its own pace. Ice hockey (since 2026-11-13): the rink with home attacking to the right in every period, the puck where each play puts it, faceoffs won, hits, giveaways and takeaways, every shot at its spot with its line to the net (on goal and saved — the keeper named —, wide or blocked), goals on a board with the score turning over, the scorer, the assists and power-play, short-handed or empty-net, a disallowed goal, the attacking zone of the side pressing, the score, the period and the game clock, each side’s running penalties with their countdown, the strength (power play 5 on 4, 4 on 4, an empty net, a delayed penalty), shots on goal, penalty shots, the shoot-out attempt by attempt with its tally, the marks of the period’s shots, centred cards for TV timeouts, timeouts, period starts and ends with the goals by period, and a strip of goals, penalties, period ends and the shoot-out; a game plays about 10 seconds behind play. Games whose feed has only the goals say so (limited coverage). Darts (since 2026-11-13): the board with every dart of the visit in the bed it hit (the newest lit, with its score; a single in its inner or outer single, a miss outside the doubles), each player’s visit beside the board — the points still needed, the three darts and the total — the player to throw with a checkout route of ours when the points can be finished, banners for a 180, 140 and more, 100 and more, a bust and a checkout (the double and the darts used), the legs (and sets) with a card as each leg and set is won, who threw first in the leg, the three-dart average and the 180s, the match’s final card with the averages, 180s, 100+ visits and the best checkout, and a strip of 180s, legs, sets and the match; matches reported by visits only show the visits; a match plays about 9 seconds behind play. Embed it like the other widgets: data-sportsapi-widget="tracker" and data-fixture (our fixture id), then the same v1.js script with your widget key; the script puts a frame of this page there and sizes it to its content. Options: data-theme light | dark | auto (the visitor’s setting), data-lang en | tr | es | de | fr | pt, data-accent (#rrggbb; the controls and the home side’s fallback colour), data-home-color / data-away-color (#rrggbb; by default each team’s kit colour, or the theme’s when a kit is too close to the grass or to the other side), data-size full (up to 780 px) | compact (up to 460 px), and on | off for data-scoreboard, data-events (the strip of recent key events), data-trail (the ball trail; basketball and ice hockey: the period’s shot marks), data-flip (football, basketball and ice hockey: away attacks to the right — by default home attacks to the right in every period; tennis and darts: the away player on the left — by default the home player is on the left all match), data-replay and data-frame (off drops the tracker’s own card — border, rounded corners, background and outer padding — so it sits inside a card of your page). A change of an option on the element reaches the tracker at once; a change of data-fixture loads the new match. Motion follows the visitor’s reduced-motion setting. The dashboard’s Widgets tab builds the snippet with a live preview.

Note: How it is kept to your sites, in plain words: the tracker is a page of sportsapi.app inside a frame, and that page tells the browser which sites may show it — exactly the sites your widget key lists (Content-Security-Policy frame-ancestors) — so on any other site the browser refuses to draw it. Your key never reads data by itself: the frame trades it for a pass that lasts five minutes and works for that one match and this widget only (it is renewed while the page is open). The pass reads only what the tracker draws and opens a live connection limited to that match; it does not open the tracking endpoints of the API. Revoking or rotating the key in the dashboard ends its passes at once, and open trackers stop within a minute. Every pass, read and live connection counts against your plan’s rate and quota like any request, with extra per-visitor and per-key limits; a key used for many matches or from very many addresses in an hour is flagged for review. The trackers’ live connections do not count against your plan’s five WebSocket connections.

## Example response

```json
<div data-sportsapi-widget="tracker" data-fixture="955250" data-theme="auto" data-lang="en"></div>
<script src="https://sportsapi.app/widgets/v1.js" data-key="pk_live_…" async></script>
```

---

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