diff --git a/main.py b/main.py
index 4cc2e9f..017e2f4 100755
--- a/main.py
+++ b/main.py
@@ -17,7 +17,7 @@ from ucloud_common.request import RequestEntry, RequestPool, RequestType
 from schemas import (CreateVMSchema, VMStatusSchema,
                      CreateImageSchema, VmActionSchema,
                      OTPSchema, CreateHostSchema,
-                     VmMigrationSchema)
+                     VmMigrationSchema, CreateNetworkSchema)
 
 app = Flask(__name__)
 api = Api(app)
@@ -142,6 +142,26 @@ class VMAction(Resource):
             return validator.get_errors(), 400
 
 
+class CreateNetwork(Resource):
+    @staticmethod
+    def post():
+        data = request.json
+        validator = CreateNetwork(data)
+
+        if validator.is_valid():
+            network_entry_json = {
+                "name": data["network_name"],
+                "type": data["network_type"],
+                "first_mac_address": data["first_mac_address"],
+                "network_size": data["network_size"],
+                "network_address": data["network_address"],
+                "dns": data["dns"]
+            }
+            client.put(f"/v1/network/{uuid4()}", json.dumps(network_entry_json))
+        else:
+            return validator.get_errors(), 400
+
+
 class VMMigration(Resource):
     @staticmethod
     def post():
@@ -247,6 +267,8 @@ api.add_resource(VmStatus, "/vm/status")
 api.add_resource(VMAction, "/vm/action")
 api.add_resource(VMMigration, "/vm/migrate")
 
+api.add_resource(CreateNetwork, "/network/create")
+
 api.add_resource(CreateImage, "/image/create")
 api.add_resource(ListPublicImages, "/image/list-public")
 
diff --git a/schemas.py b/schemas.py
index 3aade37..7150f1d 100755
--- a/schemas.py
+++ b/schemas.py
@@ -86,6 +86,33 @@ class CreateVMSchema(OTPSchema):
             self.add_error("Image UUID not valid")
 
 
+class CreateNetworkSchema(OTPSchema):
+    def __init__(self, data):
+        self.network_name = Field("network_name", str, data.get("network_name", KeyError))
+        self.network_type = Field("network_type", str, data.get("network_type", KeyError))
+        self.first_mac_address = Field("first_mac_address", str, data.get("first_mac_address", KeyError))
+        self.network_size = Field("network_size", str, data.get("network_size", KeyError))
+        self.network_address = Field("network_address", str, data.get("network_address", KeyError))
+        self.dns = Field("dns", str, data.get("dns", KeyError))
+
+        self.network_type.validation = self.network_type_validation
+        self.network_size.validation = self.network_size.validation
+
+        fields = [self.network_name, self.network_type, self.first_mac_address,
+                  self.network_size, self.network_address, self.dns]
+        if fields:
+            fields += fields
+        super().__init__(data=data, fields=fields)
+
+    def network_type_validation(self):
+        if self.network_type.value not in ["bridged", "vxlan"]:
+            self.add_error(f"{self.network_type.value} not supported.")
+
+    def network_size_validation(self):
+        if self.network_size.value <= 0:
+            self.add_error(f"Network Size must be a positive number")
+
+
 class VMStatusSchema(BaseSchema):
     def __init__(self, data):
         self.uuid = VmUUIDField(data)