My Court Score Developer Platform

Verbinden Sie Ihre Anwendungen mit Live-Tennis

Eine versionierte REST-API für Matches, Live-Ergebnisse, Spieler, Clubs und Turniere.

Wichtig: Jede Ressource gehört dem API-Schlüssel, der sie erstellt hat

Das Eigentum wird anhand des exakten API-Schlüssels geprüft, nicht nur anhand des Entwicklerkontos oder des verknüpften My Court Score-Kontos.

Beispiel: Schlüssel A erstellt Match 125. Nur Schlüssel A darf es ändern, einen Punkt hinzufügen oder löschen. Schlüssel B wird abgelehnt.

Verwenden Sie einen stabilen Schlüssel pro Integration und Umgebung. Wird er widerrufen oder verloren, entfällt der Schreibzugriff auf die damit erstellten Ressourcen. resource_owned_by_another_api_key · resource_not_created_by_api_key

Entwickler-API

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

Entwicklerkonto erstellen

Erstellen Sie Ihren Entwicklerbereich, um API-Schlüssel zu erzeugen und zu verwalten.

Schnellstart

JSON over HTTPS. All protected calls use a bearer key.
OpenAPI JSON herunterladen
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.

Striktes Eigentum: Eine Ressource darf nur mit genau demselben API-Schlüssel geändert, gelöscht oder durch eine Schreibaktion verwendet werden, der sie erstellt hat.

Webhooks are not included in this first version.

Endpoint-Katalog

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

System

GET /health Check API availability Public
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

Keine Parameter erforderlich.

Beispielanfrage

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

Beispielantwort · 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
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY

Beispielanfrage

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

Beispielantwort · 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
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
pagequeryintegerOptionalPage number, starting at 1.1
per_pagequeryintegerOptionalItems per page, from 1 to 100.25
statusquerystringOptionalFilter by match status.enum: active, finishedactive
qquerystringOptionalSearch by player, title, court or match number.Lucas
updated_sincequerystringOptionalOnly matches updated since this ISO 8601 date and time.2026-09-27T12:00:00Z

Beispielanfrage

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"

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 201

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id

Felder des JSON-Bodys

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
titlestringOptionalMatch title.Club championship
typestringOptionalMatch category.Singles
court_namestringOptionalCourt 1
player1stringPflichtfeldDisplayed name for player 1. Required when player1_id is not supplied.Lucas Martin
player2stringPflichtfeldDisplayed name for player 2. Required when player2_id is not supplied.Nathan Smith
player1_idintegerOptionalOptional official player identifier.42
player2_idintegerOptionalOptional official player identifier.57
player1_club_idintegerOptional18
player2_club_idintegerOptional18
sets_to_winintegerOptionalmin: 1 · max: 3 · default: 22
games_to_win_setintegerOptionalmin: 1 · max: 12 · default: 66
tie_break_enabledbooleanOptionaldefault: truetrue
tie_break_at_gamesintegerOptionalmin: 1 · max: 12 · default: 66
tie_break_pointsintegerOptionalmin: 3 · max: 30 · default: 77
final_set_rulestringOptionalenum: regular_tiebreak, no_tiebreak, super_tiebreak · default: regular_tiebreakregular_tiebreak
final_set_tiebreak_pointsintegerOptionalmin: 3 · max: 30 · default: 1010
no_ad_scoringbooleanOptionaldefault: falsefalse
advanced_point_modebooleanOptionaldefault: falsefalse
livechat_enabledbooleanOptionaldefault: falsefalse
initial_serverintegerOptionalenum: 1, 2 · default: 11
public_accessstringOptionalenum: open, password, hidden · default: openopen
public_passwordstringOptionalRequired only when public_access is password.minLength: 4string

Beispielanfrage

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 }'

Beispielantwort · 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
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
matchIdpathintegerPflichtfeldMy Court Score match identifier.min: 1125

Beispielanfrage

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

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
matchIdpathintegerPflichtfeldMy Court Score match identifier.min: 1125

Felder des JSON-Bodys

Supply only the match fields that need to change.

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
titlestringOptionalMatch title.Club championship
typestringOptionalMatch category.Singles
court_namestringOptionalCourt 1
player1stringOptionalDisplayed name for player 1. Required when player1_id is not supplied.Lucas Martin
player2stringOptionalDisplayed name for player 2. Required when player2_id is not supplied.Nathan Smith
player1_idintegerOptionalOptional official player identifier.42
player2_idintegerOptionalOptional official player identifier.57
player1_club_idintegerOptional18
player2_club_idintegerOptional18
sets_to_winintegerOptionalmin: 1 · max: 3 · default: 22
games_to_win_setintegerOptionalmin: 1 · max: 12 · default: 66
tie_break_enabledbooleanOptionaldefault: truetrue
tie_break_at_gamesintegerOptionalmin: 1 · max: 12 · default: 66
tie_break_pointsintegerOptionalmin: 3 · max: 30 · default: 77
final_set_rulestringOptionalenum: regular_tiebreak, no_tiebreak, super_tiebreak · default: regular_tiebreakregular_tiebreak
final_set_tiebreak_pointsintegerOptionalmin: 3 · max: 30 · default: 1010
no_ad_scoringbooleanOptionaldefault: falsefalse
advanced_point_modebooleanOptionaldefault: falsefalse
livechat_enabledbooleanOptionaldefault: falsefalse
initial_serverintegerOptionalenum: 1, 2 · default: 11
public_accessstringOptionalenum: open, password, hidden · default: openopen
public_passwordstringOptionalRequired only when public_access is password.minLength: 4string

Beispielanfrage

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" }'

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
matchIdpathintegerPflichtfeldMy Court Score match identifier.min: 1125

Beispielanfrage

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

Beispielantwort · 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
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
matchIdpathintegerPflichtfeldMy Court Score match identifier.min: 1125

Beispielanfrage

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

Beispielantwort · 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
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
matchIdpathintegerPflichtfeldMy Court Score match identifier.min: 1125
limitqueryintegerOptionalMaximum number of recent events, from 1 to 200.50

Beispielanfrage

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

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
matchIdpathintegerPflichtfeldMy Court Score match identifier.min: 1125

Felder des JSON-Bodys

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
winnerintegerPflichtfeldenum: 1, 21
reasonstringOptionalenum: normal, ace, winner, forced_error, unforced_error, double_fault, out, netnormal
responsible_playerintegerOptionalenum: 0, 1, 20

Beispielanfrage

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 }'

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
matchIdpathintegerPflichtfeldMy Court Score match identifier.min: 1125

Felder des JSON-Bodys

Keine JSON-Felder. Senden Sie {}, wenn ein Body erforderlich ist.

Beispielanfrage

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 '{}'

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
matchIdpathintegerPflichtfeldMy Court Score match identifier.min: 1125

Felder des JSON-Bodys

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
serverintegerPflichtfeldenum: 1, 21

Beispielanfrage

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 }'

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
matchIdpathintegerPflichtfeldMy Court Score match identifier.min: 1125

Felder des JSON-Bodys

Keine JSON-Felder. Senden Sie {}, wenn ein Body erforderlich ist.

Beispielanfrage

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 '{}'

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
matchIdpathintegerPflichtfeldMy Court Score match identifier.min: 1125

Felder des JSON-Bodys

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
winnerintegerPflichtfeldenum: 1, 21

Beispielanfrage

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 }'

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
matchIdpathintegerPflichtfeldMy Court Score match identifier.min: 1125

Felder des JSON-Bodys

Keine JSON-Felder. Senden Sie {}, wenn ein Body erforderlich ist.

Beispielanfrage

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 '{}'

Beispielantwort · 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
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
pagequeryintegerOptionalPage number, starting at 1.1
per_pagequeryintegerOptionalItems per page, from 1 to 100.25
qquerystringOptionalSearch by name or club.Lucas
minequerybooleanOptionalOnly return the linked primary and secondary players.true
club_idqueryintegerOptionalFilter by club.18

Beispielanfrage

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"

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 201

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id

Felder des JSON-Bodys

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.

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
first_namestringPflichtfeldPlayer first name.Lucas
last_namestringPflichtfeldPlayer last name.Martin
emailstring (email)OptionalRequired when creating the primary player account.lucas@example.com
passwordstring (password)OptionalRequired when creating the primary player account.minLength: 8ChangeMe-2026
club_idintegerOptional18
club_namestringOptionalCentral Tennis Club
federation_numberstringOptionalBE-123456
birth_datestring (date)Optional2008-04-12
phonestringOptionalstring
mobilestringOptionalstring
citystringOptionalBrussels
countrystringOptionalBelgium
notesstringOptionalstring
langstringOptionalenum: fr, en, nl, de, es, it · default: enen

Beispielanfrage

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" }'

Beispielantwort · 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
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
playerIdpathintegerPflichtfeldOfficial or secondary player identifier.min: 142

Beispielanfrage

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

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
playerIdpathintegerPflichtfeldOfficial or secondary player identifier.min: 142

Felder des JSON-Bodys

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
first_namestringOptionalstring
last_namestringOptionalstring
club_idintegerOptional1
federation_numberstringOptionalstring
birth_datestring (date)Optional2026-09-27
phonestringOptionalstring
mobilestringOptionalstring
citystringOptionalstring
countrystringOptionalstring
notesstringOptionalstring

Beispielanfrage

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" }'

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
playerIdpathintegerPflichtfeldOfficial or secondary player identifier.min: 142

Beispielanfrage

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

Beispielantwort · HTTP 200

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

Clubs

GET /clubs List and search active clubs clubs:read
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
pagequeryintegerOptionalPage number, starting at 1.1
per_pagequeryintegerOptionalItems per page, from 1 to 100.25
qquerystringOptionalSearch by club name, city or country.Central

Beispielanfrage

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

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 201

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id

Felder des JSON-Bodys

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
club_namestringPflichtfeldOfficial club name.Central Tennis Club
short_namestringOptionalCTC
descriptionstringOptionalstring
contact_personstringOptionalstring
emailstring (email)Pflichtfeldclub@example.com
passwordstring (password)PflichtfeldminLength: 8ChangeMe-2026
public_emailstring (email)Optionaldeveloper@example.com
phonestringOptionalstring
mobilestringOptionalstring
address_line1stringOptionalstring
address_line2stringOptionalstring
postal_codestringOptionalstring
citystringOptionalBrussels
regionstringOptionalstring
countrystringOptionalBelgium
websitestring (uri)Optionalstring
federation_namestringOptionalstring
registration_numberstringOptionalstring
timezonestringOptionalValid IANA timezone.Europe/Brussels
court_countintegerOptionalmin: 0 · max: 5004
langstringOptionalenum: fr, en, nl, de, es, it · default: enen

Beispielanfrage

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" }'

Beispielantwort · 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
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
clubIdpathintegerPflichtfeldClub identifier.min: 118

Beispielanfrage

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

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
clubIdpathintegerPflichtfeldClub identifier.min: 118

Felder des JSON-Bodys

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
club_namestringOptionalstring
short_namestringOptionalstring
descriptionstringOptionalstring
logo_urlstring (uri)Optionalstring
contact_personstringOptionalstring
public_emailstring (email)Optionaldeveloper@example.com
phonestringOptionalstring
mobilestringOptionalstring
address_line1stringOptionalstring
address_line2stringOptionalstring
postal_codestringOptionalstring
citystringOptionalstring
regionstringOptionalstring
countrystringOptionalstring
websitestring (uri)Optionalstring
federation_namestringOptionalstring
registration_numberstringOptionalstring
timezonestringOptionalEurope/Brussels
court_countintegerOptionalmin: 0 · max: 5001
live_match_visibilitystringOptionalenum: forever, until_finished, same_dayforever

Beispielanfrage

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 }'

Beispielantwort · 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
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
clubIdpathintegerPflichtfeldClub identifier.min: 118
pagequeryintegerOptionalPage number, starting at 1.1
per_pagequeryintegerOptionalItems per page, from 1 to 100.25
statusquerystringOptionalFilter by match status.enum: active, finishedactive
qquerystringOptionalSearch by player, title or court.Lucas
updated_sincequerystringOptionalOnly matches updated since this ISO 8601 date and time.2026-09-27T12:00:00Z

Beispielanfrage

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"

Beispielantwort · 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
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
pagequeryintegerOptionalPage number, starting at 1.1
per_pagequeryintegerOptionalItems per page, from 1 to 100.25
statusquerystringOptionalFilter by tournament status.enum: draft, published, in_progress, finishedpublished
qquerystringOptionalSearch by name, category or venue.Weekend Open

Beispielanfrage

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"

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 201

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id

Felder des JSON-Bodys

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
namestringPflichtfeldTournament name.Weekend Open
descriptionstringOptionalstring
categorystringOptionalOpen
formatstringOptionalenum: single_elimination, round_robin, group_knockout, group_divisions · default: single_eliminationsingle_elimination
entry_typestringOptionalenum: player, team · default: playerplayer
start_datestring (date)Pflichtfeld2026-09-27
end_datestring (date)Pflichtfeld2026-09-28
venuestringOptionalCentral Tennis Club
timezonestringOptionalEurope/Brussels
registration_openbooleanOptionaldefault: falsefalse
max_participantsintegerOptionalmin: 2 · max: 128 · default: 3232
group_countintegerOptionalmin: 1 · max: 32 · default: 11
qualifiers_per_groupintegerOptionalmin: 1 · max: 8 · default: 22
division_countintegerOptionalmin: 1 · max: 81
sets_to_winintegerOptionalmin: 1 · max: 3 · default: 22
games_to_win_setintegerOptionalmin: 1 · max: 12 · default: 66
tie_break_enabledbooleanOptionaldefault: truetrue
tie_break_at_gamesintegerOptionalmin: 1 · max: 12 · default: 66
tie_break_pointsintegerOptionalmin: 3 · max: 30 · default: 77
final_set_rulestringOptionalenum: regular_tiebreak, no_tiebreak, super_tiebreak · default: regular_tiebreakregular_tiebreak
final_set_tiebreak_pointsintegerOptionalmin: 3 · max: 30 · default: 1010
no_ad_scoringbooleanOptionaldefault: falsefalse
group_sets_to_winintegerOptionalmin: 1 · max: 3 · default: 11
group_games_to_win_setintegerOptionalmin: 1 · max: 12 · default: 66
group_tie_break_enabledbooleanOptionaldefault: truetrue
group_tie_break_at_gamesintegerOptionalmin: 1 · max: 12 · default: 66
group_tie_break_pointsintegerOptionalmin: 3 · max: 30 · default: 77
group_no_ad_scoringbooleanOptionaldefault: falsefalse
minimum_rest_minutesintegerOptionalmin: 0 · max: 1440 · default: 3030
estimated_match_minutesintegerOptionalmin: 10 · max: 1440 · default: 6060
schedule_slot_minutesintegerOptionalmin: 5 · max: 720 · default: 3030
ranking_rulesarray<string>Optional[ "match_wins", "head_to_head", "set_ratio", "game_ratio" ]

Beispielanfrage

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 }'

Beispielantwort · 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
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18

Beispielanfrage

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

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18

Felder des JSON-Bodys

Supply only the tournament fields that need to change.

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
namestringOptionalTournament name.Weekend Open
descriptionstringOptionalstring
categorystringOptionalOpen
formatstringOptionalenum: single_elimination, round_robin, group_knockout, group_divisions · default: single_eliminationsingle_elimination
entry_typestringOptionalenum: player, team · default: playerplayer
start_datestring (date)Optional2026-09-27
end_datestring (date)Optional2026-09-28
venuestringOptionalCentral Tennis Club
timezonestringOptionalEurope/Brussels
registration_openbooleanOptionaldefault: falsefalse
max_participantsintegerOptionalmin: 2 · max: 128 · default: 3232
group_countintegerOptionalmin: 1 · max: 32 · default: 11
qualifiers_per_groupintegerOptionalmin: 1 · max: 8 · default: 22
division_countintegerOptionalmin: 1 · max: 81
sets_to_winintegerOptionalmin: 1 · max: 3 · default: 22
games_to_win_setintegerOptionalmin: 1 · max: 12 · default: 66
tie_break_enabledbooleanOptionaldefault: truetrue
tie_break_at_gamesintegerOptionalmin: 1 · max: 12 · default: 66
tie_break_pointsintegerOptionalmin: 3 · max: 30 · default: 77
final_set_rulestringOptionalenum: regular_tiebreak, no_tiebreak, super_tiebreak · default: regular_tiebreakregular_tiebreak
final_set_tiebreak_pointsintegerOptionalmin: 3 · max: 30 · default: 1010
no_ad_scoringbooleanOptionaldefault: falsefalse
group_sets_to_winintegerOptionalmin: 1 · max: 3 · default: 11
group_games_to_win_setintegerOptionalmin: 1 · max: 12 · default: 66
group_tie_break_enabledbooleanOptionaldefault: truetrue
group_tie_break_at_gamesintegerOptionalmin: 1 · max: 12 · default: 66
group_tie_break_pointsintegerOptionalmin: 3 · max: 30 · default: 77
group_no_ad_scoringbooleanOptionaldefault: falsefalse
minimum_rest_minutesintegerOptionalmin: 0 · max: 1440 · default: 3030
estimated_match_minutesintegerOptionalmin: 10 · max: 1440 · default: 6060
schedule_slot_minutesintegerOptionalmin: 5 · max: 720 · default: 3030
ranking_rulesarray<string>Optional[ "match_wins", "head_to_head", "set_ratio", "game_ratio" ]
statusstringOptionalenum: draft, published, in_progress, finisheddraft

Beispielanfrage

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 }'

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18

Beispielanfrage

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

Beispielantwort · 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
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18

Beispielanfrage

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

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 201

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18

Felder des JSON-Bodys

Supply display_name or a valid player_id.

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
player_idintegerOptional42
display_namestringOptionalLucas Martin
member1_namestringOptionalstring
member2_namestringOptionalstring
member1_player_idintegerOptional1
member2_player_idintegerOptional1
emailstring (email)Optionaldeveloper@example.com
seedintegerOptionalmin: 0 · max: 1281
groupintegerOptionalmin: 0 · max: 321
manual_rankintegerOptional1
statusstringOptionalenum: pending, accepted, rejected · default: acceptedaccepted

Beispielanfrage

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 }'

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18
participantIdpathintegerPflichtfeldTournament participant identifier.min: 164

Felder des JSON-Bodys

Supply only the participant fields that need to change.

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
player_idintegerOptional42
display_namestringOptionalLucas Martin
member1_namestringOptionalstring
member2_namestringOptionalstring
member1_player_idintegerOptional1
member2_player_idintegerOptional1
emailstring (email)Optionaldeveloper@example.com
seedintegerOptionalmin: 0 · max: 1281
groupintegerOptionalmin: 0 · max: 321
manual_rankintegerOptional1
statusstringOptionalenum: pending, accepted, rejected · default: acceptedaccepted

Beispielanfrage

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" }'

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18
participantIdpathintegerPflichtfeldTournament participant identifier.min: 164

Beispielanfrage

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

Beispielantwort · HTTP 200

{
    "data": {
        "id": 64,
        "deleted": true
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
GET /tournaments/{tournamentId}/courts List tournament courts tournaments:read
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18

Beispielanfrage

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

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 201

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18

Felder des JSON-Bodys

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
namestringPflichtfeldCourt 1
sort_orderintegerOptionalmin: 0 · max: 10001

Beispielanfrage

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 }'

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18
courtIdpathintegerPflichtfeldTournament court identifier.min: 15

Felder des JSON-Bodys

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
namestringPflichtfeldCourt 1
sort_orderintegerOptionalmin: 0 · max: 10001

Beispielanfrage

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 }'

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18
courtIdpathintegerPflichtfeldTournament court identifier.min: 15

Beispielanfrage

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

Beispielantwort · HTTP 200

{
    "data": {
        "id": 5,
        "deleted": true
    },
    "meta": {
        "request_id": "req_01HXYZ123"
    }
}
GET /tournaments/{tournamentId}/matches List draw and scheduled matches tournaments:read
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18

Beispielanfrage

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

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18
tournamentMatchIdpathintegerPflichtfeldTournament match identifier.min: 191

Felder des JSON-Bodys

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
court_idintegerOptional1
scheduled_atstringOptionalLocal time in the tournament timezone. Send an empty string to unschedule.2026-09-27 14:30
duration_minutesintegerOptionalmin: 15 · max: 3601
forcebooleanOptionalAllow scheduling despite reported conflicts.false
commentstringOptionalstring
statusstringOptionalenum: ready, scheduled, called, warmup, live, suspended, postponed, finished, walkover, retired, no_show, disqualified, cancelledready
winner_participant_idintegerOptional1
outcome_notestringOptionalstring

Beispielanfrage

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" }'

Beispielantwort · 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
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18

Beispielanfrage

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

Beispielantwort · 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
Eigentum: exakter API-Schlüssel
Parameter und BeispieleErfolgreiche Antwort · HTTP 200

Anfrageparameter

ParameterPositionTypePflichtfeldBeschreibungEinschränkungenBeispiel
AuthorizationheaderstringPflichtfeldBearer-API-Schlüssel zur Authentifizierung.Bearer mcs_live_...Bearer YOUR_API_KEY
Content-TypeheaderstringPflichtfeldJSON-Format des Anfragebodys.application/jsonapplication/json
Idempotency-KeyheaderstringOptionalEmpfohlener eindeutiger Wert gegen Duplikate nach einem Netzwerkversuch.request-unique-id
tournamentIdpathintegerPflichtfeldTournament identifier.min: 18

Felder des JSON-Bodys

ParameterTypePflichtfeldBeschreibungEinschränkungenBeispiel
slotsarray<integer>OptionalOptional ordered participant IDs for manual knockout placement.[]

Beispielanfrage

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 '[]'

Beispielantwort · 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"
    }
}