Move DMI-Plugin and DataJob API into CPS repo 73/140873/1
authoregernug <gerard.nugent@est.tech>
Tue, 13 May 2025 11:10:54 +0000 (12:10 +0100)
committeregernug <gerard.nugent@est.tech>
Tue, 13 May 2025 11:10:54 +0000 (12:10 +0100)
Issue-ID: CPS-2811

Change-Id: Idc5931ab81c7d6b836e589a024cb7df153bd48c8
Signed-off-by: egernug <gerard.nugent@est.tech>
docs/api/swagger/dmi/dmi-components.yml [new file with mode: 0644]
docs/api/swagger/dmi/openapi-datajob.yml [new file with mode: 0644]
docs/api/swagger/dmi/openapi.yml [new file with mode: 0644]

diff --git a/docs/api/swagger/dmi/dmi-components.yml b/docs/api/swagger/dmi/dmi-components.yml
new file mode 100644 (file)
index 0000000..a14771b
--- /dev/null
@@ -0,0 +1,318 @@
+#  ============LICENSE_START=======================================================
+#  Copyright (C) 2021-2025 OpenInfra Foundation Europe. All rights reserved.
+#  Modifications Copyright (C) 2022 Bell Canada
+#  ================================================================================
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+#  SPDX-License-Identifier: Apache-2.0
+#  ============LICENSE_END=========================================================
+
+components:
+  securitySchemes:
+    basicAuth:
+      type: http
+      scheme: basic
+  schemas:
+    ErrorMessage:
+      type: object
+      title: Error
+      properties:
+        status:
+          type: string
+        message:
+          type: string
+        details:
+          type: string
+
+    CmHandles:
+      type: object
+      properties:
+        cmHandles:
+          type: array
+          example: ["cmHandleId1","cmHandleId2","cmHandleId3"]
+          items:
+            type: string
+
+    ModuleReferencesRequest:
+      type: object
+      properties:
+        moduleSetTag:
+          type: string
+        cmHandleProperties:
+          $ref: '#/components/schemas/cmHandleProperties'
+
+    ResourceDataOperationRequests:
+      type: array
+      items:
+        type: object
+        title: 'DataOperationRequest'
+        properties:
+          operation:
+            type: string
+            example: 'read'
+          operationId:
+            description: 'it is recommended that the operationId is unique within the scope of the request'
+            type: string
+            example: '12'
+          datastore:
+            type: string
+            example: 'ncmp-datastore:passthrough-operational'
+          options:
+            type: string
+            example: '(fields=NRCellDU/attributes/cellLocalId)'
+          resourceIdentifier:
+            type: string
+            example: '/ManagedElement=NRNode1/GNBDUFunction=1'
+          cmHandles:
+            type: array
+            items:
+              $ref: '#/components/schemas/dmiOperationCmHandle'
+        required:
+          - operation
+          - operationId
+          - datastore
+          - cmHandles
+
+    dmiOperationCmHandle:
+      type: object
+      title: 'CmHandle with properties for DMI'
+      properties:
+        id:
+          type: string
+        cmHandleProperties:
+          additionalProperties:
+            type: string
+        moduleSetTag:
+          type: string
+          example: module-set-tag1
+      example:
+        id: cmHandle123
+        cmHandleProperties:
+          myProp: some value
+          otherProp: other value
+          moduleSetTag: module-set-tag1
+
+    ModuleResourcesReadRequest:
+      type: object
+      properties:
+        moduleSetTag:
+          type: string
+          description: Module set tag of the given cm handle
+          example: Module-set-tag-1
+          required: false
+        data:
+          type: object
+          properties:
+            modules:
+              type: array
+              items:
+                type: object
+                properties:
+                  name:
+                    type: string
+                    example: my-name
+                  revision:
+                    type: string
+                    example: my-revision
+        cmHandleProperties:
+          $ref: '#/components/schemas/cmHandleProperties'
+
+    ModuleSet:
+      type: object
+      properties:
+        schemas:
+          type: array
+          items:
+            type: object
+            properties:
+              moduleName:
+                type: string
+                example: my-module-name
+              revision:
+                type: string
+                example: my-revision
+              namespace:
+                type: string
+                example: my-namespace
+
+    YangResources:
+      type: array
+      items:
+        $ref: '#/components/schemas/YangResource'
+
+    YangResource:
+      properties:
+        yangSource:
+          type: string
+          example: my-yang-source
+        moduleName:
+          type: string
+          example: my-module-name
+        revision:
+          type: string
+          example: my-revision
+
+    DataAccessRequest:
+      type: object
+      properties:
+        operation:
+          type: string
+          enum: [ read, create, update, patch, delete ]
+          example: read
+        dataType:
+          type: string
+          example: my-data-type
+        data:
+          type: string
+          example: my-data
+        cmHandleProperties:
+          $ref: '#/components/schemas/cmHandleProperties'
+        requestId:
+          type: string
+          example: 3a9ce55c-e365-4dc9-8da3-a06f07cbc6d7
+        moduleSetTag:
+          type: string
+          example: module-set-tag1
+
+    cmHandleProperties:
+      type: object
+      nullable: true
+      additionalProperties:
+        type: string
+        example: {"prop1":"value1","prop2":"value2"}
+
+  responses:
+    NoContent:
+      description: No Content
+      content: {}
+
+    BadRequest:
+      description: Bad Request
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 400
+            message: Bad Request
+            details: The provided request is not valid
+
+    NotFound:
+      description: The specified resource was not found
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 404
+            message: Resource Not Found
+            details: The requested resource is not found
+
+    ServerError:
+      description: Internal Server Error
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 500
+            message: Internal Server Error
+            details: Internal Server Error occured
+
+    NotImplemented:
+      description: Not Implemented
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/ErrorMessage'
+          example:
+            status: 501
+            message: Not Implemented
+            details: Method Not Implemented
+
+  parameters:
+    cmHandleInPath:
+      name: cmHandle
+      in: path
+      description: The CM handle or alternate identifier for a network function, network element, subnetwork, or any other CM object managed by Network CM Proxy
+      required: true
+      schema:
+        type: string
+        example: my-cm-handle
+
+    resourceIdentifierInQuery:
+      name: resourceIdentifier
+      in: query
+      description: Resource identifier to get/set the resource data
+      required: true
+      schema:
+        type: string
+        example: '/ManagedElement=NRNode1/GNBDUFunction=1'
+
+    optionsParamInQuery:
+      name: options
+      in: query
+      description: options parameter in query, it is mandatory to wrap key(s)=value(s) in parenthesis'()'.
+      required: false
+      schema:
+        type: string
+      examples:
+        sample1:
+          value:
+            options: (fields=NRCellDU/attributes/cellLocalId)
+
+    topicParamInQuery:
+      name: topic
+      in: query
+      description: topic name passed from client(NCMP).
+      required: false
+      schema:
+        type: string
+      examples:
+        sample1:
+          value: my-topic-name
+
+    requiredTopicParamInQuery:
+      name: topic
+      in: query
+      description: mandatory topic name passed from client(NCMP).
+      required: true
+      schema:
+        type: string
+      examples:
+        sample1:
+          value:
+            topic: my-topic-name
+
+    requiredRequestIdParamInQuery:
+      name: requestId
+      in: query
+      description: request ID generated by NCMP and is sent here and sent as an acknowledgement for the client request.
+      required: true
+      schema:
+        type: string
+      examples:
+        sample1:
+          value: 4753fc1f-7de2-449a-b306-a6204b5370b3
+
+    datastoreName:
+      name: datastore-name
+      in: path
+      description: The type of the requested data
+      required: true
+      schema:
+        type: string
+        example: ncmp-datastore:passthrough-operational or ncmp-datastore:passthrough-running
+
+security:
+  - basicAuth: []
diff --git a/docs/api/swagger/dmi/openapi-datajob.yml b/docs/api/swagger/dmi/openapi-datajob.yml
new file mode 100644 (file)
index 0000000..860486c
--- /dev/null
@@ -0,0 +1,333 @@
+#  ============LICENSE_START=======================================================
+#  Copyright (C) 2024-2025 OpenInfra Foundation Europe. All rights reserved.
+#  ================================================================================
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+#  SPDX-License-Identifier: Apache-2.0
+#  ============LICENSE_END=========================================================
+
+openapi: 3.0.3
+info:
+  title: NCMP Data Subjob API
+  description: Support datajobs through one or more subjob for each DMI and Data Producer Identifier combination
+  version: 1.7.0
+servers:
+  - url: /dmi
+tags:
+  - description: DMI plugin rest apis
+    name: dmi-datajob
+paths:
+  /v1/cmreadJob:
+    post:
+      description: Create a read request
+      operationId: readDataJob
+      parameters:
+        - $ref: '#/dmi-components/parameters/destinationInQuery'
+      requestBody:
+        description: Operation body
+        content:
+          application/3gpp-json-patch+json:
+            schema:
+              $ref: '#/dmi-components/schemas/SubjobReadRequest'
+      tags:
+        - dmi-datajob
+      responses:
+        "501":
+          $ref: '#/dmi-components/responses/NotImplemented'
+  /v1/cmwriteJob:
+    post:
+      description: Create a write request
+      operationId: writeDataJob
+      parameters:
+        - $ref: '#/dmi-components/parameters/destinationInQuery'
+      requestBody:
+        description: Operation body
+        content:
+          application/3gpp-json-patch+json:
+            schema:
+              $ref: '#/dmi-components/schemas/SubjobWriteRequest'
+      tags:
+        - dmi-datajob
+      responses:
+        "501":
+          $ref: '#/dmi-components/responses/NotImplemented'
+  /v1/cmwriteJob/dataProducer/{dataProducerId}/dataProducerJob/{dataProducerJobId}/status:
+    get:
+      description: Retrieve the status of a specific data job.
+      operationId: getDataJobStatus
+      parameters:
+        - $ref: '#/dmi-components/parameters/dataProducerIdInPath'
+        - $ref: '#/dmi-components/parameters/dataProducerJobIdInPath'
+      tags:
+        - dmi-datajob
+      responses:
+        "501":
+          $ref: '#/dmi-components/responses/NotImplemented'
+  /v1/cmwriteJob/dataProducer/{dataProducerId}/dataProducerJob/{dataProducerJobId}/result:
+    get:
+      description: Retrieve the result of a data job.
+      operationId: getDataJobResult
+      parameters:
+        - $ref: '#/dmi-components/parameters/dataProducerIdInPath'
+        - $ref: '#/dmi-components/parameters/dataProducerJobIdInPath'
+        - $ref: '#/dmi-components/parameters/destinationInQuery'
+      tags:
+        - dmi-datajob
+      responses:
+        "501":
+          $ref: '#/dmi-components/responses/NotImplemented'
+
+dmi-components:
+  parameters:
+    requestIdInPath:
+      description: Identifier for the overall Datajob
+      in: path
+      name: requestId
+      required: true
+      schema:
+        example: some-identifier
+        type: string
+    dataProducerJobIdInPath:
+      description: Identifier for the data producer job
+      in: path
+      name: dataProducerJobId
+      required: true
+      schema:
+        example: some-producer-job-identifier
+        type: string
+    dataProducerIdInPath:
+      name: dataProducerId
+      in: path
+      description: Identifier for the data producer
+      required: true
+      schema:
+        type: string
+        example: some-data-producer-identifier
+    dataProducerIdInQuery:
+      name: dataProducerId
+      in: query
+      description: Identifier for the data producer
+      required: true
+      schema:
+        type: string
+        example: some-data-producer-identifier
+    destinationInQuery:
+      name: destination
+      in: query
+      description: The destination of the results (Kafka topic name or s3 bucket name)
+      required: true
+      schema:
+        type: string
+        example: some-destination
+  schemas:
+    ErrorMessage:
+      type: object
+      title: Error
+      properties:
+        status:
+          type: string
+        message:
+          type: string
+        details:
+          type: string
+    SubjobReadRequest:
+      type: object
+      required:
+        - dataProducerId
+        - data
+      properties:
+        dataAcceptType:
+          description: Defines the data response accept type
+          example: application/vnd.3gpp.object-tree-hierarchical+json
+          type: string
+        dataContentType:
+          description: Defines the data request content type
+          example: application/3gpp-json-patch+json
+          type: string
+        dataProducerId:
+          description: ID of the producer registered by DMI for the paths in the operations in this request
+          example: my-data-producer-identifier
+          type: string
+        data:
+          example:
+            op: read
+            operationId: 1
+            path: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=2
+            attributes: userLabel
+            scope:
+              scopeTyp: BASE_ONLY
+          type: array
+          items:
+            type: object
+            required:
+              - path
+              - op
+            properties:
+              path:
+                description: Defines the resource on which operation is executed
+                example: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003
+                type: string
+              op:
+                description: Describes the operation to execute
+                example: read
+                type: string
+              operationId:
+                description: Unique identifier for the operation within the request
+                example: 1
+                type: string
+              attributes:
+                description: This parameter specifies the attributes of the scoped resources that are returned
+                type: array
+                items:
+                  example: cellId
+                  type: string
+              fields:
+                description: This parameter specifies the attribute fields of the scoped resources that are returned
+                type: array
+                items:
+                  type: string
+              filter:
+                description: This parameter is used to filter the scoped Managed Objects. Only Managed Objects passing the filter criteria will be fetched
+                example: NRCellDU/attributes/administrativeState==LOCKED
+                type: string
+              scopeType:
+                description: ScopeType selects MOs depending on relationships with Base Managed Object
+                example: BASE_ONLY
+                type: string
+              scopeLevel:
+                description: Only used when the scope type is BASE_NTH_LEVEL to specify amount of levels to search
+                example: 0
+                type: integer
+              moduleSetTag:
+                description: Module set identifier
+                example: my-module-set-tag
+                type: string
+              cmHandleProperties:
+                description: Private properties of the cm handle for the given path
+                $ref: '#/dmi-components/schemas/CmHandleProperties'
+    SubjobWriteRequest:
+      type: object
+      required:
+        - dataProducerId
+        - data
+      properties:
+        dataAcceptType:
+          description: Defines the data response accept type
+          example: application/vnd.3gpp.object-tree-hierarchical+json
+          type: string
+        dataContentType:
+          description: Defines the data request content type
+          example: application/3gpp-json-patch+json
+          type: string
+        dataProducerId:
+          description: ID of the producer registered by DMI for the paths in the operations in this request
+          example: my-data-producer-identifier
+          type: string
+        dataJobId:
+          description: Identifier for the overall Data Job
+          example: my-data-producer-identifier
+          type: string
+        data:
+          example:
+            op: add
+            path: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=12
+            value:
+              id: 12
+              attributes:
+                userLabel: label12
+          type: array
+          items:
+            type: object
+            required:
+              - path
+              - op
+            properties:
+              path:
+                description: Defines the resource on which operation is executed
+                example: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003
+                type: string
+              op:
+                description: Describes the operation to execute
+                example: add
+                type: string
+              operationId:
+                description: Unique identifier for the operation within the request
+                example: 1
+                type: string
+              moduleSetTag:
+                description: Module set identifier
+                example: my-module-set-tag
+                type: string
+              cmHandleProperties:
+                description: Private properties of the cm handle for the given path
+                $ref: '#/dmi-components/schemas/CmHandleProperties'
+              value:
+                description: Value dependent on the op specified. Resource for an add. Object for a replace. ActionParameters for an action.
+                type: object
+                oneOf:
+                  - $ref: '#/dmi-components/schemas/Resource'
+                  - $ref: '#/dmi-components/schemas/ActionParameters'
+                  - $ref: '#/dmi-components/schemas/Object'
+    CmHandleProperties:
+      description: Private properties of the cm handle for the given path
+      type: object
+    Resource:
+      type: object
+      properties:
+        id:
+          description: Identifier of the resource object
+          example: resource-identifier
+          type: string
+        attributes:
+          description: Key value map representing the objects class attributes and values
+          type: object
+          additionalProperties:
+            example: 'userLabel: label11'
+            type: string
+    ActionParameters:
+      description: The input of the action in the form of key value pairs
+      type: object
+      additionalProperties:
+        type: string
+    Object:
+      type: object
+    SubjobWriteResponse:
+      type: object
+      required:
+        - subJobId
+        - dmiServiceName
+        - dataProducerId
+      properties:
+        subJobId:
+          description: Unique identifier for the sub-job
+          example: my-sub-job-id
+          type: string
+        dmiServiceName:
+          description: Name of the relevant DMI Service
+          example: my-dmi-service
+          type: string
+        dataProducerId:
+          description: ID of the producer registered by DMI for the paths in the operations in this request
+          example: my-data-producer-identifier
+          type: string
+  responses:
+    NotImplemented:
+      description: Not Implemented
+      content:
+        application/json:
+          schema:
+            $ref: '#/dmi-components/schemas/ErrorMessage'
+          example:
+            status: 501
+            message: Not Implemented
+            details: Method Not Implemented
diff --git a/docs/api/swagger/dmi/openapi.yml b/docs/api/swagger/dmi/openapi.yml
new file mode 100644 (file)
index 0000000..fc0e546
--- /dev/null
@@ -0,0 +1,177 @@
+#  ============LICENSE_START=======================================================
+#  Copyright (C) 2021-2025 OpenInfra Foundation Europe. All rights reserved.
+#  Modifications Copyright (C) 2022 Bell Canada
+#  ================================================================================
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+#  SPDX-License-Identifier: Apache-2.0
+#  ============LICENSE_END=========================================================
+
+openapi: 3.0.1
+info:
+  title: NCMP DMI Plugin
+  description: Adds Data Model Inventory Registry capability for ONAP
+  version: "1.7.0"
+servers:
+  - url: /dmi
+tags:
+  - name: dmi-plugin-internal
+    description: DMI plugin internal rest apis
+  - name: dmi-plugin
+    description: DMI plugin rest apis
+
+
+paths:
+  /v1/ch/{cmHandle}/modules:
+    post:
+      tags:
+        - dmi-plugin
+      summary: Get all modules for cm handle
+      description: Get all modules for given cm handle
+      operationId: getModuleReferences
+      parameters:
+        - $ref: 'dmi-components.yml#/components/parameters/cmHandleInPath'
+      requestBody:
+        description: Operational body
+        content:
+          application/json:
+            schema:
+              $ref: 'dmi-components.yml#/components/schemas/ModuleReferencesRequest'
+      responses:
+        '200':
+          description: OK
+          content:
+            application/json:
+              schema:
+                $ref: 'dmi-components.yml#/components/schemas/ModuleSet'
+        '404':
+          $ref: 'dmi-components.yml#/components/responses/NotFound'
+        '500':
+          $ref: 'dmi-components.yml#/components/responses/ServerError'
+
+
+  /v1/ch/{cmHandle}/moduleResources:
+    post:
+      description: Retrieve module resources for one or more modules
+      tags:
+        - dmi-plugin
+      summary: Retrieve module resources
+      operationId: retrieveModuleResources
+      parameters:
+        - $ref: 'dmi-components.yml#/components/parameters/cmHandleInPath'
+      requestBody:
+        required: true
+        content:
+          application/json:
+            schema:
+              $ref: 'dmi-components.yml#/components/schemas/ModuleResourcesReadRequest'
+      responses:
+        '200':
+          description: OK
+          content:
+            application/json:
+              schema:
+                $ref: 'dmi-components.yml#/components/schemas/YangResources'
+        '404':
+          $ref: 'dmi-components.yml#/components/responses/NotFound'
+        '500':
+          $ref: 'dmi-components.yml#/components/responses/ServerError'
+
+  /v1/inventory/cmHandles:
+    post:
+      tags:
+        - dmi-plugin-internal
+      summary: register given list of cm handles (internal use only)
+      description: register given list of cm handles (internal use only)
+      x-api-audience: component-internal
+      operationId: registerCmHandles
+      requestBody:
+        description: list of cm handles
+        content:
+          application/json:
+            schema:
+                $ref: 'dmi-components.yml#/components/schemas/CmHandles'
+        required: true
+      responses:
+        '201':
+          description: Created
+          content:
+            text/plain:
+              schema:
+                type: string
+                example: cm-handle registered successfully
+        '400':
+          $ref: 'dmi-components.yml#/components/responses/BadRequest'
+        '500':
+          $ref: 'dmi-components.yml#/components/responses/ServerError'
+
+  /v1/ch/{cmHandle}/data/ds/{datastore-name}:
+    post:
+      tags:
+        - dmi-plugin
+      summary: Get resource data from passthrough operational or running for a cm handle
+      description: Get resource data from passthrough operational or running for a cm handle
+      operationId: dataAccessPassthrough
+      parameters:
+        - $ref: 'dmi-components.yml#/components/parameters/datastoreName'
+        - $ref: 'dmi-components.yml#/components/parameters/cmHandleInPath'
+        - $ref: 'dmi-components.yml#/components/parameters/resourceIdentifierInQuery'
+        - $ref: 'dmi-components.yml#/components/parameters/optionsParamInQuery'
+        - $ref: 'dmi-components.yml#/components/parameters/topicParamInQuery'
+      requestBody:
+        description: Contains collection of cm handles with it's private properties and requestId
+        content:
+          application/json:
+            schema:
+              $ref: 'dmi-components.yml#/components/schemas/DataAccessRequest'
+      responses:
+        '200':
+          description: OK
+          content:
+            application/json:
+              schema:
+                type: object
+                example:
+                  - yangSource: my-yang-source
+                    moduleName: my-module-name
+                    revision: my-revision
+        '400':
+          $ref: 'dmi-components.yml#/components/responses/BadRequest'
+        '500':
+          $ref: 'dmi-components.yml#/components/responses/ServerError'
+
+  /v1/data:
+    post:
+      tags:
+        - dmi-plugin
+      summary: Execute a data operation for group of CM handle references.
+      description: Execute a data operation for group of CM handle (IDs or alternate IDs) by supplied operation details
+      operationId: getResourceDataForCmHandleDataOperation
+      parameters:
+        - $ref: 'dmi-components.yml#/components/parameters/requiredTopicParamInQuery'
+        - $ref: 'dmi-components.yml#/components/parameters/requiredRequestIdParamInQuery'
+      requestBody:
+        description: list of operation details
+        content:
+          application/json:
+            schema:
+              $ref: 'dmi-components.yml#/components/schemas/ResourceDataOperationRequests'
+      responses:
+        '202':
+          description: Accepted
+        '400':
+          $ref: 'dmi-components.yml#/components/responses/BadRequest'
+        '500':
+          $ref: 'dmi-components.yml#/components/responses/ServerError'
+        '501':
+          $ref: 'dmi-components.yml#/components/responses/NotImplemented'
\ No newline at end of file