Real-time Tennis Data
Live tennis data, connected to every match.
Stream scores, point events and match-state updates over WebSocket. Keep your scoreboard, match timeline and predictions connected through the same tennis identities.
From an event to your match view.
Inspect the event envelope and its match state. Event identity, revision and cursor let your application apply updates in order and resume the stream.
WebSocket messages · V2
Message fields
typematch.point.upsertedmatch_idmat_00000000-0000-4000-8000-000000000001cursor9876543210123456data.revision1
{
"schema_version": "2.0",
"event_id": "evt_00000000-0000-4000-8000-000000000042",
"cursor": "9876543210123456",
"type": "match.point.upserted",
"match_id": "mat_00000000-0000-4000-8000-000000000001",
"source_observed_at": "2026-10-07T12:00:00.000Z",
"published_at": "2026-10-07T12:00:00.000Z",
"data": {
"id": "pnt_00000000-0000-4000-8000-000000000042",
"match_id": "mat_00000000-0000-4000-8000-000000000001",
"revision": 1,
"sequence": 42,
"set_no": 1,
"game_no": 8,
"point_no": 5,
"score_before": [
"30",
"30"
],
"score_after": [
"30",
"40"
],
"server_side": 1,
"winner_side": 2,
"serve_number": 2,
"result_code": "winner",
"rally_length": 6
},
"state": null
}Example IDs and timestamps show the V2 message format.
Keep identity and ordering with each event.
Use event IDs for deduplication, cursors for replay and point revisions for corrections. The same match ID connects your stream to REST queries.
type- The committed change carried by this message.
event_id- Deduplicate delivery of the same event, including after reconnect.
cursor- A decimal-string checkpoint for ordered replay. Save it after applying events.
match_id- Canonical match identity shared by live states and retained reads.
data.id / data.revision- Upsert a point by its own ID and revision. Corrections keep its logical ID.
From match context to your application.
Discover your matches.
List tracked matches and use their canonical IDs for REST queries and stream subscriptions.
Read the documentationSubscribe with a ticket.
Create a scoped stream ticket and authenticate the connection. Keep your API key on your server.
View SDK examplesResume with context.
Retain the cursor and revisions, then reconnect without losing the match identity behind each update.
Read the reconnect guide
Questions
Connect your application to the match.
Create an API key, choose the matches you need and follow the WebSocket quickstart to authenticate, subscribe and resume updates.
