Dernière mise à jour :
API
Principes, authentification, URL de base et quelques routes publiques.
Principes#
- API REST en JSON. Toutes les routes sont sous le préfixe /api.
- Les actions temps réel (messages, présence, vocal) passent par une connexion Socket.IO.
- Toutes les permissions sont recalculées côté serveur à chaque requête.
- Les limites de débit renvoient un code 429 (code rate_limited).
URL de base#
<URL_API>/api<URL_API> est l'adresse de l'API de l'instance Pexxoo que tu utilises.
Authentification#
L'application se connecte avec un cookie de session nommé pexo_session, envoyé par le serveur à la connexion. Ce cookie est « httpOnly » (illisible par les scripts de la page), SameSite=Lax, et valable 30 jours par défaut. Les requêtes du navigateur doivent inclure les cookies (credentials: include) et viennent d'une origine autorisée par le serveur (CORS).
- Il n'y a pas de clé d'API à créer.
- Ne partage jamais ton cookie de session : il équivaut à ton mot de passe.
Format des erreurs#
{ "error": { "code": "limit_reached", "message": "…" } }| Code HTTP | Signification |
|---|---|
400 | Requête invalide (code invalid_input). |
401 | Non connecté. |
403 | Permission refusée. |
404 | Ressource introuvable. |
409 | Conflit, par exemple une limite atteinte (code limit_reached). |
410 | Invitation expirée, révoquée ou épuisée. |
429 | Trop de requêtes. |
Routes publiques utiles#
Ces routes ne demandent pas de connexion.
| Route | Description |
|---|---|
GET /api/health | État de l'API. Répond { ok: true, time } avec l'heure du serveur en millisecondes. |
GET /api/invites/:code | Aperçu public d'une invitation : nom, icône, description et nombre de membres du serveur, et si elle est encore valable. Limité à 120 requêtes par minute. |
POST /api/hooks/:serverId/:token | Poster un message via un webhook entrant (le jeton sert d'authentification). |
curl "<URL_API>/api/health"
# {"ok":true,"time":1767225600000}
curl "<URL_API>/api/invites/CODE"{
"invite": {
"code": "CODE",
"server": { "id": "…", "name": "Mon serveur", "memberCount": 42, "online": 7, "requireApproval": false },
"valid": true
}
}L'aperçu est abrégé ci-dessus : il contient aussi l'icône, la couleur, la description et la classification d'âge du serveur. Aucune information personnelle sur les membres n'est exposée.