API interne
L'API que le bot expose au site : rôle, sécurité et points d'entrée.
Le bot expose une API HTTP qui tourne dans son propre processus. C'est elle qui permet au site d'afficher des chiffres réels — latence de la passerelle, nombre de serveurs, permissions effectives — puisque seul le bot les connaît. Il n'existe pas d'API publique : celle-ci n'est pas destinée à des applications tierces.
Elle n'écoute pas sur Internet
Par défaut, l'API n'est accessible que depuis la machine du bot (127.0.0.1:8787). Le site l'appelle depuis son serveur, jamais depuis le navigateur : le jeton partagé ne peut donc pas fuir. Ne l'exposez pas publiquement.
Configuration
Le bot et le site partagent un jeton. Il se génère une fois, et doit être identique des deux côtés — sinon l'API répond 401 et la page Statut affiche « Dégradé » en le disant explicitement.
python -c "import secrets; print(secrets.token_urlsafe(48))"
# .env du bot → GS_API_TOKEN=<valeur>
# .env.local du site → BOT_API_TOKEN=<même valeur>Authentification
curl http://127.0.0.1:8787/api/status \
-H "Authorization: Bearer $GS_API_TOKEN"Le jeton est comparé en temps constant. Seule /api/health y échappe : c'est une sonde de disponibilité, elle ne révèle ni latence, ni nombre de serveurs.
Points d'entrée
| Méthode | Route | Description |
|---|---|---|
| GET | /api/health | Sonde de disponibilité (sans jeton) |
| GET | /api/health/bot | État de la passerelle Discord, latence, uptime |
| GET | /api/health/database | Vraie requête SQL et sa latence |
| GET | /api/health/roblox | Joignabilité réelle de l'API Roblox |
| GET | /api/status | Statut complet du bot et de la base |
| GET | /api/commands | Registre des commandes, construit depuis l'arbre réel |
| GET | /api/guilds | Serveurs où le bot est présent |
| GET | /api/guilds/:id | Salons, rôles et permissions du bot |
| GET | /api/guilds/:id/members/:uid | Appartenance et droits réels d'un membre |
| GET | /api/guilds/:id/settings | Réglages réels, module par module |
| PATCH | /api/guilds/:id/settings | Modifier des réglages (validés côté bot) |
| GET | /api/guilds/:id/logs | Journal d'audit, pagination par curseur |
| GET | /api/guilds/:id/roblox | Groupes, correspondances, état de synchro |
| POST | /api/guilds/:id/roblox/sync | Resynchroniser les rôles Roblox |
| POST | /api/verification/session | Ouvrir une session de vérification |
| POST | /api/verification/link | Enregistrer une liaison Discord ↔ Roblox |
| DELETE | /api/verification/:discord_id | Délier un compte et retirer ses rôles |
| GET | /api/support/tickets | Lister les demandes de support |
| POST | /api/support/tickets | Ouvrir une demande |
Ce que l'API ne fait pas
- Elle ne renvoie jamais de secret : ni jeton du bot, ni clé d'IA, ni identifiants Roblox.
- Elle ne vérifie pas les droits de l'utilisateur final : elle fait confiance à son appelant, et c'est précisément pour ça qu'elle reste locale. Le site revalide chaque accès de son côté.
- Elle ne renvoie jamais de trace d'exécution en cas d'erreur — seulement un message court.
Limites de débit
Le site limite ses propres routes /api à 120 requêtes par minute et par adresse (60 pour /api/health, qui déclenche de vraies sondes réseau). Un dépassement renvoie 429 avec l'en-tête Retry-After.