Disclosure: I maintain the Live Tennis API — judge this on the merits.
PRs look to be turned off on this repo, so I'm opening an issue instead: I have a small, tested change ready on a fork and would be glad to send it as a PR if you enable them (or you're welcome to cherry-pick it).
What
Adds lib/live-tennis.ts — a live-tennis match-state DATA source that enriches the tennis branch of your EV pipeline with in-match signal: score (sets/games/points), current server, a three-valued break-point flag (Yes/No/UNDEF — suppressed inside tiebreaks, UNDEF when the server is unknown), and terminal status (completed / retired / walkover).
How it fits your seam
It consumes your real MatchedOpportunity type (lib/matching.ts, emitted by matchH2HGames for the tennis branch of app/api/ev/route.ts:GET) and returns OpportunityWithLiveState = MatchedOpportunity & { liveState? } — pure enrichment, no change to how you compute or rank EV. The module mirrors lib/odds-api.ts conventions (typed interfaces, in-memory TTL cache, bounded 429 retry, X-API-Key header, quota-header capture). It is a data feed, not a trading venue or executor.
Tests / build
lib/live-tennis.test.ts — 11 cases on Node's built-in node:test (zero new deps), covering the break-point truth table, decided-status detection, match-state derivation, and surname/side-order player matching. npm test → 11 passed; tsc --noEmit clean (no new type errors); test files excluded from the Next build via tsconfig.json.
The change
Branch (ready to PR or cherry-pick): https://github.com/bensynapse/PolyPulse/tree/add-live-tennis-state
Diff: main...bensynapse:PolyPulse:add-live-tennis-state
Data source
Live Tennis API (livetennisapi.com). FREE tier — live scores + match-state + players (ranking + Elo) + fixtures, 30 req/min & 100 req/day, no card — covers this: key at https://livetennisapi.com/subscribe/free , base https://api.livetennisapi.com/api/public/v1, header X-API-Key, responses {"data":[...]}. The WS push feed and model win-probability are ULTRA (paid) and are not used here. MIT reference toolkit: https://github.com/livetennisapi/polymarket-tennis
No worries if tennis enrichment isn't a direction you want — closing this is a fine answer.
Disclosure: I maintain the Live Tennis API — judge this on the merits.
PRs look to be turned off on this repo, so I'm opening an issue instead: I have a small, tested change ready on a fork and would be glad to send it as a PR if you enable them (or you're welcome to cherry-pick it).
What
Adds
lib/live-tennis.ts— a live-tennis match-state DATA source that enriches the tennis branch of your EV pipeline with in-match signal: score (sets/games/points), current server, a three-valued break-point flag (Yes/No/UNDEF — suppressed inside tiebreaks, UNDEF when the server is unknown), and terminal status (completed / retired / walkover).How it fits your seam
It consumes your real
MatchedOpportunitytype (lib/matching.ts, emitted bymatchH2HGamesfor the tennis branch ofapp/api/ev/route.ts:GET) and returnsOpportunityWithLiveState = MatchedOpportunity & { liveState? }— pure enrichment, no change to how you compute or rank EV. The module mirrorslib/odds-api.tsconventions (typed interfaces, in-memory TTL cache, bounded 429 retry,X-API-Keyheader, quota-header capture). It is a data feed, not a trading venue or executor.Tests / build
lib/live-tennis.test.ts— 11 cases on Node's built-innode:test(zero new deps), covering the break-point truth table, decided-status detection, match-state derivation, and surname/side-order player matching.npm test→ 11 passed;tsc --noEmitclean (no new type errors); test files excluded from the Next build viatsconfig.json.The change
Branch (ready to PR or cherry-pick): https://github.com/bensynapse/PolyPulse/tree/add-live-tennis-state
Diff: main...bensynapse:PolyPulse:add-live-tennis-state
Data source
Live Tennis API (
livetennisapi.com). FREE tier — live scores + match-state + players (ranking + Elo) + fixtures, 30 req/min & 100 req/day, no card — covers this: key at https://livetennisapi.com/subscribe/free , basehttps://api.livetennisapi.com/api/public/v1, headerX-API-Key, responses{"data":[...]}. The WS push feed and model win-probability are ULTRA (paid) and are not used here. MIT reference toolkit: https://github.com/livetennisapi/polymarket-tennisNo worries if tennis enrichment isn't a direction you want — closing this is a fine answer.