n8n-nodes-livetennisapi
v0.2.0
Published
n8n community node for the Live Tennis API — real-time tennis scores, matches, players, fixtures, rankings, head-to-head and the 1968–2022 results archive
Maintainers
Readme
n8n-nodes-livetennisapi
This is an n8n community node for the Live Tennis API — real-time tennis scores, match data, player profiles, fixtures, rankings, head-to-head records and a 1968–2022 results archive across all 5 tours: ATP, WTA, Challenger, ITF and juniors.
n8n is a fair-code licensed workflow automation platform.
Version note: npm currently serves 0.1.0 while this repo is at 0.2.0 — newer releases are awaiting a publish-credential fix. To get the latest now, install from source (clone,
npm install && npm run build, thennpm install <path>from your n8n custom directory).
- Installation
- Credentials
- Operations
- Quotas and rate limits
- Authentication details
- Usage notes
- Compatibility
- Resources
Installation
Follow the installation guide
in the n8n community nodes documentation. The package name is n8n-nodes-livetennisapi.
In short: Settings → Community Nodes → Install, enter n8n-nodes-livetennisapi, and
restart if prompted. The Live Tennis API node then appears in the node picker.
Credentials
Sign up for a free API key (100 requests/day, 30/minute, no card) at livetennisapi.com/subscribe/free.
Create a Live Tennis API credential in n8n and paste the key (it looks like
twjp_...). The node sends it as an X-API-Key header. The credential test performs a
one-match list request.
Operations
| Resource | Operation | Endpoint | Plan |
|---|---|---|---|
| Match | Get Many | /matches | FREE — Status = Completed needs BASIC or any History plan |
| Match | Get | /matches/{id} | FREE — market embed at PRO, analysis embed at ULTRA |
| Match | Get Score | /matches/{id}/score | FREE |
| Match | Get Statistics | /matches/{id}/statistics | ULTRA |
| Player | Search | /players | FREE |
| Player | Get | /players/{id} | FREE |
| Fixture | Get Many | /fixtures | FREE |
| H2H | Get | /h2h | BASIC, or any History plan — per-player stats block at ULTRA |
| Archive | Get Many Matches | /history/archive/matches | BASIC, or any History plan |
| Archive | Get Match | /history/archive/matches/{id} | BASIC, or any History plan |
| Archive | Get Many Players | /history/archive/players | BASIC, or any History plan |
| Archive | Get Career | /history/archive/career | BASIC, or any History plan |
| Ranking | Get Many (rank-ordered listing) | /rankings?system= | PRO |
| Ranking | Get for Player (point-in-time records) | /rankings?player= | ULTRA |
| Status | Get | /health | no key needed |
Notes on the less obvious ones:
- Match → Get Many takes filters for tour (
atp,wta,challenger,itf,juniors), country (3-letter IOC-style code), a from/to date window, and a player ID. Unknown filter values are a400, never silently ignored. - H2H and Archive → Get Career are keyed by name fragments (min 3 characters) — archive people have no roster IDs. An ambiguous fragment is refused with the candidate list rather than summing two people into one record.
- Archive covers ATP and WTA results 1968–2022 (1968-onward main draws, qualifying, challengers and futures). It is a separate ID space from live matches and ends where the API's own point-by-point coverage begins (2023).
- Ranking → Get Many lists exactly one system per call (
atp,wta,itf_jt,itf_mt,itf_wt); UTR has no listing (it is a rating, not a ranking) and is read per player. Get for Player answers "what was the ranking as of a date" — everywhere else the API joins today's rank.
Quotas and rate limits
| Plan | Per minute | Per day | Price | |---|---|---|---| | FREE | 30 | 100 | $0 | | BASIC | 60 | 1,000 | $9.99/mo | | PRO | 300 | 10,000 | $29.99/mo | | ULTRA | 600 | 500,000 | $99.99/mo |
- On a FREE key (100 requests/day), poll no faster than every 15 minutes. For an always-on dashboard, BASIC is the recommended floor.
- Every response carries
X-RateLimit-Limit/X-RateLimit-Remaining/X-RateLimit-Resetheaders; 429s carryRetry-After. - The node turns API errors into actionable n8n errors instead of bare status codes:
- Daily 429 — the error shows the daily limit and
resets_at, the absolute ISO instant the quota resets (trust that instant, not an assumed fixed UTC boundary). - 429
abuse_throttled— keys that keep hammering the API after the cap is spent are blocked for 24 hours; the error convertsretry_at_epochto an ISO time and says to fix the retry loop (add a Wait node, back off on 429s). - Per-minute 429 — the error carries the
Retry-Afterseconds. - 403
upgrade_required— the error names the tier that unlocks the operation and where to upgrade. It does not mean your key is invalid.
- Daily 429 — the error shows the daily limit and
Authentication details
The API accepts Authorization: Bearer <key> (preferred for new integrations) and
X-API-Key: <key>. This node sends X-API-Key. Keys are prefixed twjp_. Only
/health is unauthenticated.
Usage notes
These reflect real behaviour of the live feed — the node passes the data through untouched:
score.pointsare strings ("0","15","30","40","AD"), not numbers.score.serverisnullon roughly 7% of live reads — handle the null.score.gamesis[games_p1, games_p2], where each entry is a per-set array that grows as the match progresses.data_completeness.known/.ofarenullfor doubles teams (with an explanatorynote) —nullmeans "not applicable", which is distinct from0.- The
tourfield on a response record is granular (challenger_men,juniors_girls) and uppercase for doubles teams (ATP). It is an opaque label — it is not the same vocabulary as thetourfilter, which accepts exactlyatp,wta,challenger,itf,juniorsand returns a 400 on anything else. - Fixture Get Many may occasionally include already-finished fixtures or return an empty list (a known upstream quirk); the node passes the response through as-is.
- Bulk completed-match paging (Get Many with Status =
completed) is not available on the FREE tier at all — it returns a403 upgrade_required. It needs the BASIC tier ($9.99/mo) or any History plan — upgrade at livetennisapi.com/subscribe/upgrade. Fetching a single completed match by ID with Get stays free. - Return All pages through results 200 at a time with no delay between pages — one API request per page. On a large bucket that can hit the per-minute rate limit mid-pagination and fail with a 429, and repeated Return All runs over big result sets (completed matches can span thousands of records) can exhaust the FREE tier's 100 requests/day cap. Prefer Limit with an explicit value on large buckets, or use a higher plan tier.
- Archive serve statistics exist from 1991 onward only; earlier rows have
stats: null(the era never recorded them — nothing is synthesised).
Compatibility
Requires n8n 1.x. Built declaratively with zero runtime dependencies.
Resources
- Live Tennis API documentation
- Get a free API key
- Live Tennis API Discord
- Live Tennis API on GitHub
- n8n community nodes documentation
Affiliate program
Know developers who need tennis data? The affiliate program pays 51% recurring commission for the life of every referred subscription — 30-day cookie, and the people you refer get 10% off.
License
MIT © Live Tennis API
