diff --git a/WEB-INF/src/API/ControleurRestCampusTalk.java b/WEB-INF/src/API/ControleurRestCampusTalk.java
new file mode 100644
index 0000000000000000000000000000000000000000..d65cde513fb9b19dfb1be53a97cec9369cd17179
--- /dev/null
+++ b/WEB-INF/src/API/ControleurRestCampusTalk.java
@@ -0,0 +1,65 @@
+package API;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import dao.ThreadDAO;
+import dao.UserDAO;
+import dto.Message;
+import dto.MyThread;
+import dto.User;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+@WebServlet("/CampusTalkDatas/*")
+public class ControleurRestCampusTalk extends HttpServlet {
+    private final ObjectMapper objectMapper = new ObjectMapper();
+    private final UserDAO userDao = new UserDAO();
+    private final ThreadDAO threadDao = new ThreadDAO();
+
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
+        res.setContentType("application/json;charset=UTF-8");
+        PrintWriter out = res.getWriter();
+
+        String pathInfo = req.getPathInfo();
+
+        List<MyThread> threadsFollowed = new ArrayList<>();
+
+        if (pathInfo == null || pathInfo.equals("/")) {
+            List<User> users = userDao.getAllUsers();
+            out.println(objectMapper.writeValueAsString(users));
+        } else {
+            try {
+                int id = Integer.parseInt(pathInfo.substring(1));
+                User user = userDao.getUserById(id);
+                List<Integer> threadsId = userDao.getThreadsFollowedByUser(user);
+
+
+                for (Integer thId: threadsId) {
+                    MyThread th = threadDao.getThreadById(thId);
+                    threadsFollowed.add(th);
+                }
+
+                if (user != null) {
+                        out.println(objectMapper.writeValueAsString(threadsFollowed));
+                } else {
+                    res.sendError(HttpServletResponse.SC_NOT_FOUND, "User not found");
+                }
+            } catch (NumberFormatException e) {
+                res.sendError(HttpServletResponse.SC_BAD_REQUEST, "invalid ID");
+            } catch (SQLException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        out.close();
+    }
+}
\ No newline at end of file
diff --git a/doc/doc_appli.md b/doc/doc_appli.md
index 6311f473cc73f983c04e20a88600c96ddb8bf4e8..5b36b531747bbb6f14e71f2f5748282abb921d91 100644
--- a/doc/doc_appli.md
+++ b/doc/doc_appli.md
@@ -17,7 +17,7 @@ L'application est reliée à une **base de données** qui est la source de l'aff
 
 - **Modèle Conceptuel de Données** : 
 
-![MCD réalisé](/doc/mcd_sae.png)
+![MCD réalisé](./mcd_sae.png)
 
 - **Modèle Logique de données** :
 
@@ -151,60 +151,65 @@ Nous avons uniquement utilisé des servlets sur ce projet. Pour une meilleure li
 
 *Le nom de la servlet représente son entrée, chacune vérifient si l'utilisateur est connecté et enregistré dans la session. Si ce n'est pas le cas (par exemple si la page a été bookmarkée et visitée a posteriori, une fois la session échue), les servlet redirigent toutes vers l'écran de connexion.*
 
-`http://localhost:8080/s4a021-web-backend/`**Account**
+`http://localhost:8080/s4a021-web-backend/Account`
 
 - Permet de gérer les informations du compte de l'utilisateur (changer son mot de passe ou supprimer son compte)
 
-`http://localhost:8080/s4a021-web-backend/`**DeleteAccount**
+`http://localhost:8080/s4a021-web-backend/DeleteAccount`
 
 - Est appelée par **Account** lorsque l'utilisateur supprime son compte.
 
-`http://localhost:8080/s4a021-web-backend/`**Discover**
+`http://localhost:8080/s4a021-web-backend/Discover`
 
 - Affiche tous les fils de discussion, sans prendre en compte si l'utilisateur connecté les suit déjà ou non. Un bouton *Follow* ou *Followed* permet d'indiquer à l'utilisateur s'il suit le fil affiché. 
 
-`http://localhost:8080/s4a021-web-backend/`**Welcome**
+`http://localhost:8080/s4a021-web-backend/Welcome`
 
 - Affiche le fil d'actualité de l'utilisateur avec les messages des fils de discussion auxquels il est abonné. L'utilisateur peut réagir aux messages avec un bouton *Like* ou *Unlike*.
 - L'utilisateur peut poster un message dans un fil de dicussion en dessous de chaque message affiché sur son feed. 
 
-`http://localhost:8080/s4a021-web-backend/`**Following**
+`http://localhost:8080/s4a021-web-backend/Following`
 
 - Affiche la liste des fils de discussion auxquels l'utilisateur connecté est abonné, et depuis combien de temps il les suit.
 
-`http://localhost:8080/s4a021-web-backend/`**FollowThread**
+`http://localhost:8080/s4a021-web-backend/FollowThread`
 
 - N'affiche rien et exécute seulement du code lorsqu'elle est appelée dans **Discover**.
 - Avec les paramètres d'un formulaire envoyé en POST, une requête est exécutée pour enregistrer l'abonnement de l'utilisateur à un fil de discussion, puis la servlet redirige vers la page d'origine.
 
-`http://localhost:8080/s4a021-web-backend/`**LikeMessage**
+`http://localhost:8080/s4a021-web-backend/LikeMessage`
 
 - N'affiche rien et exécute seulement du code lorsqu'elle est appelée dans **Feed**.
 - Comme pour **FollowThread**, avec les paramètres d'un formulaire envoyé en POST, une requête est exécutée pour enregistrer la réaction de l'utilisateur à un message d'un fil de discussion, puis la servlet redirige vers la page d'origine.
 
-`http://localhost:8080/s4a021-web-backend/`**LogIn**
+`http://localhost:8080/s4a021-web-backend/LogIn`
 
 - N'affiche rien et exécute du code lorsqu'elle reçoit les paramètres du formulaire de connexion de la page `index.html`.
 - Vérifie si l'utilisateur existe bien dans la base de données et si oui, elle redirige vers la page **Welcome**. Si non, elle indique une erreur.
 - Si le login ou le mot de passe est vide, la page affiche un message d'erreur en indiquant qu'il est nécessaire, et permet de revenir sur le formulaire de connexion.
 
-`http://localhost:8080/s4a021-web-backend/`**NewThread**
+`http://localhost:8080/s4a021-web-backend/NewThread`
 
 - Affiche un formulaire de création de fil de discussion avec un premier message à poster dedans. Quand le formulaire est envoyé, la page s'appelle elle-même pour exécuter la requête de création et affiche un message de validation si tout a bien fonctionné.
 
-`http://localhost:8080/s4a021-web-backend/`**PageGeneration**
+`http://localhost:8080/s4a021-web-backend/PageGeneration`
 
 - Ce contrôleur n'est pas une servlet, seulement une classe Java avec une seule méthode statique permettant de générer le menu de navigation pour éviter la redondance d'écriture HTML.
 
-`http://localhost:8080/s4a021-web-backend/`**PostMessage**
+`http://localhost:8080/s4a021-web-backend/PostMessage`
 
 - N'affiche rien et exécute le code nécessaire à l'exécution d'une requête d'envoi de message dans un fil de discussion. 
 - Elle peut être appelée par **Welcome** quand un utilisateur poste un message dans un fil qu'il suit, ou dans **NewThread** quand il crée un nouveau fil.
 
-`http://localhost:8080/s4a021-web-backend/`**SignUp**
+`http://localhost:8080/s4a021-web-backend/SignUp`
 
 - Similairement à **LogIn**, n'affiche rien mais vérifie que le nouveau compte envoyé dans le formulaire de `create.html` n'existe pas dans la base de donnée. S'il n'existe pas déjà, elle exécute la requête de création d'utilisateur. Sinon, elle affiche un message d'information et permet de revenir sur l'écran de connexion.
 
+### API Rest
+
+`http://localhost:8080/s4a021-web-backend/CampusTalkDatas/x` (Où `x` est l'id d'un utilisateur)
+
+- Permet un appel REST en GET renvoyant en JSON les Threads suivis par l'utilisateur ayant pour id : `x`
 
 ## Points techniques difficiles et comment ils ont été réglés