diff --git a/.env b/.env
index b981354fc0ce98f2bce191e2ece716909c215911..31ac94e167f2502a52f2a6a55dd6ebefe18c04a3 100644
--- a/.env
+++ b/.env
@@ -2,6 +2,6 @@ PORT=8000
 INSTANCE=PROD
 HOST=localhost
 USER=root
-PASSWORD=rootroot
+PASSWORD=Comfortablynumb.07
 DB=parameter_database
-AUTH_BASE_URL=
\ No newline at end of file
+AUTH_BASE_URL=http://localhost:3000/users
\ No newline at end of file
diff --git a/src/Controllers/UserController.ts b/src/Controllers/UserController.ts
index 4a630c1d57456d55015284c415b0618971f2cd6b..9b3ab78c12e385f6a7761c0f55821a2cc8a1786d 100644
--- a/src/Controllers/UserController.ts
+++ b/src/Controllers/UserController.ts
@@ -1,42 +1,101 @@
+// TODO: Get rid of all the 'any' mentions
+/* eslint-disable @typescript-eslint/no-explicit-any */
+
 import {
   Handler, Request, Response, Router,
 } from 'express';
+import UserAPI from '../Services/UserAPI';
 
 const router = Router();
 
 const create: Handler = async (req: Request, res: Response) => {
+  try {
+    const user: any = await UserAPI.create(req.body);
+    return res.status(200).send(user);
+  } catch (error) {
+    const e = error as Error;
+    return res.status(400).json({ error: e.message });
+  }
 };
 
 const listUsers: Handler = async (req: Request, res: Response) => {
-
+  try {
+    const userList: any = await UserAPI.listUsers(req.body);
+    return res.status(200).send(userList);
+  } catch (error) {
+    const e = error as Error;
+    return res.status(400).json({ error: e.message });
+  }
 };
 
 const login: Handler = async (req: Request, res: Response) => {
-
+  try {
+    const { token, user }: any = await UserAPI.login(req.body);
+    return res.status(200).send({ token, user });
+  } catch (error) {
+    const e = error as Error;
+    return res.status(400).json({ error: e.message });
+  }
 };
 
 const update: Handler = async (req: Request, res: Response) => {
-
+  try {
+    const user: any = await UserAPI.update(req.body, req.params.id);
+    return res.status(200).send(user);
+  } catch (error) {
+    const e = error as Error;
+    return res.status(400).json({ error: e.message });
+  }
 };
 
 const password: Handler = async (req: Request, res: Response) => {
-
+  try {
+    const user: any = await UserAPI.password(req.body, req.params.id);
+    return res.status(200).send(user);
+  } catch (error) {
+    const e = error as Error;
+    return res.status(400).json({ error: e.message });
+  }
 };
 
 const approve: Handler = async (req: Request, res: Response) => {
-
+  try {
+    const user: any = await UserAPI.approve(req.params.id);
+    return res.status(200).send(user);
+  } catch (error) {
+    const e = error as Error;
+    return res.status(400).json({ error: e.message });
+  }
 };
 
 const cancel: Handler = async (req: Request, res: Response) => {
-
+  try {
+    const user: any = await UserAPI.cancel(req.params.id);
+    return res.status(200).send(user);
+  } catch (error) {
+    const e = error as Error;
+    return res.status(400).json({ error: e.message });
+  }
 };
 
 const giveAdminPermission: Handler = async (req: Request, res: Response) => {
-
+  try {
+    const user: any = await UserAPI.giveAdminPermission(req.params.id);
+    return res.status(200).send(user);
+  } catch (error) {
+    const e = error as Error;
+    return res.status(400).json({ error: e.message });
+  }
 };
 
 const removeAdminPermission: Handler = async (req: Request, res: Response) => {
-
+  try {
+    const user: any = await UserAPI.removeAdminPermission(req.params.id);
+    return res.status(200).send(user);
+  } catch (error) {
+    const e = error as Error;
+    return res.status(400).json({ error: e.message });
+  }
 };
 
 router.post('/', create);
@@ -48,3 +107,5 @@ router.put('/:id/approve', approve);
 router.put('/:id/cancel', cancel);
 router.put('/:id/admin', giveAdminPermission);
 router.put('/:id/client', removeAdminPermission);
+
+export default router;
diff --git a/src/Services/UserAPI.ts b/src/Services/UserAPI.ts
index b0fc01fda0e291f9f43172f880313c1b43196f46..25ca43962e90ca6413136338b48b78374999211f 100644
--- a/src/Services/UserAPI.ts
+++ b/src/Services/UserAPI.ts
@@ -1,3 +1,8 @@
+// TODO: Set according return types and don't use 'any' explicitly. Nor implicitly.
+// Basically don't use 'any' in any context whatsoever. Despite it being the easiest solution.
+
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
+/* eslint-disable @typescript-eslint/no-explicit-any */
 import axios from 'axios';
 
 const instance = axios.create({
@@ -11,7 +16,93 @@ export const validate = (token: string): number => {
       id = (res.data as any).userId as number;
     })
     .catch((err) => {
+      throw (err);
       // if needed implement later
     });
   return id;
 };
+
+const create = (user: any): any => {
+  instance.post('/', user)
+    .then((res) => res)
+    .catch((err) => {
+      throw (err);
+    });
+};
+
+const login = (user: any): any => {
+  instance.post('/login', user)
+    .then((res) => res)
+    .catch((err) => {
+      throw (err);
+    });
+};
+
+const listUsers = (requirements: any): any => {
+  instance.get('/', requirements)
+    .then((res) => res)
+    .catch((err) => {
+      throw (err);
+    });
+};
+
+const update = (user: any, idUser: string) => {
+  const url = `/${idUser}`;
+  instance.put(url, user)
+    .then((res) => res)
+    .catch((err) => {
+      throw (err);
+    });
+};
+
+const password = (user: any, idUser: string) => {
+  instance.put('/password', user, { params: { id: idUser } })
+    .then((res) => res)
+    .catch((err) => {
+      throw (err);
+    });
+};
+
+const approve = (idUser: string) => {
+  instance.put('/approve', { params: { id: idUser } })
+    .then((res) => res)
+    .catch((err) => {
+      throw (err);
+    });
+};
+
+const cancel = (idUser: string) => {
+  instance.put('/cancel', { params: { id: idUser } })
+    .then((res) => res)
+    .catch((err) => {
+      throw (err);
+    });
+};
+
+const giveAdminPermission = (idUser: string) => {
+  instance.put('/admin', { params: { id: idUser } })
+    .then((res) => res)
+    .catch((err) => {
+      throw (err);
+    });
+};
+
+const removeAdminPermission = (idUser: string) => {
+  instance.put('/client', { params: { id: idUser } })
+    .then((res) => res)
+    .catch((err) => {
+      throw (err);
+    });
+};
+
+export default {
+  create,
+  login,
+  listUsers,
+  update,
+  password,
+  approve,
+  cancel,
+  giveAdminPermission,
+  removeAdminPermission,
+};
diff --git a/src/index.ts b/src/index.ts
index a56eac52fb6f265d2dfca9b11713d74c9af33d22..4b81e702516a53ec07d210296ba9f5d3d734d0cd 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -14,6 +14,7 @@ import YAML from 'yamljs';
 import Routes from './routes';
 import logger from './Logger/logger';
 import ParameterDataBaseLoader from './Loaders/ParameterDataBaseLoader';
+import authChecker from './Middlewares/authChecker';
 
 const app: Application = express();
 const PORT = process.env.PORT || 8000;
@@ -38,11 +39,13 @@ app.use(express.raw({
   limit: '50mb',
 }));
 
-const auditMiddleware = (req, res, next) => {
+// TODO: Set according return type. Plus, 'res is declared but never used'
+// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
+const auditMiddleware = (req: Request, res: Response, next: NextFunction) => {
   next();
 };
-app.use(authChecker);
-app.use(auditMiddleware);
+// app.use(authChecker);
+// app.use(auditMiddleware);
 
 app.use(Routes);
 
diff --git a/src/routes.ts b/src/routes.ts
index c0ea909c381728d2b0e3a226166ec8e1f4102f4e..c6d1ccb22b4cdb8982dbf66b0fe8cbefeee9de36 100644
--- a/src/routes.ts
+++ b/src/routes.ts
@@ -2,6 +2,7 @@ import { Request, Response, Router } from 'express';
 import SheetController from './Controllers/SheetController';
 import CalculatorController from './Controllers/CalculatorController';
 import ParameterController from './Controllers/ParameterController';
+import UserController from './Controllers/UserController';
 
 const router = Router();
 
@@ -15,4 +16,6 @@ router.use('/repCalculator', CalculatorController);
 
 router.use('/parameters', ParameterController);
 
+router.use('/users', UserController);
+
 export default router;