diff --git a/ExpressAPI/src/express/API.ts b/ExpressAPI/src/express/API.ts
index d9040027335181ab03ad25d9cf4bb42cfc5ed49e..55d2fe4765ecb0810e206d456715a1da4895adae 100644
--- a/ExpressAPI/src/express/API.ts
+++ b/ExpressAPI/src/express/API.ts
@@ -1,18 +1,19 @@
-import { Express }           from 'express-serve-static-core';
-import cors                  from 'cors';
-import morganMiddleware      from '../logging/MorganMiddleware';
-import { AddressInfo }       from 'net';
-import http                  from 'http';
-import helmet                from 'helmet';
-import express               from 'express';
-import WorkerTask            from '../process/WorkerTask';
-import multer                from 'multer';
-import SessionMiddleware     from '../middlewares/SessionMiddleware';
-import Config                from '../config/Config';
-import logger                from '../shared/logging/WinstonLogger';
-import ParamsCallbackManager from '../middlewares/ParamsCallbackManager';
-import ApiRoutesManager      from '../routes/ApiRoutesManager';
-import compression           from 'compression';
+import { Express }             from 'express-serve-static-core';
+import cors                    from 'cors';
+import morganMiddleware        from '../logging/MorganMiddleware';
+import { AddressInfo }         from 'net';
+import http                    from 'http';
+import helmet                  from 'helmet';
+import express                 from 'express';
+import WorkerTask              from '../process/WorkerTask';
+import multer                  from 'multer';
+import SessionMiddleware       from '../middlewares/SessionMiddleware';
+import Config                  from '../config/Config';
+import logger                  from '../shared/logging/WinstonLogger';
+import ParamsCallbackManager   from '../middlewares/ParamsCallbackManager';
+import ApiRoutesManager        from '../routes/ApiRoutesManager';
+import compression             from 'compression';
+import ClientVersionMiddleware from '../middlewares/ClientVersionMiddleware';
 
 
 class API implements WorkerTask {
@@ -30,6 +31,8 @@ class API implements WorkerTask {
         this.backend.use(cors()); //Allow CORS requests
         this.backend.use(compression()); //Compress responses
 
+        this.backend.use(ClientVersionMiddleware.register());
+
         ParamsCallbackManager.register(this.backend);
 
         this.backend.use(SessionMiddleware.register());
diff --git a/ExpressAPI/src/middlewares/ClientVersionMiddleware.ts b/ExpressAPI/src/middlewares/ClientVersionMiddleware.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f4bed40e30357b8fb035c66e3012f582950c817d
--- /dev/null
+++ b/ExpressAPI/src/middlewares/ClientVersionMiddleware.ts
@@ -0,0 +1,35 @@
+import express            from 'express';
+import Config             from '../config/Config';
+import semver             from 'semver/preload';
+import Session            from '../controllers/Session';
+import { HttpStatusCode } from 'axios';
+import DojoStatusCode     from '../shared/types/Dojo/DojoStatusCode';
+
+
+class ClientVersionMiddleware {
+    register(): (req: express.Request, res: express.Response, next: express.NextFunction) => void {
+        return async (req: express.Request, res: express.Response, next: express.NextFunction) => {
+            if ( req.headers['client'] && req.headers['client-version'] ) {
+                const requestClient = req.headers['client'] as string;
+                const requestClientVersion = req.headers['client-version'] as string;
+
+                for ( const [ client, condition ] of Object.entries(Config.requestClientValidation.version) ) {
+                    if ( requestClient === client ) {
+                        if ( semver.satisfies(semver.valid(semver.coerce(requestClientVersion)) || '0', condition) ) {
+                            next();
+                            return;
+                        } else {
+                            new Session().sendResponse(res, HttpStatusCode.MethodNotAllowed, {}, `Client version ${ requestClientVersion } is not supported. Please update your client.`, DojoStatusCode.CLIENT_VERSION_NOT_SUPPORTED);
+                            return;
+                        }
+                    }
+                }
+
+                new Session().sendResponse(res, HttpStatusCode.MethodNotAllowed, {}, `Unsupported client.`, DojoStatusCode.CLIENT_NOT_SUPPORTED);
+            }
+        };
+    }
+}
+
+
+export default new ClientVersionMiddleware();
\ No newline at end of file