--- title: Référence API description: Documentation détaillée de tous les points de terminaison de l'API Memegoat. --- ## 📖 Référence API Cette page documente tous les points de terminaison disponibles sur l'API Memegoat. L'URL de base de l'API est `https://api.memegoat.fr`. L'authentification est gérée via des **cookies HttpOnly sécurisés** (`iron-session`). Les tokens ne sont pas exposés dans le corps des réponses après connexion pour une sécurité maximale. ### 🔐 Authentification (`/auth`) Inscrit un nouvel utilisateur. **Corps de la requête (JSON) :** - `username` (string) : Nom d'utilisateur unique. - `email` (string) : Adresse email valide. - `password` (string) : Mot de passe (min. 8 caractères). ```json { "username": "goat_user", "email": "user@memegoat.fr", "password": "strong-password" } ``` Authentifie un utilisateur et retourne les jetons de session. Si la 2FA est activée, retourne un indicateur. **Corps de la requête :** - `email` (string) - `password` (string) **Réponse (Succès) :** ```json { "message": "User logged in successfully", "userId": "uuid-v4" } ``` *Note: L'access_token et le refresh_token sont stockés dans un cookie HttpOnly chiffré.* **Réponse (2FA requise) :** ```json { "message": "2FA required", "requires2FA": true, "userId": "uuid-v4" } ``` Finalise la connexion si la 2FA est requise. **Corps de la requête :** - `userId` (uuid) : ID de l'utilisateur. - `token` (string) : Code TOTP à 6 chiffres. Obtient un nouvel `access_token` à partir du `refresh_token` stocké dans la session. Met à jour automatiquement le cookie de session. Invalide la session actuelle. ### 👤 Utilisateurs (`/users`) Récupère les informations détaillées de l'utilisateur connecté. Requiert l'authentification. Récupère le profil public d'un utilisateur par son nom d'utilisateur. **Réponse :** `id`, `username`, `displayName`, `avatarUrl`, `createdAt`. Extrait l'intégralité des données de l'utilisateur au format JSON (Conformité RGPD). Contient le profil, les contenus et les favoris. Met à jour les informations du profil. **Corps :** - `displayName` (string) - `bio` (string) Met à jour l'avatar de l'utilisateur. **Type :** `multipart/form-data` **Champ :** `file` (Image) Met à jour les consentements légaux de l'utilisateur. **Corps :** - `termsVersion` (string) - `privacyVersion` (string) Marque le compte pour suppression (Soft Delete). Les données sont définitivement purgées après un délai légal de 30 jours. Génère un secret et un QR Code pour la configuration de la 2FA. Active la 2FA après vérification du jeton TOTP. Désactive la 2FA en utilisant un jeton TOTP valide. Liste tous les utilisateurs (réservé aux administrateurs). **Query Params :** `limit`, `offset`. Supprime définitivement un utilisateur par son UUID (réservé aux administrateurs). ### 🖼️ Contenus (`/contents`) Recherche et filtre les contenus. Cet endpoint est mis en cache. **Query Params :** - `limit` (number) : Défaut 10. - `offset` (number) : Défaut 0. - `sort` : `trend` | `recent` - `tag` (string) : Filtrer par tag. - `category` (slug ou id) : Filtrer par catégorie. - `author` (username) : Filtrer par auteur. - `query` (titre) : Recherche textuelle. - `favoritesOnly` (bool) : Ne montrer que les favoris de l'utilisateur connecté. - `userId` (uuid) : Filtrer les contenus d'un utilisateur spécifique. Récupère les contenus les plus populaires du moment. Récupère les contenus les plus récents. Récupère un contenu par son ID ou son Slug. **Détection de Bots (SEO) :** Si l'User-Agent correspond à un robot d'indexation (Googlebot, Twitterbot, etc.), l'API retourne un rendu HTML minimal contenant les méta-tags **OpenGraph** et **Twitter Cards** pour un partage optimal. Pour les autres clients, les données sont retournées en JSON. Crée une entrée de contenu (sans upload de fichier direct). Utile pour référencer des URLs externes. **Corps :** `title`, `description`, `url`, `type`, `categoryId`, `tags`. Upload un fichier avec traitement automatique par le serveur. **Type :** `multipart/form-data` **Champs :** - `file` (binary) : png, jpeg, webp, webm, gif. - `type` : `meme` | `gif` - `title` : string - `categoryId`? : uuid - `tags`? : string[] Génère une URL présignée pour un upload direct vers S3. **Query Param :** `fileName` (string). Incrémente le compteur de vues d'un contenu. Incrémente le compteur d'utilisation d'un contenu. Supprime un contenu (Soft Delete). Doit être l'auteur. Supprime définitivement un contenu. **Réservé aux administrateurs.** ### 📂 Catégories (`/categories`) Liste toutes les catégories de mèmes disponibles. Récupère les détails d'une catégorie spécifique. Crée une nouvelle catégorie (**Admin uniquement**). Met à jour une catégorie existante (**Admin uniquement**). Supprime une catégorie (**Admin uniquement**). ### ⭐ Favoris (`/favorites`) Liste les favoris de l'utilisateur connecté. **Query Params :** `limit`, `offset`. Ajoute un contenu aux favoris de l'utilisateur. Retire un contenu des favoris de l'utilisateur. ### 🚩 Signalements (`/reports`) Signale un contenu ou un tag inapproprié. Liste tous les signalements (**Admin/Modérateurs uniquement**). **Query Params :** `limit`, `offset`. Change le statut d'un signalement (`pending`, `resolved`, `dismissed`) (**Admin/Modérateurs uniquement**). ### 🔑 Clés API (`/api-keys`) Génère une nouvelle clé API pour l'utilisateur. **Corps :** `{ name, expiresAt? }`. Liste toutes les clés API actives de l'utilisateur. Révoque une clé API spécifique. ### 🏷️ Tags (`/tags`) Recherche et liste les tags populaires ou récents. **Query Params :** `query`, `sort` (`popular` | `recent`), `limit`, `offset`. ### 🛠️ Système (`/health`) Vérifie l'état de santé de l'API et de ses dépendances (Base de données, Redis, etc.). ### 📁 Médias (`/media`) Accès direct aux fichiers multimédias. **Query Param :** `path` (clé du fichier sur S3). ### 📊 Administration (`/admin`) Récupère les statistiques globales d'utilisation de la plateforme (**Admin uniquement**).