diff --git a/README.md b/README.md
index 2056188cc7ff88eb1e9cb0a4cbfe05a65130af32..cb0cac396dac06de905b67f05d408286af9365c1 100644
--- a/README.md
+++ b/README.md
@@ -2,4 +2,4 @@
 The GÉANT interpretation of [`orchestrator-core`](https://github.com/workfloworchestrator/orchestrator-core).
 
 ## Documentation
-You can build the documentation locally using either [build-docs.sh](build-docs.sh) or [test-docs.sh](test-docs.sh).
+You can build the documentation locally using [build-docs.sh](build-docs.sh).
diff --git a/gso/settings.py b/gso/settings.py
index 701f65fddc74029e2fba309d76f5ec275fd1d9e8..61c8b7763e20b5cd08b39aaf39f346bcf23e1d20 100644
--- a/gso/settings.py
+++ b/gso/settings.py
@@ -8,7 +8,7 @@ import json
 import logging
 import os
 
-from pydantic import BaseSettings
+from pydantic import BaseSettings, NonNegativeInt
 
 logger = logging.getLogger(__name__)
 
@@ -31,12 +31,20 @@ class InfoBloxParams(BaseSettings):
     password: str
 
 
+class V4Netmask(NonNegativeInt):
+    le = 32
+
+
+class V6Netmask(NonNegativeInt):
+    le = 128
+
+
 class V4NetworkParams(BaseSettings):
     """A set of parameters that describe an IPv4 network in InfoBlox."""
 
     containers: list[ipaddress.IPv4Network]
     networks: list[ipaddress.IPv4Network]
-    mask: int  # TODO: validation on mask?
+    mask: V4Netmask
 
 
 class V6NetworkParams(BaseSettings):
@@ -44,7 +52,7 @@ class V6NetworkParams(BaseSettings):
 
     containers: list[ipaddress.IPv6Network]
     networks: list[ipaddress.IPv6Network]
-    mask: int  # TODO: validation on mask?
+    mask: V6Netmask
 
 
 class ServiceNetworkParams(BaseSettings):