diff --git a/client/src/actions/cities.ts b/client/src/actions/cities.ts
index 59f8be983260eec6f4e46e39d8218e2b5c8243eb..17fb90854cb61b6a0a76861d8b427721eea1230d 100644
--- a/client/src/actions/cities.ts
+++ b/client/src/actions/cities.ts
@@ -13,15 +13,17 @@ export const getCities = () => async (dispatch: AppDispatch) => {
     .then((res) => {
       dispatch({
         type: Types.SET_CITIES,
-        payload: res.data.items,
+        payload: res.data,
       })
+
+      const pagination = JSON.parse(res.headers.pagination)
       dispatch({
-        type: Types.SET_CITIES_COUNT,
-        payload: res.data.total_count,
+        type: Types.SET_CITIES_TOTAL,
+        payload: pagination.total,
       })
       dispatch({
-        type: Types.SET_CITIES_TOTAL,
-        payload: res.data.count,
+        type: Types.SET_CITIES_COUNT,
+        payload: pagination.total <= pagination.page_size ? pagination.total : pagination.page_size,
       })
     })
     .catch((err) => console.log(err))
diff --git a/client/src/actions/competitionLogin.ts b/client/src/actions/competitionLogin.ts
index 42a050532ef5ebe571eeb6ab67a3d8eaf1fa0129..b2198f74698f8fb7b40acd10f7a2b2c64ebb66d7 100644
--- a/client/src/actions/competitionLogin.ts
+++ b/client/src/actions/competitionLogin.ts
@@ -15,7 +15,7 @@ export const loginCompetition = (code: string, history: History, redirect: boole
 ) => {
   dispatch({ type: Types.LOADING_COMPETITION_LOGIN })
   await axios
-    .post('/api/auth/login/code', { code })
+    .post('/api/auth/code', { code })
     .then((res) => {
       const token = `Bearer ${res.data.access_token}`
       localStorage.setItem(`${res.data.view}Token`, token) //setting token to local storage
diff --git a/client/src/actions/competitions.ts b/client/src/actions/competitions.ts
index 64fd11e1a61614e30296f685bf85eac8700e7a96..04ac133c38b53513f7f19bb0d2e290d5430aad94 100644
--- a/client/src/actions/competitions.ts
+++ b/client/src/actions/competitions.ts
@@ -24,15 +24,16 @@ export const getCompetitions = () => async (dispatch: AppDispatch, getState: ()
     .then((res) => {
       dispatch({
         type: Types.SET_COMPETITIONS,
-        payload: res.data.items,
+        payload: res.data,
       })
+      const pagination = JSON.parse(res.headers.pagination)
       dispatch({
         type: Types.SET_COMPETITIONS_TOTAL,
-        payload: res.data.total_count,
+        payload: pagination.total,
       })
       dispatch({
         type: Types.SET_COMPETITIONS_COUNT,
-        payload: res.data.count,
+        payload: pagination.total <= pagination.page_size ? pagination.total : pagination.page_size,
       })
     })
     .catch((err) => {
diff --git a/client/src/actions/roles.ts b/client/src/actions/roles.ts
index 68b86b30e415daa1c5b00470fb5e86b1cb10bd74..810e13b1437ef0465039a89ea0b65dbbac3c3cb6 100644
--- a/client/src/actions/roles.ts
+++ b/client/src/actions/roles.ts
@@ -13,7 +13,7 @@ export const getRoles = () => async (dispatch: AppDispatch) => {
     .then((res) => {
       dispatch({
         type: Types.SET_ROLES,
-        payload: res.data.items,
+        payload: res.data,
       })
     })
     .catch((err) => console.log(err))
diff --git a/client/src/actions/searchUser.ts b/client/src/actions/searchUser.ts
index d47d4dd0903f57e1e298418bb72f43122b90407f..00f88c046c4c4d92afe400b063b4b8bed40cd87a 100644
--- a/client/src/actions/searchUser.ts
+++ b/client/src/actions/searchUser.ts
@@ -24,15 +24,17 @@ export const getSearchUsers = () => async (dispatch: AppDispatch, getState: () =
     .then((res) => {
       dispatch({
         type: Types.SET_SEARCH_USERS,
-        payload: res.data.items,
+        payload: res.data,
       })
+
+      const pagination = JSON.parse(res.headers.pagination)
       dispatch({
         type: Types.SET_SEARCH_USERS_TOTAL_COUNT,
-        payload: res.data.total_count,
+        payload: pagination.total,
       })
       dispatch({
         type: Types.SET_SEARCH_USERS_COUNT,
-        payload: res.data.count,
+        payload: pagination.total <= pagination.page_size ? pagination.total : pagination.page_size,
       })
     })
     .catch((err) => {
diff --git a/client/src/pages/admin/competitions/CompetitionManager.tsx b/client/src/pages/admin/competitions/CompetitionManager.tsx
index 0545102893ce342878602972d63c1dbe879ac59a..7d4266cd9790ca54652b2cd4c5072ee39dcae7ec 100644
--- a/client/src/pages/admin/competitions/CompetitionManager.tsx
+++ b/client/src/pages/admin/competitions/CompetitionManager.tsx
@@ -344,8 +344,8 @@ const CompetitionManager: React.FC = (props: any) => {
         rowsPerPageOptions={[]}
         rowsPerPage={filterParams.pageSize}
         count={competitionTotal}
-        page={filterParams.page}
-        onChangePage={(event, newPage) => handleFilterChange({ ...filterParams, page: newPage })}
+        page={filterParams.page - 1}
+        onChangePage={(event, newPage) => handleFilterChange({ ...filterParams, page: newPage + 1 })}
       />
       <Menu id="simple-menu" anchorEl={anchorEl} keepMounted open={Boolean(anchorEl)} onClose={handleClose}>
         <MenuItem onClick={handleStartCompetition}>Starta</MenuItem>
diff --git a/client/src/pages/admin/users/AddUser.tsx b/client/src/pages/admin/users/AddUser.tsx
index 05f5745c94dc58d6f851556b9571f4aeff7c45ac..cde3fa322dd236edbac13b664dfdafe3985bc56f 100644
--- a/client/src/pages/admin/users/AddUser.tsx
+++ b/client/src/pages/admin/users/AddUser.tsx
@@ -59,7 +59,7 @@ const AddUser: React.FC = (props: any) => {
       role_id: selectedRole?.id as number,
     }
     await axios
-      .post('/api/auth/signup', params)
+      .post('/api/users', params)
       .then(() => {
         actions.resetForm()
         setAnchorEl(null)
diff --git a/client/src/pages/admin/users/EditUser.tsx b/client/src/pages/admin/users/EditUser.tsx
index 44375e4a8b5382996ecf20720865bdf1ac161fde..9e9d5d2a1d61d235abf715f6c4075bd5f4439ffa 100644
--- a/client/src/pages/admin/users/EditUser.tsx
+++ b/client/src/pages/admin/users/EditUser.tsx
@@ -14,7 +14,7 @@ import {
   TextField,
   Theme,
   useMediaQuery,
-  useTheme,
+  useTheme
 } from '@material-ui/core'
 import MoreHorizIcon from '@material-ui/icons/MoreHoriz'
 import { Alert, AlertTitle } from '@material-ui/lab'
@@ -110,7 +110,7 @@ const EditUser = ({ user }: UserIdProps) => {
   const handleDeleteUsers = async () => {
     setOpen(false)
     await axios
-      .delete(`/api/auth/delete/${user.id}`)
+      .delete(`/api/users/${user.id}`)
       .then(() => {
         setAnchorEl(null)
         dispatch(getSearchUsers())
diff --git a/client/src/pages/admin/users/UserManager.tsx b/client/src/pages/admin/users/UserManager.tsx
index 9713e90f3159ee1d8cc91b2cc9916438a2537ab0..ed500dc27f3504d7707ba6b8e831dba4a4e52989 100644
--- a/client/src/pages/admin/users/UserManager.tsx
+++ b/client/src/pages/admin/users/UserManager.tsx
@@ -171,8 +171,8 @@ const UserManager: React.FC = (props: any) => {
         rowsPerPageOptions={[]}
         rowsPerPage={filterParams.pageSize}
         count={usersTotal}
-        page={filterParams.page}
-        onChangePage={(event, newPage) => handleFilterChange({ ...filterParams, page: newPage })}
+        page={filterParams.page - 1}
+        onChangePage={(event, newPage) => handleFilterChange({ ...filterParams, page: newPage + 1 })}
       />
     </div>
   )
diff --git a/client/src/reducers/competitionsReducer.ts b/client/src/reducers/competitionsReducer.ts
index 62b7006ebe0e379ab58774b6e317a1fdbe592d22..e7cab2058b2b903eb7c8f4e02904050701deff95 100644
--- a/client/src/reducers/competitionsReducer.ts
+++ b/client/src/reducers/competitionsReducer.ts
@@ -16,7 +16,7 @@ const initialState: CompetitionState = {
   competitions: [],
   total: 0,
   count: 0,
-  filterParams: { pageSize: 10, page: 0 },
+  filterParams: { pageSize: 10, page: 1 },
 }
 
 /** Intercept actions for competitions state and update the state */
diff --git a/client/src/reducers/searchUserReducer.ts b/client/src/reducers/searchUserReducer.ts
index 1e78f8961e014714dd6f1a8b762902298a2287a2..4fea6ef9c12cdcce2d05c5a197ff046a25fc904d 100644
--- a/client/src/reducers/searchUserReducer.ts
+++ b/client/src/reducers/searchUserReducer.ts
@@ -16,7 +16,7 @@ const initialState: SearchUserState = {
   users: [],
   total: 0,
   count: 0,
-  filterParams: { pageSize: 10, page: 0 },
+  filterParams: { pageSize: 10, page: 1 },
 }
 
 /** Intercept actions for searchUser state and update the state */
diff --git a/server/app/__init__.py b/server/app/__init__.py
index d6958c1921a68beed1b43aba3a85b998442aeae3..e1512dd590b55127e9aa54f2d9925aaa816a09f3 100644
--- a/server/app/__init__.py
+++ b/server/app/__init__.py
@@ -1,5 +1,7 @@
 from flask import Flask, redirect, request
 from flask_uploads import configure_uploads
+from flask_uploads.extensions import IMAGES
+from flask_uploads.flask_uploads import UploadSet
 
 import app.database.models as models
 from app.apis import init_api
@@ -25,8 +27,7 @@ def create_app(config_name="configmodule.DevelopmentConfig"):
         db.init_app(app)
         db.create_all()
         ma.init_app(app)
-        pass
-        # configure_uploads(app, (MediaDTO.image_set,))
+        configure_uploads(app, (UploadSet("photos", IMAGES),))
 
         # Init socket
         from app.core.sockets import sio
diff --git a/server/app/apis/__init__.py b/server/app/apis/__init__.py
index 316dc1521a4ee8e6be2bb99f9bd3abfebcef8d60..d33c768649d85edfdde1555ec389adb4e53fc51f 100644
--- a/server/app/apis/__init__.py
+++ b/server/app/apis/__init__.py
@@ -2,7 +2,9 @@ from functools import wraps
 
 from flask_jwt_extended import verify_jwt_in_request
 from flask_jwt_extended.utils import get_jwt
-from flask_smorest import abort
+from flask_smorest import Blueprint, abort
+
+Blueprint.PAGINATION_HEADER_FIELD_NAME = "pagination"
 
 
 class http_codes: