diff --git a/netbox_sys_plugin/migrations/0005_alter_webhooksettings_payload_url.py b/netbox_sys_plugin/migrations/0005_alter_webhooksettings_payload_url.py
new file mode 100644
index 0000000000000000000000000000000000000000..d9715a99fa2c3949b6447c9cc26e597911d10bdb
--- /dev/null
+++ b/netbox_sys_plugin/migrations/0005_alter_webhooksettings_payload_url.py
@@ -0,0 +1,19 @@
+# Generated by Django 4.2.16 on 2025-01-23 12:30
+
+import django.core.validators
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('netbox_sys_plugin', '0004_alter_domainnames_domain_names'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='webhooksettings',
+            name='payload_url',
+            field=models.CharField(max_length=500, validators=[django.core.validators.URLValidator(schemes=['http', 'https'])]),
+        ),
+    ]
diff --git a/netbox_sys_plugin/models/operation.py b/netbox_sys_plugin/models/operation.py
index 9666d0c94cf4076ef82343d84041145a28f2e338..7d3eb4d425411a2e63019c5f2c091dc134c5645e 100644
--- a/netbox_sys_plugin/models/operation.py
+++ b/netbox_sys_plugin/models/operation.py
@@ -3,16 +3,17 @@
 from django.urls import reverse
 from django.db import models
 from django.utils.translation import gettext_lazy as _
+from django.core.validators import URLValidator
 from netbox.models import NetBoxModel
 
 
-
 class WebhookSettings(NetBoxModel):
     """Webhook settings config definition class"""
 
     payload_url = models.CharField(
         max_length=500,
         verbose_name=_('URL'),
+        validators=[URLValidator(schemes=["http", "https"])],
         help_text=_(
             "This URL will be called using the HTTP POST when the webhook is called."
         )
diff --git a/netbox_sys_plugin/tests/vm_machine_type/__init__.py b/netbox_sys_plugin/tests/virtual_machine_type/__init__.py
similarity index 100%
rename from netbox_sys_plugin/tests/vm_machine_type/__init__.py
rename to netbox_sys_plugin/tests/virtual_machine_type/__init__.py
diff --git a/netbox_sys_plugin/tests/vm_machine_type/test_vm_machine_type_api.py b/netbox_sys_plugin/tests/virtual_machine_type/test_virtual_machine_type_api.py
similarity index 99%
rename from netbox_sys_plugin/tests/vm_machine_type/test_vm_machine_type_api.py
rename to netbox_sys_plugin/tests/virtual_machine_type/test_virtual_machine_type_api.py
index 81b1e8136aed12aa7cf98d79e9426d95b0e09e15..43662c6590c94ec0101e37ec8ab2a46f98d235ac 100644
--- a/netbox_sys_plugin/tests/vm_machine_type/test_vm_machine_type_api.py
+++ b/netbox_sys_plugin/tests/virtual_machine_type/test_virtual_machine_type_api.py
@@ -7,7 +7,7 @@ from virtualization.models import ClusterType
 from netbox_sys_plugin.models import VirtualMachineType
 from ..base import BaseAPITestCase
 
-class VmMachineTypeApiTestCase(BaseAPITestCase):
+class VitualMachineTypeApiTestCase(BaseAPITestCase):
     """Test suite for VmMachineType API"""
     model = VirtualMachineType
     brief_fields = ["virtual_machine_type_name","virtual_machine_type_desc","assigned_object_id", "assigned_object_type"]
diff --git a/netbox_sys_plugin/tests/vm_machine_type/test_vm_machine_type_view.py b/netbox_sys_plugin/tests/virtual_machine_type/test_virtual_machine_type_view.py
similarity index 87%
rename from netbox_sys_plugin/tests/vm_machine_type/test_vm_machine_type_view.py
rename to netbox_sys_plugin/tests/virtual_machine_type/test_virtual_machine_type_view.py
index aa991c49623c85bc6ef45fa56b6891feed391d4f..91b515d0a10129ded5a004dd01ad3e9cb5f0a4db 100644
--- a/netbox_sys_plugin/tests/vm_machine_type/test_vm_machine_type_view.py
+++ b/netbox_sys_plugin/tests/virtual_machine_type/test_virtual_machine_type_view.py
@@ -5,11 +5,11 @@ from users.models import ObjectPermission
 from virtualization.models import ClusterType
 from netbox_sys_plugin.models import VirtualMachineType
 from netbox_sys_plugin.forms import VmTypeForm
-from .. base import BaseModelViewTestCase
+from ..base import BaseModelViewTestCase
 
 
 
-class VmMachineTypeFormTestCase(
+class VirtualMachineTypeFormTestCase(
     BaseModelViewTestCase,
 ):
     """VM Machine Type Test Case Class"""
@@ -27,11 +27,11 @@ class VmMachineTypeFormTestCase(
         cluster_type1 = ClusterType.objects.create(name="Test ClusterType1", slug="ClusterType1")
         cluster_type2 = ClusterType.objects.create(name="Test ClusterType2", slug="ClusterType2")
 
-        vmMachineType1 = VirtualMachineType.objects.create(virtual_machine_type_name='vm_type_name1',
+        virtual_machine_type1 = VirtualMachineType.objects.create(virtual_machine_type_name='vm_type_name1',
                                                            virtual_machine_type_desc='vm_type_desc_1',
                                                            assigned_object_type=cluster_type_content_type,
                                                            assigned_object_id=cluster_type1.pk)
-        vmMachineType2 = VirtualMachineType.objects.create(virtual_machine_type_name='vm_type_name2',
+        virtual_machine_type2 = VirtualMachineType.objects.create(virtual_machine_type_name='vm_type_name2',
                                                            virtual_machine_type_desc='vm_type_desc_2',
                                                            assigned_object_type=cluster_type_content_type,
                                                            assigned_object_id=cluster_type2.pk)
@@ -49,8 +49,8 @@ class VmMachineTypeFormTestCase(
 
         cls.csv_update_data = (
             "id,virtual_machine_type_name","virtual_machine_type_desc","assigned_object_type","assigned_object_id\n"
-            f"{vmMachineType1.pk},vm_type_new_name1,vm_type_desc_new,{cluster_type_content_type.pk},{cluster_type1.pk}\n"
-            f"{vmMachineType2.pk},vm_type_new_name2,vm_type_desc_new2,{cluster_type_content_type.pk},{cluster_type2.pk}\n"
+            f"{virtual_machine_type1.pk},vm_type_new_name1,vm_type_desc_new,{cluster_type_content_type.pk},{cluster_type1.pk}\n"
+            f"{virtual_machine_type2.pk},vm_type_new_name2,vm_type_desc_new2,{cluster_type_content_type.pk},{cluster_type2.pk}\n"
         )
 
     def test_create_already_existing_vm_type(self):
diff --git a/netbox_sys_plugin/tests/webhook_settings/__init__.py b/netbox_sys_plugin/tests/webhook_settings/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/netbox_sys_plugin/tests/webhook_settings/test_webhook_settings_view.py b/netbox_sys_plugin/tests/webhook_settings/test_webhook_settings_view.py
new file mode 100644
index 0000000000000000000000000000000000000000..5e8e8f7ed1c4fd45d56636c3eff5989c4acbaf6b
--- /dev/null
+++ b/netbox_sys_plugin/tests/webhook_settings/test_webhook_settings_view.py
@@ -0,0 +1,110 @@
+"""Webhook Settings Test Case Class"""
+
+from django.contrib.contenttypes.models import ContentType
+from users.models import ObjectPermission
+from netbox_sys_plugin.models import WebhookSettings
+from netbox_sys_plugin.forms import WebhookSettingsForm
+from ..base import BaseModelViewTestCase
+
+
+class WebhookSettingsFormTestCase(
+    BaseModelViewTestCase,
+):
+    """Webhook Settings Test Case Class"""
+
+    model = WebhookSettings
+    form = WebhookSettingsForm
+
+    def test_create_valid_webhook_settings(self):
+        """Create a valid webhook settings"""
+
+        form = WebhookSettingsForm(data= {
+            "payload_url": "https://www.test.com",
+            "http_content_type": "test http content type"
+        })
+        self.assertTrue(form.is_valid())
+
+        # Setup object permissions for the test user
+        obj_perm = ObjectPermission(
+            name='Test permission',
+            actions=['add', 'change']
+        )
+        obj_perm.save()
+        obj_perm.users.add(self.user)  # pylint: disable=no-member
+        obj_perm.object_types.add(ContentType.objects.get_for_model(self.model)) # pylint: disable=no-member
+
+    def test_invalid_webhook_settings_format(self):
+        """
+        Test invalid webhook settings invalid format.
+        """
+
+        # pylint: disable=W0201
+        # Set up valid form data
+        self.invalid_valid_form_data = {
+            "payload_url": "https://www.test.com",
+            "http_content_type": "test http content type"
+        }
+
+        #Invalid payload url
+        invalid_form_data = self.invalid_valid_form_data.copy()
+        invalid_form_data["payload_url"] = "Invalid" # Invalid format
+        form = self.form(data=invalid_form_data)
+        self.assertFalse(form.is_valid())
+        self.assertIn(
+            "Enter a valid URL.",
+            form.errors.get("payload_url", []),
+        )
+
+        #Missing payload url
+        invalid_form_data = self.invalid_valid_form_data.copy()
+        invalid_form_data["payload_url"] = None # Invalid format
+        form = self.form(data=invalid_form_data)
+        self.assertFalse(form.is_valid())
+        self.assertIn(
+            "This field is required.",
+            form.errors.get("payload_url", []),
+        )
+
+        #Missing http content type
+        invalid_form_data = self.invalid_valid_form_data.copy()
+        invalid_form_data["http_content_type"] = None # Invalid format
+        form = self.form(data=invalid_form_data)
+        self.assertFalse(form.is_valid())
+        self.assertIn(
+            "This field is required.",
+            form.errors.get("http_content_type", []),
+        )
+
+    def test_create_more_than_one_webhook_settings(self):
+        """Test the creation of 2 webhook settings"""
+
+        # pylint: disable=W0201
+        self.vmMachineType1 = WebhookSettings.objects.create(
+            payload_url='https://www.test.com',
+            http_content_type='test http content type')
+
+        form = WebhookSettingsForm(data= {
+            "payload_url": "https://www.test2.com",
+            "http_content_type": "test http content type 2"
+        })
+
+        self.assertFalse(form.is_valid())
+        # Setup object permissions for the test user
+        obj_perm = ObjectPermission(
+            name='Test permission',
+            actions=['add', 'change']
+        )
+        obj_perm.save()
+        obj_perm.users.add(self.user)  # pylint: disable=no-member
+        obj_perm.object_types.add(ContentType.objects.get_for_model(self.model)) # pylint: disable=no-member
+
+        self.assertIn(
+            "You can only have one webbook setting",
+            form.errors.get("__all__",[])
+        )
+
+
+    def tearDown(self) -> None:# pylint: disable=invalid-name
+        """Method called immediately after the test method has been called and the result recorded."""
+        WebhookSettings.objects.all().delete()
+        super().tearDown()
diff --git a/netbox_sys_plugin/views.py b/netbox_sys_plugin/views.py
index 48e31e94b2d7d8b8edf8e8464186a12a1a71d9d1..977300ce5656a39ff98ba4b645a00b43b4d8b310 100644
--- a/netbox_sys_plugin/views.py
+++ b/netbox_sys_plugin/views.py
@@ -193,7 +193,6 @@ class WebhookSettingsListView(generic.ObjectListView):
 
     queryset = models.WebhookSettings.objects.all()
     table = tables.WebhookSettingsTable
-    filterset_form = forms.WebhookSettingsFilterForm
 
 class WebhookSettingsEditView(generic.ObjectEditView):
     """