Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ All notable changes to the specification are recorded here.
The API surface is versioned as `v1`. Changes within `v1` are **additive only**;
removing a field or changing its type would require `v2`.

## [1.13.77] - 2026-10-29

### Fixed
- **`/fixtures` and `/matches` tell one story.** A fixture bound to a match (`match_id` set) is served with the match's `status`, in the fixture vocabulary, and the match's `start_time`, read at request time. The match row moves within minutes of a schedule change; the fixture row followed the 6-hourly refresher, so the two endpoints could disagree on the same match for hours. A customer found a Vienna match `live` at 09:00Z on one and `upcoming` at 12:30Z on the other. A vendor-stated `cancelled` or `postponed` on the fixture is kept. A null `is_qualifying` on the fixture takes the match's value when the match states one.
- **A bare digit in the schedule's status field is no longer a match in play.** The day-ahead listing carries `1` on matches that have not started. It was read as a set in play, so 298 fixtures for 29 October were published as `live`. The digit is `live` only when the schedule's own in-play flag says so. The stored rows were restated the same day.

## [1.13.76] - 2026-10-28

### Added
Expand Down
2 changes: 1 addition & 1 deletion docs/auth-quota-and-health.html
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@
<header class="docs-site-header"><a class="docs-brand" href="./"><img src="logo.svg" width="28" height="28" alt="">Live Tennis API <span>Docs</span></a><nav class="docs-desktop-nav" aria-label="Documentation"><a href="./">Overview</a><a href="./reference.html">API reference</a><a href="./changelog.html">Changelog</a></nav><a class="docs-key" href="https://livetennisapi.com/subscribe/free">Get a free key <span aria-hidden="true">↗</span></a></header><details class="docs-topic-menu"><summary>Explore the documentation</summary><nav aria-label="Documentation topics"><a href="./">Overview</a><a href="./reference.html">API reference</a><a href="./changelog.html">Changelog</a><a href="./live-scores.html">Live tennis scores API</a><a href="./players-and-tournaments.html">Tennis players, tournaments and rankings API</a><a href="./tennis-odds.html">Tennis odds API — markets and price ticks</a><a href="./point-by-point-history.html">Point-by-point tennis data API</a><a href="./historical-results-archive.html">Historical tennis results API — 1968 onward</a><a href="./shot-level-rally-data.html">Shot-by-shot tennis rally and charting API</a><a href="./broadcast-graphics.html">Tennis scores for on-air graphics</a><a href="./push-feed-and-webhooks.html">Tennis WebSocket feed and webhooks</a><a href="./auth-quota-and-health.html" aria-current="page">Tennis API authentication, quota and status</a><a href="./ai-sdk.html">Live Tennis API tools for the Vercel AI SDK</a></nav></details>
<div class="wrap">
<header>
<p class="meta">Live Tennis API &middot; docs &middot; version 1.13.76</p>
<p class="meta">Live Tennis API &middot; docs &middot; version 1.13.77</p>
<h1>Tennis API authentication, quota and status</h1>
<p><strong>How do you authenticate, and how do you see what quota is left?</strong> Send your key as <code>X-API-Key</code> on every request. <code>GET /usage</code> returns your own consumption against your plan's quota and works on every tier including FREE, so a client can check its own headroom before a burst. <code>GET /health</code> is the unauthenticated liveness probe.</p>
<p class="meta">2 endpoints on this page. Base URL
Expand Down
2 changes: 1 addition & 1 deletion docs/broadcast-graphics.html
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@
<header class="docs-site-header"><a class="docs-brand" href="./"><img src="logo.svg" width="28" height="28" alt="">Live Tennis API <span>Docs</span></a><nav class="docs-desktop-nav" aria-label="Documentation"><a href="./">Overview</a><a href="./reference.html">API reference</a><a href="./changelog.html">Changelog</a></nav><a class="docs-key" href="https://livetennisapi.com/subscribe/free">Get a free key <span aria-hidden="true">↗</span></a></header><details class="docs-topic-menu"><summary>Explore the documentation</summary><nav aria-label="Documentation topics"><a href="./">Overview</a><a href="./reference.html">API reference</a><a href="./changelog.html">Changelog</a><a href="./live-scores.html">Live tennis scores API</a><a href="./players-and-tournaments.html">Tennis players, tournaments and rankings API</a><a href="./tennis-odds.html">Tennis odds API — markets and price ticks</a><a href="./point-by-point-history.html">Point-by-point tennis data API</a><a href="./historical-results-archive.html">Historical tennis results API — 1968 onward</a><a href="./shot-level-rally-data.html">Shot-by-shot tennis rally and charting API</a><a href="./broadcast-graphics.html" aria-current="page">Tennis scores for on-air graphics</a><a href="./push-feed-and-webhooks.html">Tennis WebSocket feed and webhooks</a><a href="./auth-quota-and-health.html">Tennis API authentication, quota and status</a><a href="./ai-sdk.html">Live Tennis API tools for the Vercel AI SDK</a></nav></details>
<div class="wrap">
<header>
<p class="meta">Live Tennis API &middot; docs &middot; version 1.13.76</p>
<p class="meta">Live Tennis API &middot; docs &middot; version 1.13.77</p>
<h1>Tennis scores for on-air graphics</h1>
<p><strong>How do you put live tennis scores into a broadcast graphics template?</strong> <code>GET /broadcast/match/{matchId}</code> returns ONE flat object for one match and <code>GET /broadcast/live</code> the same object for every live match in a single call. Both are ULTRA. A graphics template binds each field to a fixed path, so three things are contractual: the object is flat, every key is present on every read (<code>null</code>, never missing), and the score is already in display form — <code>p1_points</code> reads <code>"40"</code> or <code>"AD"</code> and <code>set_line</code> is one string. Built for 1 Hz: every response carries a strong <code>ETag</code>, so <code>If-None-Match</code> makes an unchanged state a 304 with no body. Detect a new state on <code>sequence</code>, never on <code>served_at</code>, which changes on every read.</p>
<p class="meta">2 endpoints on this page. Base URL
Expand Down
12 changes: 9 additions & 3 deletions docs/changelog.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Live Tennis API — Changelog</title>
<meta name="description" content="Every change to the Live Tennis API specification, dated and versioned: additive within v1, newest first. Current version 1.13.76, last change 2026-10-28.">
<meta name="description" content="Every change to the Live Tennis API specification, dated and versioned: additive within v1, newest first. Current version 1.13.77, last change 2026-10-29.">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://docs.livetennisapi.com/changelog.html">
<meta property="og:type" content="article">
Expand All @@ -14,7 +14,7 @@
<meta name="twitter:card" content="summary_large_image">
<link rel="icon" href="favicon.ico" sizes="any">
<script type="application/ld+json">
{"@context": "https://schema.org", "@type": "TechArticle", "headline": "Live Tennis API — Changelog", "description": "Every change to the Live Tennis API specification, dated and versioned: additive within v1, newest first. Current version 1.13.76, last change 2026-10-28.", "url": "https://docs.livetennisapi.com/changelog.html", "dateModified": "2026-10-28", "inLanguage": "en", "isPartOf": {"@type": "WebSite", "name": "Live Tennis API", "url": "https://livetennisapi.com"}, "publisher": {"@type": "Organization", "@id": "https://livetennisapi.com/#org", "name": "JSB Holdings LLC", "alternateName": "Live Tennis API", "url": "https://livetennisapi.com", "logo": "https://docs.livetennisapi.com/icon-256.png", "sameAs": ["https://rapidapi.com/contact-whTqTESH5/api/tennis-data-analytics-api3", "https://apify.com/livetennisapi/tennis-data-analytics", "https://api.market/store/live-tennis-api/tennis-data-analytics", "https://www.postman.com/livetennisapi", "https://github.com/livetennisapi", "https://pypi.org/project/livetennisapi/", "https://www.npmjs.com/package/livetennisapi", "https://www.npmjs.com/package/livetennisapi-mcp", "https://docs.livetennisapi.com", "https://x.com/livetennisapi"]}}
{"@context": "https://schema.org", "@type": "TechArticle", "headline": "Live Tennis API — Changelog", "description": "Every change to the Live Tennis API specification, dated and versioned: additive within v1, newest first. Current version 1.13.77, last change 2026-10-29.", "url": "https://docs.livetennisapi.com/changelog.html", "dateModified": "2026-10-29", "inLanguage": "en", "isPartOf": {"@type": "WebSite", "name": "Live Tennis API", "url": "https://livetennisapi.com"}, "publisher": {"@type": "Organization", "@id": "https://livetennisapi.com/#org", "name": "JSB Holdings LLC", "alternateName": "Live Tennis API", "url": "https://livetennisapi.com", "logo": "https://docs.livetennisapi.com/icon-256.png", "sameAs": ["https://rapidapi.com/contact-whTqTESH5/api/tennis-data-analytics-api3", "https://apify.com/livetennisapi/tennis-data-analytics", "https://api.market/store/live-tennis-api/tennis-data-analytics", "https://www.postman.com/livetennisapi", "https://github.com/livetennisapi", "https://pypi.org/project/livetennisapi/", "https://www.npmjs.com/package/livetennisapi", "https://www.npmjs.com/package/livetennisapi-mcp", "https://docs.livetennisapi.com", "https://x.com/livetennisapi"]}}
</script>
<link rel="preload" href="fonts/inter-latin-400.woff2" as="font" type="font/woff2" crossorigin fetchpriority="high">
<link rel="preload" href="fonts/space-grotesk-latin-700.woff2" as="font" type="font/woff2" crossorigin fetchpriority="high">
Expand Down Expand Up @@ -204,8 +204,14 @@
<header>
<p class="eyebrow">Live Tennis API · docs</p>
<h1>Changelog</h1>
<p>Every change to the specification, dated and versioned. The API surface is <code>v1</code>; changes within it are additive only. Current version <strong>1.13.76</strong>, last change <time datetime="2026-10-28">2026-10-28</time>. Also as <a href="https://docs.livetennisapi.com/reference.html">the full reference</a>, <a href="https://docs.livetennisapi.com/openapi.yaml">OpenAPI YAML</a> / <a href="https://docs.livetennisapi.com/openapi.json">JSON</a>, and <a href="https://livetennisapi.com/facts.json">the dated facts file</a>.</p>
<p>Every change to the specification, dated and versioned. The API surface is <code>v1</code>; changes within it are additive only. Current version <strong>1.13.77</strong>, last change <time datetime="2026-10-29">2026-10-29</time>. Also as <a href="https://docs.livetennisapi.com/reference.html">the full reference</a>, <a href="https://docs.livetennisapi.com/openapi.yaml">OpenAPI YAML</a> / <a href="https://docs.livetennisapi.com/openapi.json">JSON</a>, and <a href="https://livetennisapi.com/facts.json">the dated facts file</a>.</p>
</header>
<article id="v1.13.77"><h2>1.13.77 <time datetime="2026-10-29">2026-10-29</time></h2>
<h3>Fixed</h3>
<ul>
<li><strong><code>/fixtures</code> and <code>/matches</code> tell one story.</strong> A fixture bound to a match (<code>match_id</code> set) is served with the match&#x27;s <code>status</code>, in the fixture vocabulary, and the match&#x27;s <code>start_time</code>, read at request time. The match row moves within minutes of a schedule change; the fixture row followed the 6-hourly refresher, so the two endpoints could disagree on the same match for hours. A customer found a Vienna match <code>live</code> at 09:00Z on one and <code>upcoming</code> at 12:30Z on the other. A vendor-stated <code>cancelled</code> or <code>postponed</code> on the fixture is kept. A null <code>is_qualifying</code> on the fixture takes the match&#x27;s value when the match states one.</li>
<li><strong>A bare digit in the schedule&#x27;s status field is no longer a match in play.</strong> The day-ahead listing carries <code>1</code> on matches that have not started. It was read as a set in play, so 298 fixtures for 29 October were published as <code>live</code>. The digit is <code>live</code> only when the schedule&#x27;s own in-play flag says so. The stored rows were restated the same day.</li>
</ul></article>
<article id="v1.13.76"><h2>1.13.76 <time datetime="2026-10-28">2026-10-28</time></h2>
<h3>Added</h3>
<ul>
Expand Down
2 changes: 1 addition & 1 deletion docs/historical-results-archive.html
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@
<header class="docs-site-header"><a class="docs-brand" href="./"><img src="logo.svg" width="28" height="28" alt="">Live Tennis API <span>Docs</span></a><nav class="docs-desktop-nav" aria-label="Documentation"><a href="./">Overview</a><a href="./reference.html">API reference</a><a href="./changelog.html">Changelog</a></nav><a class="docs-key" href="https://livetennisapi.com/subscribe/free">Get a free key <span aria-hidden="true">↗</span></a></header><details class="docs-topic-menu"><summary>Explore the documentation</summary><nav aria-label="Documentation topics"><a href="./">Overview</a><a href="./reference.html">API reference</a><a href="./changelog.html">Changelog</a><a href="./live-scores.html">Live tennis scores API</a><a href="./players-and-tournaments.html">Tennis players, tournaments and rankings API</a><a href="./tennis-odds.html">Tennis odds API — markets and price ticks</a><a href="./point-by-point-history.html">Point-by-point tennis data API</a><a href="./historical-results-archive.html" aria-current="page">Historical tennis results API — 1968 onward</a><a href="./shot-level-rally-data.html">Shot-by-shot tennis rally and charting API</a><a href="./broadcast-graphics.html">Tennis scores for on-air graphics</a><a href="./push-feed-and-webhooks.html">Tennis WebSocket feed and webhooks</a><a href="./auth-quota-and-health.html">Tennis API authentication, quota and status</a><a href="./ai-sdk.html">Live Tennis API tools for the Vercel AI SDK</a></nav></details>
<div class="wrap">
<header>
<p class="meta">Live Tennis API &middot; docs &middot; version 1.13.76</p>
<p class="meta">Live Tennis API &middot; docs &middot; version 1.13.77</p>
<h1>Historical tennis results API — 1968 onward</h1>
<p><strong>How far back does the historical tennis data go, and what is in it?</strong> The results archive covers 1968 to 2022: <code>GET /history/archive/matches</code> for results, <code>/archive/players</code> for bios, <code>/archive/career</code> for career aggregates and <code>GET /h2h</code> for head-to-head across both the archive and our own completed matches. All BASIC. Matches from 2013 onward additionally carry a reconstructed point-by-point tape at <code>/archive/matches/{archiveId}/tape</code> (ULTRA).</p>
<p class="meta">6 endpoints on this page. Base URL
Expand Down
Loading
Loading