diff --git a/catalog-model/pom.xml b/catalog-model/pom.xml
index ff28ea6..fc55fb7 100644
--- a/catalog-model/pom.xml
+++ b/catalog-model/pom.xml
@@ -364,6 +364,12 @@
       <version>3.1.0</version>
     </dependency>
 
+    <dependency>
+      <groupId>com.googlecode.jmapper-framework</groupId>
+      <artifactId>jmapper-core</artifactId>
+      <version>${jMapper.version}</version>
+    </dependency>
+
   </dependencies>
   <build>
     <plugins>
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/Model.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/Model.java
new file mode 100644
index 0000000..99d0f65
--- /dev/null
+++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/Model.java
@@ -0,0 +1,34 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+package org.openecomp.sdc.be.model;
+
+import com.googlecode.jmapper.annotations.JGlobalMap;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@JGlobalMap
+public class Model {
+
+    private String name;
+
+}
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ModelOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ModelOperation.java
new file mode 100644
index 0000000..c604df6
--- /dev/null
+++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ModelOperation.java
@@ -0,0 +1,76 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+package org.openecomp.sdc.be.model.operations.impl;
+
+import fj.data.Either;
+import java.util.Objects;
+import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
+import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
+import org.openecomp.sdc.be.model.Model;
+import org.openecomp.sdc.be.model.jsonjanusgraph.operations.exception.OperationException;
+import org.openecomp.sdc.be.resources.data.ModelData;
+import org.openecomp.sdc.common.log.enums.EcompLoggerErrorCode;
+import org.openecomp.sdc.common.log.wrappers.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component("model-operation")
+public class ModelOperation extends AbstractOperation {
+
+    private static final Logger log = Logger.getLogger(ModelOperation.class);
+
+    private final JanusGraphGenericDao genericDao;
+
+    @Autowired
+    public ModelOperation(final JanusGraphGenericDao janusGraphGenericDao) {
+        this.genericDao = janusGraphGenericDao;
+    }
+
+    public Model createModel(final Model model, final boolean inTransaction) {
+        Model result = null;
+        final ModelData modelData = new ModelData(model.getName(), UniqueIdBuilder.buildModelUid(model.getName()));
+        try {
+            final Either<ModelData, JanusGraphOperationStatus> createNode = genericDao.createNode(modelData, ModelData.class);
+            if (createNode.isRight()) {
+                final JanusGraphOperationStatus janusGraphOperationStatus = createNode.right().value();
+                log.error(EcompLoggerErrorCode.DATA_ERROR, ModelOperation.class.getName(), "Problem while creating model, reason {}",
+                    janusGraphOperationStatus);
+                if (janusGraphOperationStatus == JanusGraphOperationStatus.JANUSGRAPH_SCHEMA_VIOLATION) {
+                    throw new OperationException(ActionStatus.MODEL_ALREADY_EXISTS, model.getName());
+                }
+                throw new OperationException(ActionStatus.GENERAL_ERROR,
+                    String.format("Failed to create model %s on JanusGraph with %s error", model, janusGraphOperationStatus));
+            }
+            result = new Model(createNode.left().value().getName());
+            return result;
+        } finally {
+            if (!inTransaction) {
+                if (Objects.nonNull(result)) {
+                    genericDao.commit();
+                } else {
+                    genericDao.rollback();
+                }
+            }
+        }
+    }
+
+}
+
+
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/UniqueIdBuilder.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/UniqueIdBuilder.java
index c9225c7..62404aa 100644
--- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/UniqueIdBuilder.java
+++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/UniqueIdBuilder.java
@@ -202,4 +202,8 @@
     public static String buildGroupPropertyValueUid(String groupUniqueId, Integer index) {
         return groupUniqueId + DOT + "property" + DOT + index;
     }
+
+    public static String buildModelUid(final String modelName) {
+        return NodeTypeEnum.Model.getName() + DOT + modelName;
+    }
 }
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/ModelCreateRequest.java b/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/ModelCreateRequest.java
new file mode 100644
index 0000000..0d294b4
--- /dev/null
+++ b/catalog-model/src/main/java/org/openecomp/sdc/be/ui/model/ModelCreateRequest.java
@@ -0,0 +1,36 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+package org.openecomp.sdc.be.ui.model;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import lombok.Data;
+
+/**
+ * This class is responsible for holding all required fields from the create Model post request.
+ * It also validates the Model 'name' field.
+ */
+@Data
+public class ModelCreateRequest {
+
+    @NotNull(message = "Model name cannot be null")
+    @Size(min = 2, message = "Model name cannot be empty")
+    private String name;
+
+}
diff --git a/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/ModelOperationTest.java b/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/ModelOperationTest.java
new file mode 100644
index 0000000..c1c0132
--- /dev/null
+++ b/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/ModelOperationTest.java
@@ -0,0 +1,80 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+package org.openecomp.sdc.be.model.operations.impl;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import fj.data.Either;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.TestInstance.Lifecycle;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
+import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
+import org.openecomp.sdc.be.model.Model;
+import org.openecomp.sdc.be.model.ModelTestBase;
+import org.openecomp.sdc.be.model.jsonjanusgraph.operations.exception.OperationException;
+import org.openecomp.sdc.be.resources.data.ModelData;
+import org.springframework.test.context.ContextConfiguration;
+
+@ContextConfiguration("classpath:application-context-test.xml")
+@TestInstance(Lifecycle.PER_CLASS)
+class ModelOperationTest extends ModelTestBase {
+
+    @InjectMocks
+    private ModelOperation modelOperation;
+    @Mock
+    private JanusGraphGenericDao janusGraphGenericDao;
+
+    private final String modelName = "ETSI-SDC-MODEL-TEST";
+
+    @BeforeAll
+    void setup() {
+        init();
+        MockitoAnnotations.openMocks(this);
+    }
+
+    @Test
+    void createModelSuccessTest() {
+        final ModelData modelData = new ModelData(modelName,  UniqueIdBuilder.buildModelUid(modelName));
+        when(janusGraphGenericDao.createNode(any(),any())).thenReturn(Either.left(modelData));
+        final Model createdModel = modelOperation.createModel(new Model(modelName), false);
+        assertThat(createdModel).isNotNull();
+        assertThat(createdModel.getName()).isEqualTo(modelName);
+    }
+
+    @Test
+    void createModelFailWithModelAlreadyExistTest() {
+        when(janusGraphGenericDao.createNode(any(),any())).thenReturn(Either.right(JanusGraphOperationStatus.JANUSGRAPH_SCHEMA_VIOLATION));
+        assertThrows(OperationException.class, () -> modelOperation.createModel(new Model(modelName), false));
+    }
+
+    @Test
+    void createModelFailTest() {
+        when(janusGraphGenericDao.createNode(any(),any())).thenReturn(Either.right(JanusGraphOperationStatus.GRAPH_IS_NOT_AVAILABLE));
+        assertThrows(OperationException.class, () -> modelOperation.createModel(new Model(modelName), false));
+    }
+
+}
