diff --git a/server/createInstanceRoute.go b/server/createInstanceRoute.go
new file mode 100644
index 0000000000000000000000000000000000000000..baf290fefcb0bab26859db762dbb221f9ffa074f
--- /dev/null
+++ b/server/createInstanceRoute.go
@@ -0,0 +1,73 @@
+package server
+
+import (
+	"encoding/json"
+	"net/http"
+	"os"
+
+	"github.com/gin-gonic/gin"
+	"gorm.io/gorm"
+	"jonasled.dev/jonasled/ems-esp-logger/database"
+	"jonasled.dev/jonasled/ems-esp-logger/database/tables"
+	"jonasled.dev/jonasled/ems-esp-logger/log"
+)
+
+func initCreateInstanceRoute() {
+	apiKey := os.Getenv("MASTER_APIKEY")
+	if apiKey == "" {
+		log.Log.Fatal("MASTER_APIKEY is not specified")
+	}
+
+	R.POST("/api/instance", func(c *gin.Context) {
+		authHeader := c.GetHeader("Authentication")
+		if authHeader != apiKey {
+			c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"})
+			return
+		}
+		contentType := c.GetHeader("Content-Type")
+		if contentType == "" {
+			c.JSON(http.StatusBadRequest, gin.H{"error": "Content-Type header missing"})
+			return
+		}
+		if contentType != "application/json" {
+			c.JSON(http.StatusBadRequest, gin.H{"error": "expected application/json as content type"})
+			return
+		}
+		var instance tables.Instance
+		body, _ := c.GetRawData()
+		err := json.Unmarshal(body, &instance)
+		if err != nil {
+			c.JSON(http.StatusBadRequest, gin.H{"error": "failed decoding json", "message": err.Error()})
+			return
+		}
+		if instance.Name == "" {
+			c.JSON(http.StatusBadRequest, gin.H{"error": "the name cannot be empty"})
+			return
+		}
+
+		var existingInstance tables.Instance
+		err = database.Db.Where("name = ?", instance.Name).First(&existingInstance).Error
+
+		if err != nil {
+			if err == gorm.ErrRecordNotFound {
+				if err := database.Db.Create(&instance).Error; err != nil {
+					log.Log.Error("Failed to create instance: %v", err)
+					c.JSON(http.StatusInternalServerError, gin.H{"error": "failed creating new instance definition"})
+				}
+				c.JSON(http.StatusCreated, gin.H{"message": "Created new entry"})
+			} else {
+				c.JSON(http.StatusInternalServerError, gin.H{"error": "failed creating new instance definition"})
+				log.Log.Error("Failed to query database, while trying to create new instance: %v", err)
+			}
+		} else {
+			existingInstance.Description = instance.Description
+			if err := database.Db.Save(&existingInstance).Error; err != nil {
+				c.JSON(http.StatusInternalServerError, gin.H{"error": "failed updating instance definition"})
+				log.Log.Error("Failed to query database, while trying to update instance: %v", err)
+			}
+			c.JSON(http.StatusCreated, gin.H{"message": "Updated entry"})
+		}
+
+	})
+
+}
diff --git a/server/main.go b/server/main.go
index 1c76636e320c0719e9717085e4472f15fa98368a..be39cf11ed593c9d61af4af3f85e48cc5557142d 100644
--- a/server/main.go
+++ b/server/main.go
@@ -14,6 +14,7 @@ func Init() {
 	R.Use(ginlogrus.Logger(log.Log), gin.Recovery())
 
 	initGeneralRoutes()
+	initCreateInstanceRoute()
 }
 
 func Run() {