2 API-REST
Claude edited this page 2026-05-16 12:31:26 +02:00

API REST

Toutes les routes sont préfixées /api/ sauf /files/ (serving) et /ws (WebSocket).

Authentification : header Authorization: Bearer <access_token> sur tous les endpoints protégés.


Authentification — /api/auth/

Méthode Endpoint Corps Description
POST /register {username, email, password} Créer un compte
POST /login {username, password} Connexion → {access_token, refresh_token}
POST /refresh {refresh_token} Renouveler l'access token
POST /logout {refresh_token} Invalider le refresh token
GET /me Profil de l'utilisateur connecté

Utilisateur — /api/users/

Méthode Endpoint Description
GET /me Profil (username, email, realname, is_admin)
PUT /me Modifier profil {username?, email?, realname?}
PUT /me/password Changer mot de passe {current_password, new_password}
GET /me/keywords Liste des mots-clés de notification
PUT /me/keywords {keywords: [...]}
GET /me/notification-prefs {highlights, private_messages, keywords}
PUT /me/notification-prefs Modifier les préférences
GET /me/ui-preferences Préférences UI synchronisées
PUT /me/ui-preferences Sauvegarder les préférences UI
GET /me/theme Thème actif + overrides
POST /me/theme Appliquer un thème {theme_id}
PUT /me/theme/overrides Surcharges CSS custom {tokens: {...}}
DELETE /me/theme/overrides Supprimer les surcharges

Réseaux IRC — /api/networks/

Méthode Endpoint Description
GET / Liste des réseaux
POST / Créer {name, host, port, use_tls, nick, realname, auto_connect}
PUT /{id} Modifier
DELETE /{id} Supprimer
POST /{id}/connect Se connecter
POST /{id}/disconnect Se déconnecter
GET /{id}/whois/{nick} Infos WHOIS

Channels — /api/networks/{id}/

Méthode Endpoint Description
GET /channels Channels rejoints + DMs
GET /channels/{channel}/members [{nick, mode, realname}]
GET /unread Compteurs non-lus par target

Messages — /api/messages/

Méthode Endpoint Description
GET /{network_id}/{target} Historique ?limit=50&before=<id>
GET /highlights Toutes les mentions ?limit=100
GET /privates Conversations privées
GET /search Recherche ?q=...&network_id=...
POST /read Marquer lu {network_id, target}

Fichiers — /api/files/

Méthode Endpoint Auth Description
GET /providers Oui Providers disponibles
GET / Oui Mes fichiers
POST /upload?provider=<name> Oui Upload multipart/form-data
DELETE /{file_id} Oui Supprimer
GET /files/{uuid}.ext Non Servir un fichier (inline pour images/PDF)

Notifications Push — /api/push/

Méthode Endpoint Description
GET /vapid-public-key Clé publique VAPID
POST /subscribe {endpoint, p256dh, auth, user_agent}
DELETE /unsubscribe {endpoint}
GET /subscriptions Mes subscriptions actives
POST /active Keep-alive (toutes les 25s)

Scripts — /api/scripts/

Méthode Endpoint Description
GET / Mes scripts
POST / Créer {name, code, network_id?}
PUT /{id} Modifier
DELETE /{id} Supprimer
POST /{id}/toggle Activer/désactiver
POST /test Dry-run {code, event, context: {nick, chan, message}}

Thèmes — /api/themes/

Méthode Endpoint Description
GET /marketplace Thèmes communautaires
GET / Mes thèmes
POST / Créer {name, tokens: {...}}
PUT /{id} Modifier
DELETE /{id} Supprimer
POST /install Installer depuis marketplace
POST /import Importer JSON
GET /{id}/export Exporter JSON

Plugins — /api/plugins/

Méthode Endpoint Description
GET /marketplace Marketplace
GET / Plugins installés
POST /install {plugin_id, version, source_url}
POST /uninstall/{id} Désinstaller
POST /reload/{id} Recharger sans redémarrer
POST /{id}/toggle Activer/désactiver
GET /{id}/audit Logs d'audit

Administration — /api/admin/ (is_admin requis)

Méthode Endpoint Description
GET /overview Statistiques globales
GET /users Tous les utilisateurs
GET /users/{id} Détails
POST /users/{id}/toggle Activer/désactiver
POST /users/{id}/make-admin Promouvoir admin
DELETE /users/{id} Supprimer
GET /settings Paramètres système
PUT /settings Modifier {key, value}
DELETE /settings/{key} Supprimer
GET /connections Connexions IRC actives
DELETE /connections/{user_id}/{network_id} Forcer déconnexion

WebSocket — ws://host/ws?token=<access_token>

Événements reçus (serveur → client)

Type data Description
MESSAGE {target, by, message, realname, is_private} Message IRC
JOIN {channel, user, realname} Quelqu'un a rejoint
PART {channel, user, message} Quelqu'un a quitté
QUIT {user, message} Déconnexion IRC
MODE {channel, nick, mode, set} Mode utilisateur changé
TOPIC {channel, topic, by} Topic modifié
KICK {channel, target, by, reason} Kick
NOTICE {target, by, message} Notice IRC
SERVER_MSG {message} Message serveur (MOTD…)
MEMBERS_UPDATED {channel} Liste membres à recharger
CONNECT Connecté au réseau
DISCONNECT Déconnecté du réseau
ERROR {message} Erreur
SCRIPT_OUTPUT {data} Sortie d'un script NoxScript

Commandes envoyées (client → serveur)

type Champs Description
MESSAGE {network_id, target, content} Envoyer un message
JOIN {network_id, channel} Rejoindre un channel
PART {network_id, channel} Quitter un channel
COMMAND {network_id, raw} Commande IRC brute