--- 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. - `POST /users/me/2fa/setup` : Génère un secret et QR Code. - `POST /users/me/2fa/enable` : Active après vérification du jeton. - `POST /users/me/2fa/disable` : Désactive avec jeton. - `GET /users/admin` : Liste tous les utilisateurs (avec pagination `limit`, `offset`). - `DELETE /users/:uuid` : Supprime définitivement un utilisateur par son UUID. ### 🖼️ Contenus (`/contents`) Recherche et filtre les contenus. Ces endpoints sont mis en cache (Redis + Navigateur). **Query Params :** - `limit` (number) : Défaut 10. - `offset` (number) : Défaut 0. - `sort` : `trend` | `recent` (uniquement sur `/explore`) - `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 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 les statistiques de vue ou d'utilisation. Supprime un contenu (Soft Delete). Doit être l'auteur. Supprime définitivement un contenu. **Réservé aux administrateurs.** ### 📂 Catégories, ⭐ Favoris, 🚩 Signalements - `GET /categories` : Liste toutes les catégories. - `GET /categories/:id` : Détails d'une catégorie. - `POST /categories` : Création (Admin uniquement). - `PATCH /categories/:id` : Mise à jour (Admin uniquement). - `DELETE /categories/:id` : Suppression (Admin uniquement). Requiert l'authentification. - `GET /favorites` : Liste les favoris de l'utilisateur (avec pagination `limit`, `offset`). - `POST /favorites/:contentId` : Ajoute un favori. - `DELETE /favorites/:contentId` : Retire un favori. - `POST /reports` : Signale un contenu ou un tag. - `GET /reports` : Liste des signalements (Pagination `limit`, `offset`). **Admin/Modérateurs**. - `PATCH /reports/:id/status` : Change le statut (`pending`, `resolved`, `dismissed`). **Admin/Modérateurs**. ### 🔑 Clés API & 🏷️ Tags - `POST /api-keys` : Génère une clé `{ name, expiresAt? }`. - `GET /api-keys` : Liste les clés actives. - `DELETE /api-keys/:id` : Révoque une clé. - `GET /tags` : Recherche de tags. - **Params :** `query` (recherche), `sort` (`popular` | `recent`), `limit`, `offset`. ### 🛠️ Système & Médias - `GET /health` : Vérifie l'état de l'API et de la connexion à la base de données. - `GET /media/*key` : Accès direct aux fichiers stockés sur S3. Supporte la mise en cache agressive. - `GET /admin/stats` : Récupère les statistiques globales de la plateforme. **Admin uniquement**.