diff --git a/pkg/api/oas_client_gen.go b/pkg/api/oas_client_gen.go
index 3ed6249..3fac351 100644
--- a/pkg/api/oas_client_gen.go
+++ b/pkg/api/oas_client_gen.go
@@ -139,10 +139,10 @@ type Invoker interface {
 	ActionSubmissionValidated(ctx context.Context, params ActionSubmissionValidatedParams) error
 	// CreateMapfix invokes createMapfix operation.
 	//
-	// Create new mapfix.
+	// Trigger the validator to create a mapfix.
 	//
 	// POST /mapfixes
-	CreateMapfix(ctx context.Context, request *MapfixCreate) (*ID, error)
+	CreateMapfix(ctx context.Context, request *MapfixTriggerCreate) (*OperationID, error)
 	// CreateScript invokes createScript operation.
 	//
 	// Create a new script.
@@ -157,10 +157,10 @@ type Invoker interface {
 	CreateScriptPolicy(ctx context.Context, request *ScriptPolicyCreate) (*ID, error)
 	// CreateSubmission invokes createSubmission operation.
 	//
-	// Create new submission.
+	// Trigger the validator to create a new submission.
 	//
 	// POST /submissions
-	CreateSubmission(ctx context.Context, request *SubmissionCreate) (*ID, error)
+	CreateSubmission(ctx context.Context, request *SubmissionTriggerCreate) (*OperationID, error)
 	// DeleteScript invokes deleteScript operation.
 	//
 	// Delete the specified script by ID.
@@ -2584,15 +2584,15 @@ func (c *Client) sendActionSubmissionValidated(ctx context.Context, params Actio
 
 // CreateMapfix invokes createMapfix operation.
 //
-// Create new mapfix.
+// Trigger the validator to create a mapfix.
 //
 // POST /mapfixes
-func (c *Client) CreateMapfix(ctx context.Context, request *MapfixCreate) (*ID, error) {
+func (c *Client) CreateMapfix(ctx context.Context, request *MapfixTriggerCreate) (*OperationID, error) {
 	res, err := c.sendCreateMapfix(ctx, request)
 	return res, err
 }
 
-func (c *Client) sendCreateMapfix(ctx context.Context, request *MapfixCreate) (res *ID, err error) {
+func (c *Client) sendCreateMapfix(ctx context.Context, request *MapfixTriggerCreate) (res *OperationID, err error) {
 	otelAttrs := []attribute.KeyValue{
 		otelogen.OperationID("createMapfix"),
 		semconv.HTTPRequestMethodKey.String("POST"),
@@ -2908,15 +2908,15 @@ func (c *Client) sendCreateScriptPolicy(ctx context.Context, request *ScriptPoli
 
 // CreateSubmission invokes createSubmission operation.
 //
-// Create new submission.
+// Trigger the validator to create a new submission.
 //
 // POST /submissions
-func (c *Client) CreateSubmission(ctx context.Context, request *SubmissionCreate) (*ID, error) {
+func (c *Client) CreateSubmission(ctx context.Context, request *SubmissionTriggerCreate) (*OperationID, error) {
 	res, err := c.sendCreateSubmission(ctx, request)
 	return res, err
 }
 
-func (c *Client) sendCreateSubmission(ctx context.Context, request *SubmissionCreate) (res *ID, err error) {
+func (c *Client) sendCreateSubmission(ctx context.Context, request *SubmissionTriggerCreate) (res *OperationID, err error) {
 	otelAttrs := []attribute.KeyValue{
 		otelogen.OperationID("createSubmission"),
 		semconv.HTTPRequestMethodKey.String("POST"),
diff --git a/pkg/api/oas_handlers_gen.go b/pkg/api/oas_handlers_gen.go
index 6b2c786..d667263 100644
--- a/pkg/api/oas_handlers_gen.go
+++ b/pkg/api/oas_handlers_gen.go
@@ -3542,7 +3542,7 @@ func (s *Server) handleActionSubmissionValidatedRequest(args [1]string, argsEsca
 
 // handleCreateMapfixRequest handles createMapfix operation.
 //
-// Create new mapfix.
+// Trigger the validator to create a mapfix.
 //
 // POST /mapfixes
 func (s *Server) handleCreateMapfixRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
@@ -3676,12 +3676,12 @@ func (s *Server) handleCreateMapfixRequest(args [0]string, argsEscaped bool, w h
 		}
 	}()
 
-	var response *ID
+	var response *OperationID
 	if m := s.cfg.Middleware; m != nil {
 		mreq := middleware.Request{
 			Context:          ctx,
 			OperationName:    CreateMapfixOperation,
-			OperationSummary: "Create new mapfix",
+			OperationSummary: "Trigger the validator to create a mapfix",
 			OperationID:      "createMapfix",
 			Body:             request,
 			Params:           middleware.Parameters{},
@@ -3689,9 +3689,9 @@ func (s *Server) handleCreateMapfixRequest(args [0]string, argsEscaped bool, w h
 		}
 
 		type (
-			Request  = *MapfixCreate
+			Request  = *MapfixTriggerCreate
 			Params   = struct{}
-			Response = *ID
+			Response = *OperationID
 		)
 		response, err = middleware.HookMiddleware[
 			Request,
@@ -4127,7 +4127,7 @@ func (s *Server) handleCreateScriptPolicyRequest(args [0]string, argsEscaped boo
 
 // handleCreateSubmissionRequest handles createSubmission operation.
 //
-// Create new submission.
+// Trigger the validator to create a new submission.
 //
 // POST /submissions
 func (s *Server) handleCreateSubmissionRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
@@ -4261,12 +4261,12 @@ func (s *Server) handleCreateSubmissionRequest(args [0]string, argsEscaped bool,
 		}
 	}()
 
-	var response *ID
+	var response *OperationID
 	if m := s.cfg.Middleware; m != nil {
 		mreq := middleware.Request{
 			Context:          ctx,
 			OperationName:    CreateSubmissionOperation,
-			OperationSummary: "Create new submission",
+			OperationSummary: "Trigger the validator to create a new submission",
 			OperationID:      "createSubmission",
 			Body:             request,
 			Params:           middleware.Parameters{},
@@ -4274,9 +4274,9 @@ func (s *Server) handleCreateSubmissionRequest(args [0]string, argsEscaped bool,
 		}
 
 		type (
-			Request  = *SubmissionCreate
+			Request  = *SubmissionTriggerCreate
 			Params   = struct{}
-			Response = *ID
+			Response = *OperationID
 		)
 		response, err = middleware.HookMiddleware[
 			Request,
diff --git a/pkg/api/oas_json_gen.go b/pkg/api/oas_json_gen.go
index 4e0109b..6833f15 100644
--- a/pkg/api/oas_json_gen.go
+++ b/pkg/api/oas_json_gen.go
@@ -688,96 +688,40 @@ func (s *Mapfix) UnmarshalJSON(data []byte) error {
 }
 
 // Encode implements json.Marshaler.
-func (s *MapfixCreate) Encode(e *jx.Encoder) {
+func (s *MapfixTriggerCreate) Encode(e *jx.Encoder) {
 	e.ObjStart()
 	s.encodeFields(e)
 	e.ObjEnd()
 }
 
 // encodeFields encodes fields.
-func (s *MapfixCreate) encodeFields(e *jx.Encoder) {
-	{
-		e.FieldStart("DisplayName")
-		e.Str(s.DisplayName)
-	}
-	{
-		e.FieldStart("Creator")
-		e.Str(s.Creator)
-	}
-	{
-		e.FieldStart("GameID")
-		e.Int32(s.GameID)
-	}
+func (s *MapfixTriggerCreate) encodeFields(e *jx.Encoder) {
 	{
 		e.FieldStart("AssetID")
 		e.Int64(s.AssetID)
 	}
-	{
-		e.FieldStart("AssetVersion")
-		e.Int64(s.AssetVersion)
-	}
 	{
 		e.FieldStart("TargetAssetID")
 		e.Int64(s.TargetAssetID)
 	}
 }
 
-var jsonFieldsNameOfMapfixCreate = [6]string{
-	0: "DisplayName",
-	1: "Creator",
-	2: "GameID",
-	3: "AssetID",
-	4: "AssetVersion",
-	5: "TargetAssetID",
+var jsonFieldsNameOfMapfixTriggerCreate = [2]string{
+	0: "AssetID",
+	1: "TargetAssetID",
 }
 
-// Decode decodes MapfixCreate from json.
-func (s *MapfixCreate) Decode(d *jx.Decoder) error {
+// Decode decodes MapfixTriggerCreate from json.
+func (s *MapfixTriggerCreate) Decode(d *jx.Decoder) error {
 	if s == nil {
-		return errors.New("invalid: unable to decode MapfixCreate to nil")
+		return errors.New("invalid: unable to decode MapfixTriggerCreate to nil")
 	}
 	var requiredBitSet [1]uint8
 
 	if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
 		switch string(k) {
-		case "DisplayName":
-			requiredBitSet[0] |= 1 << 0
-			if err := func() error {
-				v, err := d.Str()
-				s.DisplayName = string(v)
-				if err != nil {
-					return err
-				}
-				return nil
-			}(); err != nil {
-				return errors.Wrap(err, "decode field \"DisplayName\"")
-			}
-		case "Creator":
-			requiredBitSet[0] |= 1 << 1
-			if err := func() error {
-				v, err := d.Str()
-				s.Creator = string(v)
-				if err != nil {
-					return err
-				}
-				return nil
-			}(); err != nil {
-				return errors.Wrap(err, "decode field \"Creator\"")
-			}
-		case "GameID":
-			requiredBitSet[0] |= 1 << 2
-			if err := func() error {
-				v, err := d.Int32()
-				s.GameID = int32(v)
-				if err != nil {
-					return err
-				}
-				return nil
-			}(); err != nil {
-				return errors.Wrap(err, "decode field \"GameID\"")
-			}
 		case "AssetID":
-			requiredBitSet[0] |= 1 << 3
+			requiredBitSet[0] |= 1 << 0
 			if err := func() error {
 				v, err := d.Int64()
 				s.AssetID = int64(v)
@@ -788,20 +732,8 @@ func (s *MapfixCreate) Decode(d *jx.Decoder) error {
 			}(); err != nil {
 				return errors.Wrap(err, "decode field \"AssetID\"")
 			}
-		case "AssetVersion":
-			requiredBitSet[0] |= 1 << 4
-			if err := func() error {
-				v, err := d.Int64()
-				s.AssetVersion = int64(v)
-				if err != nil {
-					return err
-				}
-				return nil
-			}(); err != nil {
-				return errors.Wrap(err, "decode field \"AssetVersion\"")
-			}
 		case "TargetAssetID":
-			requiredBitSet[0] |= 1 << 5
+			requiredBitSet[0] |= 1 << 1
 			if err := func() error {
 				v, err := d.Int64()
 				s.TargetAssetID = int64(v)
@@ -817,12 +749,12 @@ func (s *MapfixCreate) Decode(d *jx.Decoder) error {
 		}
 		return nil
 	}); err != nil {
-		return errors.Wrap(err, "decode MapfixCreate")
+		return errors.Wrap(err, "decode MapfixTriggerCreate")
 	}
 	// Validate required fields.
 	var failures []validate.FieldError
 	for i, mask := range [1]uint8{
-		0b00111111,
+		0b00000011,
 	} {
 		if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
 			// Mask only required fields and check equality to mask using XOR.
@@ -834,8 +766,8 @@ func (s *MapfixCreate) Decode(d *jx.Decoder) error {
 				bitIdx := bits.TrailingZeros8(result)
 				fieldIdx := i*8 + bitIdx
 				var name string
-				if fieldIdx < len(jsonFieldsNameOfMapfixCreate) {
-					name = jsonFieldsNameOfMapfixCreate[fieldIdx]
+				if fieldIdx < len(jsonFieldsNameOfMapfixTriggerCreate) {
+					name = jsonFieldsNameOfMapfixTriggerCreate[fieldIdx]
 				} else {
 					name = strconv.Itoa(fieldIdx)
 				}
@@ -856,14 +788,14 @@ func (s *MapfixCreate) Decode(d *jx.Decoder) error {
 }
 
 // MarshalJSON implements stdjson.Marshaler.
-func (s *MapfixCreate) MarshalJSON() ([]byte, error) {
+func (s *MapfixTriggerCreate) MarshalJSON() ([]byte, error) {
 	e := jx.Encoder{}
 	s.Encode(&e)
 	return e.Bytes(), nil
 }
 
 // UnmarshalJSON implements stdjson.Unmarshaler.
-func (s *MapfixCreate) UnmarshalJSON(data []byte) error {
+func (s *MapfixTriggerCreate) UnmarshalJSON(data []byte) error {
 	d := jx.DecodeBytes(data)
 	return s.Decode(d)
 }
@@ -1049,6 +981,102 @@ func (s *Operation) UnmarshalJSON(data []byte) error {
 	return s.Decode(d)
 }
 
+// Encode implements json.Marshaler.
+func (s *OperationID) Encode(e *jx.Encoder) {
+	e.ObjStart()
+	s.encodeFields(e)
+	e.ObjEnd()
+}
+
+// encodeFields encodes fields.
+func (s *OperationID) encodeFields(e *jx.Encoder) {
+	{
+		e.FieldStart("OperationID")
+		e.Int32(s.OperationID)
+	}
+}
+
+var jsonFieldsNameOfOperationID = [1]string{
+	0: "OperationID",
+}
+
+// Decode decodes OperationID from json.
+func (s *OperationID) Decode(d *jx.Decoder) error {
+	if s == nil {
+		return errors.New("invalid: unable to decode OperationID to nil")
+	}
+	var requiredBitSet [1]uint8
+
+	if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
+		switch string(k) {
+		case "OperationID":
+			requiredBitSet[0] |= 1 << 0
+			if err := func() error {
+				v, err := d.Int32()
+				s.OperationID = int32(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"OperationID\"")
+			}
+		default:
+			return d.Skip()
+		}
+		return nil
+	}); err != nil {
+		return errors.Wrap(err, "decode OperationID")
+	}
+	// Validate required fields.
+	var failures []validate.FieldError
+	for i, mask := range [1]uint8{
+		0b00000001,
+	} {
+		if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
+			// Mask only required fields and check equality to mask using XOR.
+			//
+			// If XOR result is not zero, result is not equal to expected, so some fields are missed.
+			// Bits of fields which would be set are actually bits of missed fields.
+			missed := bits.OnesCount8(result)
+			for bitN := 0; bitN < missed; bitN++ {
+				bitIdx := bits.TrailingZeros8(result)
+				fieldIdx := i*8 + bitIdx
+				var name string
+				if fieldIdx < len(jsonFieldsNameOfOperationID) {
+					name = jsonFieldsNameOfOperationID[fieldIdx]
+				} else {
+					name = strconv.Itoa(fieldIdx)
+				}
+				failures = append(failures, validate.FieldError{
+					Name:  name,
+					Error: validate.ErrFieldRequired,
+				})
+				// Reset bit.
+				result &^= 1 << bitIdx
+			}
+		}
+	}
+	if len(failures) > 0 {
+		return &validate.Error{Fields: failures}
+	}
+
+	return nil
+}
+
+// MarshalJSON implements stdjson.Marshaler.
+func (s *OperationID) MarshalJSON() ([]byte, error) {
+	e := jx.Encoder{}
+	s.Encode(&e)
+	return e.Bytes(), nil
+}
+
+// UnmarshalJSON implements stdjson.Unmarshaler.
+func (s *OperationID) UnmarshalJSON(data []byte) error {
+	d := jx.DecodeBytes(data)
+	return s.Decode(d)
+}
+
 // Encode encodes int32 as json.
 func (o OptInt32) Encode(e *jx.Encoder) {
 	if !o.Set {
@@ -2615,91 +2643,35 @@ func (s *Submission) UnmarshalJSON(data []byte) error {
 }
 
 // Encode implements json.Marshaler.
-func (s *SubmissionCreate) Encode(e *jx.Encoder) {
+func (s *SubmissionTriggerCreate) Encode(e *jx.Encoder) {
 	e.ObjStart()
 	s.encodeFields(e)
 	e.ObjEnd()
 }
 
 // encodeFields encodes fields.
-func (s *SubmissionCreate) encodeFields(e *jx.Encoder) {
-	{
-		e.FieldStart("DisplayName")
-		e.Str(s.DisplayName)
-	}
-	{
-		e.FieldStart("Creator")
-		e.Str(s.Creator)
-	}
-	{
-		e.FieldStart("GameID")
-		e.Int32(s.GameID)
-	}
+func (s *SubmissionTriggerCreate) encodeFields(e *jx.Encoder) {
 	{
 		e.FieldStart("AssetID")
 		e.Int64(s.AssetID)
 	}
-	{
-		e.FieldStart("AssetVersion")
-		e.Int64(s.AssetVersion)
-	}
 }
 
-var jsonFieldsNameOfSubmissionCreate = [5]string{
-	0: "DisplayName",
-	1: "Creator",
-	2: "GameID",
-	3: "AssetID",
-	4: "AssetVersion",
+var jsonFieldsNameOfSubmissionTriggerCreate = [1]string{
+	0: "AssetID",
 }
 
-// Decode decodes SubmissionCreate from json.
-func (s *SubmissionCreate) Decode(d *jx.Decoder) error {
+// Decode decodes SubmissionTriggerCreate from json.
+func (s *SubmissionTriggerCreate) Decode(d *jx.Decoder) error {
 	if s == nil {
-		return errors.New("invalid: unable to decode SubmissionCreate to nil")
+		return errors.New("invalid: unable to decode SubmissionTriggerCreate to nil")
 	}
 	var requiredBitSet [1]uint8
 
 	if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
 		switch string(k) {
-		case "DisplayName":
-			requiredBitSet[0] |= 1 << 0
-			if err := func() error {
-				v, err := d.Str()
-				s.DisplayName = string(v)
-				if err != nil {
-					return err
-				}
-				return nil
-			}(); err != nil {
-				return errors.Wrap(err, "decode field \"DisplayName\"")
-			}
-		case "Creator":
-			requiredBitSet[0] |= 1 << 1
-			if err := func() error {
-				v, err := d.Str()
-				s.Creator = string(v)
-				if err != nil {
-					return err
-				}
-				return nil
-			}(); err != nil {
-				return errors.Wrap(err, "decode field \"Creator\"")
-			}
-		case "GameID":
-			requiredBitSet[0] |= 1 << 2
-			if err := func() error {
-				v, err := d.Int32()
-				s.GameID = int32(v)
-				if err != nil {
-					return err
-				}
-				return nil
-			}(); err != nil {
-				return errors.Wrap(err, "decode field \"GameID\"")
-			}
 		case "AssetID":
-			requiredBitSet[0] |= 1 << 3
+			requiredBitSet[0] |= 1 << 0
 			if err := func() error {
 				v, err := d.Int64()
 				s.AssetID = int64(v)
@@ -2710,29 +2682,17 @@ func (s *SubmissionCreate) Decode(d *jx.Decoder) error {
 			}(); err != nil {
 				return errors.Wrap(err, "decode field \"AssetID\"")
 			}
-		case "AssetVersion":
-			requiredBitSet[0] |= 1 << 4
-			if err := func() error {
-				v, err := d.Int64()
-				s.AssetVersion = int64(v)
-				if err != nil {
-					return err
-				}
-				return nil
-			}(); err != nil {
-				return errors.Wrap(err, "decode field \"AssetVersion\"")
-			}
 		default:
 			return d.Skip()
 		}
 		return nil
 	}); err != nil {
-		return errors.Wrap(err, "decode SubmissionCreate")
+		return errors.Wrap(err, "decode SubmissionTriggerCreate")
 	}
 	// Validate required fields.
 	var failures []validate.FieldError
 	for i, mask := range [1]uint8{
-		0b00011111,
+		0b00000001,
 	} {
 		if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
 			// Mask only required fields and check equality to mask using XOR.
@@ -2744,8 +2704,8 @@ func (s *SubmissionCreate) Decode(d *jx.Decoder) error {
 				bitIdx := bits.TrailingZeros8(result)
 				fieldIdx := i*8 + bitIdx
 				var name string
-				if fieldIdx < len(jsonFieldsNameOfSubmissionCreate) {
-					name = jsonFieldsNameOfSubmissionCreate[fieldIdx]
+				if fieldIdx < len(jsonFieldsNameOfSubmissionTriggerCreate) {
+					name = jsonFieldsNameOfSubmissionTriggerCreate[fieldIdx]
 				} else {
 					name = strconv.Itoa(fieldIdx)
 				}
@@ -2766,14 +2726,14 @@ func (s *SubmissionCreate) Decode(d *jx.Decoder) error {
 }
 
 // MarshalJSON implements stdjson.Marshaler.
-func (s *SubmissionCreate) MarshalJSON() ([]byte, error) {
+func (s *SubmissionTriggerCreate) MarshalJSON() ([]byte, error) {
 	e := jx.Encoder{}
 	s.Encode(&e)
 	return e.Bytes(), nil
 }
 
 // UnmarshalJSON implements stdjson.Unmarshaler.
-func (s *SubmissionCreate) UnmarshalJSON(data []byte) error {
+func (s *SubmissionTriggerCreate) UnmarshalJSON(data []byte) error {
 	d := jx.DecodeBytes(data)
 	return s.Decode(d)
 }
diff --git a/pkg/api/oas_request_decoders_gen.go b/pkg/api/oas_request_decoders_gen.go
index da76dc0..1fa2247 100644
--- a/pkg/api/oas_request_decoders_gen.go
+++ b/pkg/api/oas_request_decoders_gen.go
@@ -16,7 +16,7 @@ import (
 )
 
 func (s *Server) decodeCreateMapfixRequest(r *http.Request) (
-	req *MapfixCreate,
+	req *MapfixTriggerCreate,
 	close func() error,
 	rerr error,
 ) {
@@ -55,7 +55,7 @@ func (s *Server) decodeCreateMapfixRequest(r *http.Request) (
 
 		d := jx.DecodeBytes(buf)
 
-		var request MapfixCreate
+		var request MapfixTriggerCreate
 		if err := func() error {
 			if err := request.Decode(d); err != nil {
 				return err
@@ -72,14 +72,6 @@ func (s *Server) decodeCreateMapfixRequest(r *http.Request) (
 			}
 			return req, close, err
 		}
-		if err := func() error {
-			if err := request.Validate(); err != nil {
-				return err
-			}
-			return nil
-		}(); err != nil {
-			return req, close, errors.Wrap(err, "validate")
-		}
 		return &request, close, nil
 	default:
 		return req, close, validate.InvalidContentType(ct)
@@ -221,7 +213,7 @@ func (s *Server) decodeCreateScriptPolicyRequest(r *http.Request) (
 }
 
 func (s *Server) decodeCreateSubmissionRequest(r *http.Request) (
-	req *SubmissionCreate,
+	req *SubmissionTriggerCreate,
 	close func() error,
 	rerr error,
 ) {
@@ -260,7 +252,7 @@ func (s *Server) decodeCreateSubmissionRequest(r *http.Request) (
 
 		d := jx.DecodeBytes(buf)
 
-		var request SubmissionCreate
+		var request SubmissionTriggerCreate
 		if err := func() error {
 			if err := request.Decode(d); err != nil {
 				return err
@@ -277,14 +269,6 @@ func (s *Server) decodeCreateSubmissionRequest(r *http.Request) (
 			}
 			return req, close, err
 		}
-		if err := func() error {
-			if err := request.Validate(); err != nil {
-				return err
-			}
-			return nil
-		}(); err != nil {
-			return req, close, errors.Wrap(err, "validate")
-		}
 		return &request, close, nil
 	default:
 		return req, close, validate.InvalidContentType(ct)
diff --git a/pkg/api/oas_request_encoders_gen.go b/pkg/api/oas_request_encoders_gen.go
index b8686b0..52f1046 100644
--- a/pkg/api/oas_request_encoders_gen.go
+++ b/pkg/api/oas_request_encoders_gen.go
@@ -12,7 +12,7 @@ import (
 )
 
 func encodeCreateMapfixRequest(
-	req *MapfixCreate,
+	req *MapfixTriggerCreate,
 	r *http.Request,
 ) error {
 	const contentType = "application/json"
@@ -54,7 +54,7 @@ func encodeCreateScriptPolicyRequest(
 }
 
 func encodeCreateSubmissionRequest(
-	req *SubmissionCreate,
+	req *SubmissionTriggerCreate,
 	r *http.Request,
 ) error {
 	const contentType = "application/json"
diff --git a/pkg/api/oas_response_decoders_gen.go b/pkg/api/oas_response_decoders_gen.go
index d871088..197eacd 100644
--- a/pkg/api/oas_response_decoders_gen.go
+++ b/pkg/api/oas_response_decoders_gen.go
@@ -933,7 +933,7 @@ func decodeActionSubmissionValidatedResponse(resp *http.Response) (res *ActionSu
 	return res, errors.Wrap(defRes, "error")
 }
 
-func decodeCreateMapfixResponse(resp *http.Response) (res *ID, _ error) {
+func decodeCreateMapfixResponse(resp *http.Response) (res *OperationID, _ error) {
 	switch resp.StatusCode {
 	case 201:
 		// Code 201.
@@ -949,7 +949,7 @@ func decodeCreateMapfixResponse(resp *http.Response) (res *ID, _ error) {
 			}
 			d := jx.DecodeBytes(buf)
 
-			var response ID
+			var response OperationID
 			if err := func() error {
 				if err := response.Decode(d); err != nil {
 					return err
@@ -1182,7 +1182,7 @@ func decodeCreateScriptPolicyResponse(resp *http.Response) (res *ID, _ error) {
 	return res, errors.Wrap(defRes, "error")
 }
 
-func decodeCreateSubmissionResponse(resp *http.Response) (res *ID, _ error) {
+func decodeCreateSubmissionResponse(resp *http.Response) (res *OperationID, _ error) {
 	switch resp.StatusCode {
 	case 201:
 		// Code 201.
@@ -1198,7 +1198,7 @@ func decodeCreateSubmissionResponse(resp *http.Response) (res *ID, _ error) {
 			}
 			d := jx.DecodeBytes(buf)
 
-			var response ID
+			var response OperationID
 			if err := func() error {
 				if err := response.Decode(d); err != nil {
 					return err
diff --git a/pkg/api/oas_response_encoders_gen.go b/pkg/api/oas_response_encoders_gen.go
index 914e275..58f61b3 100644
--- a/pkg/api/oas_response_encoders_gen.go
+++ b/pkg/api/oas_response_encoders_gen.go
@@ -139,7 +139,7 @@ func encodeActionSubmissionValidatedResponse(response *ActionSubmissionValidated
 	return nil
 }
 
-func encodeCreateMapfixResponse(response *ID, w http.ResponseWriter, span trace.Span) error {
+func encodeCreateMapfixResponse(response *OperationID, w http.ResponseWriter, span trace.Span) error {
 	w.Header().Set("Content-Type", "application/json; charset=utf-8")
 	w.WriteHeader(201)
 	span.SetStatus(codes.Ok, http.StatusText(201))
@@ -181,7 +181,7 @@ func encodeCreateScriptPolicyResponse(response *ID, w http.ResponseWriter, span
 	return nil
 }
 
-func encodeCreateSubmissionResponse(response *ID, w http.ResponseWriter, span trace.Span) error {
+func encodeCreateSubmissionResponse(response *OperationID, w http.ResponseWriter, span trace.Span) error {
 	w.Header().Set("Content-Type", "application/json; charset=utf-8")
 	w.WriteHeader(201)
 	span.SetStatus(codes.Ok, http.StatusText(201))
diff --git a/pkg/api/oas_router_gen.go b/pkg/api/oas_router_gen.go
index 46e8499..414d7e4 100644
--- a/pkg/api/oas_router_gen.go
+++ b/pkg/api/oas_router_gen.go
@@ -1264,7 +1264,7 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
 							return r, true
 						case "POST":
 							r.name = CreateMapfixOperation
-							r.summary = "Create new mapfix"
+							r.summary = "Trigger the validator to create a mapfix"
 							r.operationID = "createMapfix"
 							r.pathPattern = "/mapfixes"
 							r.args = args
@@ -2058,7 +2058,7 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
 							return r, true
 						case "POST":
 							r.name = CreateSubmissionOperation
-							r.summary = "Create new submission"
+							r.summary = "Trigger the validator to create a new submission"
 							r.operationID = "createSubmission"
 							r.pathPattern = "/submissions"
 							r.args = args
diff --git a/pkg/api/oas_schemas_gen.go b/pkg/api/oas_schemas_gen.go
index e9c86a7..5141d86 100644
--- a/pkg/api/oas_schemas_gen.go
+++ b/pkg/api/oas_schemas_gen.go
@@ -359,73 +359,29 @@ func (s *Mapfix) SetStatusMessage(val string) {
 	s.StatusMessage = val
 }
 
-// Ref: #/components/schemas/MapfixCreate
-type MapfixCreate struct {
-	DisplayName   string `json:"DisplayName"`
-	Creator       string `json:"Creator"`
-	GameID        int32  `json:"GameID"`
-	AssetID       int64  `json:"AssetID"`
-	AssetVersion  int64  `json:"AssetVersion"`
-	TargetAssetID int64  `json:"TargetAssetID"`
-}
-
-// GetDisplayName returns the value of DisplayName.
-func (s *MapfixCreate) GetDisplayName() string {
-	return s.DisplayName
-}
-
-// GetCreator returns the value of Creator.
-func (s *MapfixCreate) GetCreator() string {
-	return s.Creator
-}
-
-// GetGameID returns the value of GameID.
-func (s *MapfixCreate) GetGameID() int32 {
-	return s.GameID
+// Ref: #/components/schemas/MapfixTriggerCreate
+type MapfixTriggerCreate struct {
+	AssetID       int64 `json:"AssetID"`
+	TargetAssetID int64 `json:"TargetAssetID"`
 }
 
 // GetAssetID returns the value of AssetID.
-func (s *MapfixCreate) GetAssetID() int64 {
+func (s *MapfixTriggerCreate) GetAssetID() int64 {
 	return s.AssetID
 }
 
-// GetAssetVersion returns the value of AssetVersion.
-func (s *MapfixCreate) GetAssetVersion() int64 {
-	return s.AssetVersion
-}
-
 // GetTargetAssetID returns the value of TargetAssetID.
-func (s *MapfixCreate) GetTargetAssetID() int64 {
+func (s *MapfixTriggerCreate) GetTargetAssetID() int64 {
 	return s.TargetAssetID
 }
 
-// SetDisplayName sets the value of DisplayName.
-func (s *MapfixCreate) SetDisplayName(val string) {
-	s.DisplayName = val
-}
-
-// SetCreator sets the value of Creator.
-func (s *MapfixCreate) SetCreator(val string) {
-	s.Creator = val
-}
-
-// SetGameID sets the value of GameID.
-func (s *MapfixCreate) SetGameID(val int32) {
-	s.GameID = val
-}
-
 // SetAssetID sets the value of AssetID.
-func (s *MapfixCreate) SetAssetID(val int64) {
+func (s *MapfixTriggerCreate) SetAssetID(val int64) {
 	s.AssetID = val
 }
 
-// SetAssetVersion sets the value of AssetVersion.
-func (s *MapfixCreate) SetAssetVersion(val int64) {
-	s.AssetVersion = val
-}
-
 // SetTargetAssetID sets the value of TargetAssetID.
-func (s *MapfixCreate) SetTargetAssetID(val int64) {
+func (s *MapfixTriggerCreate) SetTargetAssetID(val int64) {
 	s.TargetAssetID = val
 }
 
@@ -499,6 +455,21 @@ func (s *Operation) SetPath(val string) {
 	s.Path = val
 }
 
+// Ref: #/components/schemas/OperationID
+type OperationID struct {
+	OperationID int32 `json:"OperationID"`
+}
+
+// GetOperationID returns the value of OperationID.
+func (s *OperationID) GetOperationID() int32 {
+	return s.OperationID
+}
+
+// SetOperationID sets the value of OperationID.
+func (s *OperationID) SetOperationID(val int32) {
+	s.OperationID = val
+}
+
 // NewOptInt32 returns new OptInt32 with value set to v.
 func NewOptInt32(v int32) OptInt32 {
 	return OptInt32{
@@ -1166,65 +1137,21 @@ func (s *Submission) SetStatusMessage(val string) {
 	s.StatusMessage = val
 }
 
-// Ref: #/components/schemas/SubmissionCreate
-type SubmissionCreate struct {
-	DisplayName  string `json:"DisplayName"`
-	Creator      string `json:"Creator"`
-	GameID       int32  `json:"GameID"`
-	AssetID      int64  `json:"AssetID"`
-	AssetVersion int64  `json:"AssetVersion"`
-}
-
-// GetDisplayName returns the value of DisplayName.
-func (s *SubmissionCreate) GetDisplayName() string {
-	return s.DisplayName
-}
-
-// GetCreator returns the value of Creator.
-func (s *SubmissionCreate) GetCreator() string {
-	return s.Creator
-}
-
-// GetGameID returns the value of GameID.
-func (s *SubmissionCreate) GetGameID() int32 {
-	return s.GameID
+// Ref: #/components/schemas/SubmissionTriggerCreate
+type SubmissionTriggerCreate struct {
+	AssetID int64 `json:"AssetID"`
 }
 
 // GetAssetID returns the value of AssetID.
-func (s *SubmissionCreate) GetAssetID() int64 {
+func (s *SubmissionTriggerCreate) GetAssetID() int64 {
 	return s.AssetID
 }
 
-// GetAssetVersion returns the value of AssetVersion.
-func (s *SubmissionCreate) GetAssetVersion() int64 {
-	return s.AssetVersion
-}
-
-// SetDisplayName sets the value of DisplayName.
-func (s *SubmissionCreate) SetDisplayName(val string) {
-	s.DisplayName = val
-}
-
-// SetCreator sets the value of Creator.
-func (s *SubmissionCreate) SetCreator(val string) {
-	s.Creator = val
-}
-
-// SetGameID sets the value of GameID.
-func (s *SubmissionCreate) SetGameID(val int32) {
-	s.GameID = val
-}
-
 // SetAssetID sets the value of AssetID.
-func (s *SubmissionCreate) SetAssetID(val int64) {
+func (s *SubmissionTriggerCreate) SetAssetID(val int64) {
 	s.AssetID = val
 }
 
-// SetAssetVersion sets the value of AssetVersion.
-func (s *SubmissionCreate) SetAssetVersion(val int64) {
-	s.AssetVersion = val
-}
-
 // UpdateMapfixModelNoContent is response for UpdateMapfixModel operation.
 type UpdateMapfixModelNoContent struct{}
 
diff --git a/pkg/api/oas_server_gen.go b/pkg/api/oas_server_gen.go
index 9a623ad..b06f259 100644
--- a/pkg/api/oas_server_gen.go
+++ b/pkg/api/oas_server_gen.go
@@ -118,10 +118,10 @@ type Handler interface {
 	ActionSubmissionValidated(ctx context.Context, params ActionSubmissionValidatedParams) error
 	// CreateMapfix implements createMapfix operation.
 	//
-	// Create new mapfix.
+	// Trigger the validator to create a mapfix.
 	//
 	// POST /mapfixes
-	CreateMapfix(ctx context.Context, req *MapfixCreate) (*ID, error)
+	CreateMapfix(ctx context.Context, req *MapfixTriggerCreate) (*OperationID, error)
 	// CreateScript implements createScript operation.
 	//
 	// Create a new script.
@@ -136,10 +136,10 @@ type Handler interface {
 	CreateScriptPolicy(ctx context.Context, req *ScriptPolicyCreate) (*ID, error)
 	// CreateSubmission implements createSubmission operation.
 	//
-	// Create new submission.
+	// Trigger the validator to create a new submission.
 	//
 	// POST /submissions
-	CreateSubmission(ctx context.Context, req *SubmissionCreate) (*ID, error)
+	CreateSubmission(ctx context.Context, req *SubmissionTriggerCreate) (*OperationID, error)
 	// DeleteScript implements deleteScript operation.
 	//
 	// Delete the specified script by ID.
diff --git a/pkg/api/oas_unimplemented_gen.go b/pkg/api/oas_unimplemented_gen.go
index 6e9f4f3..3e92782 100644
--- a/pkg/api/oas_unimplemented_gen.go
+++ b/pkg/api/oas_unimplemented_gen.go
@@ -177,10 +177,10 @@ func (UnimplementedHandler) ActionSubmissionValidated(ctx context.Context, param
 
 // CreateMapfix implements createMapfix operation.
 //
-// Create new mapfix.
+// Trigger the validator to create a mapfix.
 //
 // POST /mapfixes
-func (UnimplementedHandler) CreateMapfix(ctx context.Context, req *MapfixCreate) (r *ID, _ error) {
+func (UnimplementedHandler) CreateMapfix(ctx context.Context, req *MapfixTriggerCreate) (r *OperationID, _ error) {
 	return r, ht.ErrNotImplemented
 }
 
@@ -204,10 +204,10 @@ func (UnimplementedHandler) CreateScriptPolicy(ctx context.Context, req *ScriptP
 
 // CreateSubmission implements createSubmission operation.
 //
-// Create new submission.
+// Trigger the validator to create a new submission.
 //
 // POST /submissions
-func (UnimplementedHandler) CreateSubmission(ctx context.Context, req *SubmissionCreate) (r *ID, _ error) {
+func (UnimplementedHandler) CreateSubmission(ctx context.Context, req *SubmissionTriggerCreate) (r *OperationID, _ error) {
 	return r, ht.ErrNotImplemented
 }
 
diff --git a/pkg/api/oas_validators_gen.go b/pkg/api/oas_validators_gen.go
index 19344a1..006fce8 100644
--- a/pkg/api/oas_validators_gen.go
+++ b/pkg/api/oas_validators_gen.go
@@ -127,56 +127,6 @@ func (s *Mapfix) Validate() error {
 	return nil
 }
 
-func (s *MapfixCreate) Validate() error {
-	if s == nil {
-		return validate.ErrNilPointer
-	}
-
-	var failures []validate.FieldError
-	if err := func() error {
-		if err := (validate.String{
-			MinLength:    0,
-			MinLengthSet: false,
-			MaxLength:    128,
-			MaxLengthSet: true,
-			Email:        false,
-			Hostname:     false,
-			Regex:        nil,
-		}).Validate(string(s.DisplayName)); err != nil {
-			return errors.Wrap(err, "string")
-		}
-		return nil
-	}(); err != nil {
-		failures = append(failures, validate.FieldError{
-			Name:  "DisplayName",
-			Error: err,
-		})
-	}
-	if err := func() error {
-		if err := (validate.String{
-			MinLength:    0,
-			MinLengthSet: false,
-			MaxLength:    128,
-			MaxLengthSet: true,
-			Email:        false,
-			Hostname:     false,
-			Regex:        nil,
-		}).Validate(string(s.Creator)); err != nil {
-			return errors.Wrap(err, "string")
-		}
-		return nil
-	}(); err != nil {
-		failures = append(failures, validate.FieldError{
-			Name:  "Creator",
-			Error: err,
-		})
-	}
-	if len(failures) > 0 {
-		return &validate.Error{Fields: failures}
-	}
-	return nil
-}
-
 func (s *Operation) Validate() error {
 	if s == nil {
 		return validate.ErrNilPointer
@@ -510,56 +460,6 @@ func (s *Submission) Validate() error {
 	return nil
 }
 
-func (s *SubmissionCreate) Validate() error {
-	if s == nil {
-		return validate.ErrNilPointer
-	}
-
-	var failures []validate.FieldError
-	if err := func() error {
-		if err := (validate.String{
-			MinLength:    0,
-			MinLengthSet: false,
-			MaxLength:    128,
-			MaxLengthSet: true,
-			Email:        false,
-			Hostname:     false,
-			Regex:        nil,
-		}).Validate(string(s.DisplayName)); err != nil {
-			return errors.Wrap(err, "string")
-		}
-		return nil
-	}(); err != nil {
-		failures = append(failures, validate.FieldError{
-			Name:  "DisplayName",
-			Error: err,
-		})
-	}
-	if err := func() error {
-		if err := (validate.String{
-			MinLength:    0,
-			MinLengthSet: false,
-			MaxLength:    128,
-			MaxLengthSet: true,
-			Email:        false,
-			Hostname:     false,
-			Regex:        nil,
-		}).Validate(string(s.Creator)); err != nil {
-			return errors.Wrap(err, "string")
-		}
-		return nil
-	}(); err != nil {
-		failures = append(failures, validate.FieldError{
-			Name:  "Creator",
-			Error: err,
-		})
-	}
-	if len(failures) > 0 {
-		return &validate.Error{Fields: failures}
-	}
-	return nil
-}
-
 func (s *User) Validate() error {
 	if s == nil {
 		return validate.ErrNilPointer
diff --git a/pkg/internal/oas_client_gen.go b/pkg/internal/oas_client_gen.go
index 8c64dc5..9095d81 100644
--- a/pkg/internal/oas_client_gen.go
+++ b/pkg/internal/oas_client_gen.go
@@ -64,6 +64,12 @@ type Invoker interface {
 	//
 	// POST /submissions/{SubmissionID}/status/validator-validated
 	ActionSubmissionValidated(ctx context.Context, params ActionSubmissionValidatedParams) error
+	// CreateMapfix invokes createMapfix operation.
+	//
+	// Create a mapfix.
+	//
+	// POST /mapfixes
+	CreateMapfix(ctx context.Context, request *MapfixCreate) (*ID, error)
 	// CreateScript invokes createScript operation.
 	//
 	// Create a new script.
@@ -76,6 +82,12 @@ type Invoker interface {
 	//
 	// POST /script-policy
 	CreateScriptPolicy(ctx context.Context, request *ScriptPolicyCreate) (*ID, error)
+	// CreateSubmission invokes createSubmission operation.
+	//
+	// Create a new submission.
+	//
+	// POST /submissions
+	CreateSubmission(ctx context.Context, request *SubmissionCreate) (*ID, error)
 	// GetScript invokes getScript operation.
 	//
 	// Get the specified script by ID.
@@ -755,6 +767,81 @@ func (c *Client) sendActionSubmissionValidated(ctx context.Context, params Actio
 	return result, nil
 }
 
+// CreateMapfix invokes createMapfix operation.
+//
+// Create a mapfix.
+//
+// POST /mapfixes
+func (c *Client) CreateMapfix(ctx context.Context, request *MapfixCreate) (*ID, error) {
+	res, err := c.sendCreateMapfix(ctx, request)
+	return res, err
+}
+
+func (c *Client) sendCreateMapfix(ctx context.Context, request *MapfixCreate) (res *ID, err error) {
+	otelAttrs := []attribute.KeyValue{
+		otelogen.OperationID("createMapfix"),
+		semconv.HTTPRequestMethodKey.String("POST"),
+		semconv.HTTPRouteKey.String("/mapfixes"),
+	}
+
+	// Run stopwatch.
+	startTime := time.Now()
+	defer func() {
+		// Use floating point division here for higher precision (instead of Millisecond method).
+		elapsedDuration := time.Since(startTime)
+		c.duration.Record(ctx, float64(elapsedDuration)/float64(time.Millisecond), metric.WithAttributes(otelAttrs...))
+	}()
+
+	// Increment request counter.
+	c.requests.Add(ctx, 1, metric.WithAttributes(otelAttrs...))
+
+	// Start a span for this request.
+	ctx, span := c.cfg.Tracer.Start(ctx, CreateMapfixOperation,
+		trace.WithAttributes(otelAttrs...),
+		clientSpanKind,
+	)
+	// Track stage for error reporting.
+	var stage string
+	defer func() {
+		if err != nil {
+			span.RecordError(err)
+			span.SetStatus(codes.Error, stage)
+			c.errors.Add(ctx, 1, metric.WithAttributes(otelAttrs...))
+		}
+		span.End()
+	}()
+
+	stage = "BuildURL"
+	u := uri.Clone(c.requestURL(ctx))
+	var pathParts [1]string
+	pathParts[0] = "/mapfixes"
+	uri.AddPathParts(u, pathParts[:]...)
+
+	stage = "EncodeRequest"
+	r, err := ht.NewRequest(ctx, "POST", u)
+	if err != nil {
+		return res, errors.Wrap(err, "create request")
+	}
+	if err := encodeCreateMapfixRequest(request, r); err != nil {
+		return res, errors.Wrap(err, "encode request")
+	}
+
+	stage = "SendRequest"
+	resp, err := c.cfg.Client.Do(r)
+	if err != nil {
+		return res, errors.Wrap(err, "do request")
+	}
+	defer resp.Body.Close()
+
+	stage = "DecodeResponse"
+	result, err := decodeCreateMapfixResponse(resp)
+	if err != nil {
+		return res, errors.Wrap(err, "decode response")
+	}
+
+	return result, nil
+}
+
 // CreateScript invokes createScript operation.
 //
 // Create a new script.
@@ -905,6 +992,81 @@ func (c *Client) sendCreateScriptPolicy(ctx context.Context, request *ScriptPoli
 	return result, nil
 }
 
+// CreateSubmission invokes createSubmission operation.
+//
+// Create a new submission.
+//
+// POST /submissions
+func (c *Client) CreateSubmission(ctx context.Context, request *SubmissionCreate) (*ID, error) {
+	res, err := c.sendCreateSubmission(ctx, request)
+	return res, err
+}
+
+func (c *Client) sendCreateSubmission(ctx context.Context, request *SubmissionCreate) (res *ID, err error) {
+	otelAttrs := []attribute.KeyValue{
+		otelogen.OperationID("createSubmission"),
+		semconv.HTTPRequestMethodKey.String("POST"),
+		semconv.HTTPRouteKey.String("/submissions"),
+	}
+
+	// Run stopwatch.
+	startTime := time.Now()
+	defer func() {
+		// Use floating point division here for higher precision (instead of Millisecond method).
+		elapsedDuration := time.Since(startTime)
+		c.duration.Record(ctx, float64(elapsedDuration)/float64(time.Millisecond), metric.WithAttributes(otelAttrs...))
+	}()
+
+	// Increment request counter.
+	c.requests.Add(ctx, 1, metric.WithAttributes(otelAttrs...))
+
+	// Start a span for this request.
+	ctx, span := c.cfg.Tracer.Start(ctx, CreateSubmissionOperation,
+		trace.WithAttributes(otelAttrs...),
+		clientSpanKind,
+	)
+	// Track stage for error reporting.
+	var stage string
+	defer func() {
+		if err != nil {
+			span.RecordError(err)
+			span.SetStatus(codes.Error, stage)
+			c.errors.Add(ctx, 1, metric.WithAttributes(otelAttrs...))
+		}
+		span.End()
+	}()
+
+	stage = "BuildURL"
+	u := uri.Clone(c.requestURL(ctx))
+	var pathParts [1]string
+	pathParts[0] = "/submissions"
+	uri.AddPathParts(u, pathParts[:]...)
+
+	stage = "EncodeRequest"
+	r, err := ht.NewRequest(ctx, "POST", u)
+	if err != nil {
+		return res, errors.Wrap(err, "create request")
+	}
+	if err := encodeCreateSubmissionRequest(request, r); err != nil {
+		return res, errors.Wrap(err, "encode request")
+	}
+
+	stage = "SendRequest"
+	resp, err := c.cfg.Client.Do(r)
+	if err != nil {
+		return res, errors.Wrap(err, "do request")
+	}
+	defer resp.Body.Close()
+
+	stage = "DecodeResponse"
+	result, err := decodeCreateSubmissionResponse(resp)
+	if err != nil {
+		return res, errors.Wrap(err, "decode response")
+	}
+
+	return result, nil
+}
+
 // GetScript invokes getScript operation.
 //
 // Get the specified script by ID.
diff --git a/pkg/internal/oas_handlers_gen.go b/pkg/internal/oas_handlers_gen.go
index 346fefb..5a77b23 100644
--- a/pkg/internal/oas_handlers_gen.go
+++ b/pkg/internal/oas_handlers_gen.go
@@ -936,6 +936,155 @@ func (s *Server) handleActionSubmissionValidatedRequest(args [1]string, argsEsca
 	}
 }
 
+// handleCreateMapfixRequest handles createMapfix operation.
+//
+// Create a mapfix.
+//
+// POST /mapfixes
+func (s *Server) handleCreateMapfixRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
+	statusWriter := &codeRecorder{ResponseWriter: w}
+	w = statusWriter
+	otelAttrs := []attribute.KeyValue{
+		otelogen.OperationID("createMapfix"),
+		semconv.HTTPRequestMethodKey.String("POST"),
+		semconv.HTTPRouteKey.String("/mapfixes"),
+	}
+
+	// Start a span for this request.
+	ctx, span := s.cfg.Tracer.Start(r.Context(), CreateMapfixOperation,
+		trace.WithAttributes(otelAttrs...),
+		serverSpanKind,
+	)
+	defer span.End()
+
+	// Add Labeler to context.
+	labeler := &Labeler{attrs: otelAttrs}
+	ctx = contextWithLabeler(ctx, labeler)
+
+	// Run stopwatch.
+	startTime := time.Now()
+	defer func() {
+		elapsedDuration := time.Since(startTime)
+
+		attrSet := labeler.AttributeSet()
+		attrs := attrSet.ToSlice()
+		code := statusWriter.status
+		if code != 0 {
+			codeAttr := semconv.HTTPResponseStatusCode(code)
+			attrs = append(attrs, codeAttr)
+			span.SetAttributes(codeAttr)
+		}
+		attrOpt := metric.WithAttributes(attrs...)
+
+		// Increment request counter.
+		s.requests.Add(ctx, 1, attrOpt)
+
+		// Use floating point division here for higher precision (instead of Millisecond method).
+		s.duration.Record(ctx, float64(elapsedDuration)/float64(time.Millisecond), attrOpt)
+	}()
+
+	var (
+		recordError = func(stage string, err error) {
+			span.RecordError(err)
+
+			// https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status
+			// Span Status MUST be left unset if HTTP status code was in the 1xx, 2xx or 3xx ranges,
+			// unless there was another error (e.g., network error receiving the response body; or 3xx codes with
+			// max redirects exceeded), in which case status MUST be set to Error.
+			code := statusWriter.status
+			if code >= 100 && code < 500 {
+				span.SetStatus(codes.Error, stage)
+			}
+
+			attrSet := labeler.AttributeSet()
+			attrs := attrSet.ToSlice()
+			if code != 0 {
+				attrs = append(attrs, semconv.HTTPResponseStatusCode(code))
+			}
+
+			s.errors.Add(ctx, 1, metric.WithAttributes(attrs...))
+		}
+		err          error
+		opErrContext = ogenerrors.OperationContext{
+			Name: CreateMapfixOperation,
+			ID:   "createMapfix",
+		}
+	)
+	request, close, err := s.decodeCreateMapfixRequest(r)
+	if err != nil {
+		err = &ogenerrors.DecodeRequestError{
+			OperationContext: opErrContext,
+			Err:              err,
+		}
+		defer recordError("DecodeRequest", err)
+		s.cfg.ErrorHandler(ctx, w, r, err)
+		return
+	}
+	defer func() {
+		if err := close(); err != nil {
+			recordError("CloseRequest", err)
+		}
+	}()
+
+	var response *ID
+	if m := s.cfg.Middleware; m != nil {
+		mreq := middleware.Request{
+			Context:          ctx,
+			OperationName:    CreateMapfixOperation,
+			OperationSummary: "Create a mapfix",
+			OperationID:      "createMapfix",
+			Body:             request,
+			Params:           middleware.Parameters{},
+			Raw:              r,
+		}
+
+		type (
+			Request  = *MapfixCreate
+			Params   = struct{}
+			Response = *ID
+		)
+		response, err = middleware.HookMiddleware[
+			Request,
+			Params,
+			Response,
+		](
+			m,
+			mreq,
+			nil,
+			func(ctx context.Context, request Request, params Params) (response Response, err error) {
+				response, err = s.h.CreateMapfix(ctx, request)
+				return response, err
+			},
+		)
+	} else {
+		response, err = s.h.CreateMapfix(ctx, request)
+	}
+	if err != nil {
+		if errRes, ok := errors.Into[*ErrorStatusCode](err); ok {
+			if err := encodeErrorResponse(errRes, w, span); err != nil {
+				defer recordError("Internal", err)
+			}
+			return
+		}
+		if errors.Is(err, ht.ErrNotImplemented) {
+			s.cfg.ErrorHandler(ctx, w, r, err)
+			return
+		}
+		if err := encodeErrorResponse(s.h.NewError(ctx, err), w, span); err != nil {
+			defer recordError("Internal", err)
+		}
+		return
+	}
+
+	if err := encodeCreateMapfixResponse(response, w, span); err != nil {
+		defer recordError("EncodeResponse", err)
+		if !errors.Is(err, ht.ErrInternalServerErrorResponse) {
+			s.cfg.ErrorHandler(ctx, w, r, err)
+		}
+		return
+	}
+}
+
 // handleCreateScriptRequest handles createScript operation.
 //
 // Create a new script.
@@ -1234,6 +1383,155 @@ func (s *Server) handleCreateScriptPolicyRequest(args [0]string, argsEscaped boo
 	}
 }
 
+// handleCreateSubmissionRequest handles createSubmission operation.
+//
+// Create a new submission.
+//
+// POST /submissions
+func (s *Server) handleCreateSubmissionRequest(args [0]string, argsEscaped bool, w http.ResponseWriter, r *http.Request) {
+	statusWriter := &codeRecorder{ResponseWriter: w}
+	w = statusWriter
+	otelAttrs := []attribute.KeyValue{
+		otelogen.OperationID("createSubmission"),
+		semconv.HTTPRequestMethodKey.String("POST"),
+		semconv.HTTPRouteKey.String("/submissions"),
+	}
+
+	// Start a span for this request.
+	ctx, span := s.cfg.Tracer.Start(r.Context(), CreateSubmissionOperation,
+		trace.WithAttributes(otelAttrs...),
+		serverSpanKind,
+	)
+	defer span.End()
+
+	// Add Labeler to context.
+	labeler := &Labeler{attrs: otelAttrs}
+	ctx = contextWithLabeler(ctx, labeler)
+
+	// Run stopwatch.
+	startTime := time.Now()
+	defer func() {
+		elapsedDuration := time.Since(startTime)
+
+		attrSet := labeler.AttributeSet()
+		attrs := attrSet.ToSlice()
+		code := statusWriter.status
+		if code != 0 {
+			codeAttr := semconv.HTTPResponseStatusCode(code)
+			attrs = append(attrs, codeAttr)
+			span.SetAttributes(codeAttr)
+		}
+		attrOpt := metric.WithAttributes(attrs...)
+
+		// Increment request counter.
+		s.requests.Add(ctx, 1, attrOpt)
+
+		// Use floating point division here for higher precision (instead of Millisecond method).
+		s.duration.Record(ctx, float64(elapsedDuration)/float64(time.Millisecond), attrOpt)
+	}()
+
+	var (
+		recordError = func(stage string, err error) {
+			span.RecordError(err)
+
+			// https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status
+			// Span Status MUST be left unset if HTTP status code was in the 1xx, 2xx or 3xx ranges,
+			// unless there was another error (e.g., network error receiving the response body; or 3xx codes with
+			// max redirects exceeded), in which case status MUST be set to Error.
+			code := statusWriter.status
+			if code >= 100 && code < 500 {
+				span.SetStatus(codes.Error, stage)
+			}
+
+			attrSet := labeler.AttributeSet()
+			attrs := attrSet.ToSlice()
+			if code != 0 {
+				attrs = append(attrs, semconv.HTTPResponseStatusCode(code))
+			}
+
+			s.errors.Add(ctx, 1, metric.WithAttributes(attrs...))
+		}
+		err          error
+		opErrContext = ogenerrors.OperationContext{
+			Name: CreateSubmissionOperation,
+			ID:   "createSubmission",
+		}
+	)
+	request, close, err := s.decodeCreateSubmissionRequest(r)
+	if err != nil {
+		err = &ogenerrors.DecodeRequestError{
+			OperationContext: opErrContext,
+			Err:              err,
+		}
+		defer recordError("DecodeRequest", err)
+		s.cfg.ErrorHandler(ctx, w, r, err)
+		return
+	}
+	defer func() {
+		if err := close(); err != nil {
+			recordError("CloseRequest", err)
+		}
+	}()
+
+	var response *ID
+	if m := s.cfg.Middleware; m != nil {
+		mreq := middleware.Request{
+			Context:          ctx,
+			OperationName:    CreateSubmissionOperation,
+			OperationSummary: "Create a new submission",
+			OperationID:      "createSubmission",
+			Body:             request,
+			Params:           middleware.Parameters{},
+			Raw:              r,
+		}
+
+		type (
+			Request  = *SubmissionCreate
+			Params   = struct{}
+			Response = *ID
+		)
+		response, err = middleware.HookMiddleware[
+			Request,
+			Params,
+			Response,
+		](
+			m,
+			mreq,
+			nil,
+			func(ctx context.Context, request Request, params Params) (response Response, err error) {
+				response, err = s.h.CreateSubmission(ctx, request)
+				return response, err
+			},
+		)
+	} else {
+		response, err = s.h.CreateSubmission(ctx, request)
+	}
+	if err != nil {
+		if errRes, ok := errors.Into[*ErrorStatusCode](err); ok {
+			if err := encodeErrorResponse(errRes, w, span); err != nil {
+				defer recordError("Internal", err)
+			}
+			return
+		}
+		if errors.Is(err, ht.ErrNotImplemented) {
+			s.cfg.ErrorHandler(ctx, w, r, err)
+			return
+		}
+		if err := encodeErrorResponse(s.h.NewError(ctx, err), w, span); err != nil {
+			defer recordError("Internal", err)
+		}
+		return
+	}
+
+	if err := encodeCreateSubmissionResponse(response, w, span); err != nil {
+		defer recordError("EncodeResponse", err)
+		if !errors.Is(err, ht.ErrInternalServerErrorResponse) {
+			s.cfg.ErrorHandler(ctx, w, r, err)
+		}
+		return
+	}
+}
+
 // handleGetScriptRequest handles getScript operation.
 //
 // Get the specified script by ID.
diff --git a/pkg/internal/oas_json_gen.go b/pkg/internal/oas_json_gen.go
index 7b03e7b..7ad30b5 100644
--- a/pkg/internal/oas_json_gen.go
+++ b/pkg/internal/oas_json_gen.go
@@ -221,6 +221,221 @@ func (s *ID) UnmarshalJSON(data []byte) error {
 	return s.Decode(d)
 }
 
+// Encode implements json.Marshaler.
+func (s *MapfixCreate) Encode(e *jx.Encoder) {
+	e.ObjStart()
+	s.encodeFields(e)
+	e.ObjEnd()
+}
+
+// encodeFields encodes fields.
+func (s *MapfixCreate) encodeFields(e *jx.Encoder) {
+	{
+		e.FieldStart("OperationID")
+		e.Int32(s.OperationID)
+	}
+	{
+		e.FieldStart("AssetOwner")
+		e.Int64(s.AssetOwner)
+	}
+	{
+		e.FieldStart("DisplayName")
+		e.Str(s.DisplayName)
+	}
+	{
+		e.FieldStart("Creator")
+		e.Str(s.Creator)
+	}
+	{
+		e.FieldStart("GameID")
+		e.Int32(s.GameID)
+	}
+	{
+		e.FieldStart("AssetID")
+		e.Int64(s.AssetID)
+	}
+	{
+		e.FieldStart("AssetVersion")
+		e.Int64(s.AssetVersion)
+	}
+	{
+		e.FieldStart("TargetAssetID")
+		e.Int64(s.TargetAssetID)
+	}
+}
+
+var jsonFieldsNameOfMapfixCreate = [8]string{
+	0: "OperationID",
+	1: "AssetOwner",
+	2: "DisplayName",
+	3: "Creator",
+	4: "GameID",
+	5: "AssetID",
+	6: "AssetVersion",
+	7: "TargetAssetID",
+}
+
+// Decode decodes MapfixCreate from json.
+func (s *MapfixCreate) Decode(d *jx.Decoder) error {
+	if s == nil {
+		return errors.New("invalid: unable to decode MapfixCreate to nil")
+	}
+	var requiredBitSet [1]uint8
+
+	if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
+		switch string(k) {
+		case "OperationID":
+			requiredBitSet[0] |= 1 << 0
+			if err := func() error {
+				v, err := d.Int32()
+				s.OperationID = int32(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"OperationID\"")
+			}
+		case "AssetOwner":
+			requiredBitSet[0] |= 1 << 1
+			if err := func() error {
+				v, err := d.Int64()
+				s.AssetOwner = int64(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"AssetOwner\"")
+			}
+		case "DisplayName":
+			requiredBitSet[0] |= 1 << 2
+			if err := func() error {
+				v, err := d.Str()
+				s.DisplayName = string(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"DisplayName\"")
+			}
+		case "Creator":
+			requiredBitSet[0] |= 1 << 3
+			if err := func() error {
+				v, err := d.Str()
+				s.Creator = string(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"Creator\"")
+			}
+		case "GameID":
+			requiredBitSet[0] |= 1 << 4
+			if err := func() error {
+				v, err := d.Int32()
+				s.GameID = int32(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"GameID\"")
+			}
+		case "AssetID":
+			requiredBitSet[0] |= 1 << 5
+			if err := func() error {
+				v, err := d.Int64()
+				s.AssetID = int64(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"AssetID\"")
+			}
+		case "AssetVersion":
+			requiredBitSet[0] |= 1 << 6
+			if err := func() error {
+				v, err := d.Int64()
+				s.AssetVersion = int64(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"AssetVersion\"")
+			}
+		case "TargetAssetID":
+			requiredBitSet[0] |= 1 << 7
+			if err := func() error {
+				v, err := d.Int64()
+				s.TargetAssetID = int64(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"TargetAssetID\"")
+			}
+		default:
+			return d.Skip()
+		}
+		return nil
+	}); err != nil {
+		return errors.Wrap(err, "decode MapfixCreate")
+	}
+	// Validate required fields.
+	var failures []validate.FieldError
+	for i, mask := range [1]uint8{
+		0b11111111,
+	} {
+		if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
+			// Mask only required fields and check equality to mask using XOR.
+			//
+			// If XOR result is not zero, result is not equal to expected, so some fields are missed.
+			// Bits of fields which would be set are actually bits of missed fields.
+			missed := bits.OnesCount8(result)
+			for bitN := 0; bitN < missed; bitN++ {
+				bitIdx := bits.TrailingZeros8(result)
+				fieldIdx := i*8 + bitIdx
+				var name string
+				if fieldIdx < len(jsonFieldsNameOfMapfixCreate) {
+					name = jsonFieldsNameOfMapfixCreate[fieldIdx]
+				} else {
+					name = strconv.Itoa(fieldIdx)
+				}
+				failures = append(failures, validate.FieldError{
+					Name:  name,
+					Error: validate.ErrFieldRequired,
+				})
+				// Reset bit.
+				result &^= 1 << bitIdx
+			}
+		}
+	}
+	if len(failures) > 0 {
+		return &validate.Error{Fields: failures}
+	}
+
+	return nil
+}
+
+// MarshalJSON implements stdjson.Marshaler.
+func (s *MapfixCreate) MarshalJSON() ([]byte, error) {
+	e := jx.Encoder{}
+	s.Encode(&e)
+	return e.Bytes(), nil
+}
+
+// UnmarshalJSON implements stdjson.Unmarshaler.
+func (s *MapfixCreate) UnmarshalJSON(data []byte) error {
+	d := jx.DecodeBytes(data)
+	return s.Decode(d)
+}
+
 // Encode encodes int64 as json.
 func (o OptInt64) Encode(e *jx.Encoder) {
 	if !o.Set {
@@ -860,3 +1075,201 @@ func (s *ScriptPolicyCreate) UnmarshalJSON(data []byte) error {
 	d := jx.DecodeBytes(data)
 	return s.Decode(d)
 }
+
+// Encode implements json.Marshaler.
+func (s *SubmissionCreate) Encode(e *jx.Encoder) {
+	e.ObjStart()
+	s.encodeFields(e)
+	e.ObjEnd()
+}
+
+// encodeFields encodes fields.
+func (s *SubmissionCreate) encodeFields(e *jx.Encoder) {
+	{
+		e.FieldStart("OperationID")
+		e.Int32(s.OperationID)
+	}
+	{
+		e.FieldStart("AssetOwner")
+		e.Int64(s.AssetOwner)
+	}
+	{
+		e.FieldStart("DisplayName")
+		e.Str(s.DisplayName)
+	}
+	{
+		e.FieldStart("Creator")
+		e.Str(s.Creator)
+	}
+	{
+		e.FieldStart("GameID")
+		e.Int32(s.GameID)
+	}
+	{
+		e.FieldStart("AssetID")
+		e.Int64(s.AssetID)
+	}
+	{
+		e.FieldStart("AssetVersion")
+		e.Int64(s.AssetVersion)
+	}
+}
+
+var jsonFieldsNameOfSubmissionCreate = [7]string{
+	0: "OperationID",
+	1: "AssetOwner",
+	2: "DisplayName",
+	3: "Creator",
+	4: "GameID",
+	5: "AssetID",
+	6: "AssetVersion",
+}
+
+// Decode decodes SubmissionCreate from json.
+func (s *SubmissionCreate) Decode(d *jx.Decoder) error {
+	if s == nil {
+		return errors.New("invalid: unable to decode SubmissionCreate to nil")
+	}
+	var requiredBitSet [1]uint8
+
+	if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error {
+		switch string(k) {
+		case "OperationID":
+			requiredBitSet[0] |= 1 << 0
+			if err := func() error {
+				v, err := d.Int32()
+				s.OperationID = int32(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"OperationID\"")
+			}
+		case "AssetOwner":
+			requiredBitSet[0] |= 1 << 1
+			if err := func() error {
+				v, err := d.Int64()
+				s.AssetOwner = int64(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"AssetOwner\"")
+			}
+		case "DisplayName":
+			requiredBitSet[0] |= 1 << 2
+			if err := func() error {
+				v, err := d.Str()
+				s.DisplayName = string(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"DisplayName\"")
+			}
+		case "Creator":
+			requiredBitSet[0] |= 1 << 3
+			if err := func() error {
+				v, err := d.Str()
+				s.Creator = string(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"Creator\"")
+			}
+		case "GameID":
+			requiredBitSet[0] |= 1 << 4
+			if err := func() error {
+				v, err := d.Int32()
+				s.GameID = int32(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"GameID\"")
+			}
+		case "AssetID":
+			requiredBitSet[0] |= 1 << 5
+			if err := func() error {
+				v, err := d.Int64()
+				s.AssetID = int64(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"AssetID\"")
+			}
+		case "AssetVersion":
+			requiredBitSet[0] |= 1 << 6
+			if err := func() error {
+				v, err := d.Int64()
+				s.AssetVersion = int64(v)
+				if err != nil {
+					return err
+				}
+				return nil
+			}(); err != nil {
+				return errors.Wrap(err, "decode field \"AssetVersion\"")
+			}
+		default:
+			return d.Skip()
+		}
+		return nil
+	}); err != nil {
+		return errors.Wrap(err, "decode SubmissionCreate")
+	}
+	// Validate required fields.
+	var failures []validate.FieldError
+	for i, mask := range [1]uint8{
+		0b01111111,
+	} {
+		if result := (requiredBitSet[i] & mask) ^ mask; result != 0 {
+			// Mask only required fields and check equality to mask using XOR.
+			//
+			// If XOR result is not zero, result is not equal to expected, so some fields are missed.
+			// Bits of fields which would be set are actually bits of missed fields.
+			missed := bits.OnesCount8(result)
+			for bitN := 0; bitN < missed; bitN++ {
+				bitIdx := bits.TrailingZeros8(result)
+				fieldIdx := i*8 + bitIdx
+				var name string
+				if fieldIdx < len(jsonFieldsNameOfSubmissionCreate) {
+					name = jsonFieldsNameOfSubmissionCreate[fieldIdx]
+				} else {
+					name = strconv.Itoa(fieldIdx)
+				}
+				failures = append(failures, validate.FieldError{
+					Name:  name,
+					Error: validate.ErrFieldRequired,
+				})
+				// Reset bit.
+				result &^= 1 << bitIdx
+			}
+		}
+	}
+	if len(failures) > 0 {
+		return &validate.Error{Fields: failures}
+	}
+
+	return nil
+}
+
+// MarshalJSON implements stdjson.Marshaler.
+func (s *SubmissionCreate) MarshalJSON() ([]byte, error) {
+	e := jx.Encoder{}
+	s.Encode(&e)
+	return e.Bytes(), nil
+}
+
+// UnmarshalJSON implements stdjson.Unmarshaler.
+func (s *SubmissionCreate) UnmarshalJSON(data []byte) error {
+	d := jx.DecodeBytes(data)
+	return s.Decode(d)
+}
diff --git a/pkg/internal/oas_operations_gen.go b/pkg/internal/oas_operations_gen.go
index d472077..6fafed1 100644
--- a/pkg/internal/oas_operations_gen.go
+++ b/pkg/internal/oas_operations_gen.go
@@ -12,8 +12,10 @@ const (
 	ActionSubmissionAcceptedOperation       OperationName = "ActionSubmissionAccepted"
 	ActionSubmissionUploadedOperation       OperationName = "ActionSubmissionUploaded"
 	ActionSubmissionValidatedOperation      OperationName = "ActionSubmissionValidated"
+	CreateMapfixOperation                   OperationName = "CreateMapfix"
 	CreateScriptOperation                   OperationName = "CreateScript"
 	CreateScriptPolicyOperation             OperationName = "CreateScriptPolicy"
+	CreateSubmissionOperation               OperationName = "CreateSubmission"
 	GetScriptOperation                      OperationName = "GetScript"
 	ListScriptPolicyOperation               OperationName = "ListScriptPolicy"
 	ListScriptsOperation                    OperationName = "ListScripts"
diff --git a/pkg/internal/oas_request_decoders_gen.go b/pkg/internal/oas_request_decoders_gen.go
index db79c40..5be039e 100644
--- a/pkg/internal/oas_request_decoders_gen.go
+++ b/pkg/internal/oas_request_decoders_gen.go
@@ -15,6 +15,77 @@ import (
 	"github.com/ogen-go/ogen/validate"
 )
 
+func (s *Server) decodeCreateMapfixRequest(r *http.Request) (
+	req *MapfixCreate,
+	close func() error,
+	rerr error,
+) {
+	var closers []func() error
+	close = func() error {
+		var merr error
+		// Close in reverse order, to match defer behavior.
+		for i := len(closers) - 1; i >= 0; i-- {
+			c := closers[i]
+			merr = multierr.Append(merr, c())
+		}
+		return merr
+	}
+	defer func() {
+		if rerr != nil {
+			rerr = multierr.Append(rerr, close())
+		}
+	}()
+	ct, _, err := mime.ParseMediaType(r.Header.Get("Content-Type"))
+	if err != nil {
+		return req, close, errors.Wrap(err, "parse media type")
+	}
+	switch {
+	case ct == "application/json":
+		if r.ContentLength == 0 {
+			return req, close, validate.ErrBodyRequired
+		}
+		buf, err := io.ReadAll(r.Body)
+		if err != nil {
+			return req, close, err
+		}
+
+		if len(buf) == 0 {
+			return req, close, validate.ErrBodyRequired
+		}
+
+		d := jx.DecodeBytes(buf)
+
+		var request MapfixCreate
+		if err := func() error {
+			if err := request.Decode(d); err != nil {
+				return err
+			}
+			if err := d.Skip(); err != io.EOF {
+				return errors.New("unexpected trailing data")
+			}
+			return nil
+		}(); err != nil {
+			err = &ogenerrors.DecodeBodyError{
+				ContentType: ct,
+				Body:        buf,
+				Err:         err,
+			}
+			return req, close, err
+		}
+		if err := func() error {
+			if err := request.Validate(); err != nil {
+				return err
+			}
+			return nil
+		}(); err != nil {
+			return req, close, errors.Wrap(err, "validate")
+		}
+		return &request, close, nil
+	default:
+		return req, close, validate.InvalidContentType(ct)
+	}
+}
+
 func (s *Server) decodeCreateScriptRequest(r *http.Request) (
 	req *ScriptCreate,
 	close func() error,
@@ -148,3 +219,74 @@ func (s *Server) decodeCreateScriptPolicyRequest(r *http.Request) (
 		return req, close, validate.InvalidContentType(ct)
 	}
 }
+
+func (s *Server) decodeCreateSubmissionRequest(r *http.Request) (
+	req *SubmissionCreate,
+	close func() error,
+	rerr error,
+) {
+	var closers []func() error
+	close = func() error {
+		var merr error
+		// Close in reverse order, to match defer behavior.
+		for i := len(closers) - 1; i >= 0; i-- {
+			c := closers[i]
+			merr = multierr.Append(merr, c())
+		}
+		return merr
+	}
+	defer func() {
+		if rerr != nil {
+			rerr = multierr.Append(rerr, close())
+		}
+	}()
+	ct, _, err := mime.ParseMediaType(r.Header.Get("Content-Type"))
+	if err != nil {
+		return req, close, errors.Wrap(err, "parse media type")
+	}
+	switch {
+	case ct == "application/json":
+		if r.ContentLength == 0 {
+			return req, close, validate.ErrBodyRequired
+		}
+		buf, err := io.ReadAll(r.Body)
+		if err != nil {
+			return req, close, err
+		}
+
+		if len(buf) == 0 {
+			return req, close, validate.ErrBodyRequired
+		}
+
+		d := jx.DecodeBytes(buf)
+
+		var request SubmissionCreate
+		if err := func() error {
+			if err := request.Decode(d); err != nil {
+				return err
+			}
+			if err := d.Skip(); err != io.EOF {
+				return errors.New("unexpected trailing data")
+			}
+			return nil
+		}(); err != nil {
+			err = &ogenerrors.DecodeBodyError{
+				ContentType: ct,
+				Body:        buf,
+				Err:         err,
+			}
+			return req, close, err
+		}
+		if err := func() error {
+			if err := request.Validate(); err != nil {
+				return err
+			}
+			return nil
+		}(); err != nil {
+			return req, close, errors.Wrap(err, "validate")
+		}
+		return &request, close, nil
+	default:
+		return req, close, validate.InvalidContentType(ct)
+	}
+}
diff --git a/pkg/internal/oas_request_encoders_gen.go b/pkg/internal/oas_request_encoders_gen.go
index a0e7305..1e38200 100644
--- a/pkg/internal/oas_request_encoders_gen.go
+++ b/pkg/internal/oas_request_encoders_gen.go
@@ -11,6 +11,20 @@ import (
 	ht "github.com/ogen-go/ogen/http"
 )
 
+func encodeCreateMapfixRequest(
+	req *MapfixCreate,
+	r *http.Request,
+) error {
+	const contentType = "application/json"
+	e := new(jx.Encoder)
+	{
+		req.Encode(e)
+	}
+	encoded := e.Bytes()
+	ht.SetBody(r, bytes.NewReader(encoded), contentType)
+	return nil
+}
+
 func encodeCreateScriptRequest(
 	req *ScriptCreate,
 	r *http.Request,
@@ -38,3 +52,17 @@ func encodeCreateScriptPolicyRequest(
 	ht.SetBody(r, bytes.NewReader(encoded), contentType)
 	return nil
 }
+
+func encodeCreateSubmissionRequest(
+	req *SubmissionCreate,
+	r *http.Request,
+) error {
+	const contentType = "application/json"
+	e := new(jx.Encoder)
+	{
+		req.Encode(e)
+	}
+	encoded := e.Bytes()
+	ht.SetBody(r, bytes.NewReader(encoded), contentType)
+	return nil
+}
diff --git a/pkg/internal/oas_response_decoders_gen.go b/pkg/internal/oas_response_decoders_gen.go
index 226883f..a667917 100644
--- a/pkg/internal/oas_response_decoders_gen.go
+++ b/pkg/internal/oas_response_decoders_gen.go
@@ -321,6 +321,89 @@ func decodeActionSubmissionValidatedResponse(resp *http.Response) (res *ActionSu
 	return res, errors.Wrap(defRes, "error")
 }
 
+func decodeCreateMapfixResponse(resp *http.Response) (res *ID, _ error) {
+	switch resp.StatusCode {
+	case 201:
+		// Code 201.
+		ct, _, err := mime.ParseMediaType(resp.Header.Get("Content-Type"))
+		if err != nil {
+			return res, errors.Wrap(err, "parse media type")
+		}
+		switch {
+		case ct == "application/json":
+			buf, err := io.ReadAll(resp.Body)
+			if err != nil {
+				return res, err
+			}
+			d := jx.DecodeBytes(buf)
+
+			var response ID
+			if err := func() error {
+				if err := response.Decode(d); err != nil {
+					return err
+				}
+				if err := d.Skip(); err != io.EOF {
+					return errors.New("unexpected trailing data")
+				}
+				return nil
+			}(); err != nil {
+				err = &ogenerrors.DecodeBodyError{
+					ContentType: ct,
+					Body:        buf,
+					Err:         err,
+				}
+				return res, err
+			}
+			return &response, nil
+		default:
+			return res, validate.InvalidContentType(ct)
+		}
+	}
+	// Convenient error response.
+	defRes, err := func() (res *ErrorStatusCode, err error) {
+		ct, _, err := mime.ParseMediaType(resp.Header.Get("Content-Type"))
+		if err != nil {
+			return res, errors.Wrap(err, "parse media type")
+		}
+		switch {
+		case ct == "application/json":
+			buf, err := io.ReadAll(resp.Body)
+			if err != nil {
+				return res, err
+			}
+			d := jx.DecodeBytes(buf)
+
+			var response Error
+			if err := func() error {
+				if err := response.Decode(d); err != nil {
+					return err
+				}
+				if err := d.Skip(); err != io.EOF {
+					return errors.New("unexpected trailing data")
+				}
+				return nil
+			}(); err != nil {
+				err = &ogenerrors.DecodeBodyError{
+					ContentType: ct,
+					Body:        buf,
+					Err:         err,
+				}
+				return res, err
+			}
+			return &ErrorStatusCode{
+				StatusCode: resp.StatusCode,
+				Response:   response,
+			}, nil
+		default:
+			return res, validate.InvalidContentType(ct)
+		}
+	}()
+	if err != nil {
+		return res, errors.Wrapf(err, "default (code %d)", resp.StatusCode)
+	}
+	return res, errors.Wrap(defRes, "error")
+}
+
 func decodeCreateScriptResponse(resp *http.Response) (res *ID, _ error) {
 	switch resp.StatusCode {
 	case 201:
@@ -487,6 +570,89 @@ func decodeCreateScriptPolicyResponse(resp *http.Response) (res *ID, _ error) {
 	return res, errors.Wrap(defRes, "error")
 }
 
+func decodeCreateSubmissionResponse(resp *http.Response) (res *ID, _ error) {
+	switch resp.StatusCode {
+	case 201:
+		// Code 201.
+		ct, _, err := mime.ParseMediaType(resp.Header.Get("Content-Type"))
+		if err != nil {
+			return res, errors.Wrap(err, "parse media type")
+		}
+		switch {
+		case ct == "application/json":
+			buf, err := io.ReadAll(resp.Body)
+			if err != nil {
+				return res, err
+			}
+			d := jx.DecodeBytes(buf)
+
+			var response ID
+			if err := func() error {
+				if err := response.Decode(d); err != nil {
+					return err
+				}
+				if err := d.Skip(); err != io.EOF {
+					return errors.New("unexpected trailing data")
+				}
+				return nil
+			}(); err != nil {
+				err = &ogenerrors.DecodeBodyError{
+					ContentType: ct,
+					Body:        buf,
+					Err:         err,
+				}
+				return res, err
+			}
+			return &response, nil
+		default:
+			return res, validate.InvalidContentType(ct)
+		}
+	}
+	// Convenient error response.
+	defRes, err := func() (res *ErrorStatusCode, err error) {
+		ct, _, err := mime.ParseMediaType(resp.Header.Get("Content-Type"))
+		if err != nil {
+			return res, errors.Wrap(err, "parse media type")
+		}
+		switch {
+		case ct == "application/json":
+			buf, err := io.ReadAll(resp.Body)
+			if err != nil {
+				return res, err
+			}
+			d := jx.DecodeBytes(buf)
+
+			var response Error
+			if err := func() error {
+				if err := response.Decode(d); err != nil {
+					return err
+				}
+				if err := d.Skip(); err != io.EOF {
+					return errors.New("unexpected trailing data")
+				}
+				return nil
+			}(); err != nil {
+				err = &ogenerrors.DecodeBodyError{
+					ContentType: ct,
+					Body:        buf,
+					Err:         err,
+				}
+				return res, err
+			}
+			return &ErrorStatusCode{
+				StatusCode: resp.StatusCode,
+				Response:   response,
+			}, nil
+		default:
+			return res, validate.InvalidContentType(ct)
+		}
+	}()
+	if err != nil {
+		return res, errors.Wrapf(err, "default (code %d)", resp.StatusCode)
+	}
+	return res, errors.Wrap(defRes, "error")
+}
+
 func decodeGetScriptResponse(resp *http.Response) (res *Script, _ error) {
 	switch resp.StatusCode {
 	case 200:
diff --git a/pkg/internal/oas_response_encoders_gen.go b/pkg/internal/oas_response_encoders_gen.go
index c7d2b1f..f8a52bd 100644
--- a/pkg/internal/oas_response_encoders_gen.go
+++ b/pkg/internal/oas_response_encoders_gen.go
@@ -55,6 +55,20 @@ func encodeActionSubmissionValidatedResponse(response *ActionSubmissionValidated
 	return nil
 }
 
+func encodeCreateMapfixResponse(response *ID, w http.ResponseWriter, span trace.Span) error {
+	w.Header().Set("Content-Type", "application/json; charset=utf-8")
+	w.WriteHeader(201)
+	span.SetStatus(codes.Ok, http.StatusText(201))
+
+	e := new(jx.Encoder)
+	response.Encode(e)
+	if _, err := e.WriteTo(w); err != nil {
+		return errors.Wrap(err, "write")
+	}
+
+	return nil
+}
+
 func encodeCreateScriptResponse(response *ID, w http.ResponseWriter, span trace.Span) error {
 	w.Header().Set("Content-Type", "application/json; charset=utf-8")
 	w.WriteHeader(201)
@@ -83,6 +97,20 @@ func encodeCreateScriptPolicyResponse(response *ID, w http.ResponseWriter, span
 	return nil
 }
 
+func encodeCreateSubmissionResponse(response *ID, w http.ResponseWriter, span trace.Span) error {
+	w.Header().Set("Content-Type", "application/json; charset=utf-8")
+	w.WriteHeader(201)
+	span.SetStatus(codes.Ok, http.StatusText(201))
+
+	e := new(jx.Encoder)
+	response.Encode(e)
+	if _, err := e.WriteTo(w); err != nil {
+		return errors.Wrap(err, "write")
+	}
+
+	return nil
+}
+
 func encodeGetScriptResponse(response *Script, w http.ResponseWriter, span trace.Span) error {
 	w.Header().Set("Content-Type", "application/json; charset=utf-8")
 	w.WriteHeader(200)
diff --git a/pkg/internal/oas_router_gen.go b/pkg/internal/oas_router_gen.go
index 77e8063..0d71206 100644
--- a/pkg/internal/oas_router_gen.go
+++ b/pkg/internal/oas_router_gen.go
@@ -61,25 +61,23 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 				break
 			}
 			switch elem[0] {
-			case 'm': // Prefix: "mapfixes/"
+			case 'm': // Prefix: "mapfixes"
 
-				if l := len("mapfixes/"); len(elem) >= l && elem[0:l] == "mapfixes/" {
+				if l := len("mapfixes"); len(elem) >= l && elem[0:l] == "mapfixes" {
 					elem = elem[l:]
 				} else {
 					break
 				}
 
-				// Param: "MapfixID"
-				// Match until "/"
-				idx := strings.IndexByte(elem, '/')
-				if idx < 0 {
-					idx = len(elem)
-				}
-				args[0] = elem[:idx]
-				elem = elem[idx:]
-
 				if len(elem) == 0 {
-					break
+					switch r.Method {
+					case "POST":
+						s.handleCreateMapfixRequest([0]string{}, elemIsEscaped, w, r)
+					default:
+						s.notAllowed(w, r, "POST")
+					}
+
+					return
 				}
 				switch elem[0] {
 				case '/': // Prefix: "/"
@@ -90,13 +88,22 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 						break
 					}
 
+					// Param: "MapfixID"
+					// Match until "/"
+					idx := strings.IndexByte(elem, '/')
+					if idx < 0 {
+						idx = len(elem)
+					}
+					args[0] = elem[:idx]
+					elem = elem[idx:]
+
 					if len(elem) == 0 {
 						break
 					}
 					switch elem[0] {
-					case 's': // Prefix: "status/validator-"
+					case '/': // Prefix: "/"
 
-						if l := len("status/validator-"); len(elem) >= l && elem[0:l] == "status/validator-" {
+						if l := len("/"); len(elem) >= l && elem[0:l] == "/" {
 							elem = elem[l:]
 						} else {
 							break
@@ -106,9 +113,89 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 							break
 						}
 						switch elem[0] {
-						case 'f': // Prefix: "failed"
+						case 's': // Prefix: "status/validator-"
 
-							if l := len("failed"); len(elem) >= l && elem[0:l] == "failed" {
+							if l := len("status/validator-"); len(elem) >= l && elem[0:l] == "status/validator-" {
+								elem = elem[l:]
+							} else {
+								break
+							}
+
+							if len(elem) == 0 {
+								break
+							}
+							switch elem[0] {
+							case 'f': // Prefix: "failed"
+
+								if l := len("failed"); len(elem) >= l && elem[0:l] == "failed" {
+									elem = elem[l:]
+								} else {
+									break
+								}
+
+								if len(elem) == 0 {
+									// Leaf node.
+									switch r.Method {
+									case "POST":
+										s.handleActionMapfixAcceptedRequest([1]string{
+											args[0],
+										}, elemIsEscaped, w, r)
+									default:
+										s.notAllowed(w, r, "POST")
+									}
+
+									return
+								}
+
+							case 'u': // Prefix: "uploaded"
+
+								if l := len("uploaded"); len(elem) >= l && elem[0:l] == "uploaded" {
+									elem = elem[l:]
+								} else {
+									break
+								}
+
+								if len(elem) == 0 {
+									// Leaf node.
+									switch r.Method {
+									case "POST":
+										s.handleActionMapfixUploadedRequest([1]string{
+											args[0],
+										}, elemIsEscaped, w, r)
+									default:
+										s.notAllowed(w, r, "POST")
+									}
+
+									return
+								}
+
+							case 'v': // Prefix: "validated"
+
+								if l := len("validated"); len(elem) >= l && elem[0:l] == "validated" {
+									elem = elem[l:]
+								} else {
+									break
+								}
+
+								if len(elem) == 0 {
+									// Leaf node.
+									switch r.Method {
+									case "POST":
+										s.handleActionMapfixValidatedRequest([1]string{
+											args[0],
+										}, elemIsEscaped, w, r)
+									default:
+										s.notAllowed(w, r, "POST")
+									}
+
+									return
+								}
+
+							}
+
+						case 'v': // Prefix: "validated-model"
+
+							if l := len("validated-model"); len(elem) >= l && elem[0:l] == "validated-model" {
 								elem = elem[l:]
 							} else {
 								break
@@ -118,7 +205,7 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 								// Leaf node.
 								switch r.Method {
 								case "POST":
-									s.handleActionMapfixAcceptedRequest([1]string{
+									s.handleUpdateMapfixValidatedModelRequest([1]string{
 										args[0],
 									}, elemIsEscaped, w, r)
 								default:
@@ -128,72 +215,6 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 								return
 							}
 
-						case 'u': // Prefix: "uploaded"
-
-							if l := len("uploaded"); len(elem) >= l && elem[0:l] == "uploaded" {
-								elem = elem[l:]
-							} else {
-								break
-							}
-
-							if len(elem) == 0 {
-								// Leaf node.
-								switch r.Method {
-								case "POST":
-									s.handleActionMapfixUploadedRequest([1]string{
-										args[0],
-									}, elemIsEscaped, w, r)
-								default:
-									s.notAllowed(w, r, "POST")
-								}
-
-								return
-							}
-
-						case 'v': // Prefix: "validated"
-
-							if l := len("validated"); len(elem) >= l && elem[0:l] == "validated" {
-								elem = elem[l:]
-							} else {
-								break
-							}
-
-							if len(elem) == 0 {
-								// Leaf node.
-								switch r.Method {
-								case "POST":
-									s.handleActionMapfixValidatedRequest([1]string{
-										args[0],
-									}, elemIsEscaped, w, r)
-								default:
-									s.notAllowed(w, r, "POST")
-								}
-
-								return
-							}
-
-						}
-
-					case 'v': // Prefix: "validated-model"
-
-						if l := len("validated-model"); len(elem) >= l && elem[0:l] == "validated-model" {
-							elem = elem[l:]
-						} else {
-							break
-						}
-
-						if len(elem) == 0 {
-							// Leaf node.
-							switch r.Method {
-							case "POST":
-								s.handleUpdateMapfixValidatedModelRequest([1]string{
-									args[0],
-								}, elemIsEscaped, w, r)
-							default:
-								s.notAllowed(w, r, "POST")
-							}
-
-							return
 						}
 
 					}
@@ -302,25 +323,23 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 
 					}
 
-				case 'u': // Prefix: "ubmissions/"
+				case 'u': // Prefix: "ubmissions"
 
-					if l := len("ubmissions/"); len(elem) >= l && elem[0:l] == "ubmissions/" {
+					if l := len("ubmissions"); len(elem) >= l && elem[0:l] == "ubmissions" {
 						elem = elem[l:]
 					} else {
 						break
 					}
 
-					// Param: "SubmissionID"
-					// Match until "/"
-					idx := strings.IndexByte(elem, '/')
-					if idx < 0 {
-						idx = len(elem)
-					}
-					args[0] = elem[:idx]
-					elem = elem[idx:]
-
 					if len(elem) == 0 {
-						break
+						switch r.Method {
+						case "POST":
+							s.handleCreateSubmissionRequest([0]string{}, elemIsEscaped, w, r)
+						default:
+							s.notAllowed(w, r, "POST")
+						}
+
+						return
 					}
 					switch elem[0] {
 					case '/': // Prefix: "/"
@@ -331,13 +350,22 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 							break
 						}
 
+						// Param: "SubmissionID"
+						// Match until "/"
+						idx := strings.IndexByte(elem, '/')
+						if idx < 0 {
+							idx = len(elem)
+						}
+						args[0] = elem[:idx]
+						elem = elem[idx:]
+
 						if len(elem) == 0 {
 							break
 						}
 						switch elem[0] {
-						case 's': // Prefix: "status/validator-"
+						case '/': // Prefix: "/"
 
-							if l := len("status/validator-"); len(elem) >= l && elem[0:l] == "status/validator-" {
+							if l := len("/"); len(elem) >= l && elem[0:l] == "/" {
 								elem = elem[l:]
 							} else {
 								break
@@ -347,9 +375,89 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 								break
 							}
 							switch elem[0] {
-							case 'f': // Prefix: "failed"
+							case 's': // Prefix: "status/validator-"
 
-								if l := len("failed"); len(elem) >= l && elem[0:l] == "failed" {
+								if l := len("status/validator-"); len(elem) >= l && elem[0:l] == "status/validator-" {
+									elem = elem[l:]
+								} else {
+									break
+								}
+
+								if len(elem) == 0 {
+									break
+								}
+								switch elem[0] {
+								case 'f': // Prefix: "failed"
+
+									if l := len("failed"); len(elem) >= l && elem[0:l] == "failed" {
+										elem = elem[l:]
+									} else {
+										break
+									}
+
+									if len(elem) == 0 {
+										// Leaf node.
+										switch r.Method {
+										case "POST":
+											s.handleActionSubmissionAcceptedRequest([1]string{
+												args[0],
+											}, elemIsEscaped, w, r)
+										default:
+											s.notAllowed(w, r, "POST")
+										}
+
+										return
+									}
+
+								case 'u': // Prefix: "uploaded"
+
+									if l := len("uploaded"); len(elem) >= l && elem[0:l] == "uploaded" {
+										elem = elem[l:]
+									} else {
+										break
+									}
+
+									if len(elem) == 0 {
+										// Leaf node.
+										switch r.Method {
+										case "POST":
+											s.handleActionSubmissionUploadedRequest([1]string{
+												args[0],
+											}, elemIsEscaped, w, r)
+										default:
+											s.notAllowed(w, r, "POST")
+										}
+
+										return
+									}
+
+								case 'v': // Prefix: "validated"
+
+									if l := len("validated"); len(elem) >= l && elem[0:l] == "validated" {
+										elem = elem[l:]
+									} else {
+										break
+									}
+
+									if len(elem) == 0 {
+										// Leaf node.
+										switch r.Method {
+										case "POST":
+											s.handleActionSubmissionValidatedRequest([1]string{
+												args[0],
+											}, elemIsEscaped, w, r)
+										default:
+											s.notAllowed(w, r, "POST")
+										}
+
+										return
+									}
+
+								}
+
+							case 'v': // Prefix: "validated-model"
+
+								if l := len("validated-model"); len(elem) >= l && elem[0:l] == "validated-model" {
 									elem = elem[l:]
 								} else {
 									break
@@ -359,7 +467,7 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 									// Leaf node.
 									switch r.Method {
 									case "POST":
-										s.handleActionSubmissionAcceptedRequest([1]string{
+										s.handleUpdateSubmissionValidatedModelRequest([1]string{
 											args[0],
 										}, elemIsEscaped, w, r)
 									default:
@@ -369,72 +477,6 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 									return
 								}
 
-							case 'u': // Prefix: "uploaded"
-
-								if l := len("uploaded"); len(elem) >= l && elem[0:l] == "uploaded" {
-									elem = elem[l:]
-								} else {
-									break
-								}
-
-								if len(elem) == 0 {
-									// Leaf node.
-									switch r.Method {
-									case "POST":
-										s.handleActionSubmissionUploadedRequest([1]string{
-											args[0],
-										}, elemIsEscaped, w, r)
-									default:
-										s.notAllowed(w, r, "POST")
-									}
-
-									return
-								}
-
-							case 'v': // Prefix: "validated"
-
-								if l := len("validated"); len(elem) >= l && elem[0:l] == "validated" {
-									elem = elem[l:]
-								} else {
-									break
-								}
-
-								if len(elem) == 0 {
-									// Leaf node.
-									switch r.Method {
-									case "POST":
-										s.handleActionSubmissionValidatedRequest([1]string{
-											args[0],
-										}, elemIsEscaped, w, r)
-									default:
-										s.notAllowed(w, r, "POST")
-									}
-
-									return
-								}
-
-							}
-
-						case 'v': // Prefix: "validated-model"
-
-							if l := len("validated-model"); len(elem) >= l && elem[0:l] == "validated-model" {
-								elem = elem[l:]
-							} else {
-								break
-							}
-
-							if len(elem) == 0 {
-								// Leaf node.
-								switch r.Method {
-								case "POST":
-									s.handleUpdateSubmissionValidatedModelRequest([1]string{
-										args[0],
-									}, elemIsEscaped, w, r)
-								default:
-									s.notAllowed(w, r, "POST")
-								}
-
-								return
 							}
 
 						}
@@ -537,25 +579,27 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
 				break
 			}
 			switch elem[0] {
-			case 'm': // Prefix: "mapfixes/"
+			case 'm': // Prefix: "mapfixes"
 
-				if l := len("mapfixes/"); len(elem) >= l && elem[0:l] == "mapfixes/" {
+				if l := len("mapfixes"); len(elem) >= l && elem[0:l] == "mapfixes" {
 					elem = elem[l:]
 				} else {
 					break
 				}
 
-				// Param: "MapfixID"
-				// Match until "/"
-				idx := strings.IndexByte(elem, '/')
-				if idx < 0 {
-					idx = len(elem)
-				}
-				args[0] = elem[:idx]
-				elem = elem[idx:]
-
 				if len(elem) == 0 {
-					break
+					switch method {
+					case "POST":
+						r.name = CreateMapfixOperation
+						r.summary = "Create a mapfix"
+						r.operationID = "createMapfix"
+						r.pathPattern = "/mapfixes"
+						r.args = args
+						r.count = 0
+						return r, true
+					default:
+						return
+					}
 				}
 				switch elem[0] {
 				case '/': // Prefix: "/"
@@ -566,13 +610,22 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
 						break
 					}
 
+					// Param: "MapfixID"
+					// Match until "/"
+					idx := strings.IndexByte(elem, '/')
+					if idx < 0 {
+						idx = len(elem)
+					}
+					args[0] = elem[:idx]
+					elem = elem[idx:]
+
 					if len(elem) == 0 {
 						break
 					}
 					switch elem[0] {
-					case 's': // Prefix: "status/validator-"
+					case '/': // Prefix: "/"
 
-						if l := len("status/validator-"); len(elem) >= l && elem[0:l] == "status/validator-" {
+						if l := len("/"); len(elem) >= l && elem[0:l] == "/" {
 							elem = elem[l:]
 						} else {
 							break
@@ -582,9 +635,95 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
 							break
 						}
 						switch elem[0] {
-						case 'f': // Prefix: "failed"
+						case 's': // Prefix: "status/validator-"
 
-							if l := len("failed"); len(elem) >= l && elem[0:l] == "failed" {
+							if l := len("status/validator-"); len(elem) >= l && elem[0:l] == "status/validator-" {
+								elem = elem[l:]
+							} else {
+								break
+							}
+
+							if len(elem) == 0 {
+								break
+							}
+							switch elem[0] {
+							case 'f': // Prefix: "failed"
+
+								if l := len("failed"); len(elem) >= l && elem[0:l] == "failed" {
+									elem = elem[l:]
+								} else {
+									break
+								}
+
+								if len(elem) == 0 {
+									// Leaf node.
+									switch method {
+									case "POST":
+										r.name = ActionMapfixAcceptedOperation
+										r.summary = "(Internal endpoint) Role Validator changes status from Validating -> Accepted"
+										r.operationID = "actionMapfixAccepted"
+										r.pathPattern = "/mapfixes/{MapfixID}/status/validator-failed"
+										r.args = args
+										r.count = 1
+										return r, true
+									default:
+										return
+									}
+								}
+
+							case 'u': // Prefix: "uploaded"
+
+								if l := len("uploaded"); len(elem) >= l && elem[0:l] == "uploaded" {
+									elem = elem[l:]
+								} else {
+									break
+								}
+
+								if len(elem) == 0 {
+									// Leaf node.
+									switch method {
+									case "POST":
+										r.name = ActionMapfixUploadedOperation
+										r.summary = "(Internal endpoint) Role Validator changes status from Uploading -> Uploaded"
+										r.operationID = "actionMapfixUploaded"
+										r.pathPattern = "/mapfixes/{MapfixID}/status/validator-uploaded"
+										r.args = args
+										r.count = 1
+										return r, true
+									default:
+										return
+									}
+								}
+
+							case 'v': // Prefix: "validated"
+
+								if l := len("validated"); len(elem) >= l && elem[0:l] == "validated" {
+									elem = elem[l:]
+								} else {
+									break
+								}
+
+								if len(elem) == 0 {
+									// Leaf node.
+									switch method {
+									case "POST":
+										r.name = ActionMapfixValidatedOperation
+										r.summary = "(Internal endpoint) Role Validator changes status from Validating -> Validated"
+										r.operationID = "actionMapfixValidated"
+										r.pathPattern = "/mapfixes/{MapfixID}/status/validator-validated"
+										r.args = args
+										r.count = 1
+										return r, true
+									default:
+										return
+									}
+								}
+
+							}
+
+						case 'v': // Prefix: "validated-model"
+
+							if l := len("validated-model"); len(elem) >= l && elem[0:l] == "validated-model" {
 								elem = elem[l:]
 							} else {
 								break
@@ -594,10 +733,10 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
 								// Leaf node.
 								switch method {
 								case "POST":
-									r.name = ActionMapfixAcceptedOperation
-									r.summary = "(Internal endpoint) Role Validator changes status from Validating -> Accepted"
-									r.operationID = "actionMapfixAccepted"
-									r.pathPattern = "/mapfixes/{MapfixID}/status/validator-failed"
+									r.name = UpdateMapfixValidatedModelOperation
+									r.summary = "Update validated model"
+									r.operationID = "updateMapfixValidatedModel"
+									r.pathPattern = "/mapfixes/{MapfixID}/validated-model"
 									r.args = args
 									r.count = 1
 									return r, true
@@ -606,78 +745,6 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
 								}
 							}
 
-						case 'u': // Prefix: "uploaded"
-
-							if l := len("uploaded"); len(elem) >= l && elem[0:l] == "uploaded" {
-								elem = elem[l:]
-							} else {
-								break
-							}
-
-							if len(elem) == 0 {
-								// Leaf node.
-								switch method {
-								case "POST":
-									r.name = ActionMapfixUploadedOperation
-									r.summary = "(Internal endpoint) Role Validator changes status from Uploading -> Uploaded"
-									r.operationID = "actionMapfixUploaded"
-									r.pathPattern = "/mapfixes/{MapfixID}/status/validator-uploaded"
-									r.args = args
-									r.count = 1
-									return r, true
-								default:
-									return
-								}
-							}
-
-						case 'v': // Prefix: "validated"
-
-							if l := len("validated"); len(elem) >= l && elem[0:l] == "validated" {
-								elem = elem[l:]
-							} else {
-								break
-							}
-
-							if len(elem) == 0 {
-								// Leaf node.
-								switch method {
-								case "POST":
-									r.name = ActionMapfixValidatedOperation
-									r.summary = "(Internal endpoint) Role Validator changes status from Validating -> Validated"
-									r.operationID = "actionMapfixValidated"
-									r.pathPattern = "/mapfixes/{MapfixID}/status/validator-validated"
-									r.args = args
-									r.count = 1
-									return r, true
-								default:
-									return
-								}
-							}
-
-						}
-
-					case 'v': // Prefix: "validated-model"
-
-						if l := len("validated-model"); len(elem) >= l && elem[0:l] == "validated-model" {
-							elem = elem[l:]
-						} else {
-							break
-						}
-
-						if len(elem) == 0 {
-							// Leaf node.
-							switch method {
-							case "POST":
-								r.name = UpdateMapfixValidatedModelOperation
-								r.summary = "Update validated model"
-								r.operationID = "updateMapfixValidatedModel"
-								r.pathPattern = "/mapfixes/{MapfixID}/validated-model"
-								r.args = args
-								r.count = 1
-								return r, true
-							default:
-								return
-							}
 						}
 
 					}
@@ -808,25 +875,27 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
 
 					}
 
-				case 'u': // Prefix: "ubmissions/"
+				case 'u': // Prefix: "ubmissions"
 
-					if l := len("ubmissions/"); len(elem) >= l && elem[0:l] == "ubmissions/" {
+					if l := len("ubmissions"); len(elem) >= l && elem[0:l] == "ubmissions" {
 						elem = elem[l:]
 					} else {
 						break
 					}
 
-					// Param: "SubmissionID"
-					// Match until "/"
-					idx := strings.IndexByte(elem, '/')
-					if idx < 0 {
-						idx = len(elem)
-					}
-					args[0] = elem[:idx]
-					elem = elem[idx:]
-
 					if len(elem) == 0 {
-						break
+						switch method {
+						case "POST":
+							r.name = CreateSubmissionOperation
+							r.summary = "Create a new submission"
+							r.operationID = "createSubmission"
+							r.pathPattern = "/submissions"
+							r.args = args
+							r.count = 0
+							return r, true
+						default:
+							return
+						}
 					}
 					switch elem[0] {
 					case '/': // Prefix: "/"
@@ -837,13 +906,22 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
 							break
 						}
 
+						// Param: "SubmissionID"
+						// Match until "/"
+						idx := strings.IndexByte(elem, '/')
+						if idx < 0 {
+							idx = len(elem)
+						}
+						args[0] = elem[:idx]
+						elem = elem[idx:]
+
 						if len(elem) == 0 {
 							break
 						}
 						switch elem[0] {
-						case 's': // Prefix: "status/validator-"
+						case '/': // Prefix: "/"
 
-							if l := len("status/validator-"); len(elem) >= l && elem[0:l] == "status/validator-" {
+							if l := len("/"); len(elem) >= l && elem[0:l] == "/" {
 								elem = elem[l:]
 							} else {
 								break
@@ -853,9 +931,95 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
 								break
 							}
 							switch elem[0] {
-							case 'f': // Prefix: "failed"
+							case 's': // Prefix: "status/validator-"
 
-								if l := len("failed"); len(elem) >= l && elem[0:l] == "failed" {
+								if l := len("status/validator-"); len(elem) >= l && elem[0:l] == "status/validator-" {
+									elem = elem[l:]
+								} else {
+									break
+								}
+
+								if len(elem) == 0 {
+									break
+								}
+								switch elem[0] {
+								case 'f': // Prefix: "failed"
+
+									if l := len("failed"); len(elem) >= l && elem[0:l] == "failed" {
+										elem = elem[l:]
+									} else {
+										break
+									}
+
+									if len(elem) == 0 {
+										// Leaf node.
+										switch method {
+										case "POST":
+											r.name = ActionSubmissionAcceptedOperation
+											r.summary = "(Internal endpoint) Role Validator changes status from Validating -> Accepted"
+											r.operationID = "actionSubmissionAccepted"
+											r.pathPattern = "/submissions/{SubmissionID}/status/validator-failed"
+											r.args = args
+											r.count = 1
+											return r, true
+										default:
+											return
+										}
+									}
+
+								case 'u': // Prefix: "uploaded"
+
+									if l := len("uploaded"); len(elem) >= l && elem[0:l] == "uploaded" {
+										elem = elem[l:]
+									} else {
+										break
+									}
+
+									if len(elem) == 0 {
+										// Leaf node.
+										switch method {
+										case "POST":
+											r.name = ActionSubmissionUploadedOperation
+											r.summary = "(Internal endpoint) Role Validator changes status from Uploading -> Uploaded"
+											r.operationID = "actionSubmissionUploaded"
+											r.pathPattern = "/submissions/{SubmissionID}/status/validator-uploaded"
+											r.args = args
+											r.count = 1
+											return r, true
+										default:
+											return
+										}
+									}
+
+								case 'v': // Prefix: "validated"
+
+									if l := len("validated"); len(elem) >= l && elem[0:l] == "validated" {
+										elem = elem[l:]
+									} else {
+										break
+									}
+
+									if len(elem) == 0 {
+										// Leaf node.
+										switch method {
+										case "POST":
+											r.name = ActionSubmissionValidatedOperation
+											r.summary = "(Internal endpoint) Role Validator changes status from Validating -> Validated"
+											r.operationID = "actionSubmissionValidated"
+											r.pathPattern = "/submissions/{SubmissionID}/status/validator-validated"
+											r.args = args
+											r.count = 1
+											return r, true
+										default:
+											return
+										}
+									}
+
+								}
+
+							case 'v': // Prefix: "validated-model"
+
+								if l := len("validated-model"); len(elem) >= l && elem[0:l] == "validated-model" {
 									elem = elem[l:]
 								} else {
 									break
@@ -865,10 +1029,10 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
 									// Leaf node.
 									switch method {
 									case "POST":
-										r.name = ActionSubmissionAcceptedOperation
-										r.summary = "(Internal endpoint) Role Validator changes status from Validating -> Accepted"
-										r.operationID = "actionSubmissionAccepted"
-										r.pathPattern = "/submissions/{SubmissionID}/status/validator-failed"
+										r.name = UpdateSubmissionValidatedModelOperation
+										r.summary = "Update validated model"
+										r.operationID = "updateSubmissionValidatedModel"
+										r.pathPattern = "/submissions/{SubmissionID}/validated-model"
 										r.args = args
 										r.count = 1
 										return r, true
@@ -877,78 +1041,6 @@ func (s *Server) FindPath(method string, u *url.URL) (r Route, _ bool) {
 									}
 								}
 
-							case 'u': // Prefix: "uploaded"
-
-								if l := len("uploaded"); len(elem) >= l && elem[0:l] == "uploaded" {
-									elem = elem[l:]
-								} else {
-									break
-								}
-
-								if len(elem) == 0 {
-									// Leaf node.
-									switch method {
-									case "POST":
-										r.name = ActionSubmissionUploadedOperation
-										r.summary = "(Internal endpoint) Role Validator changes status from Uploading -> Uploaded"
-										r.operationID = "actionSubmissionUploaded"
-										r.pathPattern = "/submissions/{SubmissionID}/status/validator-uploaded"
-										r.args = args
-										r.count = 1
-										return r, true
-									default:
-										return
-									}
-								}
-
-							case 'v': // Prefix: "validated"
-
-								if l := len("validated"); len(elem) >= l && elem[0:l] == "validated" {
-									elem = elem[l:]
-								} else {
-									break
-								}
-
-								if len(elem) == 0 {
-									// Leaf node.
-									switch method {
-									case "POST":
-										r.name = ActionSubmissionValidatedOperation
-										r.summary = "(Internal endpoint) Role Validator changes status from Validating -> Validated"
-										r.operationID = "actionSubmissionValidated"
-										r.pathPattern = "/submissions/{SubmissionID}/status/validator-validated"
-										r.args = args
-										r.count = 1
-										return r, true
-									default:
-										return
-									}
-								}
-
-							}
-
-						case 'v': // Prefix: "validated-model"
-
-							if l := len("validated-model"); len(elem) >= l && elem[0:l] == "validated-model" {
-								elem = elem[l:]
-							} else {
-								break
-							}
-
-							if len(elem) == 0 {
-								// Leaf node.
-								switch method {
-								case "POST":
-									r.name = UpdateSubmissionValidatedModelOperation
-									r.summary = "Update validated model"
-									r.operationID = "updateSubmissionValidatedModel"
-									r.pathPattern = "/submissions/{SubmissionID}/validated-model"
-									r.args = args
-									r.count = 1
-									return r, true
-								default:
-									return
-								}
 							}
 
 						}
diff --git a/pkg/internal/oas_schemas_gen.go b/pkg/internal/oas_schemas_gen.go
index 2f06835..86270ec 100644
--- a/pkg/internal/oas_schemas_gen.go
+++ b/pkg/internal/oas_schemas_gen.go
@@ -96,6 +96,98 @@ func (s *ID) SetID(val int64) {
 	s.ID = val
 }
 
+// Ref: #/components/schemas/MapfixCreate
+type MapfixCreate struct {
+	OperationID   int32  `json:"OperationID"`
+	AssetOwner    int64  `json:"AssetOwner"`
+	DisplayName   string `json:"DisplayName"`
+	Creator       string `json:"Creator"`
+	GameID        int32  `json:"GameID"`
+	AssetID       int64  `json:"AssetID"`
+	AssetVersion  int64  `json:"AssetVersion"`
+	TargetAssetID int64  `json:"TargetAssetID"`
+}
+
+// GetOperationID returns the value of OperationID.
+func (s *MapfixCreate) GetOperationID() int32 {
+	return s.OperationID
+}
+
+// GetAssetOwner returns the value of AssetOwner.
+func (s *MapfixCreate) GetAssetOwner() int64 {
+	return s.AssetOwner
+}
+
+// GetDisplayName returns the value of DisplayName.
+func (s *MapfixCreate) GetDisplayName() string {
+	return s.DisplayName
+}
+
+// GetCreator returns the value of Creator.
+func (s *MapfixCreate) GetCreator() string {
+	return s.Creator
+}
+
+// GetGameID returns the value of GameID.
+func (s *MapfixCreate) GetGameID() int32 {
+	return s.GameID
+}
+
+// GetAssetID returns the value of AssetID.
+func (s *MapfixCreate) GetAssetID() int64 {
+	return s.AssetID
+}
+
+// GetAssetVersion returns the value of AssetVersion.
+func (s *MapfixCreate) GetAssetVersion() int64 {
+	return s.AssetVersion
+}
+
+// GetTargetAssetID returns the value of TargetAssetID.
+func (s *MapfixCreate) GetTargetAssetID() int64 {
+	return s.TargetAssetID
+}
+
+// SetOperationID sets the value of OperationID.
+func (s *MapfixCreate) SetOperationID(val int32) {
+	s.OperationID = val
+}
+
+// SetAssetOwner sets the value of AssetOwner.
+func (s *MapfixCreate) SetAssetOwner(val int64) {
+	s.AssetOwner = val
+}
+
+// SetDisplayName sets the value of DisplayName.
+func (s *MapfixCreate) SetDisplayName(val string) {
+	s.DisplayName = val
+}
+
+// SetCreator sets the value of Creator.
+func (s *MapfixCreate) SetCreator(val string) {
+	s.Creator = val
+}
+
+// SetGameID sets the value of GameID.
+func (s *MapfixCreate) SetGameID(val int32) {
+	s.GameID = val
+}
+
+// SetAssetID sets the value of AssetID.
+func (s *MapfixCreate) SetAssetID(val int64) {
+	s.AssetID = val
+}
+
+// SetAssetVersion sets the value of AssetVersion.
+func (s *MapfixCreate) SetAssetVersion(val int64) {
+	s.AssetVersion = val
+}
+
+// SetTargetAssetID sets the value of TargetAssetID.
+func (s *MapfixCreate) SetTargetAssetID(val int64) {
+	s.TargetAssetID = val
+}
+
 // NewOptInt32 returns new OptInt32 with value set to v.
 func NewOptInt32(v int32) OptInt32 {
 	return OptInt32{
@@ -437,6 +529,87 @@ func (s *ScriptPolicyCreate) SetPolicy(val int32) {
 	s.Policy = val
 }
 
+// Ref: #/components/schemas/SubmissionCreate
+type SubmissionCreate struct {
+	OperationID  int32  `json:"OperationID"`
+	AssetOwner   int64  `json:"AssetOwner"`
+	DisplayName  string `json:"DisplayName"`
+	Creator      string `json:"Creator"`
+	GameID       int32  `json:"GameID"`
+	AssetID      int64  `json:"AssetID"`
+	AssetVersion int64  `json:"AssetVersion"`
+}
+
+// GetOperationID returns the value of OperationID.
+func (s *SubmissionCreate) GetOperationID() int32 {
+	return s.OperationID
+}
+
+// GetAssetOwner returns the value of AssetOwner.
+func (s *SubmissionCreate) GetAssetOwner() int64 {
+	return s.AssetOwner
+}
+
+// GetDisplayName returns the value of DisplayName.
+func (s *SubmissionCreate) GetDisplayName() string {
+	return s.DisplayName
+}
+
+// GetCreator returns the value of Creator.
+func (s *SubmissionCreate) GetCreator() string {
+	return s.Creator
+}
+
+// GetGameID returns the value of GameID.
+func (s *SubmissionCreate) GetGameID() int32 {
+	return s.GameID
+}
+
+// GetAssetID returns the value of AssetID.
+func (s *SubmissionCreate) GetAssetID() int64 {
+	return s.AssetID
+}
+
+// GetAssetVersion returns the value of AssetVersion.
+func (s *SubmissionCreate) GetAssetVersion() int64 {
+	return s.AssetVersion
+}
+
+// SetOperationID sets the value of OperationID.
+func (s *SubmissionCreate) SetOperationID(val int32) {
+	s.OperationID = val
+}
+
+// SetAssetOwner sets the value of AssetOwner.
+func (s *SubmissionCreate) SetAssetOwner(val int64) {
+	s.AssetOwner = val
+}
+
+// SetDisplayName sets the value of DisplayName.
+func (s *SubmissionCreate) SetDisplayName(val string) {
+	s.DisplayName = val
+}
+
+// SetCreator sets the value of Creator.
+func (s *SubmissionCreate) SetCreator(val string) {
+	s.Creator = val
+}
+
+// SetGameID sets the value of GameID.
+func (s *SubmissionCreate) SetGameID(val int32) {
+	s.GameID = val
+}
+
+// SetAssetID sets the value of AssetID.
+func (s *SubmissionCreate) SetAssetID(val int64) {
+	s.AssetID = val
+}
+
+// SetAssetVersion sets the value of AssetVersion.
+func (s *SubmissionCreate) SetAssetVersion(val int64) {
+	s.AssetVersion = val
+}
+
 // UpdateMapfixValidatedModelNoContent is response for UpdateMapfixValidatedModel operation.
 type UpdateMapfixValidatedModelNoContent struct{}
 
diff --git a/pkg/internal/oas_server_gen.go b/pkg/internal/oas_server_gen.go
index 846550e..0ca4100 100644
--- a/pkg/internal/oas_server_gen.go
+++ b/pkg/internal/oas_server_gen.go
@@ -44,6 +44,12 @@ type Handler interface {
 	//
 	// POST /submissions/{SubmissionID}/status/validator-validated
 	ActionSubmissionValidated(ctx context.Context, params ActionSubmissionValidatedParams) error
+	// CreateMapfix implements createMapfix operation.
+	//
+	// Create a mapfix.
+	//
+	// POST /mapfixes
+	CreateMapfix(ctx context.Context, req *MapfixCreate) (*ID, error)
 	// CreateScript implements createScript operation.
 	//
 	// Create a new script.
@@ -56,6 +62,12 @@ type Handler interface {
 	//
 	// POST /script-policy
 	CreateScriptPolicy(ctx context.Context, req *ScriptPolicyCreate) (*ID, error)
+	// CreateSubmission implements createSubmission operation.
+	//
+	// Create a new submission.
+	//
+	// POST /submissions
+	CreateSubmission(ctx context.Context, req *SubmissionCreate) (*ID, error)
 	// GetScript implements getScript operation.
 	//
 	// Get the specified script by ID.
diff --git a/pkg/internal/oas_unimplemented_gen.go b/pkg/internal/oas_unimplemented_gen.go
index 1a08c02..c4ac65a 100644
--- a/pkg/internal/oas_unimplemented_gen.go
+++ b/pkg/internal/oas_unimplemented_gen.go
@@ -67,6 +67,15 @@ func (UnimplementedHandler) ActionSubmissionValidated(ctx context.Context, param
 	return ht.ErrNotImplemented
 }
 
+// CreateMapfix implements createMapfix operation.
+//
+// Create a mapfix.
+//
+// POST /mapfixes
+func (UnimplementedHandler) CreateMapfix(ctx context.Context, req *MapfixCreate) (r *ID, _ error) {
+	return r, ht.ErrNotImplemented
+}
+
 // CreateScript implements createScript operation.
 //
 // Create a new script.
@@ -85,6 +94,15 @@ func (UnimplementedHandler) CreateScriptPolicy(ctx context.Context, req *ScriptP
 	return r, ht.ErrNotImplemented
 }
 
+// CreateSubmission implements createSubmission operation.
+//
+// Create a new submission.
+//
+// POST /submissions
+func (UnimplementedHandler) CreateSubmission(ctx context.Context, req *SubmissionCreate) (r *ID, _ error) {
+	return r, ht.ErrNotImplemented
+}
+
 // GetScript implements getScript operation.
 //
 // Get the specified script by ID.
diff --git a/pkg/internal/oas_validators_gen.go b/pkg/internal/oas_validators_gen.go
index 973f07b..733e7f4 100644
--- a/pkg/internal/oas_validators_gen.go
+++ b/pkg/internal/oas_validators_gen.go
@@ -8,6 +8,56 @@ import (
 	"github.com/ogen-go/ogen/validate"
 )
 
+func (s *MapfixCreate) Validate() error {
+	if s == nil {
+		return validate.ErrNilPointer
+	}
+
+	var failures []validate.FieldError
+	if err := func() error {
+		if err := (validate.String{
+			MinLength:    0,
+			MinLengthSet: false,
+			MaxLength:    128,
+			MaxLengthSet: true,
+			Email:        false,
+			Hostname:     false,
+			Regex:        nil,
+		}).Validate(string(s.DisplayName)); err != nil {
+			return errors.Wrap(err, "string")
+		}
+		return nil
+	}(); err != nil {
+		failures = append(failures, validate.FieldError{
+			Name:  "DisplayName",
+			Error: err,
+		})
+	}
+	if err := func() error {
+		if err := (validate.String{
+			MinLength:    0,
+			MinLengthSet: false,
+			MaxLength:    128,
+			MaxLengthSet: true,
+			Email:        false,
+			Hostname:     false,
+			Regex:        nil,
+		}).Validate(string(s.Creator)); err != nil {
+			return errors.Wrap(err, "string")
+		}
+		return nil
+	}(); err != nil {
+		failures = append(failures, validate.FieldError{
+			Name:  "Creator",
+			Error: err,
+		})
+	}
+	if len(failures) > 0 {
+		return &validate.Error{Fields: failures}
+	}
+	return nil
+}
+
 func (s *Script) Validate() error {
 	if s == nil {
 		return validate.ErrNilPointer
@@ -157,3 +207,53 @@ func (s *ScriptPolicy) Validate() error {
 	}
 	return nil
 }
+
+func (s *SubmissionCreate) Validate() error {
+	if s == nil {
+		return validate.ErrNilPointer
+	}
+
+	var failures []validate.FieldError
+	if err := func() error {
+		if err := (validate.String{
+			MinLength:    0,
+			MinLengthSet: false,
+			MaxLength:    128,
+			MaxLengthSet: true,
+			Email:        false,
+			Hostname:     false,
+			Regex:        nil,
+		}).Validate(string(s.DisplayName)); err != nil {
+			return errors.Wrap(err, "string")
+		}
+		return nil
+	}(); err != nil {
+		failures = append(failures, validate.FieldError{
+			Name:  "DisplayName",
+			Error: err,
+		})
+	}
+	if err := func() error {
+		if err := (validate.String{
+			MinLength:    0,
+			MinLengthSet: false,
+			MaxLength:    128,
+			MaxLengthSet: true,
+			Email:        false,
+			Hostname:     false,
+			Regex:        nil,
+		}).Validate(string(s.Creator)); err != nil {
+			return errors.Wrap(err, "string")
+		}
+		return nil
+	}(); err != nil {
+		failures = append(failures, validate.FieldError{
+			Name:  "Creator",
+			Error: err,
+		})
+	}
+	if len(failures) > 0 {
+		return &validate.Error{Fields: failures}
+	}
+	return nil
+}