Une API REST versionnée pour gérer les matchs, les scores live, les joueurs, les clubs et les tournois.
La propriété est vérifiée sur la clé API exacte, et pas uniquement sur le compte développeur ou le compte My Court Score lié.
Conservez une clé stable par intégration et par environnement. Révoquer ou perdre cette clé retire l’accès en écriture aux ressources qu’elle a créées. resource_owned_by_another_api_key · resource_not_created_by_api_key
https://mycourtscore.com/api/v1curl "https://mycourtscore.com/api/v1/me" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"
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.
Propriété stricte : une ressource créée par une clé API ne peut être modifiée, supprimée ou utilisée par une action d’écriture qu’avec cette même clé. Une autre clé du même compte sera refusée.
Les webhooks ne sont pas inclus dans cette première version.
/health
Check API availability
Public
Aucun paramètre à transmettre.
curl -X GET "https://mycourtscore.com/api/v1/health"{
"data": {
"status": "ok",
"version": "v1",
"time": "2026-09-27T14:12:08+00:00"
},
"meta": {
"request_id": "req_01HXYZ123"
}
}/me
Read the developer key identity and linked account
authenticated
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
curl -X GET "https://mycourtscore.com/api/v1/me" \
-H "Authorization: Bearer YOUR_API_KEY"{
"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
List matches visible to the API key
matches:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
page | query | integer | Facultatif | Page number, starting at 1. | 1 | |
per_page | query | integer | Facultatif | Items per page, from 1 to 100. | 25 | |
status | query | string | Facultatif | Filter by match status. | enum: active, finished | active |
q | query | string | Facultatif | Search by player, title, court or match number. | Lucas | |
updated_since | query | string | Facultatif | Only matches updated since this ISO 8601 date and time. | 2026-09-27T12:00:00Z |
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"{
"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
}
}
}/matches
Create a match
matches:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id |
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
title | string | Facultatif | Match title. | Club championship | |
type | string | Facultatif | Match category. | Singles | |
court_name | string | Facultatif | Court 1 | ||
player1 | string | Obligatoire | Displayed name for player 1. Required when player1_id is not supplied. | Lucas Martin | |
player2 | string | Obligatoire | Displayed name for player 2. Required when player2_id is not supplied. | Nathan Smith | |
player1_id | integer | Facultatif | Optional official player identifier. | 42 | |
player2_id | integer | Facultatif | Optional official player identifier. | 57 | |
player1_club_id | integer | Facultatif | 18 | ||
player2_club_id | integer | Facultatif | 18 | ||
sets_to_win | integer | Facultatif | min: 1 · max: 3 · default: 2 | 2 | |
games_to_win_set | integer | Facultatif | min: 1 · max: 12 · default: 6 | 6 | |
tie_break_enabled | boolean | Facultatif | default: true | true | |
tie_break_at_games | integer | Facultatif | min: 1 · max: 12 · default: 6 | 6 | |
tie_break_points | integer | Facultatif | min: 3 · max: 30 · default: 7 | 7 | |
final_set_rule | string | Facultatif | enum: regular_tiebreak, no_tiebreak, super_tiebreak · default: regular_tiebreak | regular_tiebreak | |
final_set_tiebreak_points | integer | Facultatif | min: 3 · max: 30 · default: 10 | 10 | |
no_ad_scoring | boolean | Facultatif | default: false | false | |
advanced_point_mode | boolean | Facultatif | default: false | false | |
livechat_enabled | boolean | Facultatif | default: false | false | |
initial_server | integer | Facultatif | enum: 1, 2 · default: 1 | 1 | |
public_access | string | Facultatif | enum: open, password, hidden · default: open | open | |
public_password | string | Facultatif | Required only when public_access is password. | minLength: 4 | string |
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 }'{
"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"
}
}/matches/{matchId}
Read a match and its current score
matches:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
matchId | path | integer | Obligatoire | My Court Score match identifier. | min: 1 | 125 |
curl -X GET "https://mycourtscore.com/api/v1/matches/125" \
-H "Authorization: Bearer YOUR_API_KEY"{
"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"
}
}/matches/{matchId}
Update match information and rules
matches:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
matchId | path | integer | Obligatoire | My Court Score match identifier. | min: 1 | 125 |
Supply only the match fields that need to change.
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
title | string | Facultatif | Match title. | Club championship | |
type | string | Facultatif | Match category. | Singles | |
court_name | string | Facultatif | Court 1 | ||
player1 | string | Facultatif | Displayed name for player 1. Required when player1_id is not supplied. | Lucas Martin | |
player2 | string | Facultatif | Displayed name for player 2. Required when player2_id is not supplied. | Nathan Smith | |
player1_id | integer | Facultatif | Optional official player identifier. | 42 | |
player2_id | integer | Facultatif | Optional official player identifier. | 57 | |
player1_club_id | integer | Facultatif | 18 | ||
player2_club_id | integer | Facultatif | 18 | ||
sets_to_win | integer | Facultatif | min: 1 · max: 3 · default: 2 | 2 | |
games_to_win_set | integer | Facultatif | min: 1 · max: 12 · default: 6 | 6 | |
tie_break_enabled | boolean | Facultatif | default: true | true | |
tie_break_at_games | integer | Facultatif | min: 1 · max: 12 · default: 6 | 6 | |
tie_break_points | integer | Facultatif | min: 3 · max: 30 · default: 7 | 7 | |
final_set_rule | string | Facultatif | enum: regular_tiebreak, no_tiebreak, super_tiebreak · default: regular_tiebreak | regular_tiebreak | |
final_set_tiebreak_points | integer | Facultatif | min: 3 · max: 30 · default: 10 | 10 | |
no_ad_scoring | boolean | Facultatif | default: false | false | |
advanced_point_mode | boolean | Facultatif | default: false | false | |
livechat_enabled | boolean | Facultatif | default: false | false | |
initial_server | integer | Facultatif | enum: 1, 2 · default: 1 | 1 | |
public_access | string | Facultatif | enum: open, password, hidden · default: open | open | |
public_password | string | Facultatif | Required only when public_access is password. | minLength: 4 | string |
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" }'{
"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"
}
}/matches/{matchId}
Delete an eligible unstarted match
matches:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
matchId | path | integer | Obligatoire | My Court Score match identifier. | min: 1 | 125 |
curl -X DELETE "https://mycourtscore.com/api/v1/matches/125" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: request-unique-id"{
"data": {
"id": 125,
"deleted": true
},
"meta": {
"request_id": "req_01HXYZ123"
}
}/matches/{matchId}/score
Read the live score payload
matches:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
matchId | path | integer | Obligatoire | My Court Score match identifier. | min: 1 | 125 |
curl -X GET "https://mycourtscore.com/api/v1/matches/125/score" \
-H "Authorization: Bearer YOUR_API_KEY"{
"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"
}
}/matches/{matchId}/events
List scoring and administration events
matches:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
matchId | path | integer | Obligatoire | My Court Score match identifier. | min: 1 | 125 |
limit | query | integer | Facultatif | Maximum number of recent events, from 1 to 200. | 50 |
curl -X GET "https://mycourtscore.com/api/v1/matches/125/events?limit=50" \
-H "Authorization: Bearer YOUR_API_KEY"{
"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"
}
}/matches/{matchId}/points
Award a point to player 1 or player 2
score:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
matchId | path | integer | Obligatoire | My Court Score match identifier. | min: 1 | 125 |
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
winner | integer | Obligatoire | enum: 1, 2 | 1 | |
reason | string | Facultatif | enum: normal, ace, winner, forced_error, unforced_error, double_fault, out, net | normal | |
responsible_player | integer | Facultatif | enum: 0, 1, 2 | 0 |
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 }'{
"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"
}
}/matches/{matchId}/undo
Undo the last point
score:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
matchId | path | integer | Obligatoire | My Court Score match identifier. | min: 1 | 125 |
Aucun champ JSON. Envoyez un objet vide {} lorsque le corps est requis.
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 '{}'{
"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"
}
}/matches/{matchId}/server
Change the serving player
score:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
matchId | path | integer | Obligatoire | My Court Score match identifier. | min: 1 | 125 |
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
server | integer | Obligatoire | enum: 1, 2 | 1 |
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 }'{
"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"
}
}/matches/{matchId}/reset
Reset the complete score
score:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
matchId | path | integer | Obligatoire | My Court Score match identifier. | min: 1 | 125 |
Aucun champ JSON. Envoyez un objet vide {} lorsque le corps est requis.
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 '{}'{
"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"
}
}/matches/{matchId}/finish
Finish a match with a declared winner
score:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
matchId | path | integer | Obligatoire | My Court Score match identifier. | min: 1 | 125 |
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
winner | integer | Obligatoire | enum: 1, 2 | 1 |
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 }'{
"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"
}
}/matches/{matchId}/reopen
Reopen a finished match
score:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
matchId | path | integer | Obligatoire | My Court Score match identifier. | min: 1 | 125 |
Aucun champ JSON. Envoyez un objet vide {} lorsque le corps est requis.
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 '{}'{
"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
Search official players or list linked players
players:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
page | query | integer | Facultatif | Page number, starting at 1. | 1 | |
per_page | query | integer | Facultatif | Items per page, from 1 to 100. | 25 | |
q | query | string | Facultatif | Search by name or club. | Lucas | |
mine | query | boolean | Facultatif | Only return the linked primary and secondary players. | true | |
club_id | query | integer | Facultatif | Filter by club. | 18 |
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"{
"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
}
}
}/players
Create the primary player account or a secondary player
players:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id |
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.
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
first_name | string | Obligatoire | Player first name. | Lucas | |
last_name | string | Obligatoire | Player last name. | Martin | |
email | string (email) | Facultatif | Required when creating the primary player account. | lucas@example.com | |
password | string (password) | Facultatif | Required when creating the primary player account. | minLength: 8 | ChangeMe-2026 |
club_id | integer | Facultatif | 18 | ||
club_name | string | Facultatif | Central Tennis Club | ||
federation_number | string | Facultatif | BE-123456 | ||
birth_date | string (date) | Facultatif | 2008-04-12 | ||
phone | string | Facultatif | string | ||
mobile | string | Facultatif | string | ||
city | string | Facultatif | Brussels | ||
country | string | Facultatif | Belgium | ||
notes | string | Facultatif | string | ||
lang | string | Facultatif | enum: fr, en, nl, de, es, it · default: en | en |
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" }'{
"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"
}
}/players/{playerId}
Read a permitted player profile
players:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
playerId | path | integer | Obligatoire | Official or secondary player identifier. | min: 1 | 42 |
curl -X GET "https://mycourtscore.com/api/v1/players/42" \
-H "Authorization: Bearer YOUR_API_KEY"{
"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"
}
}/players/{playerId}
Update a linked player profile
players:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
playerId | path | integer | Obligatoire | Official or secondary player identifier. | min: 1 | 42 |
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
first_name | string | Facultatif | string | ||
last_name | string | Facultatif | string | ||
club_id | integer | Facultatif | 1 | ||
federation_number | string | Facultatif | string | ||
birth_date | string (date) | Facultatif | 2026-09-27 | ||
phone | string | Facultatif | string | ||
mobile | string | Facultatif | string | ||
city | string | Facultatif | string | ||
country | string | Facultatif | string | ||
notes | string | Facultatif | string |
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" }'{
"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"
}
}/players/{playerId}
Delete a linked secondary player
players:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
playerId | path | integer | Obligatoire | Official or secondary player identifier. | min: 1 | 42 |
curl -X DELETE "https://mycourtscore.com/api/v1/players/42" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: request-unique-id"{
"data": {
"id": 42,
"deleted": true
},
"meta": {
"request_id": "req_01HXYZ123"
}
}/clubs
List and search active clubs
clubs:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
page | query | integer | Facultatif | Page number, starting at 1. | 1 | |
per_page | query | integer | Facultatif | Items per page, from 1 to 100. | 25 | |
q | query | string | Facultatif | Search by club name, city or country. | Central |
curl -X GET "https://mycourtscore.com/api/v1/clubs?page=1&per_page=25&q=Central" \
-H "Authorization: Bearer YOUR_API_KEY"{
"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
}
}
}/clubs
Create a club and link the developer account
clubs:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id |
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
club_name | string | Obligatoire | Official club name. | Central Tennis Club | |
short_name | string | Facultatif | CTC | ||
description | string | Facultatif | string | ||
contact_person | string | Facultatif | string | ||
email | string (email) | Obligatoire | club@example.com | ||
password | string (password) | Obligatoire | minLength: 8 | ChangeMe-2026 | |
public_email | string (email) | Facultatif | developer@example.com | ||
phone | string | Facultatif | string | ||
mobile | string | Facultatif | string | ||
address_line1 | string | Facultatif | string | ||
address_line2 | string | Facultatif | string | ||
postal_code | string | Facultatif | string | ||
city | string | Facultatif | Brussels | ||
region | string | Facultatif | string | ||
country | string | Facultatif | Belgium | ||
website | string (uri) | Facultatif | string | ||
federation_name | string | Facultatif | string | ||
registration_number | string | Facultatif | string | ||
timezone | string | Facultatif | Valid IANA timezone. | Europe/Brussels | |
court_count | integer | Facultatif | min: 0 · max: 500 | 4 | |
lang | string | Facultatif | enum: fr, en, nl, de, es, it · default: en | en |
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" }'{
"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"
}
}/clubs/{clubId}
Read public club information
clubs:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
clubId | path | integer | Obligatoire | Club identifier. | min: 1 | 18 |
curl -X GET "https://mycourtscore.com/api/v1/clubs/18" \
-H "Authorization: Bearer YOUR_API_KEY"{
"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"
}
}/clubs/{clubId}
Update the linked club profile
clubs:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
clubId | path | integer | Obligatoire | Club identifier. | min: 1 | 18 |
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
club_name | string | Facultatif | string | ||
short_name | string | Facultatif | string | ||
description | string | Facultatif | string | ||
logo_url | string (uri) | Facultatif | string | ||
contact_person | string | Facultatif | string | ||
public_email | string (email) | Facultatif | developer@example.com | ||
phone | string | Facultatif | string | ||
mobile | string | Facultatif | string | ||
address_line1 | string | Facultatif | string | ||
address_line2 | string | Facultatif | string | ||
postal_code | string | Facultatif | string | ||
city | string | Facultatif | string | ||
region | string | Facultatif | string | ||
country | string | Facultatif | string | ||
website | string (uri) | Facultatif | string | ||
federation_name | string | Facultatif | string | ||
registration_number | string | Facultatif | string | ||
timezone | string | Facultatif | Europe/Brussels | ||
court_count | integer | Facultatif | min: 0 · max: 500 | 1 | |
live_match_visibility | string | Facultatif | enum: forever, until_finished, same_day | forever |
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 }'{
"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"
}
}/clubs/{clubId}/matches
List matches owned by the linked club
matches:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
clubId | path | integer | Obligatoire | Club identifier. | min: 1 | 18 |
page | query | integer | Facultatif | Page number, starting at 1. | 1 | |
per_page | query | integer | Facultatif | Items per page, from 1 to 100. | 25 | |
status | query | string | Facultatif | Filter by match status. | enum: active, finished | active |
q | query | string | Facultatif | Search by player, title or court. | Lucas | |
updated_since | query | string | Facultatif | Only matches updated since this ISO 8601 date and time. | 2026-09-27T12:00:00Z |
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"{
"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
List public or linked-club tournaments
tournaments:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
page | query | integer | Facultatif | Page number, starting at 1. | 1 | |
per_page | query | integer | Facultatif | Items per page, from 1 to 100. | 25 | |
status | query | string | Facultatif | Filter by tournament status. | enum: draft, published, in_progress, finished | published |
q | query | string | Facultatif | Search by name, category or venue. | Weekend Open |
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"{
"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
}
}
}/tournaments
Create a club tournament
tournaments:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id |
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
name | string | Obligatoire | Tournament name. | Weekend Open | |
description | string | Facultatif | string | ||
category | string | Facultatif | Open | ||
format | string | Facultatif | enum: single_elimination, round_robin, group_knockout, group_divisions · default: single_elimination | single_elimination | |
entry_type | string | Facultatif | enum: player, team · default: player | player | |
start_date | string (date) | Obligatoire | 2026-09-27 | ||
end_date | string (date) | Obligatoire | 2026-09-28 | ||
venue | string | Facultatif | Central Tennis Club | ||
timezone | string | Facultatif | Europe/Brussels | ||
registration_open | boolean | Facultatif | default: false | false | |
max_participants | integer | Facultatif | min: 2 · max: 128 · default: 32 | 32 | |
group_count | integer | Facultatif | min: 1 · max: 32 · default: 1 | 1 | |
qualifiers_per_group | integer | Facultatif | min: 1 · max: 8 · default: 2 | 2 | |
division_count | integer | Facultatif | min: 1 · max: 8 | 1 | |
sets_to_win | integer | Facultatif | min: 1 · max: 3 · default: 2 | 2 | |
games_to_win_set | integer | Facultatif | min: 1 · max: 12 · default: 6 | 6 | |
tie_break_enabled | boolean | Facultatif | default: true | true | |
tie_break_at_games | integer | Facultatif | min: 1 · max: 12 · default: 6 | 6 | |
tie_break_points | integer | Facultatif | min: 3 · max: 30 · default: 7 | 7 | |
final_set_rule | string | Facultatif | enum: regular_tiebreak, no_tiebreak, super_tiebreak · default: regular_tiebreak | regular_tiebreak | |
final_set_tiebreak_points | integer | Facultatif | min: 3 · max: 30 · default: 10 | 10 | |
no_ad_scoring | boolean | Facultatif | default: false | false | |
group_sets_to_win | integer | Facultatif | min: 1 · max: 3 · default: 1 | 1 | |
group_games_to_win_set | integer | Facultatif | min: 1 · max: 12 · default: 6 | 6 | |
group_tie_break_enabled | boolean | Facultatif | default: true | true | |
group_tie_break_at_games | integer | Facultatif | min: 1 · max: 12 · default: 6 | 6 | |
group_tie_break_points | integer | Facultatif | min: 3 · max: 30 · default: 7 | 7 | |
group_no_ad_scoring | boolean | Facultatif | default: false | false | |
minimum_rest_minutes | integer | Facultatif | min: 0 · max: 1440 · default: 30 | 30 | |
estimated_match_minutes | integer | Facultatif | min: 10 · max: 1440 · default: 60 | 60 | |
schedule_slot_minutes | integer | Facultatif | min: 5 · max: 720 · default: 30 | 30 | |
ranking_rules | array<string> | Facultatif | [
"match_wins",
"head_to_head",
"set_ratio",
"game_ratio"
] |
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 }'{
"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"
}
}/tournaments/{tournamentId}
Read tournament configuration and counts
tournaments:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
curl -X GET "https://mycourtscore.com/api/v1/tournaments/8" \
-H "Authorization: Bearer YOUR_API_KEY"{
"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"
}
}/tournaments/{tournamentId}
Update tournament configuration
tournaments:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
Supply only the tournament fields that need to change.
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
name | string | Facultatif | Tournament name. | Weekend Open | |
description | string | Facultatif | string | ||
category | string | Facultatif | Open | ||
format | string | Facultatif | enum: single_elimination, round_robin, group_knockout, group_divisions · default: single_elimination | single_elimination | |
entry_type | string | Facultatif | enum: player, team · default: player | player | |
start_date | string (date) | Facultatif | 2026-09-27 | ||
end_date | string (date) | Facultatif | 2026-09-28 | ||
venue | string | Facultatif | Central Tennis Club | ||
timezone | string | Facultatif | Europe/Brussels | ||
registration_open | boolean | Facultatif | default: false | false | |
max_participants | integer | Facultatif | min: 2 · max: 128 · default: 32 | 32 | |
group_count | integer | Facultatif | min: 1 · max: 32 · default: 1 | 1 | |
qualifiers_per_group | integer | Facultatif | min: 1 · max: 8 · default: 2 | 2 | |
division_count | integer | Facultatif | min: 1 · max: 8 | 1 | |
sets_to_win | integer | Facultatif | min: 1 · max: 3 · default: 2 | 2 | |
games_to_win_set | integer | Facultatif | min: 1 · max: 12 · default: 6 | 6 | |
tie_break_enabled | boolean | Facultatif | default: true | true | |
tie_break_at_games | integer | Facultatif | min: 1 · max: 12 · default: 6 | 6 | |
tie_break_points | integer | Facultatif | min: 3 · max: 30 · default: 7 | 7 | |
final_set_rule | string | Facultatif | enum: regular_tiebreak, no_tiebreak, super_tiebreak · default: regular_tiebreak | regular_tiebreak | |
final_set_tiebreak_points | integer | Facultatif | min: 3 · max: 30 · default: 10 | 10 | |
no_ad_scoring | boolean | Facultatif | default: false | false | |
group_sets_to_win | integer | Facultatif | min: 1 · max: 3 · default: 1 | 1 | |
group_games_to_win_set | integer | Facultatif | min: 1 · max: 12 · default: 6 | 6 | |
group_tie_break_enabled | boolean | Facultatif | default: true | true | |
group_tie_break_at_games | integer | Facultatif | min: 1 · max: 12 · default: 6 | 6 | |
group_tie_break_points | integer | Facultatif | min: 3 · max: 30 · default: 7 | 7 | |
group_no_ad_scoring | boolean | Facultatif | default: false | false | |
minimum_rest_minutes | integer | Facultatif | min: 0 · max: 1440 · default: 30 | 30 | |
estimated_match_minutes | integer | Facultatif | min: 10 · max: 1440 · default: 60 | 60 | |
schedule_slot_minutes | integer | Facultatif | min: 5 · max: 720 · default: 30 | 30 | |
ranking_rules | array<string> | Facultatif | [
"match_wins",
"head_to_head",
"set_ratio",
"game_ratio"
] | ||
status | string | Facultatif | enum: draft, published, in_progress, finished | draft |
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 }'{
"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"
}
}/tournaments/{tournamentId}
Delete and archive a tournament
tournaments:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
curl -X DELETE "https://mycourtscore.com/api/v1/tournaments/8" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: request-unique-id"{
"data": {
"id": 8,
"deleted": true,
"deletion_archive_id": 3
},
"meta": {
"request_id": "req_01HXYZ123"
}
}/tournaments/{tournamentId}/participants
List tournament participants
tournaments:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
curl -X GET "https://mycourtscore.com/api/v1/tournaments/8/participants" \
-H "Authorization: Bearer YOUR_API_KEY"{
"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"
}
}/tournaments/{tournamentId}/participants
Add a participant or team
tournaments:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
Supply display_name or a valid player_id.
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
player_id | integer | Facultatif | 42 | ||
display_name | string | Facultatif | Lucas Martin | ||
member1_name | string | Facultatif | string | ||
member2_name | string | Facultatif | string | ||
member1_player_id | integer | Facultatif | 1 | ||
member2_player_id | integer | Facultatif | 1 | ||
email | string (email) | Facultatif | developer@example.com | ||
seed | integer | Facultatif | min: 0 · max: 128 | 1 | |
group | integer | Facultatif | min: 0 · max: 32 | 1 | |
manual_rank | integer | Facultatif | 1 | ||
status | string | Facultatif | enum: pending, accepted, rejected · default: accepted | accepted |
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 }'{
"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"
}
}/tournaments/{tournamentId}/participants/{participantId}
Update a participant, seed or group
tournaments:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
participantId | path | integer | Obligatoire | Tournament participant identifier. | min: 1 | 64 |
Supply only the participant fields that need to change.
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
player_id | integer | Facultatif | 42 | ||
display_name | string | Facultatif | Lucas Martin | ||
member1_name | string | Facultatif | string | ||
member2_name | string | Facultatif | string | ||
member1_player_id | integer | Facultatif | 1 | ||
member2_player_id | integer | Facultatif | 1 | ||
email | string (email) | Facultatif | developer@example.com | ||
seed | integer | Facultatif | min: 0 · max: 128 | 1 | |
group | integer | Facultatif | min: 0 · max: 32 | 1 | |
manual_rank | integer | Facultatif | 1 | ||
status | string | Facultatif | enum: pending, accepted, rejected · default: accepted | accepted |
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" }'{
"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"
}
}/tournaments/{tournamentId}/participants/{participantId}
Remove a participant before draw generation
tournaments:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
participantId | path | integer | Obligatoire | Tournament participant identifier. | min: 1 | 64 |
curl -X DELETE "https://mycourtscore.com/api/v1/tournaments/8/participants/64" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: request-unique-id"{
"data": {
"id": 64,
"deleted": true
},
"meta": {
"request_id": "req_01HXYZ123"
}
}/tournaments/{tournamentId}/courts
List tournament courts
tournaments:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
curl -X GET "https://mycourtscore.com/api/v1/tournaments/8/courts" \
-H "Authorization: Bearer YOUR_API_KEY"{
"data": [
{
"id": 5,
"tournament_id": 8,
"name": "Court 1",
"sort_order": 1
}
],
"meta": {
"request_id": "req_01HXYZ123"
}
}/tournaments/{tournamentId}/courts
Add a tournament court
tournaments:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
name | string | Obligatoire | Court 1 | ||
sort_order | integer | Facultatif | min: 0 · max: 1000 | 1 |
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 }'{
"data": {
"id": 5,
"tournament_id": 8,
"name": "Court 1",
"sort_order": 1
},
"meta": {
"request_id": "req_01HXYZ123"
}
}/tournaments/{tournamentId}/courts/{courtId}
Rename or reorder a court
tournaments:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
courtId | path | integer | Obligatoire | Tournament court identifier. | min: 1 | 5 |
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
name | string | Obligatoire | Court 1 | ||
sort_order | integer | Facultatif | min: 0 · max: 1000 | 1 |
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 }'{
"data": {
"id": 5,
"tournament_id": 8,
"name": "Court 1",
"sort_order": 1
},
"meta": {
"request_id": "req_01HXYZ123"
}
}/tournaments/{tournamentId}/courts/{courtId}
Delete an unused tournament court
tournaments:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
courtId | path | integer | Obligatoire | Tournament court identifier. | min: 1 | 5 |
curl -X DELETE "https://mycourtscore.com/api/v1/tournaments/8/courts/5" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: request-unique-id"{
"data": {
"id": 5,
"deleted": true
},
"meta": {
"request_id": "req_01HXYZ123"
}
}/tournaments/{tournamentId}/matches
List draw and scheduled matches
tournaments:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
curl -X GET "https://mycourtscore.com/api/v1/tournaments/8/matches" \
-H "Authorization: Bearer YOUR_API_KEY"{
"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"
}
}/tournaments/{tournamentId}/matches/{tournamentMatchId}
Schedule a match, update its state or declare an outcome
tournaments:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
tournamentMatchId | path | integer | Obligatoire | Tournament match identifier. | min: 1 | 91 |
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
court_id | integer | Facultatif | 1 | ||
scheduled_at | string | Facultatif | Local time in the tournament timezone. Send an empty string to unschedule. | 2026-09-27 14:30 | |
duration_minutes | integer | Facultatif | min: 15 · max: 360 | 1 | |
force | boolean | Facultatif | Allow scheduling despite reported conflicts. | false | |
comment | string | Facultatif | string | ||
status | string | Facultatif | enum: ready, scheduled, called, warmup, live, suspended, postponed, finished, walkover, retired, no_show, disqualified, cancelled | ready | |
winner_participant_id | integer | Facultatif | 1 | ||
outcome_note | string | Facultatif | string |
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" }'{
"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"
}
}/tournaments/{tournamentId}/standings
Read group standings and tie-break details
tournaments:read
| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
curl -X GET "https://mycourtscore.com/api/v1/tournaments/8/standings" \
-H "Authorization: Bearer YOUR_API_KEY"{
"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"
}
}/tournaments/{tournamentId}/generate-draw
Generate group matches or an elimination draw
tournaments:write| Paramètre | Emplacement | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|---|
Authorization | header | string | Obligatoire | Clé API Bearer utilisée pour authentifier la requête. | Bearer mcs_live_... | Bearer YOUR_API_KEY |
Content-Type | header | string | Obligatoire | Format JSON du corps de la requête. | application/json | application/json |
Idempotency-Key | header | string | Facultatif | Valeur unique recommandée pour éviter un doublon lors d’une nouvelle tentative réseau. | request-unique-id | |
tournamentId | path | integer | Obligatoire | Tournament identifier. | min: 1 | 8 |
| Paramètre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
slots | array<integer> | Facultatif | Optional ordered participant IDs for manual knockout placement. | [] |
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 '[]'{
"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"
}
}