diff --git a/src/widgets/pfsenseapi/component.jsx b/src/widgets/pfsenseapi/component.jsx
new file mode 100644
index 00000000..00e0719e
--- /dev/null
+++ b/src/widgets/pfsenseapi/component.jsx
@@ -0,0 +1,71 @@
+import { useTranslation } from "next-i18next";
+
+import Container from "components/services/widget/container";
+import Block from "components/services/widget/block";
+import useWidgetAPI from "utils/proxy/use-widget-api";
+import { sys } from "typescript";
+
+export default function Component({ service }) {
+ const { t } = useTranslation();
+
+ const { widget } = service;
+
+ const { data: systemData, error: systemError } = useWidgetAPI(widget, "system");
+ const { data: interfaceData, error: interfaceError } = useWidgetAPI(widget, "interface");
+
+ const showDiskUsage = widget.fields?.includes('disk');
+ const showWanIP = widget.fields?.includes('wanIP');
+
+ if (systemError || interfaceError) {
+ const finalError = systemError ?? interfaceError;
+ return ;
+ }
+
+ if (!systemData || !interfaceData) {
+ return (
+
+
+
+ {showDiskUsage && }
+
+
+ {showWanIP && }
+
+ );
+ }
+
+
+ const loadAvg = systemData.data.load_avg[0];
+ const memory = systemData.data.mem_usage;
+ const tempC = systemData.data.temp_c
+ const disk = systemData.data.disk_usage
+
+ const wanState = interfaceData.data.filter(l => l.hwif === widget.wan)[0].status
+ const wanStatus = (wanState == "up") ?
+ {t("pfsenseapi.up")}:
+ {t("pfsenseapi.down")};
+ const wanIP = interfaceData.data.filter(l => l.hwif === widget.wan)[0].ipaddr
+
+ return (
+
+
+
+ {showDiskUsage && }
+
+
+ {showWanIP && }
+
+ );
+}
diff --git a/src/widgets/pfsenseapi/widget.js b/src/widgets/pfsenseapi/widget.js
new file mode 100644
index 00000000..88aa44fd
--- /dev/null
+++ b/src/widgets/pfsenseapi/widget.js
@@ -0,0 +1,24 @@
+
+import genericProxyHandler from "utils/proxy/handlers/generic";
+
+const widget = {
+ api: "{url}/api/v1/{endpoint}",
+ proxyHandler: genericProxyHandler,
+
+ mappings: {
+ system: {
+ endpoint: "status/system",
+ validate: [
+ "data"
+ ]
+ },
+ interface: {
+ endpoint: "status/interface",
+ validate: [
+ "data"
+ ]
+ }
+ },
+};
+
+export default widget;