diff --git a/backend/app.js b/backend/app.js
index 64b035a9ccfcaf2937f06f6b6dfe81adf89a428e..7cc1475b0bcdb0157b2db4283a6a6539a6da153b 100644
--- a/backend/app.js
+++ b/backend/app.js
@@ -5,6 +5,7 @@ var mongoose = require("mongoose");
 var connectMango = require("connect-mongo");
 var cors = require("cors");
 var routesToucan = require("./routes/routesToucan");
+var routesToucanD = require("./routes/routesToucand");
 var routesOauth = require("./routes/routesOauth");
 var env = require("./.env");
 
@@ -32,6 +33,7 @@ app.use(session({
 }));
 app.use("/oauth",routesOauth);
 app.use("/toucan",routesToucan);
+app.use("/toucand",routesToucanD);
 
 
 app.set("port", process.env.PORT || 8000);
diff --git a/backend/routes/routesToucand.js b/backend/routes/routesToucand.js
new file mode 100644
index 0000000000000000000000000000000000000000..6aa7e51aa310af01384c0e05eb291173d124e638
--- /dev/null
+++ b/backend/routes/routesToucand.js
@@ -0,0 +1,153 @@
+var express = require("express");
+var fs = require("fs");
+var path = require("path");
+var { celebrate } = require("celebrate");
+var mongoose = require("mongoose");
+var { newToucan, validId, validGet, validTitle, validURL} = require("../utils/schema");
+var env = require("../.env");
+var isLogged = require("../utils/authentification");
+var upload = require("../utils/fileSaver");
+var Toucan = require("../models/modelToucanD");
+var router = express.Router();
+
+router.route("/toucans")
+/**
+     * Une route qui renvoie un json avec tous les toucans, si limit est défini et vaut n, on renvoie les n derniers toucans
+     * Si before et after sont définis (dates) on ne renvoie qu'entre ces dates
+     */
+    .get(celebrate({query: validGet}),function(req,res) {
+        let optionsDate = {};
+        if (req.query.before){
+            optionsDate.$lt=req.query.before;
+        }
+        if(req.query.after){
+            optionsDate.$gt=req.query.after;
+        }
+        Toucan.find((req.query.before || req.query.after) ? {"date": optionsDate} : null)
+            .sort({date:-1})
+            .limit(req.query.limit)
+            .exec(function (err, toucans) {
+                if (err) {
+                    res.send(err);
+                } else {
+                    res.json(toucans);
+                }
+            });
+    })
+
+    // Une route pour créer un toucan
+    .post(
+        isLogged,
+        upload.fields([{name:"toucan", maxCount:1 }, {name:"cover", maxCount:1 }]),
+        celebrate({body:newToucan}),
+        function(req,res) {
+            if(Object.keys(req.files).length!==2){   // Vérifie qu'il y a 2 fichiers envoyés
+                res.status(400).send("Il manque un fichier");
+            } else {
+                var toucan = new Toucan(req.body);
+                var id = (toucan._id).toString();
+                var index;
+                // On renome les fichier avec la clé de l'entrée dans la database
+                for (index in req.files) {
+                    var file = req.files[index][0];
+                    var extension = path.extname(file.path);
+                    var newPath = file.destination+"/"+id+extension;
+                    fs.rename(file.path,newPath, err => {
+                        if (err) {
+                            res.status(400).send(err);
+                        }
+                    });
+                }
+                toucan.save(function(err) {
+                    if (err) {
+                        res.status(400).send(err);
+                    } else {
+                        res.send({message: "Toucan ajouté !", id: id});
+                    }
+                });
+            }});
+
+// Supprime le toucan avec l'id donné
+router.route("/delete/:id")
+    .post(
+        isLogged,
+        celebrate({params: validId}),
+        function(req,res) {
+            Toucan.deleteOne({_id:req.params.id},
+                function(err) {
+                    if (err) {
+                        res.send(500).send(err);
+                    } else {    // Si on a supprimée l'entrée, on supprime le pdf
+                        var pdfPath = path.format({
+                            dir: env.savedExtensions[1].path,
+                            name: req.params.id,
+                            ext: ".pdf"
+                        });
+                        fs.unlink(pdfPath, (err) => {
+                            if (err) {
+                                res.status(500).send(err);
+                            } else {    // Si on a supprimé le pdf on supprime l'image
+                                var imgPath = path.join(env.savedExtensions[0].path,"/",req.params.id);
+                                env.savedExtensions[0].extensions.forEach(ext => {
+                                    if (fs.existsSync(imgPath+ext)){
+                                        imgPath = imgPath+ext;
+                                        fs.unlink(imgPath, (err) => {
+                                            if (err) {
+                                                res.status(500).send(err);
+                                            } else {
+                                                res.send("Toucan supprimé");
+                                            }
+                                        });
+                                    }
+                                });
+                            }
+                        });
+                    }
+                });
+        });
+
+// Renvoie la cover du toucan avec l'id donné
+router.route("/img/:id")
+    .get(celebrate({params: validId}),function(req,res) {
+        var imgPath = path.resolve(env.savedExtensions[0].path,req.params.id);
+        var fileKnown = false;
+        env.savedExtensions[0].extensions.forEach(ext => {
+            if (fs.existsSync(imgPath+ext)){
+                imgPath = imgPath+ext;
+                fileKnown = true;
+            }
+        });
+        if (fileKnown) {
+            res.sendFile(imgPath);
+        } else {
+            res.send(404,"Image non trouvée");
+        }
+    });
+
+
+router.get('/pdf/:year/:title', (req, res) => {
+    var title = req.params.title;
+    var year = parseInt(req.params.year);
+    var nextyear = year + 1;
+    var title = new RegExp((title.split("-")).join("."));
+    console.log(title);
+
+    Toucan.find(
+        {
+            title : { $regex: title, $options : 'i' },
+            date : {
+            $gte: new Date(year+"-01-01T00:00:00.000Z"),
+            $lt: new Date(nextyear+"-01-01T00:00:00.000Z"),
+            } 
+        })
+        .exec(function (err, toucan) {
+            if (err) {res.send(err);} 
+            else {
+            const id = toucan[0]._id;
+            res.sendFile(path.resolve(env.savedExtensions[1].path,id+".pdf"));
+            }
+            });
+});
+
+    
+module.exports = router;
\ No newline at end of file