Information
- License: Proprietary
- OpenAPI version:
3.0.0
Live scoring platform for tennis and padel.
Beta: This API is under active development. Endpoints and response shapes may change. Rate limits: 10 req/min (public) · 100 req/min (authenticated). Use authenticated requests wherever possible.
graph LR
App[Your App] -->|REST + JWT| API[MyScore API]
App -->|Socket.io| API
1. Authenticate via Clerk — send JWT as Authorization: Bearer <token>
2. Fetch data — most read endpoints are public (no auth needed)
Your user profile and player identity are created automatically on your first authenticated request.
graph TD
T[Tournament] --> D[Draw / Bracket]
D --> M[Match]
T --> C[Club / Venue]
C --> CT[Court]
M --> CT
M --> P[Player]
| Concept | What it is |
|---|---|
| Tournament | An event (e.g. “Summer Open 2026”) with status: draft → registration → live → completed |
| Draw | A bracket within a tournament (e.g. “Men’s Singles”, size 8/16/32/64) |
| Match | A game between two players, with sets [{ h: 6, g: 4 }, { h: 3, g: 6 }] |
| Club | A venue with courts |
| Player | A participant — can exist without an account, claimable via POST /players/:id/claim |
Show live matches (no auth required):
GET /live/matches — all in-progress matchesGET /live/matches?tournamentId=abc — filtered by tournamentGET /live/courts/:courtId — what’s playing on a specific court (QR scan)Browse tournaments & results:
GET /tournaments — list tournaments (filter by status, search)GET /tournaments/:id — tournament detail with host clubsGET /draws/:id — full bracket tree with all matchesGET /matches/:id — match detail with players and scoresBrowse players & clubs:
GET /players — search playersGET /players/:id/matches — player match historyGET /clubs — list clubsGET /clubs/:id/courts — courts at a clubConnect via Socket.io to receive live score updates:
| Subscribe | Event | Payload |
|---|---|---|
subscribe-match | match:scoreUpdate | { matchId, data: { sets }, timestamp } |
subscribe-match | match:statusUpdated | { matchId, data: { status }, timestamp } |
subscribe-tournament | tournament:updated | { tournamentId, data, timestamp } |
Tip: Combine WebSocket for instant updates with REST polling as fallback.
All errors: { statusCode, message, error } — Codes: 401 (auth), 403 (forbidden), 409 (conflict), 422 (validation), 429 (rate limit exceeded)
All examples below work without authentication. Base URL: https://internal.myscore.live/api/v1
List tournaments
curl -s 'https://internal.myscore.live/api/v1/tournaments?perPage=2'
{
"data": [
{ "id": "1efccb9a-...", "name": "Regional Championship", "status": "upcoming", "sport": "tennis", "surface": "Clay", "startDate": "2024-06-29" },
{ "id": "93ab69fc-...", "name": "Challenger Series", "status": "upcoming", "sport": "tennis", "surface": "Hard Court", "startDate": "2024-03-15" }
],
"meta": { "total": 20, "page": 1, "perPage": 2, "totalPages": 10, "hasNextPage": true }
}
List clubs
curl -s 'https://internal.myscore.live/api/v1/clubs?perPage=2'
{
"data": [
{ "id": "QUEENS", "name": "Queens Club", "address": "Palliser Road, West Kensington, London W14 9EQ" },
{ "id": "WIMBLEDON", "name": "All England Lawn Tennis Club", "address": "Church Road, Wimbledon, London SW19 5AE" }
],
"meta": { "total": 10, "page": 1, "perPage": 2, "hasNextPage": true }
}
Courts at a club
curl -s 'https://internal.myscore.live/api/v1/clubs/WIMBLEDON/courts'
[
{ "id": "crt_003", "clubId": "WIMBLEDON", "name": "Court 1", "surface": "clay" },
{ "id": "crt_041", "clubId": "WIMBLEDON", "name": "Court 7", "surface": "grass" }
]
Search players
curl -s 'https://internal.myscore.live/api/v1/players?perPage=2'
{
"data": [
{ "id": "9c385b1c-...", "name": "Ackeem Louth", "nationality": "AUS" },
{ "id": "6871ec37-...", "name": "Alanda Nakamura", "nationality": "MEX" }
],
"meta": { "total": 105, "page": 1, "perPage": 2, "hasNextPage": true }
}
Get a match with scores
curl -s 'https://internal.myscore.live/api/v1/matches?perPage=1'
{
"data": [
{
"id": "mtch_005",
"status": "completed",
"sets": [{ "home": 1, "guest": 0 }, { "home": 1, "guest": 4 }],
"winnerSide": "guest",
"players": {
"home": [{ "id": "6b50ef1c-...", "name": "Shellsea Theiler" }],
"guest": [{ "id": "c0fceeea-...", "name": "Ayleen Keeth" }]
}
}
],
"meta": { "total": 58, "page": 1, "perPage": 1 }
}
Live matches (in progress right now)
curl -s 'https://internal.myscore.live/api/v1/live/matches'
{
"matches": [
{
"id": "mtch_006",
"sets": [{ "home": 6, "guest": 5 }, { "home": 3, "guest": 1 }],
"home": { "id": "4f5c6951-...", "name": "Alphonsa Defenbaugh" },
"guest": { "id": "34d20bd1-...", "name": "Raiden Fudala" },
"status": "in_progress"
}
]
}
Tournament management (creating tournaments, draws, scoring, board hardware) is documented in the full Developer Guide.
Enter your Clerk JWT token
Security scheme type: http
Bearer format: JWT