diff --git a/gso/services/infoblox.py b/gso/services/infoblox.py
new file mode 100644
index 0000000000000000000000000000000000000000..652e63f6812857b22ca7175c39c74273dfe4554f
--- /dev/null
+++ b/gso/services/infoblox.py
@@ -0,0 +1,47 @@
+import ipaddress
+
+from infoblox_client import connector, objects
+
+from gso.settings import load_oss_params
+
+
+def _setup_connection() -> connector.Connector:
+    oss = load_oss_params()
+    options = {
+        "host": oss.IPAM.INFOBLOX.host,
+        "username": oss.IPAM.INFOBLOX.username,
+        "password": oss.IPAM.INFOBLOX.password,
+        "wapi_version": oss.IPAM.INFOBLOX.wapi_version[1:],  # remove the 'v' in front of the version number
+        "ssl_verify": True if oss.IPAM.INFOBLOX.scheme == "https" else False,
+    }
+    return connector.Connector(options)
+
+
+def allocate_network(ip_network: ipaddress.IPv4Network | ipaddress.IPv6Network) -> objects.Network:
+    conn = _setup_connection()
+    return objects.Network.create(conn, str(ip_network))
+
+
+def delete_network(ip_network: ipaddress.IPv4Network | ipaddress.IPv6Network) -> None:
+    conn = _setup_connection()
+    network = objects.Network.search(conn, cidr=str(ip_network))
+    network.delete()
+
+
+def allocate_host(hostname: str, net_cidr: ipaddress.IPv4Network | ipaddress.IPv6Network) -> objects.HostRecord:
+    conn = _setup_connection()
+    address = objects.IPAllocation.next_available_ip_from_cidr("default", net_cidr)
+    ip_object = objects.IP.create(address, "00:00:00:00:00:00", configure_for_dhcp=False)
+    return objects.HostRecord.create(conn, name=hostname, ip=ip_object)
+
+
+def delete_host_by_ip(ip_addr: ipaddress.IPv4Address | ipaddress.IPv6Address) -> None:
+    conn = _setup_connection()
+    host = objects.HostRecord.search(conn, ipv4addr=ip_addr)
+    host.delete()
+
+
+def delete_host_by_fqdn(fqdn: str) -> None:
+    conn = _setup_connection()
+    host = objects.HostRecord.search(conn, name=fqdn)
+    host.delete()
diff --git a/setup.py b/setup.py
index 97e32111f2347c5bffdd9d3da9485013a1de115a..c88af354257a3600ed927a8182dd4b70bc3e6329 100644
--- a/setup.py
+++ b/setup.py
@@ -10,8 +10,8 @@ setup(
     packages=find_packages(),
     install_requires=[
         "orchestrator-core==1.2.2",
-        "pydantic",
-        "requests",
+        "requests~=2.31.0",
+        "infoblox-client~=0.6.0",
         "pycountry",
     ],
 )