My Court Score Developer Platform

Collega le tue applicazioni al tennis in diretta

Una API REST versionata per partite, punteggi live, giocatori, club e tornei.

Importante: ogni risorsa appartiene alla chiave API che l’ha creata

La proprietà viene verificata sulla chiave API esatta, non solo sull’account sviluppatore o sull’account My Court Score collegato.

Esempio: la chiave A crea la partita 125. Solo la chiave A può modificarla, aggiungere un punto o eliminarla. La chiave B viene rifiutata.

Mantieni una chiave stabile per ogni integrazione e ambiente. Revocarla o perderla rimuove l’accesso in scrittura alle risorse che ha creato. resource_owned_by_another_api_key · resource_not_created_by_api_key

API per sviluppatori

Create a separate developer identity, then link it to the player or club account whose data the integration may manage.
Nuovo sviluppatore

Crea un account sviluppatore

Crea il tuo spazio sviluppatore per generare e gestire le chiavi API.

Avvio rapido

JSON over HTTPS. All protected calls use a bearer key.
Scarica OpenAPI JSON
Base URLhttps://mycourtscore.com/api/v1
AuthenticationAuthorization: Bearer mcs_live_...
Formatapplication/json · UTF-8 · OpenAPI 3.1

Read your API identity

curl "https://mycourtscore.com/api/v1/me" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

Create a match without duplicate risk

curl -X POST "https://mycourtscore.com/api/v1/matches" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: match-2026-09-27-001" \
  -d '{"player1":"Lucas Martin","player2":"Nathan Smith","sets_to_win":2}'

Write requests may use an Idempotency-Key header to prevent duplicate resources or actions after a network retry. Responses include X-Request-Id and rate-limit headers.

Proprietà rigorosa: una risorsa può essere modificata, eliminata o usata da un’azione di scrittura solo con la stessa chiave API che l’ha creata.

Webhooks are not included in this first version.

Catalogo endpoint

27 resource paths. Write operations enforce both scopes and data ownership.

System

GET /health Check API availability Public
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

Nessun parametro richiesto.

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/health"

Esempio di risposta · HTTP 200

{
    "data": {
        "status": "ok",
        "version": "v1",
        "time": "2026-09-27T14:12:08+00:00"
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
GET /me Read the developer key identity and linked account authenticated
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/me" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": {
        "developer": {
            "id": 7,
            "name": "Example Integration",
            "email": "developer@example.com"
        },
        "api_key": {
            "id": 12,
            "name": "Production backend",
            "prefix": "mcs_live_ab12",
            "scopes": [
                "matches:read",
                "matches:write"
            ],
            "rate_limit_per_minute": 120
        },
        "linked_account": {
            "type": "club",
            "id": 18
        }
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}

Matches

GET /matches List matches visible to the API key matches:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
pagequeryintegerFacoltativoPage number, starting at 1.1
per_pagequeryintegerFacoltativoItems per page, from 1 to 100.25
statusquerystringFacoltativoFilter by match status.enum: active, finishedactive
qquerystringFacoltativoSearch by player, title, court or match number.Lucas
updated_sincequerystringFacoltativoOnly matches updated since this ISO 8601 date and time.2026-09-27T12:00:00Z

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/matches?page=1&per_page=25&status=active&q=Lucas&updated_since=2026-09-27T12%3A00%3A00Z" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": [
        {
            "id": 125,
            "number": 125,
            "title": "Club championship",
            "type": "Singles",
            "court_name": "Court 1",
            "status": "active",
            "winner_player": 0,
            "winner_name": "",
            "quick_result": false,
            "public_access": "open",
            "players": [
                {
                    "side": 1,
                    "name": "Lucas Martin",
                    "player_id": 42,
                    "club_id": 18,
                    "sets": 1,
                    "games": 3,
                    "points": "30",
                    "serving": true
                },
                {
                    "side": 2,
                    "name": "Nathan Smith",
                    "player_id": 57,
                    "club_id": 18,
                    "sets": 0,
                    "games": 2,
                    "points": "15",
                    "serving": false
                }
            ],
            "score": {
                "current_set": 2,
                "is_tiebreak": false,
                "is_super_tiebreak": false,
                "sets": [
                    {
                        "set": 1,
                        "p1": 6,
                        "p2": 4
                    }
                ]
            },
            "rules": {
                "sets_to_win": 2,
                "games_to_win_set": 6,
                "tie_break_enabled": true,
                "tie_break_at_games": 6,
                "tie_break_points": 7,
                "final_set_rule": "regular_tiebreak",
                "final_set_tiebreak_points": 10,
                "no_ad_scoring": false,
                "advanced_point_mode": true
            },
            "audience": {
                "total_viewers": 84,
                "watching_now": 12
            },
            "links": {
                "score": "https://mycourtscore.com/tennis_score?view=PUBLIC_TOKEN",
                "court_display": "https://mycourtscore.com/court_display?display=PUBLIC_TOKEN"
            },
            "created_at": "2026-09-27 13:30:00",
            "updated_at": "2026-09-27 14:12:08",
            "finished_at": null
        }
    ],
    "meta": {
        "request_id": "req_01HXYZ123",
        "pagination": {
            "page": 1,
            "per_page": 25,
            "total": 1,
            "total_pages": 1
        }
    }
}
POST /matches Create a match matches:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 201

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id

Campi del corpo JSON

ParametroTypeObbligatorioDescrizioneVincoliEsempio
titlestringFacoltativoMatch title.Club championship
typestringFacoltativoMatch category.Singles
court_namestringFacoltativoCourt 1
player1stringObbligatorioDisplayed name for player 1. Required when player1_id is not supplied.Lucas Martin
player2stringObbligatorioDisplayed name for player 2. Required when player2_id is not supplied.Nathan Smith
player1_idintegerFacoltativoOptional official player identifier.42
player2_idintegerFacoltativoOptional official player identifier.57
player1_club_idintegerFacoltativo18
player2_club_idintegerFacoltativo18
sets_to_winintegerFacoltativomin: 1 · max: 3 · default: 22
games_to_win_setintegerFacoltativomin: 1 · max: 12 · default: 66
tie_break_enabledbooleanFacoltativodefault: truetrue
tie_break_at_gamesintegerFacoltativomin: 1 · max: 12 · default: 66
tie_break_pointsintegerFacoltativomin: 3 · max: 30 · default: 77
final_set_rulestringFacoltativoenum: regular_tiebreak, no_tiebreak, super_tiebreak · default: regular_tiebreakregular_tiebreak
final_set_tiebreak_pointsintegerFacoltativomin: 3 · max: 30 · default: 1010
no_ad_scoringbooleanFacoltativodefault: falsefalse
advanced_point_modebooleanFacoltativodefault: falsefalse
livechat_enabledbooleanFacoltativodefault: falsefalse
initial_serverintegerFacoltativoenum: 1, 2 · default: 11
public_accessstringFacoltativoenum: open, password, hidden · default: openopen
public_passwordstringFacoltativoRequired only when public_access is password.minLength: 4string

Esempio di richiesta

curl -X POST "https://mycourtscore.com/api/v1/matches" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "player1": "Player One", "player2": "Player Two", "title": "API test match", "type": "Singles", "sets_to_win": 2, "games_to_win_set": 6 }'

Esempio di risposta · HTTP 201

{
    "data": {
        "id": 125,
        "number": 125,
        "title": "Club championship",
        "type": "Singles",
        "court_name": "Court 1",
        "status": "active",
        "winner_player": 0,
        "winner_name": "",
        "quick_result": false,
        "public_access": "open",
        "players": [
            {
                "side": 1,
                "name": "Lucas Martin",
                "player_id": 42,
                "club_id": 18,
                "sets": 1,
                "games": 3,
                "points": "30",
                "serving": true
            },
            {
                "side": 2,
                "name": "Nathan Smith",
                "player_id": 57,
                "club_id": 18,
                "sets": 0,
                "games": 2,
                "points": "15",
                "serving": false
            }
        ],
        "score": {
            "current_set": 2,
            "is_tiebreak": false,
            "is_super_tiebreak": false,
            "sets": [
                {
                    "set": 1,
                    "p1": 6,
                    "p2": 4
                }
            ]
        },
        "rules": {
            "sets_to_win": 2,
            "games_to_win_set": 6,
            "tie_break_enabled": true,
            "tie_break_at_games": 6,
            "tie_break_points": 7,
            "final_set_rule": "regular_tiebreak",
            "final_set_tiebreak_points": 10,
            "no_ad_scoring": false,
            "advanced_point_mode": true
        },
        "audience": {
            "total_viewers": 84,
            "watching_now": 12
        },
        "links": {
            "score": "https://mycourtscore.com/tennis_score?view=PUBLIC_TOKEN",
            "court_display": "https://mycourtscore.com/court_display?display=PUBLIC_TOKEN"
        },
        "created_at": "2026-09-27 13:30:00",
        "updated_at": "2026-09-27 14:12:08",
        "finished_at": null
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
GET /matches/{matchId} Read a match and its current score matches:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
matchIdpathintegerObbligatorioMy Court Score match identifier.min: 1125

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/matches/125" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 125,
        "number": 125,
        "title": "Club championship",
        "type": "Singles",
        "court_name": "Court 1",
        "status": "active",
        "winner_player": 0,
        "winner_name": "",
        "quick_result": false,
        "public_access": "open",
        "players": [
            {
                "side": 1,
                "name": "Lucas Martin",
                "player_id": 42,
                "club_id": 18,
                "sets": 1,
                "games": 3,
                "points": "30",
                "serving": true
            },
            {
                "side": 2,
                "name": "Nathan Smith",
                "player_id": 57,
                "club_id": 18,
                "sets": 0,
                "games": 2,
                "points": "15",
                "serving": false
            }
        ],
        "score": {
            "current_set": 2,
            "is_tiebreak": false,
            "is_super_tiebreak": false,
            "sets": [
                {
                    "set": 1,
                    "p1": 6,
                    "p2": 4
                }
            ]
        },
        "rules": {
            "sets_to_win": 2,
            "games_to_win_set": 6,
            "tie_break_enabled": true,
            "tie_break_at_games": 6,
            "tie_break_points": 7,
            "final_set_rule": "regular_tiebreak",
            "final_set_tiebreak_points": 10,
            "no_ad_scoring": false,
            "advanced_point_mode": true
        },
        "audience": {
            "total_viewers": 84,
            "watching_now": 12
        },
        "links": {
            "score": "https://mycourtscore.com/tennis_score?view=PUBLIC_TOKEN",
            "court_display": "https://mycourtscore.com/court_display?display=PUBLIC_TOKEN"
        },
        "created_at": "2026-09-27 13:30:00",
        "updated_at": "2026-09-27 14:12:08",
        "finished_at": null
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
PATCH /matches/{matchId} Update match information and rules matches:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
matchIdpathintegerObbligatorioMy Court Score match identifier.min: 1125

Campi del corpo JSON

Supply only the match fields that need to change.

ParametroTypeObbligatorioDescrizioneVincoliEsempio
titlestringFacoltativoMatch title.Club championship
typestringFacoltativoMatch category.Singles
court_namestringFacoltativoCourt 1
player1stringFacoltativoDisplayed name for player 1. Required when player1_id is not supplied.Lucas Martin
player2stringFacoltativoDisplayed name for player 2. Required when player2_id is not supplied.Nathan Smith
player1_idintegerFacoltativoOptional official player identifier.42
player2_idintegerFacoltativoOptional official player identifier.57
player1_club_idintegerFacoltativo18
player2_club_idintegerFacoltativo18
sets_to_winintegerFacoltativomin: 1 · max: 3 · default: 22
games_to_win_setintegerFacoltativomin: 1 · max: 12 · default: 66
tie_break_enabledbooleanFacoltativodefault: truetrue
tie_break_at_gamesintegerFacoltativomin: 1 · max: 12 · default: 66
tie_break_pointsintegerFacoltativomin: 3 · max: 30 · default: 77
final_set_rulestringFacoltativoenum: regular_tiebreak, no_tiebreak, super_tiebreak · default: regular_tiebreakregular_tiebreak
final_set_tiebreak_pointsintegerFacoltativomin: 3 · max: 30 · default: 1010
no_ad_scoringbooleanFacoltativodefault: falsefalse
advanced_point_modebooleanFacoltativodefault: falsefalse
livechat_enabledbooleanFacoltativodefault: falsefalse
initial_serverintegerFacoltativoenum: 1, 2 · default: 11
public_accessstringFacoltativoenum: open, password, hidden · default: openopen
public_passwordstringFacoltativoRequired only when public_access is password.minLength: 4string

Esempio di richiesta

curl -X PATCH "https://mycourtscore.com/api/v1/matches/125" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "title": "Updated match title", "court_name": "Court 1" }'

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 125,
        "number": 125,
        "title": "Club championship",
        "type": "Singles",
        "court_name": "Court 1",
        "status": "active",
        "winner_player": 0,
        "winner_name": "",
        "quick_result": false,
        "public_access": "open",
        "players": [
            {
                "side": 1,
                "name": "Lucas Martin",
                "player_id": 42,
                "club_id": 18,
                "sets": 1,
                "games": 3,
                "points": "30",
                "serving": true
            },
            {
                "side": 2,
                "name": "Nathan Smith",
                "player_id": 57,
                "club_id": 18,
                "sets": 0,
                "games": 2,
                "points": "15",
                "serving": false
            }
        ],
        "score": {
            "current_set": 2,
            "is_tiebreak": false,
            "is_super_tiebreak": false,
            "sets": [
                {
                    "set": 1,
                    "p1": 6,
                    "p2": 4
                }
            ]
        },
        "rules": {
            "sets_to_win": 2,
            "games_to_win_set": 6,
            "tie_break_enabled": true,
            "tie_break_at_games": 6,
            "tie_break_points": 7,
            "final_set_rule": "regular_tiebreak",
            "final_set_tiebreak_points": 10,
            "no_ad_scoring": false,
            "advanced_point_mode": true
        },
        "audience": {
            "total_viewers": 84,
            "watching_now": 12
        },
        "links": {
            "score": "https://mycourtscore.com/tennis_score?view=PUBLIC_TOKEN",
            "court_display": "https://mycourtscore.com/court_display?display=PUBLIC_TOKEN"
        },
        "created_at": "2026-09-27 13:30:00",
        "updated_at": "2026-09-27 14:12:08",
        "finished_at": null
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
DELETE /matches/{matchId} Delete an eligible unstarted match matches:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
matchIdpathintegerObbligatorioMy Court Score match identifier.min: 1125

Esempio di richiesta

curl -X DELETE "https://mycourtscore.com/api/v1/matches/125" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: request-unique-id"

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 125,
        "deleted": true
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}

Live scoring

GET /matches/{matchId}/score Read the live score payload matches:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
matchIdpathintegerObbligatorioMy Court Score match identifier.min: 1125

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/matches/125/score" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 125,
        "number": 125,
        "title": "Club championship",
        "type": "Singles",
        "court_name": "Court 1",
        "status": "active",
        "winner_player": 0,
        "winner_name": "",
        "quick_result": false,
        "public_access": "open",
        "players": [
            {
                "side": 1,
                "name": "Lucas Martin",
                "player_id": 42,
                "club_id": 18,
                "sets": 1,
                "games": 3,
                "points": "30",
                "serving": true
            },
            {
                "side": 2,
                "name": "Nathan Smith",
                "player_id": 57,
                "club_id": 18,
                "sets": 0,
                "games": 2,
                "points": "15",
                "serving": false
            }
        ],
        "score": {
            "current_set": 2,
            "is_tiebreak": false,
            "is_super_tiebreak": false,
            "sets": [
                {
                    "set": 1,
                    "p1": 6,
                    "p2": 4
                }
            ]
        },
        "rules": {
            "sets_to_win": 2,
            "games_to_win_set": 6,
            "tie_break_enabled": true,
            "tie_break_at_games": 6,
            "tie_break_points": 7,
            "final_set_rule": "regular_tiebreak",
            "final_set_tiebreak_points": 10,
            "no_ad_scoring": false,
            "advanced_point_mode": true
        },
        "audience": {
            "total_viewers": 84,
            "watching_now": 12
        },
        "links": {
            "score": "https://mycourtscore.com/tennis_score?view=PUBLIC_TOKEN",
            "court_display": "https://mycourtscore.com/court_display?display=PUBLIC_TOKEN"
        },
        "created_at": "2026-09-27 13:30:00",
        "updated_at": "2026-09-27 14:12:08",
        "finished_at": null
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
GET /matches/{matchId}/events List scoring and administration events matches:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
matchIdpathintegerObbligatorioMy Court Score match identifier.min: 1125
limitqueryintegerFacoltativoMaximum number of recent events, from 1 to 200.50

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/matches/125/events?limit=50" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": [
        {
            "id": 9001,
            "match_id": 125,
            "event_type": "point",
            "player_no": 1,
            "label": "Point for Lucas Martin",
            "point_reason": "winner",
            "responsible_player": 1,
            "created_at": "2026-09-27 14:12:08"
        }
    ],
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
POST /matches/{matchId}/points Award a point to player 1 or player 2 score:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
matchIdpathintegerObbligatorioMy Court Score match identifier.min: 1125

Campi del corpo JSON

ParametroTypeObbligatorioDescrizioneVincoliEsempio
winnerintegerObbligatorioenum: 1, 21
reasonstringFacoltativoenum: normal, ace, winner, forced_error, unforced_error, double_fault, out, netnormal
responsible_playerintegerFacoltativoenum: 0, 1, 20

Esempio di richiesta

curl -X POST "https://mycourtscore.com/api/v1/matches/125/points" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "winner": 1, "reason": "normal", "responsible_player": 0 }'

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 125,
        "number": 125,
        "title": "Club championship",
        "type": "Singles",
        "court_name": "Court 1",
        "status": "active",
        "winner_player": 0,
        "winner_name": "",
        "quick_result": false,
        "public_access": "open",
        "players": [
            {
                "side": 1,
                "name": "Lucas Martin",
                "player_id": 42,
                "club_id": 18,
                "sets": 1,
                "games": 3,
                "points": "30",
                "serving": true
            },
            {
                "side": 2,
                "name": "Nathan Smith",
                "player_id": 57,
                "club_id": 18,
                "sets": 0,
                "games": 2,
                "points": "15",
                "serving": false
            }
        ],
        "score": {
            "current_set": 2,
            "is_tiebreak": false,
            "is_super_tiebreak": false,
            "sets": [
                {
                    "set": 1,
                    "p1": 6,
                    "p2": 4
                }
            ]
        },
        "rules": {
            "sets_to_win": 2,
            "games_to_win_set": 6,
            "tie_break_enabled": true,
            "tie_break_at_games": 6,
            "tie_break_points": 7,
            "final_set_rule": "regular_tiebreak",
            "final_set_tiebreak_points": 10,
            "no_ad_scoring": false,
            "advanced_point_mode": true
        },
        "audience": {
            "total_viewers": 84,
            "watching_now": 12
        },
        "links": {
            "score": "https://mycourtscore.com/tennis_score?view=PUBLIC_TOKEN",
            "court_display": "https://mycourtscore.com/court_display?display=PUBLIC_TOKEN"
        },
        "created_at": "2026-09-27 13:30:00",
        "updated_at": "2026-09-27 14:12:08",
        "finished_at": null
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
POST /matches/{matchId}/undo Undo the last point score:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
matchIdpathintegerObbligatorioMy Court Score match identifier.min: 1125

Campi del corpo JSON

Nessun campo JSON. Invia {} quando è richiesto un corpo.

Esempio di richiesta

curl -X POST "https://mycourtscore.com/api/v1/matches/125/undo" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{}'

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 125,
        "number": 125,
        "title": "Club championship",
        "type": "Singles",
        "court_name": "Court 1",
        "status": "active",
        "winner_player": 0,
        "winner_name": "",
        "quick_result": false,
        "public_access": "open",
        "players": [
            {
                "side": 1,
                "name": "Lucas Martin",
                "player_id": 42,
                "club_id": 18,
                "sets": 1,
                "games": 3,
                "points": "30",
                "serving": true
            },
            {
                "side": 2,
                "name": "Nathan Smith",
                "player_id": 57,
                "club_id": 18,
                "sets": 0,
                "games": 2,
                "points": "15",
                "serving": false
            }
        ],
        "score": {
            "current_set": 2,
            "is_tiebreak": false,
            "is_super_tiebreak": false,
            "sets": [
                {
                    "set": 1,
                    "p1": 6,
                    "p2": 4
                }
            ]
        },
        "rules": {
            "sets_to_win": 2,
            "games_to_win_set": 6,
            "tie_break_enabled": true,
            "tie_break_at_games": 6,
            "tie_break_points": 7,
            "final_set_rule": "regular_tiebreak",
            "final_set_tiebreak_points": 10,
            "no_ad_scoring": false,
            "advanced_point_mode": true
        },
        "audience": {
            "total_viewers": 84,
            "watching_now": 12
        },
        "links": {
            "score": "https://mycourtscore.com/tennis_score?view=PUBLIC_TOKEN",
            "court_display": "https://mycourtscore.com/court_display?display=PUBLIC_TOKEN"
        },
        "created_at": "2026-09-27 13:30:00",
        "updated_at": "2026-09-27 14:12:08",
        "finished_at": null
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
PATCH /matches/{matchId}/server Change the serving player score:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
matchIdpathintegerObbligatorioMy Court Score match identifier.min: 1125

Campi del corpo JSON

ParametroTypeObbligatorioDescrizioneVincoliEsempio
serverintegerObbligatorioenum: 1, 21

Esempio di richiesta

curl -X PATCH "https://mycourtscore.com/api/v1/matches/125/server" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "server": 1 }'

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 125,
        "number": 125,
        "title": "Club championship",
        "type": "Singles",
        "court_name": "Court 1",
        "status": "active",
        "winner_player": 0,
        "winner_name": "",
        "quick_result": false,
        "public_access": "open",
        "players": [
            {
                "side": 1,
                "name": "Lucas Martin",
                "player_id": 42,
                "club_id": 18,
                "sets": 1,
                "games": 3,
                "points": "30",
                "serving": true
            },
            {
                "side": 2,
                "name": "Nathan Smith",
                "player_id": 57,
                "club_id": 18,
                "sets": 0,
                "games": 2,
                "points": "15",
                "serving": false
            }
        ],
        "score": {
            "current_set": 2,
            "is_tiebreak": false,
            "is_super_tiebreak": false,
            "sets": [
                {
                    "set": 1,
                    "p1": 6,
                    "p2": 4
                }
            ]
        },
        "rules": {
            "sets_to_win": 2,
            "games_to_win_set": 6,
            "tie_break_enabled": true,
            "tie_break_at_games": 6,
            "tie_break_points": 7,
            "final_set_rule": "regular_tiebreak",
            "final_set_tiebreak_points": 10,
            "no_ad_scoring": false,
            "advanced_point_mode": true
        },
        "audience": {
            "total_viewers": 84,
            "watching_now": 12
        },
        "links": {
            "score": "https://mycourtscore.com/tennis_score?view=PUBLIC_TOKEN",
            "court_display": "https://mycourtscore.com/court_display?display=PUBLIC_TOKEN"
        },
        "created_at": "2026-09-27 13:30:00",
        "updated_at": "2026-09-27 14:12:08",
        "finished_at": null
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
POST /matches/{matchId}/reset Reset the complete score score:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
matchIdpathintegerObbligatorioMy Court Score match identifier.min: 1125

Campi del corpo JSON

Nessun campo JSON. Invia {} quando è richiesto un corpo.

Esempio di richiesta

curl -X POST "https://mycourtscore.com/api/v1/matches/125/reset" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{}'

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 125,
        "number": 125,
        "title": "Club championship",
        "type": "Singles",
        "court_name": "Court 1",
        "status": "active",
        "winner_player": 0,
        "winner_name": "",
        "quick_result": false,
        "public_access": "open",
        "players": [
            {
                "side": 1,
                "name": "Lucas Martin",
                "player_id": 42,
                "club_id": 18,
                "sets": 1,
                "games": 3,
                "points": "30",
                "serving": true
            },
            {
                "side": 2,
                "name": "Nathan Smith",
                "player_id": 57,
                "club_id": 18,
                "sets": 0,
                "games": 2,
                "points": "15",
                "serving": false
            }
        ],
        "score": {
            "current_set": 2,
            "is_tiebreak": false,
            "is_super_tiebreak": false,
            "sets": [
                {
                    "set": 1,
                    "p1": 6,
                    "p2": 4
                }
            ]
        },
        "rules": {
            "sets_to_win": 2,
            "games_to_win_set": 6,
            "tie_break_enabled": true,
            "tie_break_at_games": 6,
            "tie_break_points": 7,
            "final_set_rule": "regular_tiebreak",
            "final_set_tiebreak_points": 10,
            "no_ad_scoring": false,
            "advanced_point_mode": true
        },
        "audience": {
            "total_viewers": 84,
            "watching_now": 12
        },
        "links": {
            "score": "https://mycourtscore.com/tennis_score?view=PUBLIC_TOKEN",
            "court_display": "https://mycourtscore.com/court_display?display=PUBLIC_TOKEN"
        },
        "created_at": "2026-09-27 13:30:00",
        "updated_at": "2026-09-27 14:12:08",
        "finished_at": null
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
POST /matches/{matchId}/finish Finish a match with a declared winner score:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
matchIdpathintegerObbligatorioMy Court Score match identifier.min: 1125

Campi del corpo JSON

ParametroTypeObbligatorioDescrizioneVincoliEsempio
winnerintegerObbligatorioenum: 1, 21

Esempio di richiesta

curl -X POST "https://mycourtscore.com/api/v1/matches/125/finish" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "winner": 1 }'

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 125,
        "number": 125,
        "title": "Club championship",
        "type": "Singles",
        "court_name": "Court 1",
        "status": "finished",
        "winner_player": 1,
        "winner_name": "Lucas Martin",
        "quick_result": true,
        "public_access": "open",
        "players": [
            {
                "side": 1,
                "name": "Lucas Martin",
                "player_id": 42,
                "club_id": 18,
                "sets": 1,
                "games": 3,
                "points": "30",
                "serving": true
            },
            {
                "side": 2,
                "name": "Nathan Smith",
                "player_id": 57,
                "club_id": 18,
                "sets": 0,
                "games": 2,
                "points": "15",
                "serving": false
            }
        ],
        "score": {
            "current_set": 2,
            "is_tiebreak": false,
            "is_super_tiebreak": false,
            "sets": [
                {
                    "set": 1,
                    "p1": 6,
                    "p2": 4
                }
            ]
        },
        "rules": {
            "sets_to_win": 2,
            "games_to_win_set": 6,
            "tie_break_enabled": true,
            "tie_break_at_games": 6,
            "tie_break_points": 7,
            "final_set_rule": "regular_tiebreak",
            "final_set_tiebreak_points": 10,
            "no_ad_scoring": false,
            "advanced_point_mode": true
        },
        "audience": {
            "total_viewers": 84,
            "watching_now": 12
        },
        "links": {
            "score": "https://mycourtscore.com/tennis_score?view=PUBLIC_TOKEN",
            "court_display": "https://mycourtscore.com/court_display?display=PUBLIC_TOKEN"
        },
        "created_at": "2026-09-27 13:30:00",
        "updated_at": "2026-09-27 14:12:08",
        "finished_at": "2026-09-27 15:42:00"
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
POST /matches/{matchId}/reopen Reopen a finished match score:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
matchIdpathintegerObbligatorioMy Court Score match identifier.min: 1125

Campi del corpo JSON

Nessun campo JSON. Invia {} quando è richiesto un corpo.

Esempio di richiesta

curl -X POST "https://mycourtscore.com/api/v1/matches/125/reopen" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{}'

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 125,
        "number": 125,
        "title": "Club championship",
        "type": "Singles",
        "court_name": "Court 1",
        "status": "active",
        "winner_player": 0,
        "winner_name": "",
        "quick_result": false,
        "public_access": "open",
        "players": [
            {
                "side": 1,
                "name": "Lucas Martin",
                "player_id": 42,
                "club_id": 18,
                "sets": 1,
                "games": 3,
                "points": "30",
                "serving": true
            },
            {
                "side": 2,
                "name": "Nathan Smith",
                "player_id": 57,
                "club_id": 18,
                "sets": 0,
                "games": 2,
                "points": "15",
                "serving": false
            }
        ],
        "score": {
            "current_set": 2,
            "is_tiebreak": false,
            "is_super_tiebreak": false,
            "sets": [
                {
                    "set": 1,
                    "p1": 6,
                    "p2": 4
                }
            ]
        },
        "rules": {
            "sets_to_win": 2,
            "games_to_win_set": 6,
            "tie_break_enabled": true,
            "tie_break_at_games": 6,
            "tie_break_points": 7,
            "final_set_rule": "regular_tiebreak",
            "final_set_tiebreak_points": 10,
            "no_ad_scoring": false,
            "advanced_point_mode": true
        },
        "audience": {
            "total_viewers": 84,
            "watching_now": 12
        },
        "links": {
            "score": "https://mycourtscore.com/tennis_score?view=PUBLIC_TOKEN",
            "court_display": "https://mycourtscore.com/court_display?display=PUBLIC_TOKEN"
        },
        "created_at": "2026-09-27 13:30:00",
        "updated_at": "2026-09-27 14:12:08",
        "finished_at": null
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}

Players

GET /players Search official players or list linked players players:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
pagequeryintegerFacoltativoPage number, starting at 1.1
per_pagequeryintegerFacoltativoItems per page, from 1 to 100.25
qquerystringFacoltativoSearch by name or club.Lucas
minequerybooleanFacoltativoOnly return the linked primary and secondary players.true
club_idqueryintegerFacoltativoFilter by club.18

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/players?page=1&per_page=25&q=Lucas&mine=true&club_id=18" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": [
        {
            "id": 42,
            "name": "Lucas Martin",
            "first_name": "Lucas",
            "last_name": "Martin",
            "official": true,
            "country": "Belgium",
            "city": "Brussels",
            "club_id": 18,
            "club_name": "Central Tennis Club",
            "avatar_url": "https://mycourtscore.com/uploads/avatars/player-42.jpg",
            "is_secondary_player": false
        }
    ],
    "meta": {
        "request_id": "req_01HXYZ123",
        "pagination": {
            "page": 1,
            "per_page": 25,
            "total": 1,
            "total_pages": 1
        }
    }
}
POST /players Create the primary player account or a secondary player players:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 201

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id

Campi del corpo JSON

For an unlinked developer account, email and password are conditionally required to create and link a primary player account. For a developer already linked to a player, this creates a secondary player.

ParametroTypeObbligatorioDescrizioneVincoliEsempio
first_namestringObbligatorioPlayer first name.Lucas
last_namestringObbligatorioPlayer last name.Martin
emailstring (email)FacoltativoRequired when creating the primary player account.lucas@example.com
passwordstring (password)FacoltativoRequired when creating the primary player account.minLength: 8ChangeMe-2026
club_idintegerFacoltativo18
club_namestringFacoltativoCentral Tennis Club
federation_numberstringFacoltativoBE-123456
birth_datestring (date)Facoltativo2008-04-12
phonestringFacoltativostring
mobilestringFacoltativostring
citystringFacoltativoBrussels
countrystringFacoltativoBelgium
notesstringFacoltativostring
langstringFacoltativoenum: fr, en, nl, de, es, it · default: enen

Esempio di richiesta

curl -X POST "https://mycourtscore.com/api/v1/players" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "first_name": "Alex", "last_name": "Martin", "country": "Belgium", "lang": "en" }'

Esempio di risposta · HTTP 201

{
    "data": {
        "id": 42,
        "name": "Lucas Martin",
        "first_name": "Lucas",
        "last_name": "Martin",
        "official": true,
        "country": "Belgium",
        "city": "Brussels",
        "club_id": 18,
        "club_name": "Central Tennis Club",
        "avatar_url": "https://mycourtscore.com/uploads/avatars/player-42.jpg",
        "is_secondary_player": false
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
GET /players/{playerId} Read a permitted player profile players:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
playerIdpathintegerObbligatorioOfficial or secondary player identifier.min: 142

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/players/42" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 42,
        "name": "Lucas Martin",
        "first_name": "Lucas",
        "last_name": "Martin",
        "official": true,
        "country": "Belgium",
        "city": "Brussels",
        "club_id": 18,
        "club_name": "Central Tennis Club",
        "avatar_url": "https://mycourtscore.com/uploads/avatars/player-42.jpg",
        "is_secondary_player": false
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
PATCH /players/{playerId} Update a linked player profile players:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
playerIdpathintegerObbligatorioOfficial or secondary player identifier.min: 142

Campi del corpo JSON

ParametroTypeObbligatorioDescrizioneVincoliEsempio
first_namestringFacoltativostring
last_namestringFacoltativostring
club_idintegerFacoltativo1
federation_numberstringFacoltativostring
birth_datestring (date)Facoltativo2026-09-27
phonestringFacoltativostring
mobilestringFacoltativostring
citystringFacoltativostring
countrystringFacoltativostring
notesstringFacoltativostring

Esempio di richiesta

curl -X PATCH "https://mycourtscore.com/api/v1/players/42" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "city": "Brussels", "country": "Belgium" }'

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 42,
        "name": "Lucas Martin",
        "first_name": "Lucas",
        "last_name": "Martin",
        "official": true,
        "country": "Belgium",
        "city": "Brussels",
        "club_id": 18,
        "club_name": "Central Tennis Club",
        "avatar_url": "https://mycourtscore.com/uploads/avatars/player-42.jpg",
        "is_secondary_player": false
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
DELETE /players/{playerId} Delete a linked secondary player players:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
playerIdpathintegerObbligatorioOfficial or secondary player identifier.min: 142

Esempio di richiesta

curl -X DELETE "https://mycourtscore.com/api/v1/players/42" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: request-unique-id"

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 42,
        "deleted": true
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}

Clubs

GET /clubs List and search active clubs clubs:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
pagequeryintegerFacoltativoPage number, starting at 1.1
per_pagequeryintegerFacoltativoItems per page, from 1 to 100.25
qquerystringFacoltativoSearch by club name, city or country.Central

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/clubs?page=1&per_page=25&q=Central" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": [
        {
            "id": 18,
            "name": "Central Tennis Club",
            "short_name": "CTC",
            "slug": "central-tennis-club",
            "description": "Tennis club",
            "public_email": "contact@example.com",
            "phone": "+32 2 000 00 00",
            "city": "Brussels",
            "region": "Brussels",
            "country": "Belgium",
            "website": "https://example.com",
            "court_count": 4,
            "timezone": "Europe/Brussels",
            "status": "active",
            "live_url": "https://mycourtscore.com/club_live?club=PUBLIC_TOKEN"
        }
    ],
    "meta": {
        "request_id": "req_01HXYZ123",
        "pagination": {
            "page": 1,
            "per_page": 25,
            "total": 1,
            "total_pages": 1
        }
    }
}
POST /clubs Create a club and link the developer account clubs:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 201

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id

Campi del corpo JSON

ParametroTypeObbligatorioDescrizioneVincoliEsempio
club_namestringObbligatorioOfficial club name.Central Tennis Club
short_namestringFacoltativoCTC
descriptionstringFacoltativostring
contact_personstringFacoltativostring
emailstring (email)Obbligatorioclub@example.com
passwordstring (password)ObbligatoriominLength: 8ChangeMe-2026
public_emailstring (email)Facoltativodeveloper@example.com
phonestringFacoltativostring
mobilestringFacoltativostring
address_line1stringFacoltativostring
address_line2stringFacoltativostring
postal_codestringFacoltativostring
citystringFacoltativoBrussels
regionstringFacoltativostring
countrystringFacoltativoBelgium
websitestring (uri)Facoltativostring
federation_namestringFacoltativostring
registration_numberstringFacoltativostring
timezonestringFacoltativoValid IANA timezone.Europe/Brussels
court_countintegerFacoltativomin: 0 · max: 5004
langstringFacoltativoenum: fr, en, nl, de, es, it · default: enen

Esempio di richiesta

curl -X POST "https://mycourtscore.com/api/v1/clubs" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "club_name": "API Test Club", "email": "developer@example.com", "password": "ChangeMe-2026", "timezone": "Europe/Brussels", "lang": "en" }'

Esempio di risposta · HTTP 201

{
    "data": {
        "id": 18,
        "name": "Central Tennis Club",
        "short_name": "CTC",
        "slug": "central-tennis-club",
        "description": "Tennis club",
        "public_email": "contact@example.com",
        "phone": "+32 2 000 00 00",
        "city": "Brussels",
        "region": "Brussels",
        "country": "Belgium",
        "website": "https://example.com",
        "court_count": 4,
        "timezone": "Europe/Brussels",
        "status": "active",
        "live_url": "https://mycourtscore.com/club_live?club=PUBLIC_TOKEN"
    },
    "meta": {
        "developer_account_linked": true,
        "request_id": "req_01HXYZ123"
    }
}
GET /clubs/{clubId} Read public club information clubs:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
clubIdpathintegerObbligatorioClub identifier.min: 118

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/clubs/18" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 18,
        "name": "Central Tennis Club",
        "short_name": "CTC",
        "slug": "central-tennis-club",
        "description": "Tennis club",
        "public_email": "contact@example.com",
        "phone": "+32 2 000 00 00",
        "city": "Brussels",
        "region": "Brussels",
        "country": "Belgium",
        "website": "https://example.com",
        "court_count": 4,
        "timezone": "Europe/Brussels",
        "status": "active",
        "live_url": "https://mycourtscore.com/club_live?club=PUBLIC_TOKEN"
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
PATCH /clubs/{clubId} Update the linked club profile clubs:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
clubIdpathintegerObbligatorioClub identifier.min: 118

Campi del corpo JSON

ParametroTypeObbligatorioDescrizioneVincoliEsempio
club_namestringFacoltativostring
short_namestringFacoltativostring
descriptionstringFacoltativostring
logo_urlstring (uri)Facoltativostring
contact_personstringFacoltativostring
public_emailstring (email)Facoltativodeveloper@example.com
phonestringFacoltativostring
mobilestringFacoltativostring
address_line1stringFacoltativostring
address_line2stringFacoltativostring
postal_codestringFacoltativostring
citystringFacoltativostring
regionstringFacoltativostring
countrystringFacoltativostring
websitestring (uri)Facoltativostring
federation_namestringFacoltativostring
registration_numberstringFacoltativostring
timezonestringFacoltativoEurope/Brussels
court_countintegerFacoltativomin: 0 · max: 5001
live_match_visibilitystringFacoltativoenum: forever, until_finished, same_dayforever

Esempio di richiesta

curl -X PATCH "https://mycourtscore.com/api/v1/clubs/18" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "city": "Brussels", "timezone": "Europe/Brussels", "court_count": 4 }'

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 18,
        "name": "Central Tennis Club",
        "short_name": "CTC",
        "slug": "central-tennis-club",
        "description": "Tennis club",
        "public_email": "contact@example.com",
        "phone": "+32 2 000 00 00",
        "city": "Brussels",
        "region": "Brussels",
        "country": "Belgium",
        "website": "https://example.com",
        "court_count": 4,
        "timezone": "Europe/Brussels",
        "status": "active",
        "live_url": "https://mycourtscore.com/club_live?club=PUBLIC_TOKEN"
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
GET /clubs/{clubId}/matches List matches owned by the linked club matches:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
clubIdpathintegerObbligatorioClub identifier.min: 118
pagequeryintegerFacoltativoPage number, starting at 1.1
per_pagequeryintegerFacoltativoItems per page, from 1 to 100.25
statusquerystringFacoltativoFilter by match status.enum: active, finishedactive
qquerystringFacoltativoSearch by player, title or court.Lucas
updated_sincequerystringFacoltativoOnly matches updated since this ISO 8601 date and time.2026-09-27T12:00:00Z

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/clubs/18/matches?page=1&per_page=25&status=active&q=Lucas&updated_since=2026-09-27T12%3A00%3A00Z" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": [
        {
            "id": 125,
            "number": 125,
            "title": "Club championship",
            "type": "Singles",
            "court_name": "Court 1",
            "status": "active",
            "winner_player": 0,
            "winner_name": "",
            "quick_result": false,
            "public_access": "open",
            "players": [
                {
                    "side": 1,
                    "name": "Lucas Martin",
                    "player_id": 42,
                    "club_id": 18,
                    "sets": 1,
                    "games": 3,
                    "points": "30",
                    "serving": true
                },
                {
                    "side": 2,
                    "name": "Nathan Smith",
                    "player_id": 57,
                    "club_id": 18,
                    "sets": 0,
                    "games": 2,
                    "points": "15",
                    "serving": false
                }
            ],
            "score": {
                "current_set": 2,
                "is_tiebreak": false,
                "is_super_tiebreak": false,
                "sets": [
                    {
                        "set": 1,
                        "p1": 6,
                        "p2": 4
                    }
                ]
            },
            "rules": {
                "sets_to_win": 2,
                "games_to_win_set": 6,
                "tie_break_enabled": true,
                "tie_break_at_games": 6,
                "tie_break_points": 7,
                "final_set_rule": "regular_tiebreak",
                "final_set_tiebreak_points": 10,
                "no_ad_scoring": false,
                "advanced_point_mode": true
            },
            "audience": {
                "total_viewers": 84,
                "watching_now": 12
            },
            "links": {
                "score": "https://mycourtscore.com/tennis_score?view=PUBLIC_TOKEN",
                "court_display": "https://mycourtscore.com/court_display?display=PUBLIC_TOKEN"
            },
            "created_at": "2026-09-27 13:30:00",
            "updated_at": "2026-09-27 14:12:08",
            "finished_at": null
        }
    ],
    "meta": {
        "request_id": "req_01HXYZ123",
        "pagination": {
            "page": 1,
            "per_page": 25,
            "total": 1,
            "total_pages": 1
        }
    }
}

Tournaments

GET /tournaments List public or linked-club tournaments tournaments:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
pagequeryintegerFacoltativoPage number, starting at 1.1
per_pagequeryintegerFacoltativoItems per page, from 1 to 100.25
statusquerystringFacoltativoFilter by tournament status.enum: draft, published, in_progress, finishedpublished
qquerystringFacoltativoSearch by name, category or venue.Weekend Open

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/tournaments?page=1&per_page=25&status=published&q=Weekend%20Open" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": [
        {
            "id": 8,
            "club_id": 18,
            "name": "Weekend Open",
            "description": "Club tournament",
            "category": "Open",
            "format": "group_divisions",
            "entry_type": "team",
            "status": "published",
            "registration_open": true,
            "max_participants": 16,
            "group_count": 4,
            "qualifiers_per_group": 2,
            "division_count": 2,
            "start_date": "2026-09-27",
            "end_date": "2026-09-28",
            "venue": "Central Tennis Club",
            "timezone": "Europe/Brussels",
            "minimum_rest_minutes": 30,
            "public_url": "https://mycourtscore.com/tournament?t=PUBLIC_TOKEN",
            "created_at": "2026-09-01 10:00:00",
            "updated_at": "2026-09-27 12:00:00"
        }
    ],
    "meta": {
        "request_id": "req_01HXYZ123",
        "pagination": {
            "page": 1,
            "per_page": 25,
            "total": 1,
            "total_pages": 1
        }
    }
}
POST /tournaments Create a club tournament tournaments:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 201

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id

Campi del corpo JSON

ParametroTypeObbligatorioDescrizioneVincoliEsempio
namestringObbligatorioTournament name.Weekend Open
descriptionstringFacoltativostring
categorystringFacoltativoOpen
formatstringFacoltativoenum: single_elimination, round_robin, group_knockout, group_divisions · default: single_eliminationsingle_elimination
entry_typestringFacoltativoenum: player, team · default: playerplayer
start_datestring (date)Obbligatorio2026-09-27
end_datestring (date)Obbligatorio2026-09-28
venuestringFacoltativoCentral Tennis Club
timezonestringFacoltativoEurope/Brussels
registration_openbooleanFacoltativodefault: falsefalse
max_participantsintegerFacoltativomin: 2 · max: 128 · default: 3232
group_countintegerFacoltativomin: 1 · max: 32 · default: 11
qualifiers_per_groupintegerFacoltativomin: 1 · max: 8 · default: 22
division_countintegerFacoltativomin: 1 · max: 81
sets_to_winintegerFacoltativomin: 1 · max: 3 · default: 22
games_to_win_setintegerFacoltativomin: 1 · max: 12 · default: 66
tie_break_enabledbooleanFacoltativodefault: truetrue
tie_break_at_gamesintegerFacoltativomin: 1 · max: 12 · default: 66
tie_break_pointsintegerFacoltativomin: 3 · max: 30 · default: 77
final_set_rulestringFacoltativoenum: regular_tiebreak, no_tiebreak, super_tiebreak · default: regular_tiebreakregular_tiebreak
final_set_tiebreak_pointsintegerFacoltativomin: 3 · max: 30 · default: 1010
no_ad_scoringbooleanFacoltativodefault: falsefalse
group_sets_to_winintegerFacoltativomin: 1 · max: 3 · default: 11
group_games_to_win_setintegerFacoltativomin: 1 · max: 12 · default: 66
group_tie_break_enabledbooleanFacoltativodefault: truetrue
group_tie_break_at_gamesintegerFacoltativomin: 1 · max: 12 · default: 66
group_tie_break_pointsintegerFacoltativomin: 3 · max: 30 · default: 77
group_no_ad_scoringbooleanFacoltativodefault: falsefalse
minimum_rest_minutesintegerFacoltativomin: 0 · max: 1440 · default: 3030
estimated_match_minutesintegerFacoltativomin: 10 · max: 1440 · default: 6060
schedule_slot_minutesintegerFacoltativomin: 5 · max: 720 · default: 3030
ranking_rulesarray<string>Facoltativo[ "match_wins", "head_to_head", "set_ratio", "game_ratio" ]

Esempio di richiesta

curl -X POST "https://mycourtscore.com/api/v1/tournaments" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "name": "API Test Tournament", "start_date": "2026-09-27", "end_date": "2026-09-28", "format": "single_elimination", "entry_type": "player", "max_participants": 8 }'

Esempio di risposta · HTTP 201

{
    "data": {
        "id": 8,
        "club_id": 18,
        "name": "Weekend Open",
        "description": "Club tournament",
        "category": "Open",
        "format": "group_divisions",
        "entry_type": "team",
        "status": "published",
        "registration_open": true,
        "max_participants": 16,
        "group_count": 4,
        "qualifiers_per_group": 2,
        "division_count": 2,
        "start_date": "2026-09-27",
        "end_date": "2026-09-28",
        "venue": "Central Tennis Club",
        "timezone": "Europe/Brussels",
        "minimum_rest_minutes": 30,
        "public_url": "https://mycourtscore.com/tournament?t=PUBLIC_TOKEN",
        "created_at": "2026-09-01 10:00:00",
        "updated_at": "2026-09-27 12:00:00"
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
GET /tournaments/{tournamentId} Read tournament configuration and counts tournaments:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
tournamentIdpathintegerObbligatorioTournament identifier.min: 18

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/tournaments/8" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 8,
        "club_id": 18,
        "name": "Weekend Open",
        "description": "Club tournament",
        "category": "Open",
        "format": "group_divisions",
        "entry_type": "team",
        "status": "published",
        "registration_open": true,
        "max_participants": 16,
        "group_count": 4,
        "qualifiers_per_group": 2,
        "division_count": 2,
        "start_date": "2026-09-27",
        "end_date": "2026-09-28",
        "venue": "Central Tennis Club",
        "timezone": "Europe/Brussels",
        "minimum_rest_minutes": 30,
        "public_url": "https://mycourtscore.com/tournament?t=PUBLIC_TOKEN",
        "created_at": "2026-09-01 10:00:00",
        "updated_at": "2026-09-27 12:00:00",
        "counts": {
            "participants": 16,
            "courts": 4,
            "matches": 24
        }
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
PATCH /tournaments/{tournamentId} Update tournament configuration tournaments:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
tournamentIdpathintegerObbligatorioTournament identifier.min: 18

Campi del corpo JSON

Supply only the tournament fields that need to change.

ParametroTypeObbligatorioDescrizioneVincoliEsempio
namestringFacoltativoTournament name.Weekend Open
descriptionstringFacoltativostring
categorystringFacoltativoOpen
formatstringFacoltativoenum: single_elimination, round_robin, group_knockout, group_divisions · default: single_eliminationsingle_elimination
entry_typestringFacoltativoenum: player, team · default: playerplayer
start_datestring (date)Facoltativo2026-09-27
end_datestring (date)Facoltativo2026-09-28
venuestringFacoltativoCentral Tennis Club
timezonestringFacoltativoEurope/Brussels
registration_openbooleanFacoltativodefault: falsefalse
max_participantsintegerFacoltativomin: 2 · max: 128 · default: 3232
group_countintegerFacoltativomin: 1 · max: 32 · default: 11
qualifiers_per_groupintegerFacoltativomin: 1 · max: 8 · default: 22
division_countintegerFacoltativomin: 1 · max: 81
sets_to_winintegerFacoltativomin: 1 · max: 3 · default: 22
games_to_win_setintegerFacoltativomin: 1 · max: 12 · default: 66
tie_break_enabledbooleanFacoltativodefault: truetrue
tie_break_at_gamesintegerFacoltativomin: 1 · max: 12 · default: 66
tie_break_pointsintegerFacoltativomin: 3 · max: 30 · default: 77
final_set_rulestringFacoltativoenum: regular_tiebreak, no_tiebreak, super_tiebreak · default: regular_tiebreakregular_tiebreak
final_set_tiebreak_pointsintegerFacoltativomin: 3 · max: 30 · default: 1010
no_ad_scoringbooleanFacoltativodefault: falsefalse
group_sets_to_winintegerFacoltativomin: 1 · max: 3 · default: 11
group_games_to_win_setintegerFacoltativomin: 1 · max: 12 · default: 66
group_tie_break_enabledbooleanFacoltativodefault: truetrue
group_tie_break_at_gamesintegerFacoltativomin: 1 · max: 12 · default: 66
group_tie_break_pointsintegerFacoltativomin: 3 · max: 30 · default: 77
group_no_ad_scoringbooleanFacoltativodefault: falsefalse
minimum_rest_minutesintegerFacoltativomin: 0 · max: 1440 · default: 3030
estimated_match_minutesintegerFacoltativomin: 10 · max: 1440 · default: 6060
schedule_slot_minutesintegerFacoltativomin: 5 · max: 720 · default: 3030
ranking_rulesarray<string>Facoltativo[ "match_wins", "head_to_head", "set_ratio", "game_ratio" ]
statusstringFacoltativoenum: draft, published, in_progress, finisheddraft

Esempio di richiesta

curl -X PATCH "https://mycourtscore.com/api/v1/tournaments/8" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "venue": "Central Tennis Club", "registration_open": true }'

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 8,
        "club_id": 18,
        "name": "Weekend Open",
        "description": "Club tournament",
        "category": "Open",
        "format": "group_divisions",
        "entry_type": "team",
        "status": "published",
        "registration_open": true,
        "max_participants": 16,
        "group_count": 4,
        "qualifiers_per_group": 2,
        "division_count": 2,
        "start_date": "2026-09-27",
        "end_date": "2026-09-28",
        "venue": "Central Tennis Club",
        "timezone": "Europe/Brussels",
        "minimum_rest_minutes": 30,
        "public_url": "https://mycourtscore.com/tournament?t=PUBLIC_TOKEN",
        "created_at": "2026-09-01 10:00:00",
        "updated_at": "2026-09-27 12:00:00"
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
DELETE /tournaments/{tournamentId} Delete and archive a tournament tournaments:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
tournamentIdpathintegerObbligatorioTournament identifier.min: 18

Esempio di richiesta

curl -X DELETE "https://mycourtscore.com/api/v1/tournaments/8" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: request-unique-id"

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 8,
        "deleted": true,
        "deletion_archive_id": 3
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
GET /tournaments/{tournamentId}/participants List tournament participants tournaments:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
tournamentIdpathintegerObbligatorioTournament identifier.min: 18

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/tournaments/8/participants" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": [
        {
            "id": 64,
            "tournament_id": 8,
            "player_id": 42,
            "display_name": "Lucas Martin",
            "member1_name": "",
            "member2_name": "",
            "seed": 1,
            "group": 1,
            "manual_rank": 0,
            "status": "accepted",
            "source": "api"
        }
    ],
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
POST /tournaments/{tournamentId}/participants Add a participant or team tournaments:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 201

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
tournamentIdpathintegerObbligatorioTournament identifier.min: 18

Campi del corpo JSON

Supply display_name or a valid player_id.

ParametroTypeObbligatorioDescrizioneVincoliEsempio
player_idintegerFacoltativo42
display_namestringFacoltativoLucas Martin
member1_namestringFacoltativostring
member2_namestringFacoltativostring
member1_player_idintegerFacoltativo1
member2_player_idintegerFacoltativo1
emailstring (email)Facoltativodeveloper@example.com
seedintegerFacoltativomin: 0 · max: 1281
groupintegerFacoltativomin: 0 · max: 321
manual_rankintegerFacoltativo1
statusstringFacoltativoenum: pending, accepted, rejected · default: acceptedaccepted

Esempio di richiesta

curl -X POST "https://mycourtscore.com/api/v1/tournaments/8/participants" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "display_name": "Player One", "status": "accepted", "seed": 1 }'

Esempio di risposta · HTTP 201

{
    "data": {
        "id": 64,
        "tournament_id": 8,
        "player_id": 42,
        "display_name": "Lucas Martin",
        "member1_name": "",
        "member2_name": "",
        "seed": 1,
        "group": 1,
        "manual_rank": 0,
        "status": "accepted",
        "source": "api"
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
PATCH /tournaments/{tournamentId}/participants/{participantId} Update a participant, seed or group tournaments:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
tournamentIdpathintegerObbligatorioTournament identifier.min: 18
participantIdpathintegerObbligatorioTournament participant identifier.min: 164

Campi del corpo JSON

Supply only the participant fields that need to change.

ParametroTypeObbligatorioDescrizioneVincoliEsempio
player_idintegerFacoltativo42
display_namestringFacoltativoLucas Martin
member1_namestringFacoltativostring
member2_namestringFacoltativostring
member1_player_idintegerFacoltativo1
member2_player_idintegerFacoltativo1
emailstring (email)Facoltativodeveloper@example.com
seedintegerFacoltativomin: 0 · max: 1281
groupintegerFacoltativomin: 0 · max: 321
manual_rankintegerFacoltativo1
statusstringFacoltativoenum: pending, accepted, rejected · default: acceptedaccepted

Esempio di richiesta

curl -X PATCH "https://mycourtscore.com/api/v1/tournaments/8/participants/64" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "seed": 2, "group": 1, "status": "accepted" }'

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 64,
        "tournament_id": 8,
        "player_id": 42,
        "display_name": "Lucas Martin",
        "member1_name": "",
        "member2_name": "",
        "seed": 1,
        "group": 1,
        "manual_rank": 0,
        "status": "accepted",
        "source": "api"
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
DELETE /tournaments/{tournamentId}/participants/{participantId} Remove a participant before draw generation tournaments:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
tournamentIdpathintegerObbligatorioTournament identifier.min: 18
participantIdpathintegerObbligatorioTournament participant identifier.min: 164

Esempio di richiesta

curl -X DELETE "https://mycourtscore.com/api/v1/tournaments/8/participants/64" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: request-unique-id"

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 64,
        "deleted": true
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
GET /tournaments/{tournamentId}/courts List tournament courts tournaments:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
tournamentIdpathintegerObbligatorioTournament identifier.min: 18

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/tournaments/8/courts" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": [
        {
            "id": 5,
            "tournament_id": 8,
            "name": "Court 1",
            "sort_order": 1
        }
    ],
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
POST /tournaments/{tournamentId}/courts Add a tournament court tournaments:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 201

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
tournamentIdpathintegerObbligatorioTournament identifier.min: 18

Campi del corpo JSON

ParametroTypeObbligatorioDescrizioneVincoliEsempio
namestringObbligatorioCourt 1
sort_orderintegerFacoltativomin: 0 · max: 10001

Esempio di richiesta

curl -X POST "https://mycourtscore.com/api/v1/tournaments/8/courts" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "name": "Court 1", "sort_order": 1 }'

Esempio di risposta · HTTP 201

{
    "data": {
        "id": 5,
        "tournament_id": 8,
        "name": "Court 1",
        "sort_order": 1
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
PATCH /tournaments/{tournamentId}/courts/{courtId} Rename or reorder a court tournaments:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
tournamentIdpathintegerObbligatorioTournament identifier.min: 18
courtIdpathintegerObbligatorioTournament court identifier.min: 15

Campi del corpo JSON

ParametroTypeObbligatorioDescrizioneVincoliEsempio
namestringObbligatorioCourt 1
sort_orderintegerFacoltativomin: 0 · max: 10001

Esempio di richiesta

curl -X PATCH "https://mycourtscore.com/api/v1/tournaments/8/courts/5" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "name": "Court 1", "sort_order": 1 }'

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 5,
        "tournament_id": 8,
        "name": "Court 1",
        "sort_order": 1
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
DELETE /tournaments/{tournamentId}/courts/{courtId} Delete an unused tournament court tournaments:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
tournamentIdpathintegerObbligatorioTournament identifier.min: 18
courtIdpathintegerObbligatorioTournament court identifier.min: 15

Esempio di richiesta

curl -X DELETE "https://mycourtscore.com/api/v1/tournaments/8/courts/5" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: request-unique-id"

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 5,
        "deleted": true
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
GET /tournaments/{tournamentId}/matches List draw and scheduled matches tournaments:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
tournamentIdpathintegerObbligatorioTournament identifier.min: 18

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/tournaments/8/matches" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": [
        {
            "id": 91,
            "tournament_id": 8,
            "round_name": "Quarterfinal",
            "round_no": 1,
            "position_no": 1,
            "player1_participant_id": 64,
            "player2_participant_id": 65,
            "player1_name": "Lucas Martin",
            "player2_name": "Nathan Smith",
            "court_id": 5,
            "scheduled_at": "2026-09-27 14:30:00",
            "status": "scheduled",
            "winner_participant_id": 0
        }
    ],
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
PATCH /tournaments/{tournamentId}/matches/{tournamentMatchId} Schedule a match, update its state or declare an outcome tournaments:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
tournamentIdpathintegerObbligatorioTournament identifier.min: 18
tournamentMatchIdpathintegerObbligatorioTournament match identifier.min: 191

Campi del corpo JSON

ParametroTypeObbligatorioDescrizioneVincoliEsempio
court_idintegerFacoltativo1
scheduled_atstringFacoltativoLocal time in the tournament timezone. Send an empty string to unschedule.2026-09-27 14:30
duration_minutesintegerFacoltativomin: 15 · max: 3601
forcebooleanFacoltativoAllow scheduling despite reported conflicts.false
commentstringFacoltativostring
statusstringFacoltativoenum: ready, scheduled, called, warmup, live, suspended, postponed, finished, walkover, retired, no_show, disqualified, cancelledready
winner_participant_idintegerFacoltativo1
outcome_notestringFacoltativostring

Esempio di richiesta

curl -X PATCH "https://mycourtscore.com/api/v1/tournaments/8/matches/91" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '{ "court_id": 1, "scheduled_at": "2026-09-27 14:30", "duration_minutes": 60, "comment": "Scheduled through API" }'

Esempio di risposta · HTTP 200

{
    "data": {
        "id": 91,
        "tournament_id": 8,
        "round_name": "Quarterfinal",
        "round_no": 1,
        "position_no": 1,
        "player1_participant_id": 64,
        "player2_participant_id": 65,
        "player1_name": "Lucas Martin",
        "player2_name": "Nathan Smith",
        "court_id": 5,
        "scheduled_at": "2026-09-27 14:30:00",
        "status": "scheduled",
        "winner_participant_id": 0
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
GET /tournaments/{tournamentId}/standings Read group standings and tie-break details tournaments:read
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
tournamentIdpathintegerObbligatorioTournament identifier.min: 18

Esempio di richiesta

curl -X GET "https://mycourtscore.com/api/v1/tournaments/8/standings" \
  -H "Authorization: Bearer YOUR_API_KEY"

Esempio di risposta · HTTP 200

{
    "data": {
        "groups": [
            {
                "group": 1,
                "rows": [
                    {
                        "rank": 1,
                        "participant_id": 64,
                        "display_name": "Lucas Martin",
                        "played": 3,
                        "won": 3,
                        "lost": 0,
                        "points": 6,
                        "qualified": true
                    }
                ]
            }
        ]
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
POST /tournaments/{tournamentId}/generate-draw Generate group matches or an elimination draw tournaments:write
Proprietà: chiave API esatta
Parametri ed esempiRisposta riuscita · HTTP 200

Parametri della richiesta

ParametroPosizioneTypeObbligatorioDescrizioneVincoliEsempio
AuthorizationheaderstringObbligatorioChiave API Bearer per autenticare la richiesta.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringObbligatorioFormato JSON del corpo della richiesta.application/jsonapplication/json
Idempotency-KeyheaderstringFacoltativoValore univoco consigliato per evitare duplicati dopo un nuovo tentativo di rete.request-unique-id
tournamentIdpathintegerObbligatorioTournament identifier.min: 18

Campi del corpo JSON

ParametroTypeObbligatorioDescrizioneVincoliEsempio
slotsarray<integer>FacoltativoOptional ordered participant IDs for manual knockout placement.[]

Esempio di richiesta

curl -X POST "https://mycourtscore.com/api/v1/tournaments/8/generate-draw" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: request-unique-id" \
  -d '[]'

Esempio di risposta · HTTP 200

{
    "data": [
        {
            "id": 91,
            "tournament_id": 8,
            "round_name": "Quarterfinal",
            "round_no": 1,
            "position_no": 1,
            "player1_participant_id": 64,
            "player2_participant_id": 65,
            "player1_name": "Lucas Martin",
            "player2_name": "Nathan Smith",
            "court_id": 5,
            "scheduled_at": "2026-09-27 14:30:00",
            "status": "scheduled",
            "winner_participant_id": 0
        }
    ],
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}