GET/api/players/:id
Retourne le profil complet d’un joueur.
{
"id": 2,
"pseudo": "Lili_y",
"elo": 1000,
"coins": 250,
"role": "admin",
"is_vip": 1,
"is_vip_plus": 0,
"is_perso": 1,
"avatar": "...",
"banner": "...",
"avatar_decoration": "/decorations/frame.png",
"shape": "circle",
"color": "#ff2d55",
"color_secondary": "#85EBFF",
"pseudo_color": "#ffffff",
"pseudo_color_secondary": "#85EBFF",
"pseudo_font": "barlow",
"pseudo_format": "bold,underline",
"pseudo_rgb": 1,
"elo_curve_color": "#ff2d55",
"elo_curve_color_secondary": "#85EBFF",
"elo_curve_rgb": 1,
"referral_slug": "lili"
}
const player = await fetch('/api/players/2').then(r => r.json());
GET/api/players/:id/elo-history?days=1|7|15
Retourne la courbe ELO compressée sur 1, 7 ou 15 jours. Les historiques des bots incluent leurs parties contre des humains et contre d’autres bots. Chaque point indique aussi la nature de l’adversaire.
{
"generatedAt": "2026-05-16T12:00:00.000Z",
"player": { "id": 2, "pseudo": "Lili_y", "elo": 1012, "wins": 4, "elo_curve_rgb": 1 },
"days": 7,
"points": [{
"gameId": 42,
"finishedAt": "2026-05-16 12:00:00",
"beforeElo": 1000,
"afterElo": 1012,
"delta": 12,
"result": "win",
"opponent": { "id": 7, "pseudo": "P4-Bot-Nova", "isBot": true }
}],
"stats": {
"startElo": 1000, "endElo": 1012, "delta": 12,
"games": 3, "gamesAgainstHumans": 2, "gamesAgainstBots": 1,
"averageElo": 1008
}
}
curl "http://localhost:8080/api/players/2/elo-history?days=7"
GET/api/players/:id/elo-history/export?days=1|7|15&format=json|csv
Télécharge les données brutes du graphique ELO en JSON ou CSV. Le bouton CSV/JSON du profil utilise cet endpoint.
curl -L "http://localhost:8080/api/players/2/elo-history/export?days=7&format=csv" -o elo-history.csv
const file = await fetch('/api/players/2/elo-history/export?days=15&format=json').then(r => r.json());
GET/api/players?type=all|humans|bots&online=1&q=...
Annuaire public des joueurs et bots : ELO, badges, rang, statut online, file et partie active. Utilisé par /players et /bots.
curl "http://localhost:8080/api/players?type=bots"
const bots = await fetch('/api/players?type=bots').then(r => r.json());
GET/api/players/search?q=...&includeBots=0|1
Recherche par pseudo pour le profil et l’autocomplete. Par défaut, seuls les humains sont retournés. includeBots=1 ajoute les bots et chaque résultat expose is_bot pour afficher son badge.
POST/api/players/:id/convert-bot
Transforme un compte non lié Discord en compte bot API. Session joueur obligatoire. Accepte owner, ownerPseudo, ownerId ou creatorId pour associer un créateur humain qui recevra les Cristaux du bot.
GET/api/players/by-pseudo/:pseudo
Lookup direct par pseudo exact.
PATCH/api/players/:id/pseudo
Change le pseudo côté joueur.
await fetch('/api/players/2/pseudo', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ token, pseudo: 'Crystal' })
});
curl -X PATCH http://localhost:8080/api/players/2/pseudo ^
-H "Content-Type: application/json" ^
-d "{\"token\":\"SESSION_TOKEN\",\"pseudo\":\"Crystal\"}"
PATCH/api/players/:id/color
Met à jour la couleur principale du pion, et selon le pack la seconde couleur.
PATCH/api/players/:id/shape
Définit la forme active du pion.
PATCH/api/players/:id/pseudo-style
Met à jour la couleur, le dégradé, la police et la mise en forme du pseudo. format accepte une liste séparée par des virgules parmi bold, italic, underline, lowercase et uppercase. Minuscules et majuscules sont mutuellement exclusives. rgb active la vague colorée animée.
await fetch('/api/players/2/pseudo-style', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
token, color: '#ffffff', colorSecondary: '#85EBFF',
font: 'orbitron', format: 'bold,underline', rgb: true
})
});
PATCH/api/players/:id/elo-curve-style
Met à jour la couleur du graphique ELO. Le champ rgb active une vague RGB animée, réservée au rang Perso.
await fetch('/api/players/2/elo-curve-style', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ token, color: '#ff2d55', colorSecondary: '#85EBFF', rgb: true })
});
PATCH/api/players/:id/custom-role
Met à jour le badge Perso directement depuis le profil joueur. Utilise un texte court, un emoji optionnel et une couleur simple ou en dégradé via colorSecondary.
PATCH/api/players/:id/avatar
Change l’avatar. Erreurs typiques : fichier trop lourd, GIF non autorisé, cooldown VIP/VIP+ actif.
PATCH/api/players/:id/banner
Change la bannière principale du profil.
PATCH/api/players/:id/token-emoji
Définit l’emoji custom ou l’image emoji selon le pack.
PATCH/api/players/:id/custom-cursor
Applique ou retire un curseur PNG 32x32. Fonction réservée au grade Perso, avec token et cursor dans le body.
PATCH/api/players/:id/wallpaper
Applique ou retire un fond personnalisé pour le profil/site. Session joueur obligatoire, payload avec token, image et options de rendu.
PATCH/api/players/:id/avatar-decoration
Applique une décoration d’avatar depuis la bibliothèque serveur.
PATCH/api/players/:id/profile-banner
Applique une bannière pseudo depuis la bibliothèque serveur.
GET/api/decorations
Liste auto des décorations disponibles.
{ "decorations": ["/decorations/a.png", "/decorations/b.png"] }
GET/api/token-collection/catalog
Liste publique des pions secrets, modèles, thèmes et taux de spawn : Commun 49 %, Rare 25 %, Épique 12 %, Légendaire 7 %, Mythique 3,5 %, Artefact 1,5 %, QueenPawn 1 %, Fantastique 0,9 % et Inoubliable 0,1 %.
GET/api/players/:id/token-collection
Retourne la collection publique d’un joueur : quantité par pion secret, doublons, progression, copies, regroupements par rareté et par thème.
Seuls les pions voyageurs alimentent la collection. Réapparition : Joueur 1 h, VIP 30 min, VIP+ 15 min, Perso 10 min. Les petits pions trésors donnent 10 à 50 coins et ont une chance très rare de donner 5 à 10 gemmes, sans remplir la collection.
{
"collection": {
"items": [],
"collectedItems": [],
"rarities": [{ "key": "rare", "total": 8, "collected": 2, "copies": 3 }],
"themes": [{ "label": "Prestige", "total": 8, "collected": 1, "copies": 1 }],
"stats": { "collected": 3, "total": 39, "totalCopies": 4, "duplicates": 1 }
}
}
GET/api/profile-banners
Liste auto des bannières pseudo disponibles.
{ "banners": ["/banners/static.png", "/banners/static2.png"] }
POST/api/players/:id/follow
Suit un joueur.
DELETE/api/players/:id/follow
Retire un follow.
GET/api/players/:id/follow-status
Retourne l’état de follow entre le joueur courant et le profil ciblé.
GET/api/players/:id/status
Retourne l’état live d’un joueur.
POST/api/players/:id/vip-boost
Active le boost premium individuel du joueur courant selon son pack actif.
GET/api/players/:id/vip-boost
Retourne l’état du boost premium individuel : actif, multiplicateur, temps restant, cooldown.
GET/api/referral/me
Retourne le lien de parrainage du joueur, son parrain actif, ses filleuls et les bonus boutique disponibles.
Le filleul obtient une remise boutique, et le parrain profite aussi de son avantage quand le lien a servi au login.
PATCH/api/referral/me
Personnalise le slug de parrainage. Le lien peut ensuite être résolu par id joueur, pseudo ou slug unique.
await fetch('/api/referral/me', {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ token, slug: 'lili' })
});
GET/api/crystal/alert
Lit le message de connexion Crystal du joueur courant : message, emoji, couleur, animation et état d’activation.
POST/api/crystal/alert
Met à jour l’alerte de connexion Crystal affichée une fois à la connexion, pas à chaque changement de page.
PATCH/api/players/:id/queue-music
Sélectionne la musique de file d’attente active du joueur quand la collection est disponible.
DELETE/api/players/:id
Ferme / supprime un compte joueur (session obligatoire). Ce endpoint existe dans le backend et est utilisé par le profil.