diff --git a/src/widgets/kapowarr/component.jsx b/src/widgets/kapowarr/component.jsx
new file mode 100644
index 00000000..7c85d7e1
--- /dev/null
+++ b/src/widgets/kapowarr/component.jsx
@@ -0,0 +1,47 @@
+import { useTranslation } from 'react-i18next';
+
+import Container from "components/services/widget/container";
+import Block from "components/services/widget/block";
+import useWidgetAPI from "utils/proxy/use-widget-api";
+
+const ROMM_DEFAULT_FIELDS = ["volumes", "issues", "monitored"];
+const MAX_ALLOWED_FIELDS = 4;
+
+export default function Component({ service }) {
+ const { t } = useTranslation();
+ const { widget } = service;
+
+ const { data: stats, error: statsError } = useWidgetAPI(widget);
+
+ if (statsError) {
+ return ;
+ }
+
+ if (!widget.fields?.length > 0) {
+ widget.fields = ROMM_DEFAULT_FIELDS;
+ } else if (widget.fields.length > MAX_ALLOWED_FIELDS) {
+ widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS);
+ }
+
+ if (!stats || stats.error || statsError || !stats.result) {
+ return (
+
+
+
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/widgets/kapowarr/widget.js b/src/widgets/kapowarr/widget.js
new file mode 100644
index 00000000..ae6c1d54
--- /dev/null
+++ b/src/widgets/kapowarr/widget.js
@@ -0,0 +1,8 @@
+import genericProxyHandler from "utils/proxy/handlers/generic";
+
+const widget = {
+ api: "{url}/api/volumes/stats?api_key={key}",
+ proxyHandler: genericProxyHandler,
+};
+
+export default widget;