Public API reference
WovenThreads API
Read archived NBA game flow, player stints, lineup windows, totals, and normalized play-by-play from the same data used by the public site.
Access
No authentication is required. The API is public, read-only, and intended for respectful server-side use. Browser JavaScript from arbitrary third-party origins is not supported by the current CORS policy.
Use https://www.woventhreads.online as the base URL. All operations are GET requests and return JSON unless noted otherwise.
Start with the smallest response
- Fetch
/api/datesto find a stored date. - Fetch
/api/games/{date}to identify the game and its ID. - Fetch
/api/game/{gameId}for metadata. - Request only the stints, totals, or plays needed for the analysis.
The unfiltered /api/games endpoint returns the full archive. Cache it if you need it, and do not poll it repeatedly.
Endpoints
| Method | Path | Returns |
|---|---|---|
| GET | /api | Discovery index for this API. |
| GET | /api/dates | Archived game dates, newest first. |
| GET | /api/games | Complete game archive. Avoid polling this large response. |
| GET | /api/games/{date} | Games on one YYYY-MM-DD date. |
| GET | /api/game/by-slug/{slug} | Game metadata from its canonical slug. |
| GET | /api/game/{gameId} | Teams, score, status, date, and slug. |
| GET | /api/game/{gameId}/stints | Player intervals, statistics, and plus-minus. |
| GET | /api/game/{gameId}/totals | Per-player game totals across all stints. |
| GET | /api/game/{gameId}/plays | Normalized chronological play-by-play. |
| GET | /api/lineup-dates | Dates with stored lineup stint data. |
| GET | /api/lineups/night/{date} | Top five positive lineup stints for a date. |
| GET | /api/lineups/season/top?season=YYYY-YY | Top ten positive lineup stints for a season. |
| GET | /api/health | Publication timestamp and latest archived game date. |
Limits and reliability
Responses are static snapshots published after the daily game import. Cache responses and avoid frequent polling. Cloudflare platform limits apply; there is no separate application-level request quota.
WovenThreads is a hobby project and provides no SLA or backward-compatibility guarantee. Cache responses, pace requests conservatively, and back off after an HTTP 429 response. A failed import leaves the previous complete publication available; check the health endpoint for the publication timestamp and latest game date.
Data and interpretation
Game data comes from official NBA sources and is processed into player stints and lineup windows. player_plus_minus and total_plus_minusare from the listed player's team perspective.
lineup_plus_minus and raw_lineup_plus_minusare stored from the home team's perspective. Use the team-perspective plus_minus field on lineup ranking endpoints when comparing teams. Zero-duration stints are processing artifacts and should not be treated as substantive game intervals.
Citations
When presenting analysis, cite the canonical WovenThreads game-flow or box-score page instead of a raw API URL. Build those URLs from the game's slug: /game/{slug} and /game/{slug}/boxscore. Identify WovenThreads as the processed presentation layer and the NBA as the underlying source.