diff --git a/libs/routes/api.js b/libs/routes/api.js
index feebd9c24202ed35cba2d2d07ba73b0a7d9afba5..9911bf10c84a45c3f661be4bcd5fce399f3cff04 100644
--- a/libs/routes/api.js
+++ b/libs/routes/api.js
@@ -1,28 +1,28 @@
 'use strict';
 
-var express = require('express')
-var xml = require('js2xmlparser')
-var router = express.Router()
+const express = require('express');
+const xml = require('js2xmlparser');
+const enrollmentsApp = express();
 
-var libs = process.cwd() + '/libs/'
+const libs = process.cwd() + '/libs/';
 
-var log = require(libs + 'log')(module)
-var config = require(libs + 'config')
+const log = require(libs + 'log')(module);
+const config = require(libs + 'config');
 
-var conn = require(libs + 'db/monet')
+const conn = require(libs + 'db/monet');
 
-router.get('/', function (req, res) {
+enrollmentsApp.get('/', function (req, res) {
     res.json({
         msg: 'SimCAQ API is running'
-    })
-})
+    });
+});
 
 /**
  * Complete range of the enrollments dataset
  *
  * Returns a tuple of start and ending years of the complete enrollments dataset.
  */
-router.get('/year_range', function(req, res) {
+enrollmentsApp.get('/year_range', function(req, res) {
     var yearSql = "SELECT MIN(t.ano_censo) AS start_year, MAX(t.ano_censo) AS end_year FROM turmas AS t";
     conn.query(yearSql, true).then(function(result) {
       if (req.query.format === 'csv') {
@@ -35,16 +35,38 @@ router.get('/year_range', function(req, res) {
             result: result.data
         });
       }
+    }, function(error) {
+        log.error('SQL query error: ${ error.message }?');
+        log.debug(error);
+        res.send('Request could not be satisfied due to an internal error');
     });
-})
+});
+
+enrollmentsApp.get('/education_level', function(req, res) {
+    var edLevelId = "SELECT pk_etapa_ensino_id AS id, desc_etapa AS education_level FROM etapa_ensino";
+    conn.query(edLevelId, true).then(function(result) {
+      if (req.query.format === 'csv') {
+        res.csv(result.data);
+      } else if (req.query.format === 'xml') {
+        res.send(xml("result", JSON.stringify({year_range: result.data})))
+      }
+      else {
+        res.json({
+            result: result.data
+        });
+      }
+    }, function(error) {
+        log.error('SQL query error: ${ error.message }?');
+        log.debug(error);
+        res.send('Request could not be satisfied due to an internal error');
+    });
+});
 
-router.get('/data', function(req, res) {
+enrollmentsApp.get('/data', function(req, res) {
     log.debug(req.query)
     log.debug(req.query.met)
     log.debug(req.query.dim)
-    conn.query(
-        'SELECT * FROM turmas'
-    ).then(function(result) {
+    conn.query('SELECT * FROM turmas LIMIT 5', true).then(function(result) {
       if (req.query.format === 'csv') {
         res.csv(result.data);
       } else if (req.query.format === 'xml') {
@@ -55,10 +77,14 @@ router.get('/data', function(req, res) {
             result: result.data
         });
       }
-    })
+    }, function(error) {
+        log.error('SQL query error: ${ error.message }?');
+        log.debug(error);
+        res.send('Request could not be satisfied due to an internal error');
+    });
 })
 
-router.get('/enrollments', function(req, res, next) {
+enrollmentsApp.use('/enrollments', function(req, res, next) {
     const params = req.query;
     req.paramCnt = 0;
 
@@ -82,10 +108,15 @@ router.get('/enrollments', function(req, res, next) {
         req.paramCnt += 1;
     }
 
+    if (typeof params.education_level_id !== 'undefined') {
+        req.education_level_id = parseInt(params.education_level_id, 10);
+        req.paramCnt += 1;
+    }
+
     next();
 });
 
-router.get('/enrollments', function(req, res, next) {
+enrollmentsApp.use('/enrollments', function(req, res, next) {
     const params = req.query;
     if (typeof params.aggregate !== 'undefined' && params.aggregate === 'region') {
         log.debug('Using enrollments query for regions');
@@ -115,6 +146,12 @@ router.get('/enrollments', function(req, res, next) {
             req.sqlQueryParams.push(req.location_id);
         }
 
+        if (typeof req.education_level_id !== 'undefined') {
+            req.sqlQuery += ' AND ';
+            req.sqlQuery += 't.fk_etapa_ensino_id = ?';
+            req.sqlQueryParams.push(req.education_level_id);
+        }
+
         req.sqlQuery += ')';
         if (typeof req.id !== 'undefined') {
             req.sqlQuery += ' WHERE ';
@@ -126,7 +163,7 @@ router.get('/enrollments', function(req, res, next) {
     next();
 });
 
-router.get('/enrollments', function(req, res, next) {
+enrollmentsApp.use('/enrollments', function(req, res, next) {
     const params = req.query;
     if (typeof params.aggregate !== 'undefined' && params.aggregate === 'state') {
         log.debug('Using enrollments query for states');
@@ -155,6 +192,12 @@ router.get('/enrollments', function(req, res, next) {
             req.sqlQueryParams.push(req.location_id);
         }
 
+        if (typeof req.education_level_id !== 'undefined') {
+            req.sqlQuery += ' AND ';
+            req.sqlQuery += 't.fk_etapa_ensino_id = ?';
+            req.sqlQueryParams.push(req.education_level_id);
+        }
+
         req.sqlQuery += ')';
 
         if (typeof req.id !== 'undefined') {
@@ -168,7 +211,7 @@ router.get('/enrollments', function(req, res, next) {
     next();
 });
 
-router.get('/enrollments', function(req, res, next) {
+enrollmentsApp.use('/enrollments', function(req, res, next) {
     const params = req.query;
     if (typeof params.aggregate !== 'undefined' && params.aggregate === 'city') {
         log.debug('Using enrollments query for cities');
@@ -196,6 +239,12 @@ router.get('/enrollments', function(req, res, next) {
             req.sqlQueryParams.push(req.location_id);
         }
 
+        if (typeof req.education_level_id !== 'undefined') {
+            req.sqlQuery += ' AND ';
+            req.sqlQuery += 't.fk_etapa_ensino_id = ?';
+            req.sqlQueryParams.push(req.education_level_id);
+        }
+
         req.sqlQuery += ')';
 
         if (typeof req.id !== 'undefined') {
@@ -209,7 +258,7 @@ router.get('/enrollments', function(req, res, next) {
     next();
 });
 
-router.get('/enrollments', function(req, res, next) {
+enrollmentsApp.use('/enrollments', function(req, res, next) {
     const params = req.query;
     if (typeof params.aggregate === 'undefined') {
         log.debug('Using enrollments query for the whole country');
@@ -230,7 +279,7 @@ router.get('/enrollments', function(req, res, next) {
             if (req.sqlQueryParams.length > 0) {
                 req.sqlQuery += ' AND ';
             }
-            req.sqlQuery += 't.fk_dependencia_adm = ?';
+            req.sqlQuery += 't.fk_dependencia_adm_id = ?';
             req.sqlQueryParams.push(req.adm_dependency_id);
         }
 
@@ -241,11 +290,19 @@ router.get('/enrollments', function(req, res, next) {
             req.sqlQuery += 't.id_localizacao = ?';
             req.sqlQueryParams.push(req.location_id);
         }
+
+        if (typeof req.education_level_id !== 'undefined') {
+            if (req.sqlQueryParams.length > 0) {
+                req.sqlQuery += ' AND ';
+            }
+            req.sqlQuery += 't.fk_etapa_ensino_id = ?';
+            req.sqlQueryParams.push(req.education_level_id);
+        }
     }
     next();
 });
 
-router.get('/enrollments', function(req, res, next) {
+enrollmentsApp.get('/enrollments', function(req, res, next) {
     log.debug('Request parameters: ${ req }?');
     if (typeof req.sqlQuery === 'undefined') {
         /* Should only happen if there is a bug in the chaining of the
@@ -276,4 +333,4 @@ router.get('/enrollments', function(req, res, next) {
     }
 });
 
-module.exports = router
+module.exports = enrollmentsApp