diff --git a/api/core/endpoints.py b/api/core/endpoints.py
index 08cedbbeda672f5f14e16d70ae1718b4d9df73a2..5768e1045629cbc49c27845f6623d7c577f0b884 100644
--- a/api/core/endpoints.py
+++ b/api/core/endpoints.py
@@ -90,3 +90,7 @@ class Endpoints:
 
         from endpoints.exports.observations.routes import export_observations_endpoint
         app.register_blueprint(export_observations_endpoint)
+
+        # VERSION
+        from endpoints.version.routes import version_endpoint
+        app.register_blueprint(version_endpoint)
diff --git a/api/endpoints/version/routes.py b/api/endpoints/version/routes.py
new file mode 100644
index 0000000000000000000000000000000000000000..7bc93f62997b76a2fa6fba5ddbf11ff3fb8feba3
--- /dev/null
+++ b/api/endpoints/version/routes.py
@@ -0,0 +1,17 @@
+from flask import jsonify, Blueprint, request
+from flask_jwt_extended import create_access_token
+import requests
+
+version_endpoint = Blueprint('version', __name__)
+current_version = "3.0.8"
+
+
+@version_endpoint.route('/api/version', methods=['GET'])
+def version():
+    try:
+        response = requests.get("https://git.nilu.no/api/v4/projects/983/repository/tags")
+        response.raise_for_status()
+        j = response.json()
+        return {"current": current_version, "latest": j[0]["name"].replace("v.", "")}
+    except Exception as err:
+        return {"current": current_version, "latest": current_version}
diff --git a/api/requirements.txt b/api/requirements.txt
index 787990713e7db6b3810d213768c63e3ed5f2eef7..91b02277ed9acde72d22077b671adb448f526e9b 100644
--- a/api/requirements.txt
+++ b/api/requirements.txt
@@ -13,3 +13,4 @@ python-dotenv==0.21.0
 python-simplexml==0.1.5
 pandas==1.5.2
 pytz==2022.6 
+requests==2.31.0
diff --git a/client/src/components/MenuBar.vue b/client/src/components/MenuBar.vue
index 64faf4cafbee93f28e190cf3c4462a13104c6f9c..f2a2fd17580a010cde166ed37efbad486c5d89b8 100644
--- a/client/src/components/MenuBar.vue
+++ b/client/src/components/MenuBar.vue
@@ -2,11 +2,13 @@
 import { useRouter } from "vue-router";
 import Auth from "../helpers/auth";
 import IconLogout from "~icons/ic/outline-logout";
-import { version } from "../helpers/utils";
+import IconNewVersion from "~icons/material-symbols/download-for-offline-rounded";
 import jwt_decode from "jwt-decode";
+import Version from "../helpers/version";
 
 const router = useRouter();
 const modules = ref([]);
+const version = ref("");
 
 const props = defineProps({
   show: Boolean
@@ -17,8 +19,9 @@ watch(
   () => (modules.value = getmodules())
 );
 
-onMounted(() => {
+onMounted(async () => {
   modules.value = getmodules();
+  version.value = await Version.get();
 });
 
 const getmodules = () => {
@@ -91,8 +94,6 @@ const signout = async () => {
   Auth.signout();
   router.push({ name: "Login" });
 };
-
-const cmp_version = computed(() => version);
 </script>
 
 <template>
@@ -106,7 +107,10 @@ const cmp_version = computed(() => version);
       </div>
     </div>
     <div class="">
-      <div class="px-1 text-xs font-bold border-b">v.{{ cmp_version }}</div>
+      <div class="flex px-1 text-xs font-bold border-b gap-1">
+        <icon-new-version class="self-center text-nord11 hover:text-nord12" v-if="!version.isLatest" />
+        <div class="self-center">v.{{ version.current }}</div>
+      </div>
       <div class="flex py-2 px-2 hover:cursor-pointer hover:bg-nord8/20 hover:text-nord10" @click="signout">
         <icon-logout class="self-center" />
         <div class="self-center ml-1">Sign out</div>
diff --git a/client/src/helpers/interceptor.js b/client/src/helpers/interceptor.js
index 0c0bae290010481a54ad7c79724dd4abd470f204..8562ef9464b651c084655c2ece22d3b9df8cc91d 100644
--- a/client/src/helpers/interceptor.js
+++ b/client/src/helpers/interceptor.js
@@ -21,8 +21,9 @@ const Interceptor = {
       },
       (error) => {
         if (401 === error.response.status) {
-          Auth.signout();
-          window.location.href = "/login";
+          console.log("iiik", error);
+          // Auth.signout();
+          // window.location.href = "/login";
         } else if (403 === error.response.status) {
           window.location.href = "/forbidden";
         } else if (404 === error.response.status && !error.response.request.responseURL.toLowerCase().includes("api")) {
diff --git a/client/src/helpers/utils.js b/client/src/helpers/utils.js
index 31de5d4ca2b43c684834a441e85c1d074b528140..653e5f108b4a6c8bc62ff6e64b32c71596cf24d4 100644
--- a/client/src/helpers/utils.js
+++ b/client/src/helpers/utils.js
@@ -105,5 +105,3 @@ export const filterList = (q, list, exclude_list) => {
     return showValues;
   });
 };
-
-export const version = "3.0.8";
diff --git a/client/src/helpers/version.js b/client/src/helpers/version.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d68d98a26e51959ad105334f50fd5509f480c3f
--- /dev/null
+++ b/client/src/helpers/version.js
@@ -0,0 +1,29 @@
+import { Get } from "./request";
+
+const Version = {
+  compare(v1, v2) {
+    if (typeof v1 !== "string") return false;
+    if (typeof v2 !== "string") return false;
+    v1 = v1.split(".");
+    v2 = v2.split(".");
+    const k = Math.min(v1.length, v2.length);
+    for (let i = 0; i < k; ++i) {
+      v1[i] = parseInt(v1[i], 10);
+      v2[i] = parseInt(v2[i], 10);
+      if (v1[i] > v2[i]) return 1;
+      if (v1[i] < v2[i]) return -1;
+    }
+    return v1.length == v2.length ? 0 : v1.length < v2.length ? -1 : 1;
+  },
+  async get() {
+    try {
+      var result = await Get("api/version");
+      var compared = Version.compare(result.latest, result.current);
+      return { current: result.current, isLatest: compared != 1 };
+    } catch (error) {
+      return { current: result.current, isLatest: true };
+    }
+  }
+};
+
+export default Version;