diff --git a/server/notification-providers/twilio.js b/server/notification-providers/twilio.js
new file mode 100644
index 0000000000..8f4db04045
--- /dev/null
+++ b/server/notification-providers/twilio.js
@@ -0,0 +1,41 @@
+const NotificationProvider = require("./notification-provider");
+const axios = require("axios");
+
+class Twilio extends NotificationProvider {
+
+    name = "twilio";
+
+    async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+
+        let okMsg = "Sent Successfully.";
+
+        let accountSID = notification.twilioAccountSID;
+        let authToken = notification.twilioAuthToken;
+
+        try {
+
+            let config = {
+                headers: {
+                    "Content-Type": "application/x-www-form-urlencoded;charset=utf-8",
+                    "Authorization": "Basic " + Buffer.from(accountSID + ":" + authToken).toString("base64"),
+                }
+            };
+
+            let data = new URLSearchParams();
+            data.append("To", notification.twilioToNumber);
+            data.append("From", notification.twilioFromNumber);
+            data.append("Body", msg);
+
+            let url = "https://api.twilio.com/2010-04-01/Accounts/" + accountSID + "/Messages.json";
+
+            await axios.post(url, data, config);
+
+            return okMsg;
+        } catch (error) {
+            this.throwGeneralAxiosError(error);
+        }
+    }
+
+}
+
+module.exports = Twilio;
diff --git a/server/notification.js b/server/notification.js
index f69e0a384b..9bfa371d95 100644
--- a/server/notification.js
+++ b/server/notification.js
@@ -42,6 +42,7 @@ const Stackfield = require("./notification-providers/stackfield");
 const Teams = require("./notification-providers/teams");
 const TechulusPush = require("./notification-providers/techulus-push");
 const Telegram = require("./notification-providers/telegram");
+const Twilio = require("./notification-providers/twilio");
 const Splunk = require("./notification-providers/splunk");
 const Webhook = require("./notification-providers/webhook");
 const WeCom = require("./notification-providers/wecom");
@@ -105,6 +106,7 @@ class Notification {
             new Teams(),
             new TechulusPush(),
             new Telegram(),
+            new Twilio(),
             new Splunk(),
             new Webhook(),
             new WeCom(),
diff --git a/src/components/NotificationDialog.vue b/src/components/NotificationDialog.vue
index ce38c90ea9..7454931e64 100644
--- a/src/components/NotificationDialog.vue
+++ b/src/components/NotificationDialog.vue
@@ -144,6 +144,7 @@ export default {
                 "stackfield": "Stackfield",
                 "teams": "Microsoft Teams",
                 "telegram": "Telegram",
+                "twilio": "Twilio",
                 "Splunk": "Splunk",
                 "webhook": "Webhook",
                 "GoAlert": "GoAlert",
diff --git a/src/components/notifications/Twilio.vue b/src/components/notifications/Twilio.vue
new file mode 100644
index 0000000000..3edf1e3dff
--- /dev/null
+++ b/src/components/notifications/Twilio.vue
@@ -0,0 +1,27 @@
+<template>
+    <div class="mb-3">
+        <label for="twilio-account-sid" class="form-label">{{ $t("Account SID") }}</label>
+        <input id="twilio-account-sid" v-model="$parent.notification.twilioAccountSID" type="text" class="form-control" required>
+    </div>
+
+    <div class="mb-3">
+        <label for="twilio-auth-token" class="form-label">{{ $t("Auth Token") }}</label>
+        <input id="twilio-auth-token" v-model="$parent.notification.twilioAuthToken" type="text" class="form-control" required>
+    </div>
+
+    <div class="mb-3">
+        <label for="twilio-from-number" class="form-label">{{ $t("From Number") }}</label>
+        <input id="twilio-from-number" v-model="$parent.notification.twilioFromNumber" type="text" class="form-control" required>
+    </div>
+
+    <div class="mb-3">
+        <label for="twilio-to-number" class="form-label">{{ $t("To Number") }}</label>
+        <input id="twilio-to-number" v-model="$parent.notification.twilioToNumber" type="text" class="form-control" required>
+    </div>
+
+    <div class="mb-3">
+        <i18n-t tag="p" keypath="More info on:" style="margin-top: 8px;">
+            <a href="https://www.twilio.com/docs/sms" target="_blank">https://www.twilio.com/docs/sms</a>
+        </i18n-t>
+    </div>
+</template>
diff --git a/src/components/notifications/index.js b/src/components/notifications/index.js
index 03bdbf4104..7b5e6b6c71 100644
--- a/src/components/notifications/index.js
+++ b/src/components/notifications/index.js
@@ -42,6 +42,7 @@ import STMP from "./SMTP.vue";
 import Teams from "./Teams.vue";
 import TechulusPush from "./TechulusPush.vue";
 import Telegram from "./Telegram.vue";
+import Twilio from "./Twilio.vue";
 import Webhook from "./Webhook.vue";
 import WeCom from "./WeCom.vue";
 import GoAlert from "./GoAlert.vue";
@@ -97,6 +98,7 @@ const NotificationFormList = {
     "stackfield": Stackfield,
     "teams": Teams,
     "telegram": Telegram,
+    "twilio": Twilio,
     "Splunk": Splunk,
     "webhook": Webhook,
     "WeCom": WeCom,
diff --git a/src/lang/en.json b/src/lang/en.json
index 0c9fc38407..e7656c4740 100644
--- a/src/lang/en.json
+++ b/src/lang/en.json
@@ -707,5 +707,9 @@
     "wayToGetPagerTreeIntegrationURL": "After creating the Uptime Kuma integration in PagerTree, copy the Endpoint. See full details {0}",
     "lunaseaTarget": "Target",
     "lunaseaDeviceID": "Device ID",
-    "lunaseaUserID": "User ID"
+    "lunaseaUserID": "User ID",
+    "twilioAccountSID": "Account SID",
+    "twilioAuthToken": "Auth Token",
+    "twilioFromNumber": "From Number",
+    "twilioToNumber": "To Number"
 }