diff --git a/backend/package-lock.json b/backend/package-lock.json
index e98125430b2ab246b735843c2cb2d1d7af18bdfa..2de6e2c44a1626978c0fe686fdd3d2463718d230 100644
--- a/backend/package-lock.json
+++ b/backend/package-lock.json
@@ -16,11 +16,13 @@
         "ejs": "^3.1.6",
         "fastify": "^3.27.1",
         "fastify-cors": "^6.0.2",
+        "fastify-plugin": "^3.0.1",
         "fastify-static": "^4.6.1",
         "fastify-swagger": "^5.0.0",
         "knex": "^1.0.3",
         "pg": "^8.7.3",
         "point-of-view": "^5.2.0",
+        "rollbar": "^2.25.0",
         "sharp": "^0.30.2"
       },
       "devDependencies": {
@@ -2427,6 +2429,11 @@
       "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
       "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
     },
+    "node_modules/console-polyfill": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/console-polyfill/-/console-polyfill-0.3.0.tgz",
+      "integrity": "sha512-w+JSDZS7XML43Xnwo2x5O5vxB0ID7T5BdqDtyqT6uiCAX2kZAgcWxNaGqT97tZfSHzfOcvrfsDAodKcJ3UvnXQ=="
+    },
     "node_modules/content-disposition": {
       "version": "0.5.4",
       "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -2571,6 +2578,15 @@
         }
       }
     },
+    "node_modules/decache": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/decache/-/decache-3.1.0.tgz",
+      "integrity": "sha1-T1A2+9ZYH8yXI3rDlUokS5U2wto=",
+      "optional": true,
+      "dependencies": {
+        "find": "^0.2.4"
+      }
+    },
     "node_modules/decimal.js": {
       "version": "10.3.1",
       "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
@@ -2849,6 +2865,14 @@
         "is-arrayish": "^0.2.1"
       }
     },
+    "node_modules/error-stack-parser": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.7.tgz",
+      "integrity": "sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==",
+      "dependencies": {
+        "stackframe": "^1.1.1"
+      }
+    },
     "node_modules/escalade": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -3528,6 +3552,15 @@
         "node": ">=8"
       }
     },
+    "node_modules/find": {
+      "version": "0.2.9",
+      "resolved": "https://registry.npmjs.org/find/-/find-0.2.9.tgz",
+      "integrity": "sha1-S3Px/55WrZG3bnFkB/5f/mVUu4w=",
+      "optional": true,
+      "dependencies": {
+        "traverse-chain": "~0.1.0"
+      }
+    },
     "node_modules/find-my-way": {
       "version": "4.5.1",
       "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-4.5.1.tgz",
@@ -4134,6 +4167,11 @@
         "node": ">= 0.10"
       }
     },
+    "node_modules/is_js": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/is_js/-/is_js-0.9.0.tgz",
+      "integrity": "sha1-CrlFQFArp6+iTIVqqYVWFmnpxS0="
+    },
     "node_modules/is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -5167,6 +5205,11 @@
       "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
       "dev": true
     },
+    "node_modules/json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+    },
     "node_modules/json5": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
@@ -6477,6 +6520,14 @@
         "node": ">=8"
       }
     },
+    "node_modules/request-ip": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-2.0.2.tgz",
+      "integrity": "sha1-3urm1K8hdoSX24zQX6NxQ/jxJX4=",
+      "dependencies": {
+        "is_js": "^0.9.0"
+      }
+    },
     "node_modules/require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -6595,6 +6646,41 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/rollbar": {
+      "version": "2.25.0",
+      "resolved": "https://registry.npmjs.org/rollbar/-/rollbar-2.25.0.tgz",
+      "integrity": "sha512-mytaGBKAeDkqb/sKXFLQ5eWWw9zzpFRGfPruUWN84AJF+Nwgo8BdGC0CVaHclvHzGImp+seLoKk1NQprU96c4w==",
+      "dependencies": {
+        "async": "~3.2.3",
+        "console-polyfill": "0.3.0",
+        "error-stack-parser": "^2.0.4",
+        "json-stringify-safe": "~5.0.0",
+        "lru-cache": "~2.2.1",
+        "request-ip": "~2.0.1",
+        "source-map": "^0.5.7"
+      },
+      "optionalDependencies": {
+        "decache": "^3.0.5"
+      }
+    },
+    "node_modules/rollbar/node_modules/async": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+      "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
+    },
+    "node_modules/rollbar/node_modules/lru-cache": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
+      "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0="
+    },
+    "node_modules/rollbar/node_modules/source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/run-parallel": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -6963,6 +7049,11 @@
         "node": ">=8"
       }
     },
+    "node_modules/stackframe": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz",
+      "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg=="
+    },
     "node_modules/statuses": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
@@ -7285,6 +7376,12 @@
         "node": ">=8"
       }
     },
+    "node_modules/traverse-chain": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz",
+      "integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=",
+      "optional": true
+    },
     "node_modules/ts-jest": {
       "version": "27.1.3",
       "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz",
@@ -9680,6 +9777,11 @@
       "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
       "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
     },
+    "console-polyfill": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/console-polyfill/-/console-polyfill-0.3.0.tgz",
+      "integrity": "sha512-w+JSDZS7XML43Xnwo2x5O5vxB0ID7T5BdqDtyqT6uiCAX2kZAgcWxNaGqT97tZfSHzfOcvrfsDAodKcJ3UvnXQ=="
+    },
     "content-disposition": {
       "version": "0.5.4",
       "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -9785,6 +9887,15 @@
         "ms": "2.1.2"
       }
     },
+    "decache": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/decache/-/decache-3.1.0.tgz",
+      "integrity": "sha1-T1A2+9ZYH8yXI3rDlUokS5U2wto=",
+      "optional": true,
+      "requires": {
+        "find": "^0.2.4"
+      }
+    },
     "decimal.js": {
       "version": "10.3.1",
       "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
@@ -10004,6 +10115,14 @@
         "is-arrayish": "^0.2.1"
       }
     },
+    "error-stack-parser": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.7.tgz",
+      "integrity": "sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==",
+      "requires": {
+        "stackframe": "^1.1.1"
+      }
+    },
     "escalade": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -10520,6 +10639,15 @@
         "to-regex-range": "^5.0.1"
       }
     },
+    "find": {
+      "version": "0.2.9",
+      "resolved": "https://registry.npmjs.org/find/-/find-0.2.9.tgz",
+      "integrity": "sha1-S3Px/55WrZG3bnFkB/5f/mVUu4w=",
+      "optional": true,
+      "requires": {
+        "traverse-chain": "~0.1.0"
+      }
+    },
     "find-my-way": {
       "version": "4.5.1",
       "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-4.5.1.tgz",
@@ -10964,6 +11092,11 @@
       "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
       "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
     },
+    "is_js": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/is_js/-/is_js-0.9.0.tgz",
+      "integrity": "sha1-CrlFQFArp6+iTIVqqYVWFmnpxS0="
+    },
     "is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -11757,6 +11890,11 @@
       "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
       "dev": true
     },
+    "json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+    },
     "json5": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
@@ -12748,6 +12886,14 @@
         "rc": "^1.2.8"
       }
     },
+    "request-ip": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/request-ip/-/request-ip-2.0.2.tgz",
+      "integrity": "sha1-3urm1K8hdoSX24zQX6NxQ/jxJX4=",
+      "requires": {
+        "is_js": "^0.9.0"
+      }
+    },
     "require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -12831,6 +12977,38 @@
         "glob": "^7.1.3"
       }
     },
+    "rollbar": {
+      "version": "2.25.0",
+      "resolved": "https://registry.npmjs.org/rollbar/-/rollbar-2.25.0.tgz",
+      "integrity": "sha512-mytaGBKAeDkqb/sKXFLQ5eWWw9zzpFRGfPruUWN84AJF+Nwgo8BdGC0CVaHclvHzGImp+seLoKk1NQprU96c4w==",
+      "requires": {
+        "async": "~3.2.3",
+        "console-polyfill": "0.3.0",
+        "decache": "^3.0.5",
+        "error-stack-parser": "^2.0.4",
+        "json-stringify-safe": "~5.0.0",
+        "lru-cache": "~2.2.1",
+        "request-ip": "~2.0.1",
+        "source-map": "^0.5.7"
+      },
+      "dependencies": {
+        "async": {
+          "version": "3.2.3",
+          "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+          "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
+        },
+        "lru-cache": {
+          "version": "2.2.4",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
+          "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0="
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+        }
+      }
+    },
     "run-parallel": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -13111,6 +13289,11 @@
         }
       }
     },
+    "stackframe": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz",
+      "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg=="
+    },
     "statuses": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
@@ -13354,6 +13537,12 @@
         "punycode": "^2.1.1"
       }
     },
+    "traverse-chain": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz",
+      "integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=",
+      "optional": true
+    },
     "ts-jest": {
       "version": "27.1.3",
       "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz",
diff --git a/backend/package.json b/backend/package.json
index 53b2c70d418b345eddcccd2fec41613eff8611ff..ce640ab57beacb5b0a3354eb90cfebb00d260956 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -25,11 +25,13 @@
     "ejs": "^3.1.6",
     "fastify": "^3.27.1",
     "fastify-cors": "^6.0.2",
+    "fastify-plugin": "^3.0.1",
     "fastify-static": "^4.6.1",
     "fastify-swagger": "^5.0.0",
     "knex": "^1.0.3",
     "pg": "^8.7.3",
     "point-of-view": "^5.2.0",
+    "rollbar": "^2.25.0",
     "sharp": "^0.30.2"
   },
   "devDependencies": {
diff --git a/backend/src/index.ts b/backend/src/index.ts
index 47eb190bc27fee83e5faf238d7dc2ce8ba83e256..f1bd02f0cd4bd2a539241ec14979c8cdc13756d8 100644
--- a/backend/src/index.ts
+++ b/backend/src/index.ts
@@ -1,6 +1,7 @@
 import fastify from "fastify";
 import fastifyCors from "fastify-cors";
 import fastifySwagger from "fastify-swagger";
+import fastifyRollbar from "./rollbar_plugin";
 
 const server = fastify({
   logger: {
@@ -12,6 +13,8 @@ const server = fastify({
   },
 });
 
+server.register(fastifyRollbar);
+
 server.register(fastifyCors, {
   // TODO: use the correct origins
   origin: "*",
diff --git a/backend/src/rollbar_plugin.ts b/backend/src/rollbar_plugin.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1eadf0d58e95f2c890d42b547b1d992c6ef65f6b
--- /dev/null
+++ b/backend/src/rollbar_plugin.ts
@@ -0,0 +1,32 @@
+import Rollbar from "rollbar";
+
+const rollbar = new Rollbar({
+  accessToken: process.env.ROLLBAR_ACCESS_TOKEN,
+  // verbose: true,
+  captureUncaught: true,
+  captureUnhandledRejections: true,
+  enabled: !(process.env.NODE_ENV === "development"),
+  payload: {
+    environment: process.env.NODE_ENV,
+    server: {
+      branch: process.env.APP_VERSION,
+      // host: "",
+      // root: "",
+    },
+  },
+});
+
+import fp from "fastify-plugin";
+import { FastifyPluginCallback } from "fastify";
+
+const rollbarConnector: FastifyPluginCallback = (fastify, _options, done) => {
+  const defaultHandler = fastify.errorHandler;
+  fastify.setErrorHandler((error, request, reply) => {
+    defaultHandler(error, request, reply);
+    rollbar.error(error);
+  });
+  // fastify.decorate('Rollbar', rollbar);
+  done();
+};
+
+export default fp(rollbarConnector);