← Retour au guide développeur

Référence générée · v1.0.0

Référence de l'API publique

Générée automatiquement depuis notre spécification OpenAPI — toujours à jour avec les endpoints réellement servis. Importez la spec dans Postman ou votre outil de génération de code.

Base URL : https://www.lacotedazurelympique.frTélécharger la spec OpenAPI (JSON)

Endpoints

post/api/public/scrim-requestsSans auth

Propose un scrim public a une de nos equipes (anti-bot captcha + honeypot).

Corps de la requête

PublicScrimRequestInput

Réponses

StatutSchémaDescription
201objectDemande de scrim enregistree.
400ErrorRequête invalide (validation zod, JSON mal formé, etc.).
404ErrorEquipe cible introuvable.
429ErrorRate-limit dépassé (par-actor ou par-route).
post/api/public/newsletter/subscribeSans auth

Inscription newsletter (double opt-in) — anti-bot captcha + honeypot.

Enregistre (ou re-arme) un abonne `pending` avec un `confirm_token` aleatoire et envoie l'email de confirmation. Reponse toujours generique `{ success: true }` (enumeration-safe) : ne revele jamais si l'adresse existait deja. Un honeypot rempli est silencieusement absorbe (200).

Corps de la requête

PublicNewsletterSubscribeInput

Réponses

StatutSchémaDescription
200objectToujours renvoye tant que la requete est bien formee (succes generique).
400ErrorRequête invalide (validation zod, JSON mal formé, etc.).
429ErrorRate-limit dépassé (par-actor ou par-route).
get/api/public/newsletter/confirmSans auth

Confirme une inscription newsletter (double opt-in) via le lien email.

Cible du lien de confirmation. Passe l'abonne a `confirmed` puis redirige (302) vers `/newsletter/merci`. Token manquant / invalide / introuvable → redirige vers `/newsletter/merci?status=invalid`. Pas de captcha (clic sur un lien).

Paramètres

ParamètreEmplacementTypeDescription
tokenrequisrequêtestringLe `confirm_token` recu par email.

Réponses

StatutSchémaDescription
302Redirection vers la page de remerciement (ou `?status=invalid`).
get/api/public/openapiSans auth

Spécification OpenAPI publique (machine-readable).

Spec OpenAPI 3.1 filtrée à la surface publique (`/api/public/*`), dérivée de la spec canonique `docs/openapi.yaml`. Anonyme, CORS `*`, rate-limitée (120 req/min/IP). `?format=yaml` pour la variante YAML. À importer dans Postman / un générateur de code.

Paramètres

ParamètreEmplacementTypeDescription
formatrequêteenum(json | yaml)

Réponses

StatutSchémaDescription
200objectDocument OpenAPI (JSON par défaut, YAML si demandé).
429ErrorRate-limit dépassé (par-actor ou par-route).
500ErrorErreur serveur non récupérable.
get/api/public/webhook-eventsSans auth

Catalogue public des types d'événements webhook souscriptibles.

Catalogue anonyme des event types qu'un tenant peut recevoir en webhook sortant, + la convention de signature. Dérivé du sous-ensemble PUBLIC des noms d'événements outbox (les événements Discord internes n'y figurent jamais). Anonyme, CORS `*`, edge-caché (`s-maxage=3600`).

Réponses

StatutSchémaDescription
200objectCatalogue d'événements + convention de signature.
429ErrorRate-limit dépassé (par-actor ou par-route).
500ErrorErreur serveur non récupérable.
get/api/public/v1/tournamentsSans auth

Liste des tournois publics (published/running/completed).

Paramètres

ParamètreEmplacementTypeDescription
statusrequêteenum(published | running | completed)
gamerequêtestring
limitrequêteinteger
offsetrequêteinteger

Réponses

StatutSchémaDescription
200objectPage de tournois publics + pagination.
429ErrorRate-limit dépassé (par-actor ou par-route).
500ErrorErreur serveur non récupérable.
get/api/public/v1/tournaments/{id}Sans auth

Détail d'un tournoi public + résumé des stages.

Paramètres

ParamètreEmplacementTypeDescription
idrequischeminstringId (UUID) ou slug du tournoi.

Réponses

StatutSchémaDescription
200objectDétail tournoi.
400ErrorRequête invalide (validation zod, JSON mal formé, etc.).
404ErrorRessource introuvable (UUID inconnu, route inexistante).
429ErrorRate-limit dépassé (par-actor ou par-route).
500ErrorErreur serveur non récupérable.
get/api/public/v1/tournaments/{id}/matchesSans auth

Matches d'un tournoi (overlays de bracket).

Paramètres

ParamètreEmplacementTypeDescription
idrequischeminstringId (UUID) ou slug du tournoi.
stageIdrequêtestring
statusrequêteenum(pending | ongoing | finished)

Réponses

StatutSchémaDescription
200objectListe des matches publics du tournoi.
400ErrorRequête invalide (validation zod, JSON mal formé, etc.).
404ErrorRessource introuvable (UUID inconnu, route inexistante).
429ErrorRate-limit dépassé (par-actor ou par-route).
500ErrorErreur serveur non récupérable.
get/api/public/v1/tournaments/{id}/standingsSans auth

Classement final du tournoi (vide si non finalisé).

Paramètres

ParamètreEmplacementTypeDescription
idrequischeminstringId (UUID) ou slug du tournoi.

Réponses

StatutSchémaDescription
200objectClassement final trié par rank.
400ErrorRequête invalide (validation zod, JSON mal formé, etc.).
404ErrorRessource introuvable (UUID inconnu, route inexistante).
429ErrorRate-limit dépassé (par-actor ou par-route).
500ErrorErreur serveur non récupérable.
get/api/public/v1/tournaments/{id}/arbitrationSans auth

Métriques d'arbitrage agrégées (non-nominatives) du tournoi.

Agrégat de l'activité d'arbitrage (litiges) d'un tournoi public : volume, résolution, respect du SLA, répartition des litiges ouverts. AUCUN identifiant ni raison — que des nombres. 404 si le tournoi n'est pas public (draft / archived / inconnu).

Paramètres

ParamètreEmplacementTypeDescription
idrequischeminstringId (UUID) ou slug du tournoi.

Réponses

StatutSchémaDescription
200objectMétriques d'arbitrage agrégées du tournoi.
400ErrorRequête invalide (validation zod, JSON mal formé, etc.).
404ErrorRessource introuvable (UUID inconnu, route inexistante).
429ErrorRate-limit dépassé (par-actor ou par-route).
500ErrorErreur serveur non récupérable.
post/api/public/v1/matches/{id}/resultToken requis

Pose le score final d'un match (écriture publique authentifiée).

Écriture publique autoritaire (pas de consensus capitaine) — réutilise `applyMatchScore`. Idempotent (`Idempotency-Key`). Requiert le scope `matches:write`.

Paramètres

ParamètreEmplacementTypeDescription
idrequischeminstring <uuid>Id (UUID) du match.

Corps de la requête

PropriétéTypeDescription
team1Scorerequisinteger
team2Scorerequisinteger

Réponses

StatutSchémaDescription
200objectMatch finalisé.
400ErrorRequête invalide (validation zod, JSON mal formé, etc.).
401ErrorAuth manquante ou invalide (clé, session ou bearer).
403ErrorAuthentifié mais rôle/permissions insuffisants.
404ErrorRessource introuvable (UUID inconnu, route inexistante).
409ErrorÉtat incompatible (idempotency mismatch, lock détenu).
429ErrorRate-limit dépassé (par-actor ou par-route).
get/api/public/v1/matches/{id}Sans auth

Détail d'un match public + games (map par map).

Paramètres

ParamètreEmplacementTypeDescription
idrequischeminstring <uuid>Id (UUID) du match.

Réponses

StatutSchémaDescription
200objectDétail match.
400ErrorRequête invalide (validation zod, JSON mal formé, etc.).
404ErrorRessource introuvable (UUID inconnu, route inexistante).
429ErrorRate-limit dépassé (par-actor ou par-route).
500ErrorErreur serveur non récupérable.
get/api/public/v1/teams/{id}Sans auth

Équipe publique + roster public (sans données privées).

Paramètres

ParamètreEmplacementTypeDescription
idrequischeminstringId (UUID) ou slug de l'équipe.

Réponses

StatutSchémaDescription
200objectDétail équipe.
400ErrorRequête invalide (validation zod, JSON mal formé, etc.).
404ErrorRessource introuvable (UUID inconnu, route inexistante).
429ErrorRate-limit dépassé (par-actor ou par-route).
500ErrorErreur serveur non récupérable.
get/api/public/v1/leaderboardSans auth

Classement Glicko-2 public des joueuses.

Paramètres

ParamètreEmplacementTypeDescription
limitrequêteinteger
offsetrequêteinteger

Réponses

StatutSchémaDescription
200objectPage du classement + pagination.
429ErrorRate-limit dépassé (par-actor ou par-route).
500ErrorErreur serveur non récupérable.
get/api/public/v1/players/{userId}Sans auth

Profil public d'une joueuse (rating, historique, H2H, achievements).

Paramètres

ParamètreEmplacementTypeDescription
userIdrequischeminstring <uuid>Id (UUID) de la joueuse.

Réponses

StatutSchémaDescription
200objectProfil joueur.
400ErrorRequête invalide (validation zod, JSON mal formé, etc.).
404ErrorRessource introuvable (UUID inconnu, route inexistante).
429ErrorRate-limit dépassé (par-actor ou par-route).
500ErrorErreur serveur non récupérable.
get/api/public/v1/leaguesSans auth

Liste des leagues publiques.

Réponses

StatutSchémaDescription
200objectLeagues publiques.
429ErrorRate-limit dépassé (par-actor ou par-route).
500ErrorErreur serveur non récupérable.
get/api/public/v1/leagues/{slug}Sans auth

Détail public d'une league (standings + tournois liés).

Paramètres

ParamètreEmplacementTypeDescription
slugrequischeminstring

Réponses

StatutSchémaDescription
200objectDétail league.
400ErrorRequête invalide (validation zod, JSON mal formé, etc.).
404ErrorRessource introuvable (UUID inconnu, route inexistante).
429ErrorRate-limit dépassé (par-actor ou par-route).
500ErrorErreur serveur non récupérable.

Schémas

Error

PropriétéTypeDescription
errorrequisstringMessage lisible côté client.
codestringCode machine (ex. `MISSING_TENANT_ID`, `UNKNOWN_TENANT`).
detailsobject

PublicScrimRequestInput

PropriétéTypeDescription
targetTeamIdstring <uuid>
targetTeamSlugstring
fromTeamNamestring
requesterNamerequisstring
requesterEmailstring <email>
requesterDiscordstring
preferredDatestring <date-time>
formatstring
messagerequisstring
honeypotstringDoit etre vide (anti-bot).
captchaTokenstring
captchaAnswerstring

PublicNewsletterSubscribeInput

PropriétéTypeDescription
emailrequisstring <email>
sourcestringProvenance libre (ex. `footer`, `landing`). Defaut `public`.
honeypotstringDoit etre vide (anti-bot).
captchaTokenstring
captchaAnswerstring

LeaderboardPlayer

PropriétéTypeDescription
userIdrequisstring
displayNamestring | null
battleTagstring | null
avatarUrlstring | null
ratingrequisnumber
rdrequisnumber
gamesPlayedrequisinteger
winsrequisinteger
lossesrequisinteger
rankrequisinteger

PlayerProfileResponse

PropriétéTypeDescription
playerrequisobject
historyrequisarray<object>
recentMatchesrequisarray<object>
h2hrequisarray<object>
achievementsrequisobjectBadges, palmarès (placements en tournoi) et historique de saison dérivés du parcours du joueur par le réducteur pur utils/profile/achievements.ts. Toujours présent (bloc vide si rien à agréger).

League

PropriétéTypeDescription
idrequisstring <uuid>
tenant_idrequisstring <uuid>
namerequisstring
slugrequisstring
descriptionstring | null
gamestring | null
statusrequisenum(draft | active | finished | archived)
start_datestring | null
end_datestring | null
points_tablerequisobject
is_publicrequisboolean
created_atstring
updated_atstring

LeagueDetailResponse

PropriétéTypeDescription
leaguerequisLeague
standingsrequisarray<object>
tournamentsrequisarray<object>

PublicV1Pagination

PropriétéTypeDescription
limitrequisinteger
offsetrequisinteger
countrequisintegerNombre total d'éléments avant pagination (tournois) ou nombre d'éléments retournés dans la page (leaderboard).

PublicV1TournamentSummary

PropriétéTypeDescription
idrequisstring <uuid>
namerequisstring
slugstring | null
gamestring | null
statusrequisstring
start_datestring | null
end_datestring | null
formatstring | null

PublicV1StageSummary

PropriétéTypeDescription
idrequisstring <uuid>
namestring | null
stage_typestring | null
statusrequisstringDérivé de `is_active` (active | inactive).

PublicV1TournamentDetail

any

PublicV1Match

PropriétéTypeDescription
idrequisstring <uuid>
stage_idstring | null
round_numberinteger | null
bracket_sidestring | null
team1_idstring | null
team1_namestring | null
team1_logo_urlstring | nullPublic team logo URL (may be null).
team2_idstring | null
team2_namestring | null
team2_logo_urlstring | nullPublic team logo URL (may be null).
team1_scoreinteger | null
team2_scoreinteger | null
winner_team_idstring | null
statusrequisstring
scheduled_atstring | null

PublicV1MatchGame

PropriétéTypeDescription
map_namestring | null
map_orderinteger | null
team1_scoreinteger | null
team2_scoreinteger | null
winner_team_idstring | null

PublicV1MatchDetail

any

PublicV1Standing

PropriétéTypeDescription
rankrequisinteger
teamIdrequisstring <uuid>
teamNamestring | null
teamSlugstring | null
logoUrlstring | null
prizestring | null

PublicV1ArbitrationMetrics

Métriques d'arbitrage AGRÉGÉES et NON-NOMINATIVES d'un tournoi. Aucun identifiant (équipe / match / joueur), aucune raison de litige : que des compteurs, durées et taux.

PropriétéTypeDescription
totalDisputesrequisintegerMatchs ayant eu un litige (opened_at set OU status=disputed OU résolus).
openrequisintegerLitiges non résolus (status=disputed).
resolvedrequisintegerLitiges avec un timestamp de résolution.
avgResolutionMinutesinteger | nullTemps moyen de résolution (minutes) sur les résolus ; null si aucun.
medianResolutionMinutesinteger | nullTemps médian de résolution (minutes) sur les résolus ; null si aucun.
withinSlaCountrequisintegerLitiges résolus dans le SLA (durée <= slaMinutes).
slaComplianceRatenumber | nullwithinSlaCount / resolved (0..1) ; null si resolved=0.
openBreakdownrequisobjectRépartition SLA des litiges OUVERTS.
slaMinutesrequisintegerFenêtre SLA (minutes) du tenant utilisée pour le calcul.

PublicV1TournamentArbitration

PropriétéTypeDescription
tournamentIdrequisstring <uuid>
tournamentNamerequisstring
tournamentSlugstring | null
metricsrequisPublicV1ArbitrationMetrics

PublicV1TeamMember

PropriétéTypeDescription
display_namestring | null
rolestring | null
is_substituteboolean

PublicV1Team

PropriétéTypeDescription
idrequisstring <uuid>
namerequisstring
short_namestring | null
slugstring | null
logo_urlstring | null
rosterrequisarray<PublicV1TeamMember>

Cette page est générée depuis docs/openapi.yaml à chaque déploiement — elle ne peut pas dériver du comportement réel de l'API.