diff --git a/api/package-lock.json b/api/package-lock.json
index c46ae87..fec6310 100644
--- a/api/package-lock.json
+++ b/api/package-lock.json
@@ -11,6 +11,7 @@
             "dependencies": {
                 "body-parser": "^1.19.0",
                 "chownr": "^2.0.0",
+                "cors": "^2.8.5",
                 "express": "^4.17.1",
                 "is-docker": "^2.1.1",
                 "logplease": "^1.2.15",
@@ -109,6 +110,18 @@
             "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
             "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
         },
+        "node_modules/cors": {
+            "version": "2.8.5",
+            "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+            "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+            "dependencies": {
+                "object-assign": "^4",
+                "vary": "^1"
+            },
+            "engines": {
+                "node": ">= 0.10"
+            }
+        },
         "node_modules/debug": {
             "version": "2.6.9",
             "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -370,6 +383,14 @@
                 "node": "4.x || >=6.0.0"
             }
         },
+        "node_modules/object-assign": {
+            "version": "4.1.1",
+            "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+            "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
         "node_modules/on-finished": {
             "version": "2.3.0",
             "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -580,7 +601,8 @@
             }
         },
         "node_modules/waitpid": {
-            "resolved": "git+ssh://git@github.com/HexF/node-waitpid.git#a08d116a5d993a747624fe72ff890167be8c34aa"
+            "resolved": "git+ssh://git@github.com/HexF/node-waitpid.git#a08d116a5d993a747624fe72ff890167be8c34aa",
+            "hasInstallScript": true
         },
         "node_modules/yallist": {
             "version": "4.0.0",
@@ -653,6 +675,15 @@
             "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
             "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
         },
+        "cors": {
+            "version": "2.8.5",
+            "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+            "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+            "requires": {
+                "object-assign": "^4",
+                "vary": "^1"
+            }
+        },
         "debug": {
             "version": "2.6.9",
             "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -852,6 +883,11 @@
             "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
             "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
         },
+        "object-assign": {
+            "version": "4.1.1",
+            "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+            "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+        },
         "on-finished": {
             "version": "2.3.0",
             "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
diff --git a/api/package.json b/api/package.json
index ab34063..da99659 100644
--- a/api/package.json
+++ b/api/package.json
@@ -6,6 +6,7 @@
     "dependencies": {
         "body-parser": "^1.19.0",
         "chownr": "^2.0.0",
+        "cors": "^2.8.5",
         "express": "^4.17.1",
         "is-docker": "^2.1.1",
         "logplease": "^1.2.15",
diff --git a/api/src/api/v2.js b/api/src/api/v2.js
index 948dccf..5eadce6 100644
--- a/api/src/api/v2.js
+++ b/api/src/api/v2.js
@@ -6,6 +6,19 @@ const runtime = require('../runtime');
 const { Job } = require('../job');
 const package = require('../package');
 const logger = require('logplease').create('api/v2');
+const cors = require('cors');
+
+const corsOptions = {
+    origin: "*",
+    methods:
+        "GET,HEAD,PUT,PATCH,POST,DELETE",
+    allowedHeaders:
+        "Access-Control-Allow-Headers,Access-Control-Allow-Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Origin,Cache-Control,Content-Type,X-Token,X-Refresh-Token",
+    credentials: true,
+    preflightContinue: false,
+    optionsSuccessStatus: 204
+};
+router.use(cors(corsOptions))
 
 router.use((req, res, next) => {
     if (['GET', 'HEAD', 'OPTIONS'].includes(req.method)) {