diff --git a/src/libs/models/resetToken.js b/src/libs/models/resetToken.js
new file mode 100644
index 0000000000000000000000000000000000000000..78b9f2bd05d2e79d123d9427766eacd52a7673b2
--- /dev/null
+++ b/src/libs/models/resetToken.js
@@ -0,0 +1,42 @@
+const mongoose = require('mongoose');
+const Schema = mongoose.Schema;
+const libs = `${process.cwd()}/libs`;
+const log = require(`${libs}/log`)(module);
+const User = require(`${libs}/models/user`);
+const uuid = require('node-uuid');
+
+let ResetToken = new Schema({
+    userId: {
+        type: Schema.Types.ObjectId,
+        required: true,
+        ref: 'User'
+    },
+    token: {
+        type: String,
+        required: true
+    },
+    reset: {
+        type: Boolean,
+        required: true,
+        default: false
+    },
+    createdAt: {
+        type: Date,
+        required: true,
+        default: Date.now
+    }
+});
+
+ResetToken.methods.createResetToken = function (done) {
+    let verificationToken = this;
+    let token = uuid.v4();
+    ResetToken.set('token', token);
+    ResetToken.reset = false;
+    resetToken.save(function(err) {
+        if (err)
+            return done(err);
+        return done(null, token);
+    })
+}
+
+module.exports = mongoose.model('ResetToken', ResetToken);
diff --git a/src/libs/routes/resetToken.js b/src/libs/routes/resetToken.js
new file mode 100644
index 0000000000000000000000000000000000000000..f2de70118e20375ce0dafa3207b5bfa4e17a0367
--- /dev/null
+++ b/src/libs/routes/resetToken.js
@@ -0,0 +1,70 @@
+const express = require('express');
+
+const resetTokenApp = express.Router();
+
+const libs = `${process.cwd()}/libs`;
+
+const log = require(`${libs}/log`)(module);
+
+const ResetToken = require(`${libs}/models/resetToken`);
+
+const User = require(`${libs}/models/user`);
+
+resetTokenApp.get('/:token', (req, res, next) => {
+    let token = req.params.token;
+    console.log('verificando token');
+    ResetToken.findOne({token: token}, (err, rToken) => {
+        if(err) {
+            log.error(err);
+            return next(err);
+        }
+        if(!rToken) {
+            // TODO: generate new reset token
+            console.log('Token não existe');
+            res.statusCode = 404;
+            return next({msg: 'Token not found', status:404});
+        }
+        User.findById(rToken.userId, (err, user) => {
+            if(err) {
+                log.error(err);
+                next(err);
+            }
+            let u = user.toObject();
+            delete u.salt;
+            delete u.hashedPassword;
+            res.json({user: u});
+        });
+    });
+});
+resetTokenApp.post('/:token', (req, res, next) => {
+    let token = req.params.token;
+    console.log('verificando token');
+    ResetToken.findOne({token: token}, (err, rToken) => {
+        if(err) {
+            log.error(err);
+            return next(err);
+        }
+        if(!rToken) {
+            // TODO: generate new reset token
+            console.log('Token não existe');
+            res.statusCode = 404;
+            return next({msg: 'Token not found', status:404});
+        }
+        User.findById(rToken.userId, (err, user) => {
+            if(err) {
+                log.error(err);
+                next(err);
+            }
+            user.password = req.query.password;
+            user.save((err) => {
+                if(err) {
+                    log.error(err);
+                    next(err);
+                }
+                res.json({msg: "Senha alterada com sucesso"});
+            })
+        });
+    });
+})
+
+module.exports = resetTokenApp;
diff --git a/src/libs/routes/user.js b/src/libs/routes/user.js
index f22f356a58c3e0eb62d4d1b19358a40eed7d5718..4a164230605b6804ea8088fa78cc5ac087947466 100644
--- a/src/libs/routes/user.js
+++ b/src/libs/routes/user.js
@@ -12,6 +12,8 @@ const User = require(`${libs}/models/user`);
 
 const VerificationToken = require(`${libs}/models/verificationToken`);
 
+const ResetToken = require(`${libs}/models/resetToken`);
+
 const response = require(`${libs}/middlewares/response`);
 
 const email = require(`${libs}/middlewares/email`);
@@ -25,7 +27,7 @@ function emailSyntax(email) {
 
 userApp.get('/schooling', (req, res, next) => {
     req.result = [
-        'Não estudou', 
+        'Não estudou',
         'Ensino Fundamental Incompleto',
         'Ensino Fundamental Completo',
         'Ensino Médio',
@@ -173,4 +175,47 @@ userApp.post('/', (req, res, next) => {
     });
 });
 
+userApp.get('/reset-password', (req, res, next) => {
+    let email = req.query.email;
+    User.findOne({email: email}, (err, user)=> {
+        if(err) {
+            log.error(err);
+            let errors = [];
+            for(let errName in err.errors) {
+                errors.push(err.errors[errName].message);
+            }
+            res.statusCode = 400;
+            return res.json({err, errors});
+        }
+        if (!user)
+            res.json({msg: "O usuário não está cadastrado"});
+        else {
+            let resetToken = new ResetToken({
+                userId: user._id
+            });
+            resetToken.createResetToken((err, token) => {
+                if (err) {
+                    log.error(err);
+                    return next(err);
+                }
+                let url = config.default.lde.url + '/reset-password';
+                let text = `Olá, ${user.name}.\n\nRecebemos uma solicitação para redefinir sua senha do Laboratório de Dados Educacionais. Clique neste link para redefinir a sua senha: ${url}/${token}`;
+                let mailOptions = {
+                    to: `"${user.name} <${user.email}>"`,
+                    subject: "Redefinição de Senha - Laboratório de Dados Educacionais",
+                    text
+                }
+                email(mailOptions, (err, info) => {
+                    if(err) {
+                        log.error(err);
+                        res.json({msg: 'Undelivered Reset Password Mail'});
+                    }
+                    log.debug(`Message ${info.messageId} sent: ${info.response}`);
+                    res.json({msg: 'Reset Password Mail Successfully Delivered'});
+                });
+            })
+        }
+    })
+})
+
 module.exports = userApp;