diff --git a/package-lock.json b/package-lock.json
index f5071ef7a4061111b053f37f467f4ba6a693777c..477762e26e7f02ba4f952276c59ebb00c79d91f2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -42,7 +42,7 @@
         "@vue/eslint-config-prettier": "~8.0.0",
         "@vue/eslint-config-typescript": "~11.0.3",
         "@vue/tsconfig": "~0.4.0",
-        "axios": "~1.5.0",
+        "axios": "~1.6.0",
         "eslint": "~8.48.0",
         "eslint-plugin-vue": "~9.17.0",
         "npm-run-all": "~4.1.5",
@@ -202,16 +202,16 @@
       "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
     },
     "node_modules/@aws-sdk/client-s3": {
-      "version": "3.441.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.441.0.tgz",
-      "integrity": "sha512-tJUhHk4Nvakw/q3IVI2oDFCu48DzuPCMu2G3n42JPyvmY0RvmtRjduduoG1lYIGgRKJu81/MFr9i8CGYNK+/5A==",
+      "version": "3.445.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.445.0.tgz",
+      "integrity": "sha512-2G+3MnO78irZRjlfkdvtlKRQ3yuOfrRMg8mztKpMw0q/9WHtwCcmaUUpl1bXwJ+BcNTVHopLQXdbzCeaxxI92w==",
       "dependencies": {
         "@aws-crypto/sha1-browser": "3.0.0",
         "@aws-crypto/sha256-browser": "3.0.0",
         "@aws-crypto/sha256-js": "3.0.0",
-        "@aws-sdk/client-sts": "3.441.0",
-        "@aws-sdk/core": "3.441.0",
-        "@aws-sdk/credential-provider-node": "3.441.0",
+        "@aws-sdk/client-sts": "3.445.0",
+        "@aws-sdk/core": "3.445.0",
+        "@aws-sdk/credential-provider-node": "3.445.0",
         "@aws-sdk/middleware-bucket-endpoint": "3.433.0",
         "@aws-sdk/middleware-expect-continue": "3.433.0",
         "@aws-sdk/middleware-flexible-checksums": "3.433.0",
@@ -269,13 +269,13 @@
       }
     },
     "node_modules/@aws-sdk/client-sso": {
-      "version": "3.441.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.441.0.tgz",
-      "integrity": "sha512-gndGymu4cEIN7WWhQ67RO0JMda09EGBlay2L8IKCHBK/65Y34FHUX1tCNbO2qezEzsi6BPW5o2n53Rd9QqpHUw==",
+      "version": "3.445.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.445.0.tgz",
+      "integrity": "sha512-me4LvqNnu6kxi+sW7t0AgMv1Yi64ikas0x2+5jv23o6Csg32w0S0xOjCTKQYahOA5CMFunWvlkFIfxbqs+Uo7w==",
       "dependencies": {
         "@aws-crypto/sha256-browser": "3.0.0",
         "@aws-crypto/sha256-js": "3.0.0",
-        "@aws-sdk/core": "3.441.0",
+        "@aws-sdk/core": "3.445.0",
         "@aws-sdk/middleware-host-header": "3.433.0",
         "@aws-sdk/middleware-logger": "3.433.0",
         "@aws-sdk/middleware-recursion-detection": "3.433.0",
@@ -315,14 +315,14 @@
       }
     },
     "node_modules/@aws-sdk/client-sts": {
-      "version": "3.441.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.441.0.tgz",
-      "integrity": "sha512-GL0Cw2v7XL1cn0T+Sk5VHLlgBJoUdMsysXsHa1mFdk0l6XHMAAnwXVXiNnjmoDSPrG0psz7dL2AKzPVRXbIUjA==",
+      "version": "3.445.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.445.0.tgz",
+      "integrity": "sha512-ogbdqrS8x9O5BTot826iLnTQ6i4/F5BSi/74gycneCxYmAnYnyUBNOWVnynv6XZiEWyDJQCU2UtMd52aNGW1GA==",
       "dependencies": {
         "@aws-crypto/sha256-browser": "3.0.0",
         "@aws-crypto/sha256-js": "3.0.0",
-        "@aws-sdk/core": "3.441.0",
-        "@aws-sdk/credential-provider-node": "3.441.0",
+        "@aws-sdk/core": "3.445.0",
+        "@aws-sdk/credential-provider-node": "3.445.0",
         "@aws-sdk/middleware-host-header": "3.433.0",
         "@aws-sdk/middleware-logger": "3.433.0",
         "@aws-sdk/middleware-recursion-detection": "3.433.0",
@@ -365,11 +365,12 @@
       }
     },
     "node_modules/@aws-sdk/core": {
-      "version": "3.441.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.441.0.tgz",
-      "integrity": "sha512-gV0eQwR0VnSPUYAbgDkbBtfXbSpZgl/K6UB13DP1IFFjQYbF/BxYwvcQe4jHoPOBifSgjEbl8MfOOeIyI7k9vg==",
+      "version": "3.445.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.445.0.tgz",
+      "integrity": "sha512-6GYLElUG1QTOdmXG8zXa+Ull9IUeSeItKDYHKzHYfIkbsagMfYlf7wm9XIYlatjtgodNfZ3gPHAJfRyPmwKrsg==",
       "dependencies": {
-        "@smithy/smithy-client": "^2.1.12"
+        "@smithy/smithy-client": "^2.1.12",
+        "tslib": "^2.5.0"
       },
       "engines": {
         "node": ">=14.0.0"
@@ -390,13 +391,13 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-ini": {
-      "version": "3.441.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.441.0.tgz",
-      "integrity": "sha512-SQipQYxYqDUuSOfIhDmaTdwPTcndGQotGZXWJl56mMWqAhU8MkwjK+oMf3VgRt/umJC0QwUCF5HUHIj7gSB1JA==",
+      "version": "3.445.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.445.0.tgz",
+      "integrity": "sha512-R7IYSGjNZ5KKJwQJ2HNPemjpAMWvdce91i8w+/aHfqeGfTXrmYJu99PeGRyyBTKEumBaojyjTRvmO8HzS+/l7g==",
       "dependencies": {
         "@aws-sdk/credential-provider-env": "3.433.0",
         "@aws-sdk/credential-provider-process": "3.433.0",
-        "@aws-sdk/credential-provider-sso": "3.441.0",
+        "@aws-sdk/credential-provider-sso": "3.445.0",
         "@aws-sdk/credential-provider-web-identity": "3.433.0",
         "@aws-sdk/types": "3.433.0",
         "@smithy/credential-provider-imds": "^2.0.0",
@@ -410,14 +411,14 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-node": {
-      "version": "3.441.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.441.0.tgz",
-      "integrity": "sha512-WB9p37yHq6fGJt6Vll29ijHbkh9VDbPM/n5ns73bTAgFD7R0ht5kPmdmHGQA6m3RKjcHLPbymQ3lXykkMwWf/Q==",
+      "version": "3.445.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.445.0.tgz",
+      "integrity": "sha512-zI4k4foSjQRKNEsouculRcz7IbLfuqdFxypDLYwn+qPNMqJwWJ7VxOOeBSPUpHFcd7CLSfbHN2JAhQ7M02gPTA==",
       "dependencies": {
         "@aws-sdk/credential-provider-env": "3.433.0",
-        "@aws-sdk/credential-provider-ini": "3.441.0",
+        "@aws-sdk/credential-provider-ini": "3.445.0",
         "@aws-sdk/credential-provider-process": "3.433.0",
-        "@aws-sdk/credential-provider-sso": "3.441.0",
+        "@aws-sdk/credential-provider-sso": "3.445.0",
         "@aws-sdk/credential-provider-web-identity": "3.433.0",
         "@aws-sdk/types": "3.433.0",
         "@smithy/credential-provider-imds": "^2.0.0",
@@ -446,11 +447,11 @@
       }
     },
     "node_modules/@aws-sdk/credential-provider-sso": {
-      "version": "3.441.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.441.0.tgz",
-      "integrity": "sha512-pTg16G+62mWCE8yGKuQnEBqPdpG5g71remf2jUqXaI1c7GCzbnkQDV9eD4DaAGOvzIs0wo9zAQnS2kVDPFlCYA==",
+      "version": "3.445.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.445.0.tgz",
+      "integrity": "sha512-gJz7kAiDecdhtApgXnxfZsXKsww8BnifDF9MAx9Dr4X6no47qYsCCS3XPuEyRiF9VebXvHOH0H260Zp3bVyniQ==",
       "dependencies": {
-        "@aws-sdk/client-sso": "3.441.0",
+        "@aws-sdk/client-sso": "3.445.0",
         "@aws-sdk/token-providers": "3.438.0",
         "@aws-sdk/types": "3.433.0",
         "@smithy/property-provider": "^2.0.0",
@@ -477,9 +478,9 @@
       }
     },
     "node_modules/@aws-sdk/lib-storage": {
-      "version": "3.441.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.441.0.tgz",
-      "integrity": "sha512-Olj/kVIhJo9Cvw06dzn0uQ8M29L7Vu8tSj4MHCewH0goJ0GGIclOf83uVofMZO94zG7X/bv6+4CtNBJIhlokQw==",
+      "version": "3.445.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.445.0.tgz",
+      "integrity": "sha512-sCP3lh71oMkx/B3+tSOGr81cff1Z1Yy5ejh5xa/YuH6OefQUFBM7/EC0CJiNfVXemh3D6O+biKETL+t2rAiZoQ==",
       "dependencies": {
         "@smithy/abort-controller": "^2.0.1",
         "@smithy/middleware-endpoint": "^2.1.3",
@@ -690,9 +691,9 @@
       }
     },
     "node_modules/@aws-sdk/s3-request-presigner": {
-      "version": "3.441.0",
-      "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.441.0.tgz",
-      "integrity": "sha512-EUVsmy92imURMLoA/MX+PL1SIONQ8YSi424BHJA6xGEoaqvQiaVKlv8jJfCqJ6qQ8oLiCLe2hOBSBTY1XZiy/g==",
+      "version": "3.445.0",
+      "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.445.0.tgz",
+      "integrity": "sha512-UZrtfYdwkNfPkdCYdLYSshTBHkK1W1f3qf011f5P99sxC5nahBnBiLRMeTeKAxveIkAHKqYKlMVa/+gD65d5yA==",
       "dependencies": {
         "@aws-sdk/signature-v4-multi-region": "3.437.0",
         "@aws-sdk/types": "3.433.0",
@@ -883,9 +884,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.23.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
-      "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
+      "version": "7.23.3",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz",
+      "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==",
       "bin": {
         "parser": "bin/babel-parser.js"
       },
@@ -1314,9 +1315,9 @@
       }
     },
     "node_modules/@eslint/eslintrc": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
-      "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
+      "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
       "dev": true,
       "dependencies": {
         "ajv": "^6.12.4",
@@ -1525,11 +1526,11 @@
       }
     },
     "node_modules/@smithy/config-resolver": {
-      "version": "2.0.16",
-      "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.16.tgz",
-      "integrity": "sha512-1k+FWHQDt2pfpXhJsOmNMmlAZ3NUQ98X5tYsjQhVGq+0X6cOBMhfh6Igd0IX3Ut6lEO6DQAdPMI/blNr3JZfMQ==",
+      "version": "2.0.17",
+      "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.17.tgz",
+      "integrity": "sha512-iQ8Q8ojqiPqRKdybDI1g7HvG8EcnekRnH3DYeNTrT26vDuPq2nomyMCc0DZnPW+uAUcLCGZpAmGTAvEOYX55wA==",
       "dependencies": {
-        "@smithy/node-config-provider": "^2.1.3",
+        "@smithy/node-config-provider": "^2.1.4",
         "@smithy/types": "^2.4.0",
         "@smithy/util-config-provider": "^2.0.0",
         "@smithy/util-middleware": "^2.0.5",
@@ -1540,11 +1541,11 @@
       }
     },
     "node_modules/@smithy/credential-provider-imds": {
-      "version": "2.0.18",
-      "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.18.tgz",
-      "integrity": "sha512-QnPBi6D2zj6AHJdUTo5zXmk8vwHJ2bNevhcVned1y+TZz/OI5cizz5DsYNkqFUIDn8tBuEyKNgbmKVNhBbuY3g==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.0.tgz",
+      "integrity": "sha512-amqeueHM3i02S6z35WlXp7gejBnRloT5ctR/mQLlg/6LWGd70Avc2epzuuWtCptNg2ak5/yODD1fAVs9NPCyqg==",
       "dependencies": {
-        "@smithy/node-config-provider": "^2.1.3",
+        "@smithy/node-config-provider": "^2.1.4",
         "@smithy/property-provider": "^2.0.13",
         "@smithy/types": "^2.4.0",
         "@smithy/url-parser": "^2.0.12",
@@ -1710,13 +1711,13 @@
       }
     },
     "node_modules/@smithy/middleware-endpoint": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.3.tgz",
-      "integrity": "sha512-ZrQ0/YX6hNVTxqMEHtEaDbDv6pNeEji/a5Vk3HuFC5R3ZY8lfoATyxmOGxBVYnF3NUvZLNC7umEv1WzWGWvCGQ==",
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.4.tgz",
+      "integrity": "sha512-fNUTsdTkM/RUu77AljH7fD3O0sFKDPNn1dFMR1oLAuJLOq4r6yjnL7Uc/F7wOgzgw1KRqqEnqAZccyAX2iEa4Q==",
       "dependencies": {
         "@smithy/middleware-serde": "^2.0.12",
-        "@smithy/node-config-provider": "^2.1.3",
-        "@smithy/shared-ini-file-loader": "^2.2.2",
+        "@smithy/node-config-provider": "^2.1.4",
+        "@smithy/shared-ini-file-loader": "^2.2.3",
         "@smithy/types": "^2.4.0",
         "@smithy/url-parser": "^2.0.12",
         "@smithy/util-middleware": "^2.0.5",
@@ -1727,11 +1728,11 @@
       }
     },
     "node_modules/@smithy/middleware-retry": {
-      "version": "2.0.18",
-      "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.18.tgz",
-      "integrity": "sha512-VyrHQRldGSb3v9oFOB5yPxmLT7U2sQic2ytylOnYlnsmVOLlFIaI6sW22c+w2675yq+XZ6HOuzV7x2OBYCWRNA==",
+      "version": "2.0.19",
+      "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.19.tgz",
+      "integrity": "sha512-VMS1GHxLpRnuLHrPTj/nb9aD99jJsNzWX07F00fIuV9lkz3lWP7RUM7P1aitm0+4YfhShPn+Wri8/CuoqPOziA==",
       "dependencies": {
-        "@smithy/node-config-provider": "^2.1.3",
+        "@smithy/node-config-provider": "^2.1.4",
         "@smithy/protocol-http": "^3.0.8",
         "@smithy/service-error-classification": "^2.0.5",
         "@smithy/types": "^2.4.0",
@@ -1769,12 +1770,12 @@
       }
     },
     "node_modules/@smithy/node-config-provider": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.3.tgz",
-      "integrity": "sha512-J6lXvRHGVnSX3n1PYi+e1L5HN73DkkJpUviV3Ebf+8wSaIjAf+eVNbzyvh/S5EQz7nf4KVfwbD5vdoZMAthAEQ==",
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.4.tgz",
+      "integrity": "sha512-kROLnHFatpimtmZ8YefsRRb5OJ8LVIVNhUWp67KHL4D2Vjd+WpIHMzWtkLLV4p0qXpY+IxmwcL2d2XMPn8ppsQ==",
       "dependencies": {
         "@smithy/property-provider": "^2.0.13",
-        "@smithy/shared-ini-file-loader": "^2.2.2",
+        "@smithy/shared-ini-file-loader": "^2.2.3",
         "@smithy/types": "^2.4.0",
         "tslib": "^2.5.0"
       },
@@ -1858,9 +1859,9 @@
       }
     },
     "node_modules/@smithy/shared-ini-file-loader": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.2.tgz",
-      "integrity": "sha512-noyQUPn7b1M8uB0GEXc/Zyxq+5K2b7aaqWnLp+hgJ7+xu/FCvtyWy5eWLDjQEsHnAet2IZhS5QF8872OR69uNg==",
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.3.tgz",
+      "integrity": "sha512-VDyhCNycPbNkPidMnBgYQeSwJkoATRFm5VrveVqIPAjsdGutf7yZpPycuDWW9bRFnuuwaBhCC0pA7KCH0+2wrg==",
       "dependencies": {
         "@smithy/types": "^2.4.0",
         "tslib": "^2.5.0"
@@ -1992,13 +1993,13 @@
       }
     },
     "node_modules/@smithy/util-defaults-mode-node": {
-      "version": "2.0.21",
-      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.21.tgz",
-      "integrity": "sha512-cUEsttVZ79B7Al2rWK2FW03HBpD9LyuqFtm+1qFty5u9sHSdesr215gS2Ln53fTopNiPgeXpdoM3IgjvIO0rJw==",
+      "version": "2.0.22",
+      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.22.tgz",
+      "integrity": "sha512-4nNsNBi4pj8nQX/cbRPzomyU/cptFr1OJckxo+nlRZdTZlj+raA8NI5sNF1kD4pyGyARuqDtWc9+xMhFHXIJmw==",
       "dependencies": {
-        "@smithy/config-resolver": "^2.0.16",
-        "@smithy/credential-provider-imds": "^2.0.18",
-        "@smithy/node-config-provider": "^2.1.3",
+        "@smithy/config-resolver": "^2.0.17",
+        "@smithy/credential-provider-imds": "^2.1.0",
+        "@smithy/node-config-provider": "^2.1.4",
         "@smithy/property-provider": "^2.0.13",
         "@smithy/smithy-client": "^2.1.12",
         "@smithy/types": "^2.4.0",
@@ -2009,11 +2010,11 @@
       }
     },
     "node_modules/@smithy/util-endpoints": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.2.tgz",
-      "integrity": "sha512-QEdq+sP68IJHAMVB2ugKVVZEWeKQtZLuf+akHzc8eTVElsZ2ZdVLWC6Cp+uKjJ/t4yOj1qu6ZzyxJQEQ8jdEjg==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.3.tgz",
+      "integrity": "sha512-rMYXLMdAMVbJAEHhNlCSJsAxo3NG3lcPja7WmesjAbNrMSyYZ6FnHHTy8kzRhddn4eAtLvPBSO6LiBB21gCoHQ==",
       "dependencies": {
-        "@smithy/node-config-provider": "^2.1.3",
+        "@smithy/node-config-provider": "^2.1.4",
         "@smithy/types": "^2.4.0",
         "tslib": "^2.5.0"
       },
@@ -2118,51 +2119,51 @@
       "dev": true
     },
     "node_modules/@types/bootstrap": {
-      "version": "5.2.8",
-      "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.2.8.tgz",
-      "integrity": "sha512-14do+aWZPc1w3G+YevSsy8eas1XEPhTOUNBhQX/r12YKn7ySssATJusBQ/HCQAd2nq54U8vvrftHSb1YpeJUXg==",
+      "version": "5.2.9",
+      "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.2.9.tgz",
+      "integrity": "sha512-Fcg4nORBKaVUAG4F0ePWcatWQVfr3NAT9XIN+hl1PaiAwb4tq55+iua9R3exsbB3yyfhyQlHYg2foTlW86J+RA==",
       "dev": true,
       "dependencies": {
         "@popperjs/core": "^2.9.2"
       }
     },
     "node_modules/@types/dompurify": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.4.tgz",
-      "integrity": "sha512-1Jk8S/IRzNSbwQRbuGuLFHviwxQ8pX81ZEW3INY9432Cwb4VedkBYan8gSIXVLOLHBtimOmUTEYphjRVmo+30g==",
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz",
+      "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==",
       "dev": true,
       "dependencies": {
         "@types/trusted-types": "*"
       }
     },
     "node_modules/@types/json-schema": {
-      "version": "7.0.14",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz",
-      "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==",
+      "version": "7.0.15",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "16.18.60",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.60.tgz",
-      "integrity": "sha512-ZUGPWx5vKfN+G2/yN7pcSNLkIkXEvlwNaJEd4e0ppX7W2S8XAkdc/37hM4OUNJB9sa0p12AOvGvxL4JCPiz9DA==",
+      "version": "16.18.61",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.61.tgz",
+      "integrity": "sha512-k0N7BqGhJoJzdh6MuQg1V1ragJiXTh8VUBAZTWjJ9cUq23SG0F0xavOwZbhiP4J3y20xd6jxKx+xNUhkMAi76Q==",
       "dev": true
     },
     "node_modules/@types/semver": {
-      "version": "7.5.4",
-      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz",
-      "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==",
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz",
+      "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==",
       "dev": true
     },
     "node_modules/@types/showdown": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@types/showdown/-/showdown-2.0.3.tgz",
-      "integrity": "sha512-cFuAcA3p2YPq8HR8KxvDXnOdccOZ74ypANB3kb3AL5Srji0QnteVw6vf4o7GJ8hMyz+uZ+nSQHVgXSgjYD1a5g==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/@types/showdown/-/showdown-2.0.4.tgz",
+      "integrity": "sha512-cSXSKOpTSr2HTdlGq8WskyZwNyxKhM7M/zJeLVdWjlUQmQ4d8TdtPrwz4JejglZdzIzSgU5loi5QUaEJF9JD8w==",
       "dev": true
     },
     "node_modules/@types/trusted-types": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.5.tgz",
-      "integrity": "sha512-I3pkr8j/6tmQtKV/ZzHtuaqYSQvyjGRKH4go60Rr0IDLlFxuRT5V32uvB1mecM5G1EVAUyF/4r4QZ1GHgz+mxA==",
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.6.tgz",
+      "integrity": "sha512-HYtNooPvUY9WAVRBr4u+4Qa9fYD1ze2IUlAD3HoA6oehn1taGwBx3Oa52U4mTslTS+GAExKpaFu39Y5xUEwfjg==",
       "dev": true
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
@@ -2395,12 +2396,12 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.7.tgz",
-      "integrity": "sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==",
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.8.tgz",
+      "integrity": "sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==",
       "dependencies": {
         "@babel/parser": "^7.23.0",
-        "@vue/shared": "3.3.7",
+        "@vue/shared": "3.3.8",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.0.2"
       }
@@ -2411,25 +2412,25 @@
       "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.7.tgz",
-      "integrity": "sha512-0LwkyJjnUPssXv/d1vNJ0PKfBlDoQs7n81CbO6Q0zdL7H1EzqYRrTVXDqdBVqro0aJjo/FOa1qBAPVI4PGSHBw==",
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz",
+      "integrity": "sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==",
       "dependencies": {
-        "@vue/compiler-core": "3.3.7",
-        "@vue/shared": "3.3.7"
+        "@vue/compiler-core": "3.3.8",
+        "@vue/shared": "3.3.8"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.7.tgz",
-      "integrity": "sha512-7pfldWy/J75U/ZyYIXRVqvLRw3vmfxDo2YLMwVtWVNew8Sm8d6wodM+OYFq4ll/UxfqVr0XKiVwti32PCrruAw==",
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz",
+      "integrity": "sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==",
       "dependencies": {
         "@babel/parser": "^7.23.0",
-        "@vue/compiler-core": "3.3.7",
-        "@vue/compiler-dom": "3.3.7",
-        "@vue/compiler-ssr": "3.3.7",
-        "@vue/reactivity-transform": "3.3.7",
-        "@vue/shared": "3.3.7",
+        "@vue/compiler-core": "3.3.8",
+        "@vue/compiler-dom": "3.3.8",
+        "@vue/compiler-ssr": "3.3.8",
+        "@vue/reactivity-transform": "3.3.8",
+        "@vue/shared": "3.3.8",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.5",
         "postcss": "^8.4.31",
@@ -2453,12 +2454,12 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.7.tgz",
-      "integrity": "sha512-TxOfNVVeH3zgBc82kcUv+emNHo+vKnlRrkv8YvQU5+Y5LJGJwSNzcmLUoxD/dNzv0bhQ/F0s+InlgV0NrApJZg==",
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz",
+      "integrity": "sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==",
       "dependencies": {
-        "@vue/compiler-dom": "3.3.7",
-        "@vue/shared": "3.3.7"
+        "@vue/compiler-dom": "3.3.8",
+        "@vue/shared": "3.3.8"
       }
     },
     "node_modules/@vue/devtools-api": {
@@ -2553,21 +2554,21 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.7.tgz",
-      "integrity": "sha512-cZNVjWiw00708WqT0zRpyAgduG79dScKEPYJXq2xj/aMtk3SKvL3FBt2QKUlh6EHBJ1m8RhBY+ikBUzwc7/khg==",
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.8.tgz",
+      "integrity": "sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==",
       "dependencies": {
-        "@vue/shared": "3.3.7"
+        "@vue/shared": "3.3.8"
       }
     },
     "node_modules/@vue/reactivity-transform": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.7.tgz",
-      "integrity": "sha512-APhRmLVbgE1VPGtoLQoWBJEaQk4V8JUsqrQihImVqKT+8U6Qi3t5ATcg4Y9wGAPb3kIhetpufyZ1RhwbZCIdDA==",
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz",
+      "integrity": "sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==",
       "dependencies": {
         "@babel/parser": "^7.23.0",
-        "@vue/compiler-core": "3.3.7",
-        "@vue/shared": "3.3.7",
+        "@vue/compiler-core": "3.3.8",
+        "@vue/shared": "3.3.8",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.5"
       }
@@ -2589,40 +2590,40 @@
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.7.tgz",
-      "integrity": "sha512-LHq9du3ubLZFdK/BP0Ysy3zhHqRfBn80Uc+T5Hz3maFJBGhci1MafccnL3rpd5/3wVfRHAe6c+PnlO2PAavPTQ==",
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.8.tgz",
+      "integrity": "sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==",
       "dependencies": {
-        "@vue/reactivity": "3.3.7",
-        "@vue/shared": "3.3.7"
+        "@vue/reactivity": "3.3.8",
+        "@vue/shared": "3.3.8"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.7.tgz",
-      "integrity": "sha512-PFQU1oeJxikdDmrfoNQay5nD4tcPNYixUBruZzVX/l0eyZvFKElZUjW4KctCcs52nnpMGO6UDK+jF5oV4GT5Lw==",
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz",
+      "integrity": "sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==",
       "dependencies": {
-        "@vue/runtime-core": "3.3.7",
-        "@vue/shared": "3.3.7",
+        "@vue/runtime-core": "3.3.8",
+        "@vue/shared": "3.3.8",
         "csstype": "^3.1.2"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.7.tgz",
-      "integrity": "sha512-UlpKDInd1hIZiNuVVVvLgxpfnSouxKQOSE2bOfQpBuGwxRV/JqqTCyyjXUWiwtVMyeRaZhOYYqntxElk8FhBhw==",
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.8.tgz",
+      "integrity": "sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==",
       "dependencies": {
-        "@vue/compiler-ssr": "3.3.7",
-        "@vue/shared": "3.3.7"
+        "@vue/compiler-ssr": "3.3.8",
+        "@vue/shared": "3.3.8"
       },
       "peerDependencies": {
-        "vue": "3.3.7"
+        "vue": "3.3.8"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.7.tgz",
-      "integrity": "sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg=="
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.8.tgz",
+      "integrity": "sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw=="
     },
     "node_modules/@vue/tsconfig": {
       "version": "0.4.0",
@@ -2771,9 +2772,9 @@
       }
     },
     "node_modules/axios": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz",
-      "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz",
+      "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==",
       "dev": true,
       "dependencies": {
         "follow-redirects": "^1.15.0",
@@ -3717,9 +3718,9 @@
       "dev": true
     },
     "node_modules/fast-glob": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
-      "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
       "dev": true,
       "dependencies": {
         "@nodelib/fs.stat": "^2.0.2",
@@ -4925,9 +4926,9 @@
       "dev": true
     },
     "node_modules/nanoid": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
-      "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+      "version": "3.3.7",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
       "funding": [
         {
           "type": "github",
@@ -7007,15 +7008,15 @@
       }
     },
     "node_modules/vue": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.7.tgz",
-      "integrity": "sha512-YEMDia1ZTv1TeBbnu6VybatmSteGOS3A3YgfINOfraCbf85wdKHzscD6HSS/vB4GAtI7sa1XPX7HcQaJ1l24zA==",
-      "dependencies": {
-        "@vue/compiler-dom": "3.3.7",
-        "@vue/compiler-sfc": "3.3.7",
-        "@vue/runtime-dom": "3.3.7",
-        "@vue/server-renderer": "3.3.7",
-        "@vue/shared": "3.3.7"
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.8.tgz",
+      "integrity": "sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==",
+      "dependencies": {
+        "@vue/compiler-dom": "3.3.8",
+        "@vue/compiler-sfc": "3.3.8",
+        "@vue/runtime-dom": "3.3.8",
+        "@vue/server-renderer": "3.3.8",
+        "@vue/shared": "3.3.8"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/package.json b/package.json
index 823b0b95e061256f766227982db928b0763c2f3e..2c7bbd8337e0cd7a9423ddcdac50b5c2d64a212e 100644
--- a/package.json
+++ b/package.json
@@ -47,7 +47,7 @@
     "@vue/eslint-config-prettier": "~8.0.0",
     "@vue/eslint-config-typescript": "~11.0.3",
     "@vue/tsconfig": "~0.4.0",
-    "axios": "~1.5.0",
+    "axios": "~1.6.0",
     "eslint": "~8.48.0",
     "eslint-plugin-vue": "~9.17.0",
     "npm-run-all": "~4.1.5",
diff --git a/src/client/workflow/index.ts b/src/client/workflow/index.ts
index 3b82994fee1718758b8ac10abf07efc931577860..6d265a31eea81f607b44b43bb9597752591803a5 100644
--- a/src/client/workflow/index.ts
+++ b/src/client/workflow/index.ts
@@ -7,6 +7,7 @@ export { CancelablePromise, CancelError } from './core/CancelablePromise';
 export { OpenAPI } from './core/OpenAPI';
 export type { OpenAPIConfig } from './core/OpenAPI';
 
+export type { AnonymizedWorkflowExecution } from './models/AnonymizedWorkflowExecution';
 export type { Body_Workflow_Version_upload_workflow_version_icon } from './models/Body_Workflow_Version_upload_workflow_version_icon';
 export type { DevWorkflowExecutionIn } from './models/DevWorkflowExecutionIn';
 export { DocumentationEnum } from './models/DocumentationEnum';
diff --git a/src/client/workflow/models/AnonymizedWorkflowExecution.ts b/src/client/workflow/models/AnonymizedWorkflowExecution.ts
new file mode 100644
index 0000000000000000000000000000000000000000..eb4085fe63360b4b3018cf3e85a097f9679422ed
--- /dev/null
+++ b/src/client/workflow/models/AnonymizedWorkflowExecution.ts
@@ -0,0 +1,42 @@
+/* generated using openapi-typescript-codegen -- do no edit */
+/* istanbul ignore file */
+/* tslint:disable */
+/* eslint-disable */
+
+import type { WorkflowExecutionStatus } from './WorkflowExecutionStatus';
+
+export type AnonymizedWorkflowExecution = {
+    /**
+     * ID of the workflow execution
+     */
+    workflow_execution_id: string;
+    /**
+     * Anonymized user ID of the user who ran the workflow execution
+     */
+    pseudo_uid: string;
+    /**
+     * ID of the workflow mode this workflow execution ran in
+     */
+    workflow_mode_id?: (string | null);
+    /**
+     * Hash of the git commit
+     */
+    git_commit_hash: string;
+    /**
+     * Day of the workflow execution
+     */
+    started_at: string;
+    /**
+     * ID of the workflow
+     */
+    workflow_id: string;
+    /**
+     * ID of developer of the workflow
+     */
+    developer_id: string;
+    /**
+     * End status of the workflow execution
+     */
+    status: WorkflowExecutionStatus;
+};
+
diff --git a/src/client/workflow/models/WorkflowOut.ts b/src/client/workflow/models/WorkflowOut.ts
index e0ef6d9d76564b982caf7146d138252e69202b32..a3d055f5a99d8683b29183cfe42cf01b9903ad28 100644
--- a/src/client/workflow/models/WorkflowOut.ts
+++ b/src/client/workflow/models/WorkflowOut.ts
@@ -19,7 +19,7 @@ export type WorkflowOut = {
      */
     repository_url: string;
     /**
-     * Id of the workflow
+     * ID of the workflow
      */
     workflow_id: string;
     /**
@@ -27,7 +27,7 @@ export type WorkflowOut = {
      */
     versions: Array<WorkflowVersion>;
     /**
-     * Id of developer of the workflow
+     * ID of developer of the workflow
      */
     developer_id: string;
     /**
diff --git a/src/client/workflow/services/WorkflowService.ts b/src/client/workflow/services/WorkflowService.ts
index 4409a96bab414b3598f3c7c6a01e525106de96c1..b173a102fe754904bcd8acfb703ef02616a7d5e5 100644
--- a/src/client/workflow/services/WorkflowService.ts
+++ b/src/client/workflow/services/WorkflowService.ts
@@ -2,6 +2,7 @@
 /* istanbul ignore file */
 /* tslint:disable */
 /* eslint-disable */
+import type { AnonymizedWorkflowExecution } from '../models/AnonymizedWorkflowExecution';
 import type { Body_Workflow_Version_upload_workflow_version_icon } from '../models/Body_Workflow_Version_upload_workflow_version_icon';
 import type { DocumentationEnum } from '../models/DocumentationEnum';
 import type { IconUpdateOut } from '../models/IconUpdateOut';
@@ -82,11 +83,48 @@ export class WorkflowService {
         });
     }
 
+    /**
+     * Get anonymized workflow execution
+     * Get the workflow executions with meta information and anonymized user IDs.
+     *
+     * Permission "workflow:read_statistics" required if the `developer_id` is the same as the uid of the current user,
+     * other "workflow:read_statistics_any".
+     * @param developerId Filter by the developer of the workflows
+     * @param workflowId Filter by workflow IDs
+     * @param start Filter by workflow executions after this date
+     * @param end Filter by workflow executions before this date
+     * @returns AnonymizedWorkflowExecution Successful Response
+     * @throws ApiError
+     */
+    public static workflowGetDeveloperWorkflowStatistics(
+        developerId?: (string | null),
+        workflowId?: (Array<string> | null),
+        start?: (string | null),
+        end?: (string | null),
+    ): CancelablePromise<Array<AnonymizedWorkflowExecution>> {
+        return __request(OpenAPI, {
+            method: 'GET',
+            url: '/workflows/developer_statistics',
+            query: {
+                'developer_id': developerId,
+                'workflow_id': workflowId,
+                'start': start,
+                'end': end,
+            },
+            errors: {
+                400: `Error decoding JWT Token`,
+                403: `Not authenticated`,
+                404: `Entity not Found`,
+                422: `Validation Error`,
+            },
+        });
+    }
+
     /**
      * Get a workflow
      * Get a specific workflow.
      *
-     * Permission "workflow: read" required.
+     * Permission "workflow:read" required.
      * @param wid ID of a workflow
      * @param versionStatus Which versions of the workflow to include in the response. Permission 'workflow:read_any' required if you are not the developer of this workflow. Default PUBLISHED and DEPRECATED
      * @returns WorkflowOut Successful Response
@@ -144,6 +182,8 @@ export class WorkflowService {
     /**
      * Get statistics for a workflow
      * Get the number of started workflow per day.
+     *
+     * Permission "workflow:read" required.
      * @param wid ID of a workflow
      * @returns WorkflowStatistic Successful Response
      * @throws ApiError
diff --git a/src/components/object-storage/modals/PermissionModal.vue b/src/components/object-storage/modals/PermissionModal.vue
index 485f1ace427930c8cd8bb0e36af5a00ec1ec9b8f..60ad031740571fd138c8cb918a68137d4bf94259 100644
--- a/src/components/object-storage/modals/PermissionModal.vue
+++ b/src/components/object-storage/modals/PermissionModal.vue
@@ -435,7 +435,7 @@ function toTimestampChanged(target?: HTMLInputElement | null) {
             <input
               type="date"
               class="form-control"
-              id="permissionToFromInput"
+              id="permissionDateToInput"
               :readonly="formState.readonly"
               :min="
                 permission.from_timestamp != null
diff --git a/src/components/workflows/WorkflowWithVersionsCard.vue b/src/components/workflows/WorkflowWithVersionsCard.vue
index d43ce26bb4024457da84b853064cbf880ee29317..d27d855bc536c91fb40317fdafa283ec144f4639 100644
--- a/src/components/workflows/WorkflowWithVersionsCard.vue
+++ b/src/components/workflows/WorkflowWithVersionsCard.vue
@@ -1,12 +1,18 @@
 <script setup lang="ts">
-import type { WorkflowOut, WorkflowVersion } from "@/client/workflow";
-import { onMounted, ref, watch } from "vue";
-import { Status } from "@/client/workflow";
+import type {
+  AnonymizedWorkflowExecution,
+  WorkflowOut,
+  WorkflowVersion,
+} from "@/client/workflow";
+import { Status, WorkflowExecutionStatus } from "@/client/workflow";
+import { computed, onMounted, ref, watch } from "vue";
 import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue";
 import dayjs from "dayjs";
 import { sortedVersions } from "@/utils/Workflow";
 import { Tooltip } from "bootstrap";
+import { useWorkflowExecutionStore } from "@/stores/workflowExecutions";
 
+const workflowExecutionRepository = useWorkflowExecutionStore();
 const props = defineProps<{
   workflow: WorkflowOut;
   loading: boolean;
@@ -30,6 +36,25 @@ watch(
   },
 );
 
+const workflowExecutions = computed<AnonymizedWorkflowExecution[]>(() =>
+  workflowExecutionRepository.anonymizedExecutions.filter(
+    (execution) => execution.workflow_id == props.workflow.workflow_id,
+  ),
+);
+
+const executionsByVersion = computed<
+  Record<string, AnonymizedWorkflowExecution[]>
+>(() => {
+  const mapping: Record<string, AnonymizedWorkflowExecution[]> = {};
+  for (const version of props.workflow.versions) {
+    mapping[version.git_commit_hash] = [];
+  }
+  for (const execution of workflowExecutions.value) {
+    mapping[execution.git_commit_hash].push(execution);
+  }
+  return mapping;
+});
+
 const statusToIconMapping: Record<string, string> = {
   PUBLISHED: "fa-solid fa-circle-check",
   DENIED: "fa-solid fa-x",
@@ -37,15 +62,51 @@ const statusToIconMapping: Record<string, string> = {
   DEPRECATED: "fa-solid fa-box-archive",
 };
 
+function successfulExecutions(
+  executions: AnonymizedWorkflowExecution[],
+): number {
+  return executions.filter(
+    (execution) => execution.status === WorkflowExecutionStatus.SUCCESS,
+  ).length;
+}
+
+function unsuccessfulExecutions(
+  executions: AnonymizedWorkflowExecution[],
+): number {
+  return executions.filter(
+    (execution) => execution.status !== WorkflowExecutionStatus.SUCCESS,
+  ).length;
+}
+
+function uniqueUsers(executions: AnonymizedWorkflowExecution[]): number {
+  return executions.filter(
+    // filter unique UIDs
+    (execution, index, array) =>
+      array.findIndex((val) => val.pseudo_uid === execution.pseudo_uid) ===
+      index,
+  ).length;
+}
+
 onMounted(() => {
-  if (!props.loading && props.workflow.private) {
-    new Tooltip(`#tooltip-${randomIDSuffix}`);
+  if (!props.loading) {
+    if (props.workflow.private) {
+      new Tooltip(`#tooltip-${randomIDSuffix}`);
+    }
+    document
+      .querySelector("#workflow-card-" + randomIDSuffix)
+      ?.querySelectorAll('[data-bs-toggle="tooltip"]')
+      .forEach((tooltipTriggerEl) =>
+        Tooltip.getOrCreateInstance(tooltipTriggerEl),
+      );
   }
 });
 </script>
 
 <template>
-  <div class="card-hover border border-secondary card m-2">
+  <div
+    :id="'workflow-card-' + randomIDSuffix"
+    class="card-hover border border-secondary card m-2"
+  >
     <div class="card-body">
       <div
         class="card-title fs-3 d-flex justify-content-between align-items-center"
@@ -124,11 +185,12 @@ onMounted(() => {
                 <th scope="col">Version</th>
                 <th scope="col">Status</th>
                 <th scope="col">Updated at</th>
+                <th scope="col" class="text-align-center">Usage</th>
                 <th scope="col" class="text-align-center">Icon</th>
                 <th scope="col">Link</th>
               </tr>
             </thead>
-            <tbody>
+            <tbody class="table-group-divider">
               <tr
                 v-for="version in sortedVersions(props.workflow.versions)"
                 :key="version.git_commit_hash"
@@ -148,7 +210,39 @@ onMounted(() => {
                   {{ version.status }}
                 </td>
                 <td>
-                  {{ dayjs.unix(version.created_at).format("D MMMM YYYY") }}
+                  {{ dayjs.unix(version.created_at).format("DD MMM YYYY") }}
+                </td>
+                <td class="text-align-center">
+                  <span
+                    class="text-success me-1"
+                    data-bs-toggle="tooltip"
+                    data-bs-title="Successful Workflow Executions"
+                  >
+                    {{
+                      successfulExecutions(
+                        executionsByVersion[version.git_commit_hash],
+                      )
+                    }}
+                    <font-awesome-icon icon="fa-solid fa-circle-check" />
+                  </span>
+                  <span
+                    class="text-danger me-1"
+                    data-bs-toggle="tooltip"
+                    data-bs-title="Unsuccessful Workflow Executions"
+                  >
+                    {{
+                      unsuccessfulExecutions(
+                        executionsByVersion[version.git_commit_hash],
+                      )
+                    }}
+                    <font-awesome-icon icon="fa-solid fa-x" />
+                  </span>
+                  <span data-bs-toggle="tooltip" data-bs-title="Unique Users">
+                    {{
+                      uniqueUsers(executionsByVersion[version.git_commit_hash])
+                    }}
+                    <font-awesome-icon icon="fa-solid fa-user" />
+                  </span>
                 </td>
                 <td class="text-align-center">
                   <img
@@ -187,6 +281,33 @@ onMounted(() => {
                   </router-link>
                 </td>
               </tr>
+              <tr>
+                <th scope="row" class="fw-bold">Overall</th>
+                <td colspan="2"></td>
+                <td class="text-align-center">
+                  <span
+                    class="text-success me-1"
+                    data-bs-toggle="tooltip"
+                    data-bs-title="Successful Workflow Executions"
+                  >
+                    {{ successfulExecutions(workflowExecutions) }}
+                    <font-awesome-icon icon="fa-solid fa-circle-check" />
+                  </span>
+                  <span
+                    class="text-danger me-1"
+                    data-bs-toggle="tooltip"
+                    data-bs-title="Unsuccessful Workflow Executions"
+                  >
+                    {{ unsuccessfulExecutions(workflowExecutions) }}
+                    <font-awesome-icon icon="fa-solid fa-x" />
+                  </span>
+                  <span data-bs-toggle="tooltip" data-bs-title="Unique Users">
+                    {{ uniqueUsers(workflowExecutions) }}
+                    <font-awesome-icon icon="fa-solid fa-user" />
+                  </span>
+                </td>
+                <td colspan="2"></td>
+              </tr>
             </tbody>
           </table>
         </div>
diff --git a/src/components/workflows/modals/ArbitraryWorkflowModal.vue b/src/components/workflows/modals/ArbitraryWorkflowModal.vue
index 92ae9243e7074ad2ea9994b35c2367551a25440e..0f56f351e162cdb6e43e061a3dba364381c59456 100644
--- a/src/components/workflows/modals/ArbitraryWorkflowModal.vue
+++ b/src/components/workflows/modals/ArbitraryWorkflowModal.vue
@@ -199,7 +199,7 @@ onMounted(() => {
         ref="arbitraryWorkflowForm"
       >
         <div class="mb-3">
-          <label for="workflowRepositoryInput" class="form-label"
+          <label for="arbitraryWorkflowRepositoryInput" class="form-label"
             >Git Repository URL</label
           >
           <div class="input-group">
@@ -209,7 +209,7 @@ onMounted(() => {
             <input
               type="url"
               class="form-control"
-              id="workflowRepositoryInput"
+              id="arbitraryWorkflowRepositoryInput"
               placeholder="https://..."
               required
               ref="workflowRepositoryElement"
@@ -273,7 +273,9 @@ onMounted(() => {
             </label>
           </div>
           <div class="collapse" id="privateRepositoryCollapse">
-            <label for="tokenUsernameInput" class="form-label">Token</label>
+            <label for="arbitraryRepositoryTokenInput" class="form-label"
+              >Token</label
+            >
             <div class="input-group">
               <div class="input-group-text">
                 <font-awesome-icon icon="fa-solid fa-key" />
@@ -281,7 +283,7 @@ onMounted(() => {
               <input
                 type="password"
                 class="form-control"
-                id="repositoryTokenInput"
+                id="arbitraryRepositoryTokenInput"
                 v-model="repositoryCredentials.token"
                 @change="formState.allowUpload = false"
                 :required="repositoryCredentials.privateRepo"
@@ -342,7 +344,7 @@ onMounted(() => {
           <div class="collapse" id="workflowModeCollapse">
             <div class="row">
               <div class="col-6 mb-2">
-                <label for="modeEntryInput-" class="form-label"
+                <label for="arbitraryModeEntryInput" class="form-label"
                   >Entrypoint</label
                 >
                 <div class="input-group">
@@ -352,7 +354,7 @@ onMounted(() => {
                   <input
                     type="text"
                     class="form-control"
-                    id="modeEntryInput"
+                    id="arbitraryModeEntryInput"
                     maxlength="128"
                     v-model="workflowMode.mode.entrypoint"
                     :required="workflowMode.modeEnabled"
diff --git a/src/components/workflows/modals/CreateWorkflowModal.vue b/src/components/workflows/modals/CreateWorkflowModal.vue
index f9df97b2ede49c80550eae0faf291da294f189fa..86bd5862fcfe811428259c97758a9fb9ca299ee7 100644
--- a/src/components/workflows/modals/CreateWorkflowModal.vue
+++ b/src/components/workflows/modals/CreateWorkflowModal.vue
@@ -389,7 +389,7 @@ onMounted(() => {
           </div>
         </div>
         <div class="mb-3">
-          <label for="workflowRepositoryInput" class="form-label"
+          <label for="createWorkflowRepositoryInput" class="form-label"
             >Git Repository URL</label
           >
           <div class="input-group">
@@ -399,7 +399,7 @@ onMounted(() => {
             <input
               type="url"
               class="form-control"
-              id="workflowRepositoryInput"
+              id="createWorkflowRepositoryInput"
               placeholder="https://..."
               required
               ref="workflowRepositoryElement"
@@ -465,7 +465,7 @@ onMounted(() => {
             </div>
           </div>
           <div class="col-4">
-            <label for="workflowVersionInput" class="form-label"
+            <label for="createWorkflowVersionInput" class="form-label"
               >Initial Version</label
             >
             <div class="input-group">
@@ -475,7 +475,7 @@ onMounted(() => {
               <input
                 type="text"
                 class="form-control"
-                id="workflowRepositoryInput"
+                id="createWorkflowVersionInput"
                 placeholder="v1.0.0"
                 maxlength="10"
                 ref="workflowVersionElement"
@@ -508,7 +508,9 @@ onMounted(() => {
             </label>
           </div>
           <div class="collapse" id="privateRepositoryCollapse">
-            <label for="tokenUsernameInput" class="form-label">Token</label>
+            <label for="createRepositoryTokenInput" class="form-label"
+              >Token</label
+            >
             <div class="input-group">
               <div class="input-group-text">
                 <font-awesome-icon icon="fa-solid fa-key" />
@@ -516,7 +518,7 @@ onMounted(() => {
               <input
                 type="password"
                 class="form-control"
-                id="repositoryTokenInput"
+                id="createRepositoryTokenInput"
                 v-model="repositoryCredentials.token"
                 @change="formState.allowUpload = false"
                 :required="repositoryCredentials.privateRepo"
diff --git a/src/components/workflows/modals/UpdateWorkflowModal.vue b/src/components/workflows/modals/UpdateWorkflowModal.vue
index 2f1aa6daacde55fd19b1b61787e48cbe27a8c685..1b393686f6bdd81ebcdf4ce82d6e975fcac7eaa4 100644
--- a/src/components/workflows/modals/UpdateWorkflowModal.vue
+++ b/src/components/workflows/modals/UpdateWorkflowModal.vue
@@ -362,11 +362,12 @@ onMounted(() => {
             ref="workflowIconElement"
             class="float-end"
             :hidden="!showIcon"
+            alt="Workflow Icon"
           />
         </div>
         <div class="row mb-3">
           <div class="col-8">
-            <label for="workflowGitCommitInput" class="form-label"
+            <label for="updateWorkflowGitCommitInput" class="form-label"
               >Git Commit Hash</label
             >
             <div class="input-group">
@@ -376,7 +377,7 @@ onMounted(() => {
               <input
                 type="text"
                 class="form-control text-lowercase"
-                id="workflowGitCommitInput"
+                id="updateWorkflowGitCommitInput"
                 placeholder="ba8bcd9..."
                 required
                 ref="workflowGitCommitHashElement"
@@ -396,7 +397,9 @@ onMounted(() => {
             </div>
           </div>
           <div class="col-4">
-            <label for="workflowVersionInput" class="form-label">Version</label>
+            <label for="updateWorkflowVersionInput" class="form-label"
+              >Version</label
+            >
             <div class="input-group">
               <div class="input-group-text">
                 <font-awesome-icon icon="fa-solid fa-tag" />
@@ -404,17 +407,17 @@ onMounted(() => {
               <input
                 type="text"
                 class="form-control"
-                id="workflowRepositoryInput"
+                id="updateWorkflowVersionInput"
                 :placeholder="inc(latestVersion.version, 'patch') ?? undefined"
                 maxlength="10"
                 required
                 ref="workflowVersionElement"
                 @change="checkVersionValidity"
                 v-model="workflowUpdate.version"
-                aria-describedby="versionHelp"
+                aria-describedby="updateVersionHelp"
               />
             </div>
-            <div id="versionHelp" class="form-text">
+            <div id="updateVersionHelp" class="form-text">
               Previous Version: {{ latestVersion.version }}
             </div>
           </div>
diff --git a/src/stores/workflowExecutions.ts b/src/stores/workflowExecutions.ts
index 59c6c61c72ddb45716b40106053ec991e02f1a45..87b5d37bb550a8e91291e76533cdf02e95da1c3d 100644
--- a/src/stores/workflowExecutions.ts
+++ b/src/stores/workflowExecutions.ts
@@ -1,5 +1,6 @@
 import { defineStore } from "pinia";
 import type {
+  AnonymizedWorkflowExecution,
   DevWorkflowExecutionIn,
   WorkflowExecutionIn,
   WorkflowExecutionOut,
@@ -7,6 +8,7 @@ import type {
 import {
   WorkflowExecutionService,
   WorkflowExecutionStatus,
+  WorkflowService,
 } from "@/client/workflow";
 import { useAuthStore } from "@/stores/users";
 import dayjs from "dayjs";
@@ -16,8 +18,10 @@ export const useWorkflowExecutionStore = defineStore({
   state: () =>
     ({
       executionMapping: {},
+      anonymizedExecutions: [],
     }) as {
       executionMapping: Record<string, WorkflowExecutionOut>;
+      anonymizedExecutions: AnonymizedWorkflowExecution[];
     },
   getters: {
     executions(): WorkflowExecutionOut[] {
@@ -25,6 +29,22 @@ export const useWorkflowExecutionStore = defineStore({
     },
   },
   actions: {
+    fetchExecutionsForDevStatistics(
+      onFinally?: () => void,
+    ): Promise<AnonymizedWorkflowExecution[]> {
+      if (this.anonymizedExecutions.length > 0) {
+        onFinally?.();
+      }
+      const userStore = useAuthStore();
+      return WorkflowService.workflowGetDeveloperWorkflowStatistics(
+        userStore.currentUID,
+      )
+        .then((executions) => {
+          this.anonymizedExecutions = executions;
+          return executions;
+        })
+        .finally(onFinally);
+    },
     fetchExecutions(onFinally?: () => void): Promise<WorkflowExecutionOut[]> {
       if (Object.keys(this.executionMapping).length > 0) {
         onFinally?.();
diff --git a/src/views/object-storage/BucketView.vue b/src/views/object-storage/BucketView.vue
index 2d1c8234d12d6b8b77e6cdf6d8f291b1e776c502..badf054ecbc935b3c0263756e5b32bebc353ad7f 100644
--- a/src/views/object-storage/BucketView.vue
+++ b/src/views/object-storage/BucketView.vue
@@ -496,6 +496,7 @@ function getObjectFileName(key: string): string {
           ><font-awesome-icon icon="fa-solid fa-magnifying-glass"
         /></span>
         <input
+          id="filterObjectNameInput"
           type="text"
           class="form-control"
           placeholder="Search Files"
diff --git a/src/views/object-storage/BucketsView.vue b/src/views/object-storage/BucketsView.vue
index 19f6a23671006f076364cd772fe08b28b60aff22..ab979d2bf0c3db67201ae61bc94b2748831971a7 100644
--- a/src/views/object-storage/BucketsView.vue
+++ b/src/views/object-storage/BucketsView.vue
@@ -131,6 +131,7 @@ onMounted(() => {
           ><font-awesome-icon icon="fa-solid fa-magnifying-glass"
         /></span>
         <input
+          id="filterBucketNameInput"
           type="text"
           class="form-control"
           placeholder="Search Buckets"
diff --git a/src/views/object-storage/S3KeyView.vue b/src/views/object-storage/S3KeyView.vue
index 87ae43cf260cd6f36d713aa494160c0b816caa53..b0afc9668715d7f703a932d26f7bad0e63c6ed40 100644
--- a/src/views/object-storage/S3KeyView.vue
+++ b/src/views/object-storage/S3KeyView.vue
@@ -60,6 +60,7 @@ function deleteKeyTrigger() {
       />
     </span>
     <input
+      id="s3-access-key"
       class="form-control"
       :type="visibleKeys.access ? 'text' : 'password'"
       :value="props.s3key.access_key"
diff --git a/src/views/workflows/ListWorkflowsView.vue b/src/views/workflows/ListWorkflowsView.vue
index 0f17b24080a0fca156246f6cf8d2a5b6bcc720be..ac39acf8aed4fe2cb96107b67b4bce36ad79274f 100644
--- a/src/views/workflows/ListWorkflowsView.vue
+++ b/src/views/workflows/ListWorkflowsView.vue
@@ -79,6 +79,7 @@ onMounted(() => {
         /></span>
         <input
           type="text"
+          id="filterWorkflowInput"
           class="form-control"
           placeholder="Filter Workflows"
           aria-label="Filter Workflows"
diff --git a/src/views/workflows/MyWorkflowsView.vue b/src/views/workflows/MyWorkflowsView.vue
index dad67158d3231e59afc68ad0fdd978d0ffe611f3..2e1ecde8d926ed346ca30ee86bbf85bd76473d54 100644
--- a/src/views/workflows/MyWorkflowsView.vue
+++ b/src/views/workflows/MyWorkflowsView.vue
@@ -10,8 +10,11 @@ import DeleteModal from "@/components/modals/DeleteModal.vue";
 import UpdateWorkflowVersionIconModal from "@/components/workflows/modals/UpdateWorkflowVersionIconModal.vue";
 import UpdateWorkflowCredentialsModal from "@/components/workflows/modals/UpdateWorkflowCredentialsModal.vue";
 import { useWorkflowStore } from "@/stores/workflows";
+import { useWorkflowExecutionStore } from "@/stores/workflowExecutions";
 
 const workflowRepository = useWorkflowStore();
+const workflowExecutionRepository = useWorkflowExecutionStore();
+
 const workflowsState = reactive<{
   loading: boolean;
   updateWorkflow: WorkflowOut;
@@ -78,6 +81,7 @@ onMounted(() => {
   workflowRepository.fetchOwnWorkflows(() => {
     workflowsState.loading = false;
   });
+  workflowExecutionRepository.fetchExecutionsForDevStatistics();
 });
 </script>
 
diff --git a/src/views/workflows/WorkflowView.vue b/src/views/workflows/WorkflowView.vue
index 4b668301b2a23a4157d19d3d9fcbfc84870fe3f7..2ece0235006271559b4ecc77ba7946f48e5f0a49 100644
--- a/src/views/workflows/WorkflowView.vue
+++ b/src/views/workflows/WorkflowView.vue
@@ -255,9 +255,15 @@ onMounted(() => {
       v-if="activeVersionModeIds.length > 0"
       class="row align-items-center mb-3 fs-5"
     >
-      <label class="col-sm-1 col-form-label"><b>Mode:</b></label>
+      <label class="col-sm-1 col-form-label" for="workflowModeSelect"
+        ><b>Mode:</b></label
+      >
       <div class="col-sm-11">
-        <select class="form-select w-fit" v-model="workflowState.activeModeId">
+        <select
+          id="workflowModeSelect"
+          class="form-select w-fit"
+          v-model="workflowState.activeModeId"
+        >
           <option
             v-for="modeId of activeVersionModeIds"
             :key="modeId"
@@ -325,6 +331,7 @@ onMounted(() => {
             ><font-awesome-icon icon="fa-solid fa-tags" class="text-secondary"
           /></span>
           <select
+            id="workflowVersionSelect"
             class="form-select form-select-sm"
             aria-label="Workflow version selection"
             aria-describedby="workflow-version-wrapping"