---
openapi: 3.0.3
info:
  title: DotAAS Part 2 | HTTP/REST | Submodel Service Specification
  description: "The Value Profile of the Submodel Service Specification as part of the [Specification of the Asset Administration Shell: Part 2](http://industrialdigitaltwin.org/en/content-hub).  \nPublisher: Industrial Digital Twin Association (IDTA) April 2023"
  contact:
    name: Industrial Digital Twin Association (IDTA)
    email: info@idtwin.org
  license:
    name: CC BY 4.0
    url: https://creativecommons.org/licenses/by/4.0/
  version: V3.0.1_SSP-003
servers:
  - url: "{protocol}://{host_name}:{port}/api/{version_prefix}"
    variables:
      protocol:
        description: Allows access through http and https (recommended)
        default: https
        enum:
          - http
          - https
      host_name:
        description: Hostname of server hosting the api
        default: admin-shell.io
      port:
        description: "80 is default for http, 443 for https"
        default: "443"
        enum:
          - "80"
          - "443"
      version_prefix:
        default: v3.0
        enum:
          - v3.0
paths:
  /submodel/$value:
    get:
      tags:
        - Submodel API
      summary: Returns the Submodel in the ValueOnly representation
      operationId: GetSubmodel-ValueOnly
      parameters:
        - name: level
          in: query
          description: Determines the structural depth of the respective resource content
          required: false
          schema:
            type: string
            default: deep
            enum:
              - deep
        - name: extent
          in: query
          description: Determines to which extent the resource is being serialized
          required: false
          schema:
            type: string
            default: withoutBlobValue
            enum:
              - withBlobValue
      responses:
        "200":
          description: ValueOnly representation of the Submodel
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmodelValue'
        "400":
          description: "Bad Request, e.g. the request parameters of the format of the request body is wrong."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Result'
        "401":
          description: "Unauthorized, e.g. the server refused the authorization attempt."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Result'
        "403":
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Result'
        "500":
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Result'
        default:
          description: Default error handling for unmentioned status codes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Result'
      x-semanticIds:
        - https://admin-shell.io/aas/API/GetSubmodelById/3/0
  /description:
    get:
      tags:
        - Description API
      summary: Returns the self-describing information of a network resource (ServiceDescription)
      operationId: GetDescription
      responses:
        "200":
          description: Requested Description
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceDescription'
        "401":
          description: "Unauthorized, e.g. the server refused the authorization attempt."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Result'
        "403":
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Result'
      x-semanticIds:
        - https://admin-shell.io/aas/API/Descriptor/GetDescription/3/0
components:
  schemas:
    Submodel:
      allOf:
        - $ref: '#/components/schemas/Identifiable'
        - $ref: '#/components/schemas/HasKind'
        - $ref: '#/components/schemas/HasSemantics'
        - $ref: '#/components/schemas/Qualifiable'
        - $ref: '#/components/schemas/HasDataSpecification'
        - properties:
            submodelElements:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/SubmodelElement_choice'
            modelType:
              pattern: Submodel
              type: string
    Identifiable:
      allOf:
        - $ref: '#/components/schemas/Referable'
        - required:
            - id
          properties:
            administration:
              $ref: '#/components/schemas/AdministrativeInformation'
            id:
              maxLength: 2000
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
    Referable:
      allOf:
        - $ref: '#/components/schemas/HasExtensions'
        - required:
            - modelType
          properties:
            category:
              maxLength: 128
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
            idShort:
              type: string
              allOf:
                - maxLength: 128
                  minLength: 1
                - pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
                - pattern: "^[a-zA-Z][a-zA-Z0-9_]*$"
            displayName:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/LangStringNameType'
            description:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/LangStringTextType'
            modelType:
              $ref: '#/components/schemas/ModelType'
    HasExtensions:
      type: object
      properties:
        extensions:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/Extension'
    Extension:
      allOf:
        - $ref: '#/components/schemas/HasSemantics'
        - required:
            - name
          properties:
            name:
              maxLength: 128
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
            valueType:
              $ref: '#/components/schemas/DataTypeDefXsd'
            value:
              type: string
            refersTo:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/Reference'
    HasSemantics:
      type: object
      properties:
        semanticId:
          $ref: '#/components/schemas/Reference'
        supplementalSemanticIds:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/Reference'
    Reference:
      allOf:
        - $ref: '#/components/schemas/ReferenceParent'
        - properties:
            referredSemanticId:
              $ref: '#/components/schemas/ReferenceParent'
    ReferenceParent:
      required:
        - keys
        - type
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ReferenceTypes'
        keys:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/Key'
    ReferenceTypes:
      type: string
      enum:
        - ExternalReference
        - ModelReference
    Key:
      required:
        - type
        - value
      type: object
      properties:
        type:
          $ref: '#/components/schemas/KeyTypes'
        value:
          maxLength: 2000
          minLength: 1
          pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
          type: string
    KeyTypes:
      type: string
      enum:
        - AnnotatedRelationshipElement
        - AssetAdministrationShell
        - BasicEventElement
        - Blob
        - Capability
        - ConceptDescription
        - DataElement
        - Entity
        - EventElement
        - File
        - FragmentReference
        - GlobalReference
        - Identifiable
        - MultiLanguageProperty
        - Operation
        - Property
        - Range
        - Referable
        - ReferenceElement
        - RelationshipElement
        - Submodel
        - SubmodelElement
        - SubmodelElementCollection
        - SubmodelElementList
    DataTypeDefXsd:
      type: string
      enum:
        - xs:anyURI
        - xs:base64Binary
        - xs:boolean
        - xs:byte
        - xs:date
        - xs:dateTime
        - xs:decimal
        - xs:double
        - xs:duration
        - xs:float
        - xs:gDay
        - xs:gMonth
        - xs:gMonthDay
        - xs:gYear
        - xs:gYearMonth
        - xs:hexBinary
        - xs:int
        - xs:integer
        - xs:long
        - xs:negativeInteger
        - xs:nonNegativeInteger
        - xs:nonPositiveInteger
        - xs:positiveInteger
        - xs:short
        - xs:string
        - xs:time
        - xs:unsignedByte
        - xs:unsignedInt
        - xs:unsignedLong
        - xs:unsignedShort
    LangStringNameType:
      allOf:
        - $ref: '#/components/schemas/AbstractLangString'
        - properties:
            text:
              maxLength: 128
    AbstractLangString:
      required:
        - language
        - text
      type: object
      properties:
        language:
          pattern: "^(([a-zA-Z]{2,3}(-[a-zA-Z]{3}(-[a-zA-Z]{3}){2})?|[a-zA-Z]{4}|[a-zA-Z]{5,8})(-[a-zA-Z]{4})?(-([a-zA-Z]{2}|[0-9]{3}))?(-(([a-zA-Z0-9]){5,8}|[0-9]([a-zA-Z0-9]){3}))*(-[0-9A-WY-Za-wy-z](-([a-zA-Z0-9]){2,8})+)*(-[xX](-([a-zA-Z0-9]){1,8})+)?|[xX](-([a-zA-Z0-9]){1,8})+|((en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)))$"
          type: string
        text:
          minLength: 1
          pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
          type: string
    LangStringTextType:
      allOf:
        - $ref: '#/components/schemas/AbstractLangString'
        - properties:
            text:
              maxLength: 1023
    ModelType:
      type: string
      enum:
        - AnnotatedRelationshipElement
        - AssetAdministrationShell
        - BasicEventElement
        - Blob
        - Capability
        - ConceptDescription
        - DataSpecificationIec61360
        - Entity
        - File
        - MultiLanguageProperty
        - Operation
        - Property
        - Range
        - ReferenceElement
        - RelationshipElement
        - Submodel
        - SubmodelElementCollection
        - SubmodelElementList
    AdministrativeInformation:
      allOf:
        - $ref: '#/components/schemas/HasDataSpecification'
        - properties:
            version:
              type: string
              allOf:
                - maxLength: 4
                  minLength: 1
                - pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
                - pattern: "^(0|[1-9][0-9]*)$"
            revision:
              type: string
              allOf:
                - maxLength: 4
                  minLength: 1
                - pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
                - pattern: "^(0|[1-9][0-9]*)$"
            creator:
              $ref: '#/components/schemas/Reference'
            templateId:
              maxLength: 2000
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
    HasDataSpecification:
      type: object
      properties:
        embeddedDataSpecifications:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/EmbeddedDataSpecification'
    EmbeddedDataSpecification:
      required:
        - dataSpecification
        - dataSpecificationContent
      type: object
      properties:
        dataSpecification:
          $ref: '#/components/schemas/Reference'
        dataSpecificationContent:
          $ref: '#/components/schemas/DataSpecificationContent_choice'
    DataSpecificationContent_choice:
      oneOf:
        - $ref: '#/components/schemas/DataSpecificationIec61360'
    DataSpecificationIec61360:
      allOf:
        - $ref: '#/components/schemas/DataSpecificationContent'
        - required:
            - preferredName
          properties:
            preferredName:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/LangStringPreferredNameTypeIec61360'
            shortName:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/LangStringShortNameTypeIec61360'
            unit:
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
            unitId:
              $ref: '#/components/schemas/Reference'
            sourceOfDefinition:
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
            symbol:
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
            dataType:
              $ref: '#/components/schemas/DataTypeIec61360'
            definition:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/LangStringDefinitionTypeIec61360'
            valueFormat:
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
            valueList:
              $ref: '#/components/schemas/ValueList'
            value:
              maxLength: 2000
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
            levelType:
              $ref: '#/components/schemas/LevelType'
            modelType:
              pattern: DataSpecificationIec61360
              type: string
    DataSpecificationContent:
      required:
        - modelType
      type: object
      properties:
        modelType:
          $ref: '#/components/schemas/ModelType'
    LangStringPreferredNameTypeIec61360:
      allOf:
        - $ref: '#/components/schemas/AbstractLangString'
        - properties:
            text:
              maxLength: 255
    LangStringShortNameTypeIec61360:
      allOf:
        - $ref: '#/components/schemas/AbstractLangString'
        - properties:
            text:
              maxLength: 18
    DataTypeIec61360:
      type: string
      enum:
        - BLOB
        - BOOLEAN
        - DATE
        - FILE
        - HTML
        - INTEGER_COUNT
        - INTEGER_CURRENCY
        - INTEGER_MEASURE
        - IRDI
        - IRI
        - RATIONAL
        - RATIONAL_MEASURE
        - REAL_COUNT
        - REAL_CURRENCY
        - REAL_MEASURE
        - STRING
        - STRING_TRANSLATABLE
        - TIME
        - TIMESTAMP
    LangStringDefinitionTypeIec61360:
      allOf:
        - $ref: '#/components/schemas/AbstractLangString'
        - properties:
            text:
              maxLength: 1023
    ValueList:
      required:
        - valueReferencePairs
      type: object
      properties:
        valueReferencePairs:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/ValueReferencePair'
    ValueReferencePair:
      required:
        - value
        - valueId
      type: object
      properties:
        value:
          maxLength: 2000
          minLength: 1
          pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
          type: string
        valueId:
          $ref: '#/components/schemas/Reference'
    LevelType:
      required:
        - max
        - min
        - nom
        - typ
      type: object
      properties:
        min:
          type: boolean
        nom:
          type: boolean
        typ:
          type: boolean
        max:
          type: boolean
    HasKind:
      type: object
      properties:
        kind:
          $ref: '#/components/schemas/ModellingKind'
    ModellingKind:
      type: string
      enum:
        - Instance
        - Template
    Qualifiable:
      required:
        - modelType
      type: object
      properties:
        qualifiers:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/Qualifier'
        modelType:
          $ref: '#/components/schemas/ModelType'
    Qualifier:
      allOf:
        - $ref: '#/components/schemas/HasSemantics'
        - required:
            - type
            - valueType
          properties:
            kind:
              $ref: '#/components/schemas/QualifierKind'
            type:
              maxLength: 128
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
            valueType:
              $ref: '#/components/schemas/DataTypeDefXsd'
            value:
              type: string
            valueId:
              $ref: '#/components/schemas/Reference'
    QualifierKind:
      type: string
      enum:
        - ConceptQualifier
        - TemplateQualifier
        - ValueQualifier
    SubmodelElement_choice:
      oneOf:
        - $ref: '#/components/schemas/RelationshipElement'
        - $ref: '#/components/schemas/AnnotatedRelationshipElement'
        - $ref: '#/components/schemas/BasicEventElement'
        - $ref: '#/components/schemas/Blob'
        - $ref: '#/components/schemas/Capability'
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/File'
        - $ref: '#/components/schemas/MultiLanguageProperty'
        - $ref: '#/components/schemas/Operation'
        - $ref: '#/components/schemas/Property'
        - $ref: '#/components/schemas/Range'
        - $ref: '#/components/schemas/ReferenceElement'
        - $ref: '#/components/schemas/SubmodelElementCollection'
        - $ref: '#/components/schemas/SubmodelElementList'
    RelationshipElement:
      allOf:
        - $ref: '#/components/schemas/RelationshipElement_abstract'
        - properties:
            modelType:
              pattern: RelationshipElement
              type: string
    RelationshipElement_abstract:
      allOf:
        - $ref: '#/components/schemas/SubmodelElement'
        - required:
            - first
            - second
          properties:
            first:
              $ref: '#/components/schemas/Reference'
            second:
              $ref: '#/components/schemas/Reference'
    SubmodelElement:
      allOf:
        - $ref: '#/components/schemas/Referable'
        - $ref: '#/components/schemas/HasSemantics'
        - $ref: '#/components/schemas/Qualifiable'
        - $ref: '#/components/schemas/HasDataSpecification'
    AnnotatedRelationshipElement:
      allOf:
        - $ref: '#/components/schemas/RelationshipElement_abstract'
        - properties:
            annotations:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/DataElement_choice'
            modelType:
              pattern: AnnotatedRelationshipElement
              type: string
    DataElement_choice:
      oneOf:
        - $ref: '#/components/schemas/Blob'
        - $ref: '#/components/schemas/File'
        - $ref: '#/components/schemas/MultiLanguageProperty'
        - $ref: '#/components/schemas/Property'
        - $ref: '#/components/schemas/Range'
        - $ref: '#/components/schemas/ReferenceElement'
    Blob:
      allOf:
        - $ref: '#/components/schemas/DataElement'
        - required:
            - contentType
          properties:
            value:
              type: string
              format: byte
            contentType:
              type: string
              allOf:
                - maxLength: 100
                  minLength: 1
                - pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
                - pattern: "^([!#$%&'*+\\-.^_`|~0-9a-zA-Z])+/([!#$%&'*+\\-.^_`|~0-9a-zA-Z])+([ \\t]*;[ \\t]*([!#$%&'*+\\-.^_`|~0-9a-zA-Z])+=(([!#$%&'*+\\-.^_`|~0-9a-zA-Z])+|\"(([\\t !#-\\[\\]-~]|[-ÿ])|\\\\([\\t !-~]|[-ÿ]))*\"))*$"
            modelType:
              pattern: Blob
              type: string
    DataElement:
      allOf:
        - $ref: '#/components/schemas/SubmodelElement'
    File:
      allOf:
        - $ref: '#/components/schemas/DataElement'
        - required:
            - contentType
          properties:
            value:
              type: string
              allOf:
                - maxLength: 2000
                  minLength: 1
                - pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
                - pattern: "^file:(//((localhost|(\\[((([0-9A-Fa-f]{1,4}:){6}([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|::([0-9A-Fa-f]{1,4}:){5}([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|([0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){4}([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){3}([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9A-Fa-f]{1,4}:){2}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:){2}([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9A-Fa-f]{1,4}:){3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9A-Fa-f]{1,4}:){4}[0-9A-Fa-f]{1,4})?::([0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9A-Fa-f]{1,4}:){5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(([0-9A-Fa-f]{1,4}:){6}[0-9A-Fa-f]{1,4})?::)|[vV][0-9A-Fa-f]+\\.([a-zA-Z0-9\\-._~]|[!$&'()*+,;=]|:)+)\\]|([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])|([a-zA-Z0-9\\-._~]|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'()*+,;=])*)))?/((([a-zA-Z0-9\\-._~]|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'()*+,;=]|[:@]))+(/(([a-zA-Z0-9\\-._~]|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'()*+,;=]|[:@]))*)*)?|/((([a-zA-Z0-9\\-._~]|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'()*+,;=]|[:@]))+(/(([a-zA-Z0-9\\-._~]|%[0-9A-Fa-f][0-9A-Fa-f]|[!$&'()*+,;=]|[:@]))*)*)?)$"
            contentType:
              type: string
              allOf:
                - maxLength: 100
                  minLength: 1
                - pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
                - pattern: "^([!#$%&'*+\\-.^_`|~0-9a-zA-Z])+/([!#$%&'*+\\-.^_`|~0-9a-zA-Z])+([\\t]*;[ \\t]*([!#$%&'*+\\-.^_`|~0-9a-zA-Z])+=(([!#$%&'*+\\-.^_`|~0-9a-zA-Z])+|\"(([\\t!#-\\[\\]-~]|[-ÿ])|\\\\([\\t !-~]|[-ÿ]))*\"))*$"
            modelType:
              pattern: File
              type: string
    MultiLanguageProperty:
      allOf:
        - $ref: '#/components/schemas/DataElement'
        - properties:
            value:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/LangStringTextType'
            valueId:
              $ref: '#/components/schemas/Reference'
            modelType:
              pattern: MultiLanguageProperty
              type: string
    Property:
      allOf:
        - $ref: '#/components/schemas/DataElement'
        - required:
            - valueType
          properties:
            valueType:
              $ref: '#/components/schemas/DataTypeDefXsd'
            value:
              type: string
            valueId:
              $ref: '#/components/schemas/Reference'
            modelType:
              pattern: Property
              type: string
    Range:
      allOf:
        - $ref: '#/components/schemas/DataElement'
        - required:
            - valueType
          properties:
            valueType:
              $ref: '#/components/schemas/DataTypeDefXsd'
            min:
              type: string
            max:
              type: string
            modelType:
              pattern: Range
              type: string
    ReferenceElement:
      allOf:
        - $ref: '#/components/schemas/DataElement'
        - properties:
            value:
              $ref: '#/components/schemas/Reference'
            modelType:
              pattern: ReferenceElement
              type: string
    BasicEventElement:
      allOf:
        - $ref: '#/components/schemas/EventElement'
        - required:
            - direction
            - observed
            - state
          properties:
            observed:
              $ref: '#/components/schemas/Reference'
            direction:
              $ref: '#/components/schemas/Direction'
            state:
              $ref: '#/components/schemas/StateOfEvent'
            messageTopic:
              maxLength: 255
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
            messageBroker:
              $ref: '#/components/schemas/Reference'
            lastUpdate:
              pattern: "^-?(([1-9][0-9][0-9][0-9]+)|(0[0-9][0-9][0-9]))-((0[1-9])|(1[0-2]))-((0[1-9])|([12][0-9])|(3[01]))T(((([01][0-9])|(2[0-3])):[0-5][0-9]:([0-5][0-9])(\\.[0-9]+)?)|24:00:00(\\.0+)?)(Z|\\+00:00|-00:00)$"
              type: string
            minInterval:
              pattern: "^-?P((([0-9]+Y([0-9]+M)?([0-9]+D)?|([0-9]+M)([0-9]+D)?|([0-9]+D))(T(([0-9]+H)([0-9]+M)?([0-9]+(\\.[0-9]+)?S)?|([0-9]+M)([0-9]+(\\.[0-9]+)?S)?|([0-9]+(\\.[0-9]+)?S)))?)|(T(([0-9]+H)([0-9]+M)?([0-9]+(\\.[0-9]+)?S)?|([0-9]+M)([0-9]+(\\.[0-9]+)?S)?|([0-9]+(\\.[0-9]+)?S))))$"
              type: string
            maxInterval:
              pattern: "^-?P((([0-9]+Y([0-9]+M)?([0-9]+D)?|([0-9]+M)([0-9]+D)?|([0-9]+D))(T(([0-9]+H)([0-9]+M)?([0-9]+(\\.[0-9]+)?S)?|([0-9]+M)([0-9]+(\\.[0-9]+)?S)?|([0-9]+(\\.[0-9]+)?S)))?)|(T(([0-9]+H)([0-9]+M)?([0-9]+(\\.[0-9]+)?S)?|([0-9]+M)([0-9]+(\\.[0-9]+)?S)?|([0-9]+(\\.[0-9]+)?S))))$"
              type: string
            modelType:
              pattern: BasicEventElement
              type: string
    EventElement:
      allOf:
        - $ref: '#/components/schemas/SubmodelElement'
    Direction:
      type: string
      enum:
        - input
        - output
    StateOfEvent:
      type: string
      enum:
        - "off"
        - "on"
    Capability:
      allOf:
        - $ref: '#/components/schemas/SubmodelElement'
        - properties:
            modelType:
              pattern: Capability
              type: string
    Entity:
      allOf:
        - $ref: '#/components/schemas/SubmodelElement'
        - required:
            - entityType
          properties:
            statements:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/SubmodelElement_choice'
            entityType:
              $ref: '#/components/schemas/EntityType'
            globalAssetId:
              maxLength: 2000
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
            specificAssetIds:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/SpecificAssetId'
            modelType:
              pattern: Entity
              type: string
    EntityType:
      type: string
      enum:
        - CoManagedEntity
        - SelfManagedEntity
    SpecificAssetId:
      allOf:
        - $ref: '#/components/schemas/HasSemantics'
        - required:
            - name
            - value
          properties:
            name:
              maxLength: 64
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
            value:
              maxLength: 2000
              minLength: 1
              pattern: "^([\\t\\n\\r -퟿- ]|\\ud800[\\udc00-\\udfff]|[\\ud801-\\udbfe][\\udc00-\\udfff]|\\udbff[\\udc00-\\udfff])*$"
              type: string
            externalSubjectId:
              $ref: '#/components/schemas/Reference'
    Operation:
      allOf:
        - $ref: '#/components/schemas/SubmodelElement'
        - properties:
            inputVariables:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/OperationVariable'
            outputVariables:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/OperationVariable'
            inoutputVariables:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/OperationVariable'
            modelType:
              pattern: Operation
              type: string
    OperationVariable:
      required:
        - value
      type: object
      properties:
        value:
          $ref: '#/components/schemas/SubmodelElement_choice'
    SubmodelElementCollection:
      allOf:
        - $ref: '#/components/schemas/SubmodelElement'
        - properties:
            value:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/SubmodelElement_choice'
            modelType:
              pattern: SubmodelElementCollection
              type: string
    SubmodelElementList:
      allOf:
        - $ref: '#/components/schemas/SubmodelElement'
        - required:
            - typeValueListElement
          properties:
            orderRelevant:
              type: boolean
            semanticIdListElement:
              $ref: '#/components/schemas/Reference'
            typeValueListElement:
              $ref: '#/components/schemas/AasSubmodelElements'
            valueTypeListElement:
              $ref: '#/components/schemas/DataTypeDefXsd'
            value:
              minItems: 1
              type: array
              items:
                $ref: '#/components/schemas/SubmodelElement_choice'
            modelType:
              pattern: SubmodelElementList
              type: string
    AasSubmodelElements:
      type: string
      enum:
        - AnnotatedRelationshipElement
        - BasicEventElement
        - Blob
        - Capability
        - DataElement
        - Entity
        - EventElement
        - File
        - MultiLanguageProperty
        - Operation
        - Property
        - Range
        - ReferenceElement
        - RelationshipElement
        - SubmodelElement
        - SubmodelElementCollection
        - SubmodelElementList
    Result:
      type: object
      properties:
        messages:
          type: array
          items:
            $ref: '#/components/schemas/Message'
    Message:
      type: object
      properties:
        code:
          maxLength: 32
          minLength: 1
          type: string
        correlationId:
          maxLength: 128
          minLength: 1
          type: string
        messageType:
          type: string
          enum:
            - Undefined
            - Info
            - Warning
            - Error
            - Exception
        text:
          type: string
        timestamp:
          pattern: "^-?(([1-9][0-9][0-9][0-9]+)|(0[0-9][0-9][0-9]))-((0[1-9])|(1[0-2]))-((0[1-9])|([12][0-9])|(3[01]))T(((([01][0-9])|(2[0-3])):[0-5][0-9]:([0-5][0-9])(\\.[0-9]+)?)|24:00:00(\\.0+)?)(Z|\\+00:00|-00:00)$"
          type: string
    SubmodelValue:
      properties:
        submodelElements:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/SubmodelElement'
    OperationRequest:
      type: object
      properties:
        inoutputArguments:
          type: array
          items:
            $ref: '#/components/schemas/OperationVariable'
        inputArguments:
          type: array
          items:
            $ref: '#/components/schemas/OperationVariable'
        clientTimeoutDuration:
          pattern: ^(-?)P(?=.)((\d+)Y)?((\d+)M)?((\d+)D)?(T(?=.)((\d+)H)?((\d+)M)?(\d*(\.\d+)?S)?)?$
          type: string
    OperationResult:
      type: object
      allOf:
        - $ref: '#/components/schemas/BaseOperationResult'
        - properties:
            inoutputArguments:
              type: array
              items:
                $ref: '#/components/schemas/OperationVariable'
            outputArguments:
              type: array
              items:
                $ref: '#/components/schemas/OperationVariable'
    BaseOperationResult:
      allOf:
        - $ref: '#/components/schemas/Result'
        - properties:
            executionState:
              $ref: '#/components/schemas/ExecutionState'
            success:
              type: boolean
    ExecutionState:
      type: string
      enum:
        - Initiated
        - Running
        - Completed
        - Canceled
        - Failed
        - Timeout
    OperationRequestValueOnly:
      required:
        - clientTimeoutDuration
      type: object
      properties:
        inoutputArguments:
          $ref: '#/components/schemas/ValueOnly'
        inputArguments:
          $ref: '#/components/schemas/ValueOnly'
        clientTimeoutDuration:
          pattern: ^(-?)P(?=.)((\d+)Y)?((\d+)M)?((\d+)D)?(T(?=.)((\d+)H)?((\d+)M)?(\d*(\.\d+)?S)?)?$
          type: string
    ValueOnly:
      type: object
      description: |
        The ValueOnly serialization of submodel elements (patternProperties and propertyNames will be supported propably with OpenApi 3.1). The full description of the generic JSON validation schema for the ValueOnly-serialization can be found in chapter 11.4.3 in Details of the Asset Administration Shell Part 2.
    OperationResultValueOnly:
      type: object
      allOf:
        - $ref: '#/components/schemas/BaseOperationResult'
        - properties:
            inoutputArguments:
              $ref: '#/components/schemas/ValueOnly'
            outputArguments:
              $ref: '#/components/schemas/ValueOnly'
    ServiceDescription:
      type: object
      properties:
        profiles:
          minItems: 1
          type: array
          items:
            type: string
            enum:
              - https://admin-shell.io/aas/API/3/0/AssetAdministrationShellServiceSpecification/SSP-001
              - https://admin-shell.io/aas/API/3/0/AssetAdministrationShellServiceSpecification/SSP-002
              - https://admin-shell.io/aas/API/3/0/SubmodelServiceSpecification/SSP-001
              - https://admin-shell.io/aas/API/3/0/SubmodelServiceSpecification/SSP-002
              - https://admin-shell.io/aas/API/3/0/SubmodelServiceSpecification/SSP-003
              - https://admin-shell.io/aas/API/3/0/AasxFileServerServiceSpecification/SSP-001
              - https://admin-shell.io/aas/API/3/0/AssetAdministrationShellRegistryServiceSpecification/SSP-001
              - https://admin-shell.io/aas/API/3/0/AssetAdministrationShellRegistryServiceSpecification/SSP-002
              - https://admin-shell.io/aas/API/3/0/SubmodelRegistryServiceSpecification/SSP-001
              - https://admin-shell.io/aas/API/3/0/SubmodelRegistryServiceSpecification/SSP-002
              - https://admin-shell.io/aas/API/3/0/DiscoveryServiceSpecification/SSP-001
              - https://admin-shell.io/aas/API/3/0/AssetAdministrationShellRepositoryServiceSpecification/SSP-001
              - https://admin-shell.io/aas/API/3/0/AssetAdministrationShellRepositoryServiceSpecification/SSP-002
              - https://admin-shell.io/aas/API/3/0/SubmodelRepositoryServiceSpecification/SSP-001
              - https://admin-shell.io/aas/API/3/0/SubmodelRepositoryServiceSpecification/SSP-002
              - https://admin-shell.io/aas/API/3/0/SubmodelRepositoryServiceSpecification/SSP-003
              - https://admin-shell.io/aas/API/3/0/SubmodelRepositoryServiceSpecification/SSP-004
              - https://admin-shell.io/aas/API/3/0/ConceptDescriptionServiceSpecification/SSP-001
      description: "The Description object enables servers to present their capabilities to the clients, in particular which profiles they implement. At least one defined profile is required. Additional, proprietary attributes might be included. Nevertheless, the server must not expect that a regular client understands them."
      example: |-
        {
          "profiles": [
            "https://admin-shell.io/aas/API/3/0/AssetAdministrationShellRegistryServiceSpecification/SSP-002",
            "https://admin-shell.io/aas/API/3/0/SubmodelRegistryServiceSpecification/SSP-002"
          ]
        }
  responses:
    bad-request:
      description: "Bad Request, e.g. the request parameters of the format of the request body is wrong."
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Result'
    unauthorized:
      description: "Unauthorized, e.g. the server refused the authorization attempt."
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Result'
    forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Result'
    internal-server-error:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Result'
    default:
      description: Default error handling for unmentioned status codes
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Result'
    not-found:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Result'
  parameters:
    Level:
      name: level
      in: query
      description: Determines the structural depth of the respective resource content
      required: false
      schema:
        type: string
        default: deep
        enum:
          - deep
          - core
    Extent:
      name: extent
      in: query
      description: Determines to which extent the resource is being serialized
      required: false
      schema:
        type: string
        default: withoutBlobValue
        enum:
          - withBlobValue
          - withoutBlobValue
    IdShortPath:
      name: idShortPath
      in: path
      description: IdShort path to the submodel element (dot-separated)
      required: true
      style: simple
      explode: false
      schema:
        type: string
