diff --git a/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiBadRequestException.java b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiBadRequestException.java
new file mode 100644
index 0000000000000000000000000000000000000000..645aa797556509d3b61f76edaa9ca32a415b5d6d
--- /dev/null
+++ b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiBadRequestException.java
@@ -0,0 +1,18 @@
+/*
+ * CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL-B
+ * https://cecill.info/licences/Licence_CeCILL-B_V1-fr.html
+ */
+package fr.unistra.sil.erp.back.api.controller;
+
+/**
+ * HTTP error 400 Bad Request for the API.
+ * @author BEAUVAIS ANTOINE
+ */
+public class ApiBadRequestException extends Exception {
+    
+    public ApiBadRequestException(String errMsg)
+    {
+        super(errMsg);
+    }
+    
+}
diff --git a/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiErrorHandler.java b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiErrorHandler.java
index baac2e559ce444e5184be6da2ff5d44e2865c464..749f936e8f2e83b606bf8154f928ea26c90da2ad 100644
--- a/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiErrorHandler.java
+++ b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiErrorHandler.java
@@ -27,4 +27,12 @@ public class ApiErrorHandler {
                 HttpStatus.INTERNAL_SERVER_ERROR);
     }
     
+    @ExceptionHandler(ApiBadRequestException.class)
+    public ResponseEntity<Object> handleBadRequest(Exception ex,
+            HttpServletRequest request, HttpServletResponse response)
+    {
+        return new ResponseEntity<>(new ErrorMessage(ex.getMessage()),
+                HttpStatus.BAD_REQUEST);
+    }
+    
 }
diff --git a/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiRetrieveInfoController.java b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiRetrieveInfoController.java
index c29bfb60b470febd18c14a055d0cbf7a3062c6ec..5607af36681fbae67eb87e0fac25211b14645a51 100644
--- a/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiRetrieveInfoController.java
+++ b/src/main/java/fr/unistra/sil/erp/back/api/controller/ApiRetrieveInfoController.java
@@ -12,7 +12,10 @@ import fr.unistra.sil.erp.back.db.DatabaseInterface;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
@@ -23,12 +26,16 @@ import org.springframework.web.bind.annotation.RestController;
 public class ApiRetrieveInfoController {
     
     /**
-     * Returns an Item as a JSON response.
-     * @return an Item.
+     * Returns all products as a JSON response.
+     * @param cat an optional category.
+     * @return a JSON response.
      * @throws fr.unistra.sil.erp.back.api.controller.ApiServerErrorException
+     * @throws fr.unistra.sil.erp.back.api.controller.ApiBadRequestException
      */
     @GetMapping(MAPPING_RETRIEVEALL)
-    public Object retrieveInfo() throws ApiServerErrorException
+    public ResponseEntity<Object> retrieveInfo(
+            @RequestParam(value = "category", defaultValue = "") String cat
+        ) throws ApiServerErrorException, ApiBadRequestException
     {
         DatabaseInterface db;
         try {
@@ -39,10 +46,27 @@ public class ApiRetrieveInfoController {
             throw new ApiServerErrorException("Failed to connect to database.");
         }
         
-        List<Item> res = db.getAllItems();
+        List<Item> res;
+        if(cat.equals(""))
+            res = db.getAllItems();
+        else
+        {
+            int category;
+            try
+            {
+                category = Integer.parseInt(cat);
+            }
+            catch(NumberFormatException ex)
+            {
+                throw new ApiBadRequestException("Category must be a integer.");
+            }
+            
+            res = db.getItemsFromCategory(category);
+        }
+        
         if(res == null)
             throw new ApiServerErrorException("Failed to query info.");
         
-        return res;
+        return new ResponseEntity<>(res, HttpStatus.OK);
     }
 }
diff --git a/src/main/java/fr/unistra/sil/erp/back/db/DatabaseInterface.java b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseInterface.java
index 7248a26745c9e176edfeac9e8aeeb8501e4ebe0c..645037e0dfcc351cb435cfe846ba67b5712a3734 100644
--- a/src/main/java/fr/unistra/sil/erp/back/db/DatabaseInterface.java
+++ b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseInterface.java
@@ -23,4 +23,11 @@ public interface DatabaseInterface {
      */
     public List<Item> getAllItems();
     
+    /**
+     * Returns the list of all items for a given category.
+     * @param category the category's identifier.
+     * @return the list of items.
+     */
+    public List<Item> getItemsFromCategory(int category);
+    
 }
diff --git a/src/main/java/fr/unistra/sil/erp/back/db/DatabaseSQLiteImpl.java b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseSQLiteImpl.java
index f0d4f92bcf8518c502eb8e3b12d974ef5fc73414..e8f514392fefed0ecb70a9f6b1f32e551418faff 100644
--- a/src/main/java/fr/unistra/sil/erp/back/db/DatabaseSQLiteImpl.java
+++ b/src/main/java/fr/unistra/sil/erp/back/db/DatabaseSQLiteImpl.java
@@ -7,6 +7,7 @@ package fr.unistra.sil.erp.back.db;
 import fr.unistra.sil.erp.back.api.model.Item;
 import java.sql.Connection;
 import java.sql.DriverManager;
+import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
@@ -25,6 +26,9 @@ public class DatabaseSQLiteImpl implements DatabaseInterface {
     private static final String SQL_GETALLITEMS = 
             "SELECT ref, name, price, subscriberPrice, category FROM items";
     
+    private static final String SQL_GETITEMSFROMCATEGORY = SQL_GETALLITEMS +
+            " WHERE category = ?";
+    
     private Connection conn;
     
     public DatabaseSQLiteImpl()
@@ -77,5 +81,54 @@ public class DatabaseSQLiteImpl implements DatabaseInterface {
         
         return res;
     }
+
+    @Override
+    public List<Item> getItemsFromCategory(int category) {
+        
+        PreparedStatement ps;
+        try {
+            ps = this.conn.prepareStatement(
+                    SQL_GETITEMSFROMCATEGORY);
+        } catch (SQLException ex) {
+            Logger.getLogger(DatabaseSQLiteImpl.class.getName()).log(
+                    Level.SEVERE, "Failed to connect to database.", ex);
+            return null;
+        }
+        
+        try {
+            ps.setInt(1, category);
+        } catch (SQLException ex) {
+            Logger.getLogger(DatabaseSQLiteImpl.class.getName()).log(
+                    Level.SEVERE, "Failed to set query parameter.", ex);
+            return null;
+        }
+        
+        ResultSet rs;
+        try {
+            rs = ps.executeQuery();
+        } catch (SQLException ex) {
+            Logger.getLogger(DatabaseSQLiteImpl.class.getName()).log(
+                    Level.SEVERE, "Failed to fetch items for category " +
+                            category, ex);
+            return null;
+        }
+        
+        List<Item> res = new ArrayList<>();
+        try {
+            while(rs.next())
+            {
+                Item item = new Item(rs.getInt("ref"), rs.getString("name"),
+                                     rs.getBigDecimal("price"),
+                                     rs.getBigDecimal("subscriberPrice"),
+                                     rs.getInt("category"));
+                res.add(item);
+            }
+        } catch (SQLException ex) {
+            Logger.getLogger(DatabaseSQLiteImpl.class.getName()).log(
+                    Level.SEVERE, "Failed to parse results.", ex);
+        }
+        
+        return res;
+    }
     
 }