IDTA 01002 3 0 3 - SpecificationAssetAdministrationShell - Part2 - API
IDTA 01002 3 0 3 - SpecificationAssetAdministrationShell - Part2 - API
AssetId
October 2024
Part 2: Application
Programming
Interfaces
SPECIFICATION
Imprint
Publisher
Industrial Digital Twin Association
Lyoner Straße 18
60528 Frankfurt am Main
Germany
https://www.industrialdigitaltwin.org/
Status
V3.0.3
October 2024
Illustrations
Designed by Publik. Agentur für Kommunikation GmbH
Content| 3
Content
1 Preamble ................................................................................................................................................... 10
1.1 Editorial Notes ................................................................................................................................... 10
1.2 Metamodel Versions.......................................................................................................................... 10
1.3 Scope of this Document .................................................................................................................... 10
1.4 Structure of the Document ................................................................................................................ 10
2 Terms, Definitions and Abbreviations ....................................................................................................... 11
2.1 Terms and Definitions ....................................................................................................................... 11
2.2 Abbreviations ..................................................................................................................................... 13
3 Introduction ............................................................................................................................................... 14
4 General ..................................................................................................................................................... 15
4.1 Services, Interfaces and Interface Operations .................................................................................. 15
4.2 Design Principles ............................................................................................................................... 16
4.3 Semantic References for Operations ................................................................................................ 18
4.4 References and Keys ........................................................................................................................ 19
4.5 Special Parameters ........................................................................................................................... 19
4.6 Relation of Interfaces ........................................................................................................................ 19
5 Asset Administration Shell Interfaces ....................................................................................................... 23
5.1 General .............................................................................................................................................. 23
5.2 Asset Administration Shell Interface and Operations ........................................................................ 23
5.2.1 Asset Administration Shell Interface ............................................................................................ 23
5.2.2 Operation GetAssetAdministrationShell ....................................................................................... 24
5.2.3 Operation PutAssetAdministrationShell ....................................................................................... 24
5.2.4 Operation GetAllSubmodelReferences ........................................................................................ 25
5.2.5 Operation PostSubmodelReference ............................................................................................ 25
5.2.6 Operation DeleteSubmodelReference ......................................................................................... 26
5.2.7 Operation GetAssetInformation.................................................................................................... 26
5.2.8 Operation PutAssetInformation .................................................................................................... 27
5.2.9 Operation GetThumbnail .............................................................................................................. 27
5.2.10 Operation PutThumbnail .............................................................................................................. 28
5.2.11 Operation DeleteThumbnail ......................................................................................................... 28
5.3 Submodel Interface and Operations ................................................................................................. 29
5.3.1 Submodel Interface ...................................................................................................................... 29
5.3.2 Operation GetSubmodel .............................................................................................................. 30
5.3.3 Operation GetAllSubmodelElements ........................................................................................... 31
5.3.4 Operation GetSubmodelElementByPath ..................................................................................... 31
5.3.5 Operation GetFileByPath ............................................................................................................. 32
4 | Asset Administration Shell Specification - Part 2: API
Table of Figures
Figure 1 Types of Information Exchange via Asset Administration Shells .......................................................14
Figure 2 Services, Interfaces & APIs and Operations ...................................................................................... 16
Figure 3 Retrieval of Asset-related Information by AAS and Submodels .........................................................20
Figure 4 Example of an AAS endpoint with URL-based versioning ............................................................... 115
Figure 5 Example of an AAS endpoint with an arbitrary path......................................................................... 115
Figure 6 Example Hierarchy of Submodel Elements ...................................................................................... 116
Figure 7 Sequence for asynchronous invocations of the SubmodelElement 'Operation' ..............................125
Figure 8 Interactions for Client Applications using AAS and Submodel Interfaces (independent Submodel
Registry).......................................................................................................................................................... 153
Figure 9 Interaction for Client Application using AAS and Submodel Interfaces (included Submodel Registry)
........................................................................................................................................................................ 154
Figure 10 Interaction for Client Application using AAS and Submodels (for HTTP API Operations) ............. 155
Figure 11 The private_key_certchain_jwt Method [...download service] ........................................................156
9 | Asset Administration Shell Specification - Part 2: API
Table of Tables
Table 1 Special Parameters ............................................................................................................................. 19
Table 2 Simple Data Types used for API-specific Classes .............................................................................. 87
Table 3 Primitive Data Types used for the API-specific Classes ..................................................................... 87
Table 4 Status Codes ....................................................................................................................................... 88
Table 5 Level Parameters................................................................................................................................. 93
Table 6 Content Parameters ............................................................................................................................ 93
Table 7 Extent Parameters ............................................................................................................................... 94
Table 8 Applicability of SerializationModifiers .................................................................................................. 94
Table 9 Mapping of Data Types in ValueOnly-Serialization ............................................................................. 98
Table 10 Children of certain objects ............................................................................................................... 116
Table 11 Metadata Attributes ......................................................................................................................... 117
Table 12 AssetAdministrationShell JSON Serialization Example .................................................................. 118
Table 13 AssetAdministrationShell Metadata JSON Serialization Example ..................................................118
Table 14 Parameters for Pagination ............................................................................................................... 119
Table 15 Mapping of the generic Interface Operations to HTTP API Operations ..........................................121
Table 16 Status Code Mapping for HTTP ...................................................................................................... 126
Table 17 Overview of Service Specifications and the Contained APIs ..........................................................129
Table 18 Interface Description ........................................................................................................................ 159
Table 19 Operation Description ...................................................................................................................... 159
Table 20 Data Types for Payload Description ................................................................................................ 161
Table 21 Enumeration Description ................................................................................................................. 162
10 | Asset Administration Shell Specification - Part 2: API
1 Preamble
1.1 Editorial Notes
This document (version 3.0.2) was produced from October 2023 to April 2024 by the joint sub working group
"Asset Administration Shell" of the working group "Reference Architectures, Standards and Norms" of the
Plattform Industrie 4.0 and the working group "Open Technology" of the Industrial Digital Twin Association
(IDTA). It contains a number of mistakes and improvements compared to the first release (version 3.0)
published by the Industrial Digital Twin Association in April 2023.
Earlier versions of the document were release candidates and used the version 1.0. It has been decided in
the meantime that this first release will start with version 3.0, in line with the related release of the
metamodel.
Version 1.0 RC02 of this document was developed from November 2020 to November 2021 by the joint
working groups “Asset Administration Shell” and “Infrastructure of the Asset Administration Shell” of the
Plattform Industrie 4.0 working group “Reference Architectures, Standards and Norms“.
Version 1.0 RC01 of this document was developed from December 2019 to November 2020 by the sub
working groups “Asset Administration Shell” and “Infrastructure of the Asset Administration Shell” of the
Plattform Industrie 4.0 working group “Reference Architectures, Standards and Norms“.
This document is Part 2 of the document series “Specification of the Asset Administration Shell”.
This specification is versioned using Semantic Versioning 2.0.0 and follows the semver specification [4].
Please note: the definitions of terms are only valid in a certain context. This glossary applies only
within the context of this document.
If available, definitions were taken from IEC 63278-1 DRAFT, July 2022.
API
specification of the set of operations and events that forms an API in a selected technology
API Operation
specification of the operations (procedures) that may be called through an API
Note: Asset Administration Shell and Administration Shell are used synonymously.
Interface
defined connection point of a functional unit which can be connected to other functional units
Note 1: “defined” means that the requirements and the assured properties of this connection point are described.
Note 2: the combination of interfaces of function units is also called an interface.
Note 3: in an information system, the defined exchange of information takes place at this point.
Note 4: an interface places certain requirements on the connection that is to be made.
Note 5: an interface demands certain features.
Interface Operation
operation
executable realization of a function
Note 1: the term method is synonymous to operation.
Note 2: an operation has a name and a list of parameters [ISO 19119:2005, 4.1.3].
service
Demarcated scope of functionality which is offered by an entity or organization via interfaces
Note: one or multiple operations can be assigned to one service.
service specification
specification of a service according to the notation, architectural style and constraints of a selected
technology
Note: one or multiple API Operations can be assigned to one service specification.
Submodel
representation of an aspect of an asset
SubmodelElement
element of a Submodel
[SOURCE: IEC 63278-1]
Terms, Definitions and Abbreviations| 13
2.2 Abbreviations
Abbreviation Description
AAS Asset Administration Shell
AML AutomationML
ID Identifier
3 Introduction
This document defines APIs for enabling the access to the information provided by an Asset Administration
Shell. The underlying information model is as defined in [1].
Since an API can be specified in different technologies like HTTP/REST, MQTT and OPC UA, the
specification offers a technology-neutral specification of the interfaces.
While Part 5 of the specification series of the Asset Administration Shell [3] mainly considered file exchange,
this specification focuses on the API that allows online access to information provided by the AAS (see
Figure 1).
4 General
4.1 Services, Interfaces and Interface Operations
This document uses the Industrie 4.0 Service Model illustrated in Figure 2 for a uniform understanding and
naming. It basically distinguishes between associated concepts on several levels (from left to right):
• technology-neutral level: concepts that are independent from selected technologies;
• technology-specific level: concepts that are instantiated for a given technology and/or architectural
style (e.g. HTTP/REST, OPC UA, MQTT);
• implementation level: concepts that are related to an implementation architecture that comprises one
or more technologies (e. g. C#, C++, Java, Python);
• runtime level: concepts that are related to identifiable components in an operational Industry 4.0
system.
This document deals with the concepts of the technology-neutral and technology-specific level. However, to
avoid terminological and conceptual misunderstandings, the whole Industrie 4.0 Service Model is provided
here.
The technology-neutral level comprises the following concepts:
• Service: a service describes a demarcated scope of functionality (including its informational and
non-functional aspects), which is offered by an entity or organization via interfaces.
• Interface: this is the most important concept as it is understood to be the unit of reusability across
services and the unit of standardization when mapped to application programming interfaces (API) in
the technology-specific level. One interface may be mapped to several APIs depending on the
technology and architectural style used, e.g. HTTP/REST or OPC UA, whereby these API mappings
also need to be standardized for the sake of interoperability.
• Interface-Operation: interface operations define interaction patterns via the specified interface.
The technology-specific level comprises the following concepts:
• Service Specification: specification of a service according to the notation, architectural style, and
constraints of a selected technology. Among others, it comprises and refers to the list of APIs that
forms this service specification. These may be I4.0-defined standard APIs but also other, proprietary
APIs.
Note: such a technology-specific service specification may be but does not have to be derived from the “service”
described in the technology-neutral form. It is up to the system architect and service engineer to tailor the
technology-specific service according to the needs of the use cases.
• API: specification of the set of operations and events that forms an API in a selected technology. It is
derived from the interface description on the technology-neutral level. Hence, if there are several
selected technologies, one interface may be mapped to several APIs.
• API-Operation: specification of the operations (procedures) that may be called through an API. It is
derived from the interface operation description on the technology-neutral level. When selecting
technologies, one interface operation may be mapped to several API-operations; several interface
operations may also be mapped to the same API-operation.
0..*
One important message from the Industrie 4.0 Service Model is that it is the level of the interface (mapped to
technology-specific APIs) that
from the list of referable objects of “Specification of the Asset Administration Shell Part 1” and their
relationships. Clause 10.2 gives an additional list of resources.
• Methods (verbs): a small set of standard REST methods (GET, POST, PUT, DELETE) is used to
describe the semantic of the most common operations. There are only a few exceptions for
situations where the standard methods do not fit (e.g. GETALL, SET, INVOKE).
The methods are:
• GET: a GET returns a single resource based on the resource identifier which is the identifier [1] for
identifiables and the idShortPath for referables.
• GETALL: returns a list of resources based on optionally available parameters such as filters.
• POST: creates a new resource. The identifier of the resource is part of the resource description. This
is necessary because the id of identifiables is globally unique and should be the identifier for the
object in every system. This implies that the creation of an identifiable is idempotent. There shall
never be more than one identifiable with the same ID in one system. For example, trying to post the
same AAS object twice will not create two AAS resources.
• PUT: replaces an existing resource.
• PATCH: updates an existing resource. The content to be replaced will be defined by the given
SerializationModifiers, e.g. content=value provides the ValueOnly-serialization to update all values in
the existing resource. The structure of the existing resource on the server and of the content given
by the PATCH must be the same.
Note: these methods are intended for the naming of interfaces as described in
Figure 2. They shall not be interpreted as new protocol methods, e.g. on HTTP level.
Examples:
GetSubmodel has method verb “Get” and element name “Submodel”.
GetAllSubmodelElementsByPath has method verb “GetAll” and element name “SubmodelElements”
plus a by-qualifier “Path”.
1 https://github.com/admin-shell-io/id
General| 19
https://admin-shell.io/aas/API/GetAllSubmodelElements/1/0/RC03
https://admin-shell.io/aas/API/GetAllSubmodelElements/3/0
Examples for invalid identifiers:
http://admin-shell.io/API/GetSubmodel/1/0
The scheme is different to ‘https’, and the ‘aas’ path segment is missing
https://admin-shell.io/aas/API/GetSubmodel
Version information is missing
https://admin-shell.io/aas/API/GetSubmodel/1/0#0173-%20ABC#001
The URI includes DIN SPEC 91406-reserved (#) and impermissible (%) characters
The returned handle of an operation’s asynchronous invocation used to request the current
OperationHandle
state of the operation’s execution
SerializationFormat Determines the format of serialization, i.e. JSON, XML, RDF, AML, etc.
ShellDescriptor Object containing the Asset Administration Shell’s identification and endpoint information
The name of the specific asset identifier or the predefined name “globalAssetId” that would
SpecificAssetId
refer to the AssetInformation/globalAssetId
2. Registries are “directories” which store AAS-IDs and Submodel-IDs together with the related
endpoints (typically a URL-path into a repository or to a single AAS/Submodel),
3. discovery (servers) supports a fast search and only store copies of essential information, i.e. key
value pairs to find IDs by other IDs.
Figure 3 shows a typical sequence. Discovery finds the AAS-ID for a given Asset-ID. A Registry provides the
endpoint for a given AAS-ID. Such an endpoint for an AAS and the related Submodel-IDs make the
submodels with their submodelElements accessible.
The “Asset Administration Shell Interface” makes the information about the AAS itself and the references to
the related submodels available.
The related submodels of an AAS are retrieved by “GetAllSubmodelReferences”. Such a reference includes
the SM-ID of a related submodel.
Similarly to the AAS above, the “Submodel Registry Interface” may be used to retrieve the related descriptor
for a submodel (“GetSubmodelDescriptorById”) with a specific SM-ID. The retrieved Submodel Descriptor
includes the endpoint for the “Submodel Interface”.
The “Submodel Interface” makes the information about the submodel itself and all its included submodel
elements available.
Asset Administration Shells and submodels may be deployed on different endpoints in different ways.
One example is the deployment of an AAS on a device. In this case, the AAS might be fixed and might not
be changed or deleted. In a cloud scenario, a single AAS may also be deployed as a single container (e.g.
docker container).
Another example is the deployment of many Asset Administration Shells in an AAS Repository. In this case,
the “Asset Administration Shell Repository Interface” may allow to create and manage multiple AAS in the
repository.
The separate interfaces of the HTTP/REST API allow many ways to support different deployments.
For an AAS repository, the combination “Asset Administration Shell Repository Interface”, “Asset
Administration Shell Interface”, “Submodel Interface”, “Serialization Interface”, and “Self-Description
Interface” is proposed.
This will result in the following HTTP/REST paths as described in a combined OpenAPI file
(https://app.swaggerhub.com/apis/Plattform_i40/AssetAdministrationShellRepositoryServiceSpecification/V3.
0.2_SSP-001) 2:
/shells
/shells/{aas-identifier}
/shells/{aas-identifier}/asset-information
/shells/{aas-identifier}/asset-information/thumbnail
/shells/{aas-identifier}/submodel-refs
/shells/{aas-identifier}/submodel-refs/{submodel-identifier}
/shells/{aas-identifier}/submodels/{submodel-identifier}
/shells/{aas-identifier}/submodels/{submodel-identifier}/submodel-elements
/shells/{aas-identifier}/submodels/{submodel-identifier}/submodel-elements/{idShortPath}
/shells/{aas-identifier}/submodels/{submodel-identifier}/submodel-elements/{idShortPath}/attachment
/shells/{aas-identifier}/submodels/{submodel-identifier}/submodel-elements/{idShortPath}/invoke
/shells/{aas-identifier}/submodels/{submodel-identifier}/submodel-elements/{idShortPath}/invoke-async
/shells/{aas-identifier}/submodels/{submodel-identifier}/submodel-elements/{idShortPath}/operation-
status/{handleId}
/shells/{aas-identifier}/submodels/{submodel-identifier}/submodel-elements/{idShortPath}/operation-
results/{handleId}
/serialization
/description
If the repository also supports AASX Packages, it shall be extended by additionally supporting a “AASX File
Server” Profile 3.
2For easier reading only the standard paths are shown in the following: $metadata, $value, $reference and $path parameter paths are
additionally contained in the OpenAPI file.
The example of a device or container containing one AAS with its related submodels will result in the
following HTTP/REST paths as described in the related OpenAPI file
(https://app.swaggerhub.com/apis/Plattform_i40/AssetAdministrationShellServiceSpecification/V3.0.2_SSP-
001)2:
/aas
/aas/asset-information
/aas/asset-information/thumbnail
/aas/submodel-refs
/aas/submodel-refs/{submodel-identifier}
/aas/submodels/{submodel-identifier}
/aas/submodels/{submodel-identifier}/submodel-elements
/aas/submodels/{submodel-identifier}/submodel-elements/{idShortPath}
/aas/submodels/{submodel-identifier}/submodel-elements/{idShortPath}/attachment
/aas/submodels/{submodel-identifier}/submodel-elements/{idShortPath}/invoke
/aas/submodels/{submodel-identifier}/submodel-elements/{idShortPath}/invoke-async
/aas/submodels/{submodel-identifier}/submodel-elements/{idShortPath}/operation-status/{handleId}
/aas/submodels/{submodel-identifier}/submodel-elements/{idShortPath}/operation-results/{handleId}
/serialization
/description
Note: identifiers are base64url-encoded in the API, i.e. {aas-identifier} and {submodel-identifier}. The {idShortPath}
is URL-encoded in the API.
Asset Administration Shell Interfaces| 23
semanticId https://admin-shell.io/aas/API/GetAssetAdministrationShell/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/PutAssetAdministrationShell/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAllSubmodelReferences/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/PostSubmodelReference/3/0
Input Parameter
Output Parameter
Explanation Deletes the Submodel Reference from the Asset Administration Shell
semanticId https://admin-shell.io/aas/API/DeleteSubmodelReference/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAssetInformation/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/PutAssetInformation/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetThumbnail/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/PutThumbnail/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/DeleteThumbnail/3/0
Input Parameter
Output Parameter
Interface: Submodel
Interface: Submodel
semanticId https://admin-shell.io/aas/API/GetSubmodel/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAllSubmodelElements/3/0
Input Parameter
Output Parameter
Explanation Returns a specific submodel element from the Submodel at a specified path
semanticId https://admin-shell.io/aas/API/GetSubmodelElementByPath/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetFileByPath/3/0
Input Parameter
Output Parameter
Explanation Replaces the file of an existing submodel element at a specified path within the
submodel element hierarchy
semanticId https://admin-shell.io/aas/API/PutFileByPath/3/0
Input Parameter
Output Parameter
Explanation Deletes the file of an existing submodel element at a specified path within the
submodel element hierarchy
semanticId https://admin-shell.io/aas/API/DeleteFileByPath/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/PutSubmodel/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/PatchSubmodel/3/0
Input Parameter
Output Parameter
Explanation Creates a new submodel element as a child of the submodel. The idShort of the new
submodel element must be set in the payload.
Note: the creation of the idShort is out of scope and must be handled in a proprietary way.
semanticId https://admin-shell.io/aas/API/PostSubmodelElement/3/0
Input Parameter
Output Parameter
Explanation Creates a new submodel element at a specified path within the submodel element
hierarchy. The idShort of the new submodel element must be set in the payload.
Note: the creation of the idShort is out of scope and must be handled in a proprietary
way.
semanticId https://admin-shell.io/aas/API/PostSubmodelElementByPath/3/0
Input Parameter
Output Parameter
Explanation Replaces an existing submodel element at a specified path within the submodel
element hierarchy
semanticId https://admin-shell.io/aas/API/PutSubmodelElementByPath/3/0
Input Parameter
Output Parameter
Explanation Updates an existing submodel element at a specified path within the submodel
element hierarchy
semanticId https://admin-shell.io/aas/API/PatchSubmodelElementByPath/3/0
Input Parameter
Output Parameter
Explanation Returns a specific submodel element value from the Submodel at a specified path
according to the ValueOnly-serialization as defined in clause 11.4.1
semanticId https://admin-shell.io/aas/API/GetSubmodelElementValueByPath/3/0
Input Parameter
Output Parameter
Explanation Sets the value of the submodel element at a specified path according to the
ValueOnly-serialization as defined in clause 11.4.1
semanticId https://admin-shell.io/aas/API/PatchSubmodelElementValueByPath/3/0
Input Parameter
Output Parameter
Explanation Deletes a submodel element at a specified path within the submodel elements
hierarchy
semanticId https://admin-shell.io/aas/API/DeleteSubmodelElementByPath/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/InvokeOperationSync/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/InvokeOperationAsync/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetOperationAsnycStatus/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetOperationAsnycResult/3/0
Input Parameter
Output Parameter
Interface: Serialization
semanticId https://admin-shell.io/aas/API/GenerateSerializationByIds/3/0
Input Parameter
Output Parameter
Enumeration: SerializationFormat
Explanation: Determines the format of serialization, i.e. JSON, XML, RDF, AML,
etc. RFC 6838, IANA Media Types, and defined custom content
types; additional elements may be added in future versions
Set of: --
Literal Explanation
semanticId https://admin-shell.io/aas/API/GetAllAASXPackageIds/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAASXByPackageId/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/PostAASXPackage/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/PutAASXPackageById/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/DeleteAASXPackageById/3/0
Input Parameter
Output Parameter
6 Registration Interfaces
6.1 General
These interfaces allow to register and unregister descriptors of administration shells or submodels. The
descriptors contain the information needed to access the interfaces (as described in Clause 5) of the
corresponding element. This required information includes the endpoint in the dedicated environment.
Lookup interfaces provide access to the registered descriptors by identifiers (Asset Administration Shell and
Submodel ID). These identifiers may be discovered through the interfaces described in Clause 8.
semanticId https://admin-shell.io/aas/API/GetAllAssetAdministrationShellDescriptors/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAssetAdministrationShellDescriptorById/3/0
Input Parameter
Output Parameter
Explanation Creates a new Asset Administration Shell Descriptor, i.e. registers an AAS
semanticId https://admin-shell.io/aas/API/PostAssetAdministrationShellDescriptor/3/0
Input Parameter
Output Parameter
Explanation Replaces an existing Asset Administration Shell Descriptor, i.e. replaces registration
information
semanticId https://admin-shell.io/aas/API/PutAssetAdministrationShellDescriptorById/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/DeleteAssetAdministrationShellDescriptorById/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAllSubmodelDescriptors/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetSubmodelDescriptorById/3/0
Input Parameter
Output Parameter
PostSubmodelDescriptor
Operation Name
semanticId https://admin-shell.io/aas/API/PostSubmodelDescriptor/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/PutSubmodelDescriptorById/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/DeleteSubmodelDescriptorById/3/0
Input Parameter
Output Parameter
7 Repository Interfaces
7.1 General
These interfaces allow to manage Asset Administration Shells, Submodels, and Concept Descriptions. They
further provide access to the data of these elements through interfaces described in Clause 5. A repository
can host multiple entities. These entities can be stored in individual repositories of a decentral system. The
endpoints of the entities managed by one repository shall be resolved by subsequent calls to discover
(Clause 8) and lookup (Clause 6) interfaces to such decentralized systems.
Sometimes, these kinds of services are also classified as Asset Administration Shell management services.
The interfaces that provide access to the entities (Asset Administration Shells, Submodels, Concept
Descriptions) themselves are convenience interfaces that provide access in a system where the services are
managed by central repositories.
semanticId https://admin-shell.io/aas/API/GetAllAssetAdministrationShells/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAssetAdministrationShellById/3/0
Input Parameter
Output Parameter
Explanation Returns all Asset Administration Shells that are linked to a globally unique asset
identifier or to specific asset ids
semanticId https://admin-shell.io/aas/API/GetAllAssetAdministrationShellsByAssetId/3/0
Input Parameter
key The key of the AssetId The name of the specific yes string 1
asset identifier or the predefined name
“globalAssetId” that would refer to the
AssetInformation/globalAssetId
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAllAssetAdministrationShellsByIdShort/3/0
Input Parameter
Output Parameter
Explanation Creates a new Asset Administration Shell. The id of the new Asset Administration
Shell must be set in the payload.
Note: the creation of the idShort is out of scope and must be handled in a proprietary
way.
semanticId https://admin-shell.io/aas/API/PostAssetAdministrationShell/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/PutAssetAdministrationShellById/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/DeleteAssetAdministrationShellById/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAllSubmodels/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetSubmodelById/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAllSubmodelsBySemanticId/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAllSubmodelsByIdShort/3/0
Input Parameter
Output Parameter
Explanation Creates a new Submodel. The id of the new submodel must be set in the payload.
Note: the creation of the idShort is out of scope and must be handled in a proprietary
way.
semanticId https://admin-shell.io/aas/API/PostSubmodel/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/PutSubmodelById/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/PatchSubmodelById/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/DeleteSubmodelById/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAllConceptDescriptions/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetConceptDescriptionById/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAllConceptDescriptionsByIdShort/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAllConceptDescriptionsByIsCaseOf/3/0
Input Parameter
Output Parameter
semanticId https://admin-
shell.io/aas/API/GetAllConceptDescriptionsByDataSpecificationReference/3/0
Input Parameter
Output Parameter
Explanation Creates a new Concept Description. The id of the new Concept Description must be
set in the payload.
Note: the creation of the idShort is out of scope and must be handled in a proprietary
way.
semanticId https://admin-shell.io/aas/API/PostConceptDescription/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/PutConceptDescriptionById/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/DeleteConceptDescriptionById/3/0
Input Parameter
Output Parameter
Explanation Returns a list of Asset Administration Shell ids based on asset identifier key-value-
pairs
semanticId https://admin-shell.io/aas/API/GetAllAssetAdministrationShellIdsByAssetLink/3/0
Input Parameter
Output Parameter
semanticId https://admin-shell.io/aas/API/GetAllAssetLinksById/3/0
Input Parameter
Output Parameter
Explanation Creates new asset identifier key-value-pairs linked to an Asset Administration Shell for
discoverable content. The existing content might have to be deleted first.
semanticId https://admin-shell.io/aas/API/PostAllAssetLinksById/3/0
Input Parameter
Output Parameter
Explanation Deletes all asset identifier key-value-pairs linked to an Asset Administration Shell to
edit discoverable content
semanticId https://admin-shell.io/aas/API/DeleteAllAssetLinksById/3/0
Input Parameter
Output Parameter
Interface: Self-Description
GetSelfDescription Returns a description object containing the capabilities and supported features of the
server.
Operation GetSelfDescription
Name
Explanation Returns a description object containing the capabilities and supported features of the
server.
semanticId https://admin-shell.io/aas/API/GetSelfDescription/3/0
Output Parameter
Note 1: a server implementing more than one service specification profile, e.g. hosting a repository and a registry
at the same time, adds both ServiceSpecificationProfileEnum items in the profiles list.
Note 2: a profile value must only be used if the related API is implemented at the path where the API Operation
“GetDescription” is published, or child paths.
Data Types for Payload| 79
10.2.1 Descriptor
Explanation The self-describing information of a network resource. This class is not part of the
metamodel.
Inherits --
from
semanticId https://admin-shell.io/aas/API/DataTypes/Descriptor/3/0
10.2.2 AssetAdministrationShellDescriptor
semanticId https://admin-shell.io/aas/API/DataTypes/AssetAdministrationShellDescriptor/3/0
Note: the cardinality restriction for AssetAdministrationShellDescriptor/endpoint (optional: 0..*) allows a provider to
skip the declaration of the location of an AssetAdministrationShell and directly point to the endpoints of the
contained Submodels through the path AssetAdministrationShellDescriptor/submodelDescriptor->
SubmodelDescriptor/endpoint. A client, therefore, might decide to skip the lookup on the
AssetAdministrationShell. Nevertheless, in case the information contained in the
AssetAdministrationShellDescriptor deviates from the related AssetAdministrationShell, or attributes are
missing, the AssetAdministrationShell is always the source of truth.
Data Types for Payload| 81
10.2.3 SubmodelDescriptor
semanticId https://admin-shell.io/aas/API/DataTypes/SubmodelDescriptor/3/0
10.2.4 Endpoint
Explanation The endpoint description of a network resource. This class is not part of the
metamodel.
Inherits from -
semanticId https://admin-shell.io/aas/API/DataTypes/Endpoint/3/0
Interface interface-shortName
Asset Administration Shell Interface AAS
Submodel Interface SUBMODEL
Serialization Interface SERIALIZE
AASX File Server Interface AASX-FILE
Asset Administration Shell Registry Interface AAS-REGISTRY
Submodel Registry Interface SUBMODEL-REGISTRY
Asset Administration Shell Repository Interface AAS-REPOSITORY
Submodel Repository Interface SUBMODEL-REPOSITORY
Concept Description Repository Interface CD-REPOSITORY
Asset Administration Shell Basic Discovery AAS-DISCOVERY
Interface
10.2.5 ProtocolInformation
Explanation The protocol information of a network resource endpoint will be defined in DIN
SPEC 16593-2. After the release of DIN SPEC 16593-2, any required updates
will be made. This class is not part of the metamodel.
The information in this table is a 1:1 copy from DIN SPEC 16593-2. Required
changes need to be made by the related DIN working group.
Inherits from --
semanticId https://admin-shell.io/aas/API/DataTypes/ProtocolInformation/3/0
Explanation Security attributes as defined by DIN SPEC 16593-2. After the release of DIN SPEC
16593-2, any required updates will be made. This class is not part of the metamodel.
The information in this table is derived from DIN SPEC 16593-2. Required changes need
to be made by the related DIN working group.
Inherits from --
semanticId https://admin-shell.io/aas/API/DataTypes/SecurityAttributeObject/3/0
Enumeration SecurityTypeEnum
https://admin-shell.io/aas/API/DataTypes/
semanticId
SecurityTypeEnum/3/0
Literal Explanation
10.2.6 ServiceDescription
Inherits from --
semanticId https://admin-shell.io/aas/API/DataTypes/ServiceDescription/3/0
Enumeration ServiceSpecificationProfileEnum
https://admin-shell.io/aas/API/DataTypes/
semanticId
ServiceSpecificationProfileEnum/3/0
Literal Explanation
https://admin-shell.io/aas/API/3/0/ Indicates that the server implemented all details of the AASX
AasxFileServerServiceSpecification/SSP- File Server Service Specification Full Profile in version 3.0.
001
86 | Asset Administration Shell Specification - Part 2: API
https://admin-shell.io/aas/API/3/0/ Indicates that the server implemented all details of the Asset
AssetAdministrationShellRegistryServiceSp Administration Shell Registry Registry Service Specification
ecification/SSP-001 Full Profile in version 3.0.
https://admin-shell.io/aas/API/3/0/ Indicates that the server implemented all details of the Asset
AssetAdministrationShellRegistryServiceSp Administration Shell Registry Service Specification Read
ecification/SSP-002 Profile in version 3.0.
https://admin-shell.io/aas/API/3/0/ Indicates that the server implemented all details of the Asset
AssetAdministrationShellRepositoryService Administration Shell Repository Service Specification Full
Specification/SSP-001 Profile in version 3.0.
https://admin-shell.io/aas/API/3/0/ Indicates that the server implemented all details of the Asset
AssetAdministrationShellRepositoryService Administration Shell Repository Service Specification Read
Specification/SSP-002 Profile in version 3.0.
An example ServiceDescription object might look like the following, indicating that the server supports two
profiles at the same time (see Clause 12.12.3 for further details on service specifications and profiles):
Data Types for Payload| 87
“409”
CodeType string with max 32 and min 1 characters
“Bad_UserAccessDenied”
“02063059-b81c-482b-97d1-
same as NameType (string with max 128 and min 1 d29cbe382ef6”
ShortIdType
characters)
“my-random-id”
“https://example.org/”
“https://provider-
LocatorType string with max 2048 and min 1 characters edc.data.plane/v3.0/shells/aas-
1/submodels/submodel-
1/submodel”
“asset:prop:id=123;idsEndpoint=h
TextType string with max 2048 and min 1 characters
ttp://edc.control.plane/”
4 https://www.w3.org/TR/xmlschema-2/
88 | Asset Administration Shell Specification - Part 2: API
The first clause covers generic status codes that are returned on each request, independent of the
operation’s success or failure. The subsequent clause describes the result object that is returned in case of
failure.
Has
Generic Status Code Meaning Result
Object
Success Success No
Inherits from --
semanticId https://admin-shell.io/aas/API/DataTypes/Result/3/0
Inherits from --
semanticId https://admin-shell.io/aas/API/DataTypes/Message/3/0
Enumeration MessageTypeEnum
semanticId https://admin-shell.io/aas/API/DataTypes/MessageTypeEnum/3/0
Literal Explanation
Warning Used for warnings; warnings may lead to errors in the subsequent execution
10.2.9.3.1 OPERATIONREQUEST
Inherits from --
semanticId https://admin-shell.io/aas/API/DataTypes/OperationRequest/3/0
clientTimeoutDuration Duration indicating when the client expects the duration 0..1
server to have finished execution of the invoked
operation
Data Types for Payload| 91
10.2.9.3.2 BASEOPERATIONRESULT
semanticId https://admin-shell.io/aas/API/DataTypes/BaseOperationResult/3/0
10.2.9.3.3 OPERATIONRESULT
semanticId https://admin-shell.io/aas/API/DataTypes/OperationResult/3/0
Enumeration ExecutionState
semanticId https://admin-shell.io/aas/API/DataTypes/ExecutionState/3/0
Literal Explanation
Timeout The operation has timed out due to given client or server timeout
10.2.9.3.5 OPERATIONHANDLE
Explanation The returned handle of an operation’s asynchronous invocation used to request the
current state of the operation’s execution
Inherits from --
semanticId https://admin-shell.io/aas/API/DataTypes/OperationHandle/3/0
1. Enumeration: Level
The first enumeration Level indicates the depth of the structure of the response or input content.
Table 5 Level Parameters
Value Explanation
Deep (Default) All elements of a requested hierarchy level and all children on all
sublevels are returned. Children in this sense are SubmodelElements
which are contained at the ‘submodelElements’ field of Submodels, the
‘value’ field of SubmodelElementCollections or SubmodelElementLists,
the ‘statements’ field of Entities, or the ‘annotations’ field of
AnnotatedRelationshipElements.
Core Only elements of a requested hierarchy level as well as direct children
are returned. By this, a client can iterate the hierarchy step by step.
Note: level parameters are mapped to the query parameter “?level” in the HTTP/REST APIs, see also Clause 12.8.
2. Enumeration: Content
The second enumeration Content indicates the kind of serialization of the response or input content.
For Content equal to Value see Clause 0 for details.
Table 6 Content Parameters
Value Explanation
Normal (Default) The standard serialization of the model element or child elements is
applied.
Metadata Only metadata of an element or child elements is returned; the value is
not .
Value Only the raw value of the model element or child elements is returned; it
is commonly referred to as ValueOnly-serialization.
Reference Only applicable to Referables. Only the reference to the found element
is returned; potential child elements are ignored.
94 | Asset Administration Shell Specification - Part 2: API
Path Returns the idShort of the requested element and a list of idShort paths
to child elements if the requested element is a Submodel, a
SubmodelElementCollection, a SubmodelElementList, a
AnnotatedRelationshipElement, or an Entity.
Note: level parameters are mapped to path suffixes “/$<content>” in the HTTP/REST APIs, see also Clause 12.8.
3. Enumeration: Extent
The third enumeration Extent indicates to which extent the response or input content is being serialized. At
this stage, the listed values could also be represented as binary values on BLOB-elements. They are,
however, kept as generic extent values for the sake of extension.
Table 7 Extent Parameters
Value Explanation
WithoutBLOBValue Only applicable to BLOB-elements; the BLOB content is not returned.
(Default)
WithBLOBValue Only applicable to BLOB-elements; the BLOB content is returned as
base64-encoded string.
Note: level parameters are mapped to the query parameter “?extent” in the HTTP/REST APIs, see also Clause 12.8.
Submodel Reference No No No
SubmodelElements
No Normal/ No
BasicEventElement
Metadata/Value/Reference
Capability No Normal/Reference No
Operation No Normal/Reference No
DataElements
No Normal/ No
Property
Metadata/Value/Reference
No Normal/ No
MultilanguageProperty
Metadata/Value/Reference
No Normal/ No
Range
Metadata/Value/Reference
No Normal/ No
ReferenceElement
Metadata/Value/Reference
No Normal/ No
RelationshipElement
Metadata/Value/Reference
No Normal/ No
AnnotatedRelationshipElement
Metadata/Value/Reference
No Normal/ WithoutBLOBValue/
Blob Metadata/Value/Reference
WithBLOBValue
No Normal/ No
File
Metadata/Value/Reference
Note: EventPayload defines the necessary information of an event instance sent out or received. It is, however not
part of the AAS and submodel hierarchical structure.
11.4.1 General
If the SerializationModifier Content is set to Value, the ValueOnly-Serialization is used as described below.
96 | Asset Administration Shell Specification - Part 2: API
Note: to date, only the serialization in JSON has been specified. Other serialization formats (e.g. XML, RDF, etc.)
will be defined in future versions of this document.
Note: this clause explains how to return the submodel element’s value only if the SerializationModifier Content is
set to Value.
In many cases, applications using data from Asset Administration Shells already know the Submodel
regarding its structure, attributes, and semantics. Consequently, there is not always a need to receive the
entire model information, which can be requested separately via Content modifier set to Metadata, in each
request since it is constant most of the time. Instead, applications are most likely only interested in the values
of the modelled data. Furthermore, having limited processing power or limited bandwidth, one use case of
this SerializationModifier is to transfer data as efficiently as possible. Semantics and data might be split into
two separate architecture building blocks. For example, a database would suit the needs for querying
semantics, while a device would only provide the data at runtime. Two separate requests make it possible to
build up a user interface (UI) and show new upcoming values highly efficiently.
Values are only available for
o Range is serialized as named JSON object with ${Range/idShort} as the name of the
containing JSON property. The JSON object contains two JSON properties. The first is
Basic Operation Parameters| 97
named “min”. The second is named “max”. Their corresponding values are ${Range/min}
and ${Range/max} in accordance with the data type to value mapping (see table after this
section).
o File and Blob are serialized as named JSON objects with ${File/idShort} or
${Blob/idShort}as the name of the containing JSON property. The JSON object
contains two JSON properties. The first refers to the content type named
${File/contentType} resp. ${Blob/contentType}. The latter refers to the value
named “value” ${File/value} resp. ${Blob/value}. If the original “value” attribute has
no content, the “value” attribute is omitted in the serialized ValueOnly object. The resulting
ValueOnly object is indistinguishable whether it contains File or Blob attributes. Therefore,
the receiver needs to take the type of the target resource into account. Since the receiver
knows in advance if a File or a Blob SubmodelElement shall be manipulated, it can parse
the transferred ValueOnly object accordingly as a File or Blob object.
o Entity is serialized as named JSON object with ${Entity/idShort} as the name of the
containing JSON property. The JSON object contains three JSON properties. The first is
named “statements” ${Entity/statements} and contains an array of the serialized
submodel elements according to their respective serialization mentioned in this clause. The
second is named either “globalAssetId” or “specificAssetId” and contains either a Reference
(see above) or a SpecificAssetId. The third property is named “entityType” and contains a
string representation of ${Entity/entityType}.
o SpecificAssetId is serialized as named JSON object with three JSON properties named as
the attributes of SpecificAssetId.
• Submodel elements defined in the submodel other than the ones mentioned above are not subject to
serialization of that SerializationModifier.
The serialization of submodel element values is described in the following table. The left column “Data Type”
shows the data types which can be used for submodel element values. The data types are defined according
to the W3C XML Schema (https://www.w3.org/TR/xmlschema-2/#built-in-datatypes and
https://www.w3.org/TR/xmlschema-2/#built-in-derived). “Value Range” further explains the possible range of
data values for this data type. The right column comprises related examples of the serialization of submodel
element values.
5 cf. https://openmanufacturingplatform.github.io/sds-documentation/bamm-specification/2.0.0/datatypes.html
Basic Operation Parameters| 99
The following types defined by the XSD and RDF specifications are explicitly omitted for serialization:
Note 1: due to the limits in the representation of numbers in JSON, the maximum integer number that can be used
without losing precision is 2⁵³-1 (defined as Number.MAX_SAFE_INTEGER). Even if the used data type
would allow higher or lower values, they cannot be used if they cannot be represented in JSON. Affected
data types are unbounded numeric types xs:decimal , xs:integer , xs:positiveInteger ,
xs:nonNegativeInteger , xs:negativeInteger , xs:nonPositiveInteger and
the bounded type xs:unsignedLong . Other numeric types are not affected. 6
Note 2: the ValueOnly-serialization uses JSON native data types, AAS in general uses XML Schema Built-in
Datatypes for Simple Data Types and ValueDataType. In case of booleans, JSON accepts only literals true
and false, whereas xs:boolean also accepts 1 and 0, respectively. In case of double, JSON number is used
in ValueOnly, but JSON number does not support INF/-INF (positive Infinity/negative), which is supported by
xs:double. Furthermore, NaN (Not a Number) is also not supported.
(See https://datatracker.ietf.org/doc/html/rfc8259#section-6 )
Note 3: language-tagged strings (rdf:langString) containing single quotes (‘) or double quotes (“) are not supported.
With the SerializationModifier set to Value, the payload is minimized to the following:
Note: in accordance with IETF RFC 5646, the language names match the following regular expression:
^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$
For the same ReferenceElement, the payload is minimized to the following in case the Reference is of
subtype GlobalReference:
For a Blob named “Library”, the payload is minimized to the following if the SerializationModifier Extent is set
to WithoutBLOBValue
If the SerializationModifier Extent is set to WithBlobValue, there is an additional attribute containing the
base64-encoded value:
Basic Operation Parameters| 103
}
},
"required": [
"observed"
],
"additionalProperties": false
},
"BlobValue": {
"type": "object",
"properties": {
"contentType": {
"type": "string",
"minLength": "1",
"maxLength": "100"
},
"value": {
"type": "string",
"minLength": 1
}
},
"required": [
"contentType"
],
"additionalProperties": false
},
"BooleanValue": {
"type": "boolean",
"additionalProperties": false
},
"EntityValue": {
"type": "object",
"properties": {
"statements": {
"$ref": "#/definitions/ValueOnly"
},
"entityType": {
"enum": [
"SelfManagedEntity",
"CoManagedEntity"
]
},
"globalAssetId": {
"type": "string"
},
"specificAssetIds": {
"type": "array",
"items": {
"$ref": "#/definitions/SpecificAssetIdValue"
}
}
},
"required": [
"entityType"
],
"additionalProperties": false
},
"FileValue": {
"type": "object",
"properties": {
"contentType": {
"type": "string",
"minLength": "1",
"maxLength": "100"
},
Basic Operation Parameters| 107
"value": {
"type": "string",
"minLength": "1",
"maxLength": "2000"
}
},
"required": [
"contentType"
],
"additionalProperties": false
},
"Identifier": {
"type": "string"
},
"Key": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false
},
"LangString": {
"type": "object",
"patternProperties": {
"^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$": {
"type": "string"
}
},
"additionalProperties": false
},
"MultiLanguagePropertyValue": {
"type": "array",
"items": {
"$ref": "#/definitions/LangString"
},
"additionalProperties": false
},
"NumberValue": {
"type": "number",
"additionalProperties": false
},
"OperationRequestValueOnly": {
"inoutputArguments": {
"$ref": "#/definitions/ValueOnly"
},
"inputArguments": {
"$ref": "#/definitions/ValueOnly"
},
"timestamp": {
"type": "string",
"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)$"
},
"additionalProperties": false
108 | Asset Administration Shell Specification - Part 2: API
},
"OperationResultValueOnly": {
"executionState": {
"type": "string",
"enum": ["Initiated", "Running", "Completed", "Canceled",
"Failed", "Timeout"]
},
"inoutputArguments": {
"$ref": "#/definitions/ValueOnly"
},
"outputArguments": {
"$ref": "#/definitions/ValueOnly"
},
"additionalProperties": false
},
"PropertyValue": {
"oneOf": [
{
"$ref": "#/definitions/StringValue"
},
{
"$ref": "#/definitions/NumberValue"
},
{
"$ref": "#/definitions/BooleanValue"
}
]
},
"RangeValue": {
"type": "object",
"properties": {
"min": {
"$ref": "#/definitions/RangeValueType"
},
"max": {
"$ref": "#/definitions/RangeValueType"
}
},
"additionalProperties": false
},
"RangeValueType": {
"oneOf": [
{
"$ref": "#/definitions/StringValue"
},
{
"$ref": "#/definitions/NumberValue"
},
{
"$ref": "#/definitions/BooleanValue"
}
]
},
"ReferenceElementValue": {
"$ref": "#/definitions/ReferenceValue"
},
"ReferenceValue": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": ["ModelReference", "ExternalReference"]
},
"keys": {
Basic Operation Parameters| 109
"type": "array",
"items": {
"$ref": "#/definitions/Key"
}
}
},
"additionalProperties": false
},
"RelationshipElementValue": {
"type": "object",
"properties": {
"first": {
"$ref": "#/definitions/ReferenceValue"
},
"second": {
"$ref": "#/definitions/ReferenceValue"
}
},
"required": [
"first",
"second"
],
"additionalProperties": false
},
"SpecificAssetIdValue": {
"type": "object",
"patternProperties": {
"(.*?)": {
"type": "string"
}
}
},
"StringValue": {
"type": "string",
"additionalProperties": false
},
"SubmodelElementCollectionValue": {
"$ref": "#/definitions/ValueOnly"
},
"SubmodelElementListValue": {
"type": "array",
"items": {
"$ref": "#/definitions/SubmodelElementValue"
}
},
"SubmodelElementValue": {
"oneOf": [
{
"$ref": "#/definitions/BasicEventElementValue"
},
{
"$ref": "#/definitions/RangeValue"
},
{
"$ref": "#/definitions/MultiLanguagePropertyValue"
},
{
"$ref": "#/definitions/FileBlobValue"
},
{
"$ref": "#/definitions/ReferenceElementValue"
},
{
"$ref": "#/definitions/RelationshipElementValue"
110 | Asset Administration Shell Specification - Part 2: API
},
{
"$ref": "#/definitions/AnnotatedRelationshipElementValue"
},
{
"$ref": "#/definitions/EntityValue"
},
{
"$ref": "#/definitions/PropertyValue"
},
{
"$ref": "#/definitions/SubmodelElementListValue"
}
]
},
"ValueOnly": {
"propertyNames": {
"pattern": "^[A-Za-z_][A-Za-z0-9_-]*$"
},
"patternProperties": {
"^[A-Za-z_][A-Za-z0-9_-]*$": {
"$ref": "#/definitions/SubmodelElementValue"
}
},
"additionalProperties": false
}
}
}
12 HTTP/REST API
12.1 General
This clause describes the technology mapping to HTTP/REST APIs.
The OpenAPI specification of the HTTP/REST APIs can be found at SwaggerHub.
To clearly separate the different parts of the AAS model, the model has been split into several HTTP/REST
APIs. Combinations then form service specifications and profiles, each materialized as an individual
OpenAPI document.
The schema for the metamodel of Part 1 is available at:
https://app.swaggerhub.com/domains/Plattform_i40/Part1-MetaModel-Schemas/V3.0.2#
This schema includes general objects, which are used in the further defined APIs.
Additional objects are needed for Part 2, e.g. for the ValueOnly-Serialization or the descriptors for the
registry. The related schema of Part 2 objects is available at:
https://app.swaggerhub.com/domains/Plattform_i40/Part2-API-Schemas/V3.0.2#
This schema includes general objects, which are used in the further defined APIs.
The AAS API including the Submodel API, Serialization API, and Self-Description API is available at:
https://app.swaggerhub.com/apis/Plattform_i40/AssetAdministrationShellServiceSpecification/V3.0.2_SSP-
001#
This is a combination of APIs, which forms a service specification according to the Industrie 4.0 Service
Model in Clause 4.1.
The Submodel API including the Serialization API, and Self-Description API is available at:
https://app.swaggerhub.com/apis/Plattform_i40/SubmodelServiceSpecification/V3.0.2_SSP-001#
This is a combination of APIs, which forms a service specification according to the Industrie 4.0 Service
Model in Clause 4.1.
The AAS Repository API including AAS API, Submodel API, Submodel Repository API, Serialization API,
and Self-Description API is available at:
https://app.swaggerhub.com/apis/Plattform_i40/AssetAdministrationShellRepositoryServiceSpecification/V3.
0.2_SSP-001#
This is a combination of APIs, which forms a service specification according to the Industrie 4.0 Service
Model in Clause 4.1.
The Submodel Repository API including Submodel API, Serialization API, and Self-Description API is
available at:
https://app.swaggerhub.com/apis/Plattform_i40/SubmodelRepositoryServiceSpecification/V3.0.2_SSP-001#
This is a combination of APIs, which forms a service specification according to the Industrie 4.0 Service
Model in Clause 4.1.
The Registry and Discovery APIs are independent from the other APIs. An AAS Registry including an AAS
Registry API, Submodel Registry API, and Self-Description API is available at:
https://app.swaggerhub.com/apis/Plattform_i40/AssetAdministrationShellRegistryServiceSpecification/V3.0.2
_SSP-001# and the Submodel Registry at
https://app.swaggerhub.com/apis/Plattform_i40/SubmodelRegistryServiceSpecification/V3.0.2_SSP-001#
The Discovery API including the Self-Description API is available at:
https://app.swaggerhub.com/apis/Plattform_i40/DiscoveryServiceSpecification/V3.0.2_SSP-001#
These are also combinations of individual APIs, which form a service specification according to the Industrie
4.0 Service Model in Clause 4.1.
This clause gives an overview of the HTTP/REST API and describes general design decisions.
HTTP/REST API| 113
• OpenAPI and Swaggerhub shall be used for specification. This leads to the constraint that one
operation can only provide one type of a resulting payload.
• This document assumes version 1.1 of HTTP.
• An endpoint of the HTTP/REST API shall always use HTTPS (Port 443) with an up-to-date level of
encryption.
• The SerializationModifier “content” changes the type the of payload for inputs or results. To ensure
type-safe APIs, this parameter is mapped to the path suffixes “/$value”, “/$metadata”, “/$reference”,
and “/$path”. “content=Normal” is mapped to the path without any “/$<content>” suffix.
• Generic SerializationModifiers changing the size of payload for input or result have been mapped to
corresponding query parameters, e.g. ”?level=” or “?extent=”.
• Query parameters are also used when the type of a resulting payload is a list of objects and the type
remains the same, while the query parameter filters the content of the list, e.g. GetAllSubmodels
with optional query parameters “?semanticId=” or “?idShort=”.
• Complete objects are provided as requested payloads, e.g. a complete submodel. This corresponds
to the generic SerializationModifier content=”Normal”. Reduced objects can be requested by the
path suffix “/$<content>”. See Clause 12.5 for further details. Exceptions to this rule are API
Operations requiring pagination and error cases.
• By default, blobs are not part of the payload. Using ?extent=WithBLOBValue includes blobs for
submodel elements of kind BLOB.
• Submodels define a hierarchical structure. Certain operations use an idShort-path to access deeper
parts in the hierarchy. To easily support this in the REST API, “.” or “[index]” is used as a delimiter in
the idShort-paths. Please see Clause 12.3. Since an idShort-path could include square brackets like
“[index]”, the idShort-path must be URL-encoded.
• Identifiers of Identifiables are base64url-encoded to be passed to the HTTP/REST API (see
https://www.base64url.com/). These may be identifiers for Asset Administration Shells, Submodels,
or Concept Descriptions.
Identifiers may also be passed as base64url-encoded query parameters, e.g. for semanticId or
assetId. Such query parameters are typically used when a list of objects may be retrieved in the
resulting payload. A list of base64url-encoded ids is simply passed as comma-separated query
parameters.
• Please note that base64url-encoding differs slightly from base64-encoding and has been specifically
defined for passing URLs. An appropriate base64url implementation needs to be used for
encoding/decoding. See RFC 4648 for further details.
• When base64url or base64-encoding is mentioned in connection with string values (e.g. Identifiers),
the UTF-8 decoded byte array representation of that string is used for the base64url or base64-
encoding.
• When retrieving AssetAdministrationShells (/shells, /lookup/shells), a query parameter “?assetids=”
can be specified. Such assetId may be a globalAssetId or specificAssetId. The corresponding key-
value-pair is first serialized to JSON and then base64url-encoded. The resulting encoded string is
the value of “?assetids=”.
• In some operations, references are part of the query parameters e.g. “?semanticId=”. The
corresponding reference is first serialized to JSON and then base64url-encoded. The resulting
encoded string is the value of “?semanticId=”.
• Even though the metamodel of the AAS distinguishes between the attributes “semanticId” and
“supplementalSemanticId”, the query parameter “?semanticId” targets both.
• This encoding (serialize to JSON + base64url) is also used for SpecificAssetIds, i.e. for
GetAllAssetAdministrationShellIdsByAssetLink (/lookup/shells). For the example “[{"name":
"globalAssetId","value": "http://example.company/myAsset"},{"name":
"myOwnInternalAssetId","value": "12345ABC"}]”, the resulting base64url-encoded value of the query
parameter is
114 | Asset Administration Shell Specification - Part 2: API
“?assetIds=W3sibmFtZSI6ICJnbG9iYWxBc3NldElkIiwidmFsdWUiOiAiaHR0cDovL2V4YW1wbGUuY
29tcGFueS9teUFzc2V0In0seyJuYW1lIjogIm15T3duSW50ZXJuYWxBc3NldElkIiwidmFsdWUiOiAiM
TIzNDVBQkMifV0”.
If several key-value-pairs are included, all must be part of the key-value-pairs on the server.
• Comparisons of idShort are made case-sensitive in the HTTP/REST API to avoid repeating
toupper()/tolower() conversions.
• GetAll…-API Operations will retrieve a list of objects as the resulting payload, e.g.
GetAllSubmodelElements.
• The splitting of big result sets into smaller pieces, commonly referred to as “pagination”, is executed
using the cursor query parameter. Therefore, result objects for GetAll…-API Operations and others
requiring pagination return their content inside a Result structure. See Clause 12.6 for further
explanations.
• In general, only GET, POST, PUT, PATCH and DELETE are used. POST is used to create new
objects and to invoke operations.
• Some interfaces may be combined in a so-called “superpaths”, e.g. the Asset Administration Shell
Repository Interface may be combined with the AAS Interface and the Submodel Interface. This
results in a complete path like “/shells/{aas-identifier}/submodels/{submodel-identifier}/*”. This is
especially useful when all data is hosted in the same repository. Superpaths are defined as part of
the service specifications and profiles.
• The attribute AssetAdministrationShell/submodels (array of References) maps to the path segment
“/submodel-refs” to distinguish it from the superpath segment “/submodels” (array of Submodels).
• Each interface includes a “/description” operation for self-discovery to provide detailed information
about the interface. A server supporting the HTTP/REST API may also provide a server global
“/description” to provide the information about all available profiles on that server.
• The recursive nature of the reference class (Reference/referredSemanticId points to Reference
again) cannot be represented in SwaggerHub due to a bug in the SwaggerUI code. Therefore, the
additional class “ReferenceParent" has been added. “ReferenceParent" shall not be used in
productive operations and is only a placeholder for “Reference”. When implementing generated
code originating from the SwaggerHub schemas, please delete “ReferenceParent” and add its
attributes to “Reference”.
7 http://semver.org
HTTP/REST API| 115
consistent version. Therefore, a consistent interface description in the form of OpenAPI documents shall be
provided with each major version.
Upcoming compatibility constraints regarding newer versions will be elaborated in further iterations of this
document and related technical descriptions (OpenAPI specification).
API versioning provides a way to deal with different versions of the same API at the same time. This way,
older versions may still be accessible on the same server to provide services to legacy clients without
breaking existing functionality.
There are different solutions regarding API versioning involving URL-based versioning, query parameter-
based versioning, as well as HTTP header-oriented solutions using custom or standard headers.
As different solutions also provide different advantages and disadvantages, URL-based versioning is
recommended for the AAS API. Among other advantages, implementation complexity on clients as well as
servers is rather low and different versions can be easily accessed through browsers without the need for
specific development tools or extensions.
Upcoming implementations of AAS related servers may implement the version prefix “api/v<X>/” to provide
information of the specific major version regarding AAS Part 2 version, where <X> denotes the implemented
major version, e.g. “api/v3/” (see Figure 4). As minor releases of one major version must not contain any
breaking changes, the declaration of the minor version can be omitted.
Nevertheless, AAS servers may decide to use different paths depending on their context, see Figure 5. A
client shall not assume that the pattern from Figure 5 is supported by all servers.
Finally, it is recommended to include an additional "/description” endpoint into each service to further denote
information about APIs / servers capabilities. This endpoint provides further information about the API and its
supported profiles, and in particular the version of the profiles. The “/description” will be extended with
additional information in later versions.
Note: The profiles provided at the “/description” endpoint (see Clause 10.2.6) contain both the major and minor
version declaration.
hierarchy of elements. The root of the idShort-path is always a submodel and the first element in an idShort-
path is always an idShort of a first level SubmodelElement within a Submodel. Technically, the idShort path
is a string and the idShorts are separated by a dot while the SubmodelElementList-indexes are written in
brackets.
The example hierarchy in Figure 6 shows a Submodel with a hierarchical structure of SubmodelElements.
The submodel can be addressed by its global identifier “https://admin-shell.io/sampleSM”. The other
elements in the figure do not have a global identifier; they are, however, uniquely identifiable and
addressable by the submodel identifier and the idShort-path. The idShort-path in this example pointing to the
Property p1 is “sme1.sme2[0].p1”. The hierarchy is built on parent-child relations between the elements.
There are four elements which can aggregate SubmodelElements and create deeper hierarchal structures.
The elements are Submodel, SubmodelElementCollection, SubmodelElementList, and Entity. The fields
used to navigate to a deeper level of the hierarchy can be seen in the following table.
Submodel SubmodelElement
SubmodelElementCollection value
SubmodelElementList value
AnnotatedRelationshipElement annotations
Entity statements
HTTP/REST API| 117
Example requests:
GET /submodels/aHR0cHM6Ly9hZG1pbi1zaGVsbC5pby9zYW1wbGVTTQ/submodel/submodelElements/
sme1.sme2%5B0%5D.p1
Add a new Property to the Entity statements:
POST /submodels/aHR0cHM6Ly9hZG1pbi1zaGVsbC5pby9zYW1wbGVTTQ/submodel/submodelElements/
sme1.sme2%5B0%5D
Note 1: to avoid problems with IRI values in URLs, the identifiers shall be base64url-encoded before using them as
parameters in the HTTP-APIs. IdshortPaths are url-encoded to also allow square brackets.
Note 2: in the example above, “aHR0cHM6Ly9hZG1pbi1zaGVsbC5pby9zYW1wbGVTTQ” is the base64url-encoding
of “https://admin-shell.io/sampleSM”, “sme1.sme2%5B0%5D.p1” is the URL-encoding of “sme1.sme2[0].p1”,
and “sme1.sme2%5B0%5D” is the URL-encoding of “sme1.sme2[0]”.
Identifiables
Submodel submodelElements
SubmodelElements
SubmodelElementCollection value
SubmodelElementList value
BasicEventElement observed
Capability --
Operation --
DataElements
ReferenceElement value
Example
The example shows a JSON serialization of an AssetAdministrationShell object in its full representation and
how it looks like in a metadata representation.
Note: for editorial reasons, some fields which are the same for both representations are omitted.
{
"idShort": "TestAssetAdministrationShell",
"description": […],
"id": {…},
…
"derivedFrom": {…}
"assetInformation": {…},
"submodels": […]
}
{
"idShort": "TestAssetAdministrationShell",
"description": […],
"id": {…}
…
"derivedFrom": {…}
}
}
12.6 Pagination
Pagination is a commonly used pattern to break down potentially long result lists into smaller pieces for a
better control of the network and computational load on both the server and the client side. For instance, the
OData protocol [8] provides guidelines for parameters and behavior on the client and server side. In addition,
the proposals of the RFC 8977 8 present a best practice for web APIs. In the scope of the AAS HTTP/REST
API, the query parameter “cursor” controls, which part of a longer result set is returned.
The AAS client may decide on the appropriate size of the result list through the limit parameter. If it is not
specified, the server must comply to the default value or explicitly indicate it in the response object.
Pagination is currently only defined for the HTTP/REST API. Other APIs might introduce different patterns to
control the response content.
Pagination is controlled by the client via the query parameters “cursor” and “limit”. They can be combined
with all other query parameters as defined in this document and listed in the following table:
Table 14 Parameters for Pagination
Parameter Values Default Explanation
The position from which to resume a result listing. The value may be
base64url-encoded and contain additional information which helps
the server to respond more efficiently. However, the client must not
Cursor string - expect any meaning and treat the cursor value as an arbitrary
character sequence.
The server must interpret a missing cursor as if the client wants to
retrieve the first part of the result set.
Constraint AASa-001: The value of the cursor query parameter must not be empty. If the client does not
know the cursor value, it must omit the whole query parameter in the request.
Note 1: this constraint prohibits that an empty cursor value is sent by the client, e.g. …?cursor="".
Note 2: if the client sends a request without a cursor query parameter, the server must interpret it as if the client
wants to retrieve the results from the very beginning. A client may send the query parameter “limit" without
any cursor. In that case, the server must return at max the specified number of result items from the
beginning.
Pagination requires a defined and consistent sorting. The server implementation must ensure a deterministic
ordering of the result set. For instance, a server must not return an element A before another element C and
in any later request return C before A. This applies in particular if any attribute of either A or C has been
changed between the two requests. However, in case a new element B was created (or deleted), the client
must expect that B and then C are returned after A.
Nevertheless, the inherent order of the result set must stay the same. Implementations may maintain an
internal sorting attribute to ensure this behavior or implement it in any other appropriate manner. The server
is not obligated to inform the client about its ordering schema.
The server informs the client about pagination attributes through the Result object in the request response. In
particular, the Result contains the cursor value for the next page. Additional information, e.g. the overall
number of result items, may also be part of it.
Explanation An object connecting the actual list of returned items with metadata information to, e.g.
fetch the next part of the result set.
Inherits from --
paging_metadata Additional information for the client to, e.g. fetch PagingMetadata 1
the next part of the result set.
120 | Asset Administration Shell Specification - Part 2: API
Explanation Additional information for the client to, e.g. fetch the next part of the result set.
Inherits from --
cursor The cursor for the next part of the result set. No string 0..1
cursor attribute means that the end of the result
set has been reached.
12.7 Payload
The payload is generated from the technology-neutral specification as described in Part 1 of the Asset
Administration Shell Series for JSON [1].
The serialization of JSON values is described in Clause .
Additional classes needed for payload of the HTTP/REST API specification can be found in Clause 10.2.
• For Content=Value, the requested object shall always be serialized to an unnamed JSON Object or
Array. This means that the response object must not include the object’s idShort at the root level.
• If Level=Core and Content=Value, only the requested object and the direct children without their
value (empty value) will be returned in value serialization. If a direct child is a
SubmodelElementCollection, "<SubmodelElementCollection/idShort>": {} will be
returned. If a direct child is a SubmodelElementList, "<SubmodelElementList/idShort>": []
will be returned.
• The combination of Content=Metadata and Extent=WithBLOBValue is not allowed.
• If parameter Content is set to "Metadata" then Level shall not be used. A server shall respond with a
ClientErrorBadRequest in this case.
• The combination of Level=Deep and Content=Reference is not allowed.
• Modifiers cannot be used for POST operations.
In addition, the modifiers can also be used for PUT operations. They define how the request content is
delivered and have the same semantics as in the related GET operation. Only Content=Reference and
Content=Path are not possible for PUT.
Submodel Interface
GetSubmodel GET /submodel ?level=deep/core
path-suffix=
$metadata/$value/$reference/$path or no
suffix for normal
?extent=WithoutBLOBValue/WithBLOBVal
ue
PutSubmodel PUT /submodel
PatchSubmodel PATCH /submodel path-suffix=$metadata/$value or no path
for normal
GetAllSubmodelElements GET /submodel/submodel- ?level=deep/core
elements path-suffix=
$metadata/$value/$reference/$path or no
suffix for nomal
?extent=WithoutBLOBValue/WithBLOBVal
ue
Pagination
GetSubmodelElementByPath GET /submodel/submodel- use separated idshort path of this element
elements/{idShortPath} ?level=deep/core
path-suffix=
$metadata/$value/$reference/$path or no
suffix for nomal
122 | Asset Administration Shell Specification - Part 2: API
?extent=WithoutBLOBValue/WithBLOBVal
ue
URL-encoded IdShortPath
GetFileByPath GET /submodel/submodel- use separated idShort path of this element
elements/{idShortPath}/at URL-encoded IdShortPath
tachment
PutFileByPath PUT /submodel/submodel- use separated idShort path of this element
elements/{idShortPath}/at URL-encoded IdShortPath
tachment
DeleteFileByPath DELETE /submodel/submodel- use separated idShort path of this element
elements/{idShortPath}/at URL-encoded IdShortPath
tachment
PostSubmodelElement POST /submodel/submodel- SerializationModifiers are not used with
elements POST
PatchSubmodelElementValue /submodel/submodel-
PATCH use separated idShort path of this element;
ByPath elements/{idShortPath}/$ see Clause for values
value path-suffix=$value
URL-encoded IdShortPath
DeleteSubmodelElementByPa DELETE /submodel/submodel- use separated idshort path of this element
th elements/{idShortPath} URL-encoded IdShortPath
InvokeOperationSync POST /submodel/submodel- path-suffix=$value or no suffix for normal
elements/{idShortPath}/in URL-encoded IdShortPath
voke
InvokeOperationAsync POST /submodel/submodel- get operationHandle
elements/{idShortPath} path-suffix=$value or no suffix for normal
/invoke-async URL-encoded IdShortPath
GetOperationAsyncResult GET /submodel/submodel- handleId=operationHandle
elements/{idShortPath} path-suffix=$value or no suffix for normal
/operation-results/ URL-encoded IdShortPath
{handleId}
Submodel Repository
Interface
GetAllSubmodels GET /submodels path-suffix=
$metadata/$value/$reference/$path or no
suffix for normal
Pagination
GetAllSubmodelsBySemanticI GET /submodels ?semanticId=<base64url-encoded value of
d the semanticId>
path-suffix=
$metadata/$value/$reference/$path or no
suffix for normal
Pagination
GetAllSubmodelsByIdShort GET /submodels path-suffix=
$metadata/$value/$reference/$path or no
suffix for normal
Pagination
GetSubmodelById GET /submodels/{submodelId path-suffix=$metadata or no suffix for
entifier} normal
base64url-encoded identifier
PostSubmodel POST /submodels
PutSubmodelById PUT /submodels/{submodelId base64url-encoded identifier
entifier}
PatchSubmodelById PATCH /submodels/{submodelId path-suffix=$metadata/$value or no suffix
entifier} for normal
DeleteSubmodelById DELETE /submodels/{submodelId base64url-encoded identifier
entifier}
SubmodelInterface * /submodels/{submodelId superpath as defined in service
entifier}/* specification or profile
Concept Description
Repository Interface
GetAllConceptDescriptions GET /concept-descriptions Pagination
GetConceptDescriptionById GET /concept- base64url-encoded identifier
descriptions/{cdIdentifier} Pagination
GetAllConceptDescriptionsByI GET /concept-descriptions Pagination
dShort
GetAllConceptDescriptionsByI GET /concept-descriptions base64url-encoded identifier
sCaseOf Pagination
GetAllConceptDescriptionsBy GET /concept-descriptions base64url-encoded identifier
DataSpecificationReference Pagination
PostConceptDescription POST /concept-descriptions/
Serialization Interface
GenerateSerializationByIds GET /serialization base64url-encoded identifier;
AcceptHeader: application/aasx+xml or
application/json oder application/xml
Descriptor Interface
GetDescription GET /description Provide additional information on interface
endpoint; may also be used at a server
endpoint to list all descriptions available on
that server
The client informs the server whether it is interested in a synchronous (asynchronous) call by targeting the
/invoke (/invoke-async) endpoint. In case of a synchronous interaction, the communication channel is kept
open until the server has processed the request and responds with an OperationResult object, or a timeout
or other kind of error occurs.
126 | Asset Administration Shell Specification - Part 2: API
In the asynchronous pattern, the server immediately responds with an Accepted (status code: 202) message
containing the link to an endpoint where the client can fetch status information about his request (see Figure
). This status endpoint is also located at the same SubmodelElement “Operation”, followed by the path
segments "/operation-status/{handleId}”.
In case the request is incorrect and the server already recognizes it, the server responds directly with the
according status code, e.g. 400. If the server can only recognize the error during later processing and not at
the time it receives the request, it responds with an Accepted (202) message at first. Hence, a received
Accepted message does not guarantee the client that its request is valid in every case.
If the server has not finished processing the request, the status endpoint responds with an
BaseOperationResult object with the attribute “executionState” set to “Running”. As soon as the processing
is finished, the status endpoints deliver a Found (HTTP status code 302) response with the location of the
result in the Location response header. The result is, similar to the status information, provided at the same
SubmodelElement “Operation”, followed by the path segments "/operation-result/{handleId}”.
In case incorrect inputs have been provided by the client but the server was only able to recognize this
during processing, or if the server perceived any other error during processing, the server must still provide
the OperationResult object with status code 200 and set the attribute “executionState” to “Failed”.
Note: the invocation of the SubmodelElement “Operation” may also be conducted in the “ValueOnly” content. In this
case, the "/$value” path segment is added to the previously mentioned endpoints.
12.11.1 PackageDescription
Explanation The package description consists of a system-wide unique packageId and its
corresponding Asset Administration Shell identifiers. The packageId is used to identify
the AASX package at the AASX file server. The package description is used to list the
Asset Administration Shells in a given AASX package. This class is not part of the
metamodel.
Inherits from --
Serialization API
Description API
Submodel API
Service Specifications:
12.12.1 Profiles
Service specifications are further refined in profiles, governing which API operations, modifiers, and path
combinations are supported. The following clauses describe each service specification and present their
predefined profiles. Each profile is unambiguously identified and represented through a normative OpenAPI
document. The different OpenAPI profiles of one ServiceSpecification share the same title attribute but with
different versions. The version attribute contains both the major and minor version as well as the profile
identifier. A profile identifier is defined as:
https://admin-shell.io/aas/API/3/0/<service specification name>/SSP-<profile number>
The name of the service specification ends with "ServiceSpecification".
The supported service specification or profile can be discovered at the /description endpoint. This endpoint
will return the related profile string.
Additional profiles might be introduced in future versions of this document.
130 | Asset Administration Shell Specification - Part 2: API
Note: in the following, only the last part (<name of service specification>/SSP-<profile number>) is used in the text
for better readability, e.g. “AssetAdministrationShellServiceSpecification/SSP-001” instead of “https://admin-
shell.io/aas/API/3/0/AssetAdministrationShellServiceSpecification/SSP-001”.
Feature Appearance
SerializationFormat JSON
132 | Asset Administration Shell Specification - Part 2: API
Pagination supported
See:
https://app.swaggerhub.com/apis/Plattform_i40/AssetAdministrationShellServiceSpecification/V3.0.2_SSP-
001#
HTTP/REST API| 133
Feature Appearance
SerializationFormat JSON
Pagination supported
See:
https://app.swaggerhub.com/apis/Plattform_i40/AssetAdministrationShellServiceSpecification/V3.0.2_SSP-
001#
Feature Appearance
SerializationFormat JSON
Pagination supported
See: https://app.swaggerhub.com/apis/Plattform_i40/SubmodelServiceSpecification/V3.0.2_SSP-001#
Feature Appearance
SerializationFormat JSON
Pagination supported
See: https://app.swaggerhub.com/apis/Plattform_i40/SubmodelServiceSpecification/V3.0.2_SSP-002#
136 | Asset Administration Shell Specification - Part 2: API
Feature Appearance
SerializationFormat JSON
See: https://app.swaggerhub.com/apis/Plattform_i40/SubmodelServiceSpecification/V3.0.2_SSP-003AASX
File Server Service Specification
AasxFileServerServiceSpecification/SSP-001 The full feature set of the AASX File Server Service
Specification
Feature Appearance
Pagination supported
See: https://app.swaggerhub.com/apis/Plattform_i40/AasxFileServerServiceSpecification/V3.0.2_SSP-001
Feature Appearance
SerializationFormat JSON
Pagination Supported
See:
https://app.swaggerhub.com/apis/Plattform_i40/AssetAdministrationShellRegistryServiceSpecification/V3.0.2
_SSP-001
HTTP/REST API| 139
Feature Appearance
SerializationFormat JSON
Pagination supported
See:
https://app.swaggerhub.com/apis/Plattform_i40/AssetAdministrationShellRegistryServiceSpecification/V3.0.2
_SSP-002
140 | Asset Administration Shell Specification - Part 2: API
Feature Appearance
SerializationFormat JSON
Pagination supported
See: https://app.swaggerhub.com/apis/Plattform_i40/SubmodelRegistryServiceSpecification/V3.0.2_SSP-
001
HTTP/REST API| 141
Feature Appearance
SerializationFormat JSON
Pagination Supported
See: https://app.swaggerhub.com/apis/Plattform_i40/SubmodelRegistryServiceSpecification/V3.0.2_SSP-
002
142 | Asset Administration Shell Specification - Part 2: API
Feature Appearance
SerializationFormat JSON
See: https://app.swaggerhub.com/apis/Plattform_i40/DiscoveryServiceSpecification/V3.0.2_SSP-001
HTTP/REST API| 143
Feature Appearance
GetOperationAsyncStatus
GetOperationAsyncResult
AAS Serialization API:
GenerateSerializationByIds
Description API:
GetDescription
SerializationFormat JSON
Pagination supported
See:
https://app.swaggerhub.com/apis/Plattform_i40/AssetAdministrationShellRepositoryServiceSpecification/V3.
0.2_SSP-001
146 | Asset Administration Shell Specification - Part 2: API
Feature Appearance
SerializationFormat JSON
Pagination supported
See:
https://app.swaggerhub.com/apis/Plattform_i40/AssetAdministrationShellRepositoryServiceSpecification/V3.
0.2_SSP-002
HTTP/REST API| 147
Feature Appearance
SerializationFormat JSON
Pagination supported
See: https://app.swaggerhub.com/apis/Plattform_i40/SubmodelRepositoryServiceSpecification/V3.0.2_SSP-
001
HTTP/REST API| 149
Feature Appearance
SerializationFormat JSON
Pagination supported
See: https://app.swaggerhub.com/apis/Plattform_i40/SubmodelRepositoryServiceSpecification/V3.0.2_SSP-
002
Feature Appearance
SerializationFormat JSON
Pagination supported
See: https://app.swaggerhub.com/apis/Plattform_i40/SubmodelRepositoryServiceSpecification/V3.0.2_SSP-
003
Feature Appearance
SerializationFormat JSON
Pagination supported
See: https://app.swaggerhub.com/apis/Plattform_i40/SubmodelRepositoryServiceSpecification/V3.0.2_SSP-
004
152 | Asset Administration Shell Specification - Part 2: API
Feature Appearance
SerializationFormat JSON
Pagination Supported
See:
https://app.swaggerhub.com/apis/Plattform_i40/ConceptDescriptionRepositoryServiceSpecification/V3.0.2_S
SP-001
12.13 Interactions
Interactions describe the sequence of calls of operations by a client application to achieve a defined goal in a
use case. In the following exemplary interaction sequences are depicted.
Currently, only the key use case “Access a submodel in a distributed system” with focus on a completely
decentralized Industry 4.0 system or dataspace is described.
Some constraints and assumptions are made according to the configuration and qualities of the system.
Constraints and assumptions for calling an AAS and a submodel operation by a client application:
HTTP/REST API| 153
• The calling application hast to be aware that endpoints may change at any time. If the application has
cached an endpoint that is no longer vivid, the application needs to start the interaction to resolve the
appropriate endpoint again from the beginning.
• Endpoints for infrastructure interfaces like AAS registries are known at design time of the client
application or configured manually before start-up.
• The asset Ids (either the global asset ID or some specific asset IDs) are known to the client application.
• Access to any API is allowed only if the caller is authenticated
• Response to any API call takes access rules as defined for the services into account, e.g. access rules
for the AASs, the Submodels, SubmodelElements within a Submodel.
In Figure 8 below, the interaction starts with a client application resolving the interface endpoint of an Asset
Administration Shell registry with a known asset ID. The AAS registry provides the AAS Descriptor object
belonging to this asset ID and containing the Submodel Descriptors of the Submodels, which are part of the
related AAS. Both descriptor kinds, those of the Asset Administration Shell and those of the Submodels,
contain endpoint information for the respective AAS and Submodel Repositories. AAS interface operations –
independent of the underlying protocol – are used to retrieve the AAS from the AAS repository answering at
one of the supplied endpoints. In the sequence shown in Figure 8, one submodel of this AAS is also
provided through the same repository. For the second submodel, however, only the submodel identifier is
provided by the AAS registry, while the endpoint information is empty. Therefore, the client application must
execute another look-up at a dedicated Submodel Registry, which responds with one Submodel Descriptor
object. Equipped with this information, the client application locates the stand-alone Submodel Repository
and downloads the second submodel.
Figure 8 Interactions for Client Applications using AAS and Submodel Interfaces (independent Submodel Registry)
154 | Asset Administration Shell Specification - Part 2: API
Figure 9 shows a slight variant of the scenario in Figure 8. The AAS Registry only returns the AAS Descriptor
without any Submodel Descriptors. The client application retrieves the AAS from the discovered AAS
Repository endpoint and learns about its submodel references. Using these references, the client can ask a
Submodel Registry, in this case also hosted by the repository server, for the respective Submodel
Descriptors. It understands that the Submodels are also available at the same server and downloads them
by sending requests to the Submodel Interface.
Figure 9 Interaction for Client Application using AAS and Submodel Interfaces (included Submodel Registry)
The difference between Interface and API Operations is outlined in Figure 10. This sequence translates the
interaction on the interface level of Figure 8, which is protocol-independent and therefore can be
implemented in several different manners, to the specific HTTP API Operations. The generic operations are
replaced with HTTP requests, e.g. “GetAasDescriptorById” with “GET /shell-descriptors/<aas-id>”. The
returned objects are shortened for better readability. The first request to the Submodel API shows the
concatenated path (“/shells/<aas-id>/aas” + “/submodels/<submodel-id>”) and illustrates how contained
submodels can be provided natively through an AAS API.
HTTP/REST API| 155
Figure 10 Interaction for Client Application using AAS and Submodels (for HTTP API Operations)
12.14 Security
The AAS metamodel includes a security metamodel, which is defined in the chapter “Overview Metamodel of
Administration Shell w.r.t. Security”. This chapter was part of “Details of the Asset Administration Shell Part
1” until version 3.0 RC02. Since Part 1 has been split for the release of version 3.0, this chapter will become
the basis of “Specification of the Asset Administration Shell. Part 4: Security”. In addition to the security
metamodel, Part 4 will define e.g. authentication, further details about authorization, and signature of data.
Authentication is mandatory. Depending on the ecosystem the AAS uses, different authentication
mechanisms might be in place. This clause explains one exemplary authentication mechanisms, which has
been developed by the security working group (AG3) of Plattform Industrie 4.0. Other authentication services
(e.g. Username/Password, DID=Decentralized Identifiers, Verifiable Credentials, EDC=Eclipse Data Space
Connector, or IDS=International Data Spaces) may also be used to receive an access token for
authorization.
The following paragraphs describe the most important steps for token-based authentication of the
HTTP/REST APIs. For more details, see “Secure Downloadservice” (https://www.plattform-
i40.de/PI40/Redaktion/EN/Downloads/Publikation/secure_downloadservice.html). 11 gives an overview.
156 | Asset Administration Shell Specification - Part 2: API
A client application uses a client certificate to create a certificate chain. The certificate chain can be checked
on the authentication server by the corresponding Root CA certificate, which is signed by a certification
authority (CA). The client application sends the certificate chain to the authentication server as token request
by a JSON Web Token (JWT). The JWT is signed by the client’s private key corresponding to the client
certificate (JWT = Data + Signature).
If the authentication is approved, the client application receives an access token from the authentication
server (not shown in 11).
Such an access token contains attributes from the client certificate (e.g. username, email address) which will
be sent as HTTP header bearer token to the AAS server application. The latter will check, whether the
access token has been signed by a trusted authentication server and will make the authorization according
to the AAS security metamodel.
A running demo is explained in “Secure Downloadservice”. A corresponding server can be seen on
https://admin-shell-io.com/5011/ with a related security AAS at the bottom.
The AAS security metamodel does not deal with authentication; it assumes that the user is already
authenticated. The example security AAS is only created for demonstration purposes and is not
standardized. Since the version of the AASX Package Explorer used does not yet support the AAS security
metamodel, the required information in subsequent steps like the access permission rules for AAS are
modelled as a submodel.
The different security and authentication steps are explained in the video https://admin-shell-
io.com/screencasts/security/Industrie_40_Security_with_AASX_Server.mp4.
HTTP/REST API| 157
API code can be created for both servers and clients in various programming languages.
Known issues include the following:
• When generating the aspnetcore server stub for the Asset Administration Shell API, the operation
PutFileByPath is not generated automatically and must be added manually.
• When generating the aspnetcore server stub for the AASX File Server API, the operations
PostAASXPackage and PutAASXPackageById are not generated automatically and must be added
manually.
The SwaggerHub code generator development team is not part of the AAS activities and has been informed
about these issues.
158 | Asset Administration Shell Specification - Part 2: API
Note: attributes having a default value are always considered to be optional; there is always a value for the attribute
because the default value is used for initialization in this case.
Oper1 Human-understandable description of the operation of the interface. Only major input
and output information shall be described, no individual request and result parameters.
Note: all words in the service operation name are written together in italics without a blank
in between. The first letter of the first word is lower case, all other words are upper
case.
Operation Name: Name of the operation: all individual words in the operation name are capitalized
•…
Convention: all words in the class name are written together in italics without a
blank in between. The first letter of the first word and all other words are written in
upper case letters.
Inherits from Name of the class this class inherits from
semanticId The unique identifier of this class
{
"type": "Property",
"value": "CurrentValue"
}
]
}
},
"MyRelationship": {
"first": {
"type": "ModelReference",
"keys": [
{
"type": "Submodel",
"value": "http://customer.com/demo/aas/1/1/1234859590"
},
{
"type": "Property",
"value": "PlusPole"
}
]
},
"second": {
"type": "ModelReference",
"keys": [
{
"type": "Submodel",
"value": "http://customer.com/demo/aas/1/0/1234859123490"
},
{
"type": "Property",
"value": "MinusPole"
}
]
}
},
"MyAnnotatedRelationship": {
"first": {
"type": "ModelReference",
"keys": [
{
"type": "Submodel",
"value": "http://customer.com/demo/aas/1/1/1234859590"
},
{
"type": "Property",
"value": "PlusPole"
}
]
},
"second": {
"type": "ModelReference",
"keys": [
{
"type": "Submodel",
"value": "http://customer.com/demo/aas/1/0/1234859123490"
},
{
"type": "Property",
"value": "MinusPole"
}
]
},
"annotation": [
{
Summary and Outlook| 165
"AppliedRule": "TechnicalCurrentFlowDirection"
}
]
},
"MySubmodelElementIntegerPropertyList": [
1,
2,
30,
50
],
"MySubmodelElementFileList": [
{
"contentType": "application/pdf",
"value": "MyFirstFile.pdf"
},
{
"contentType": "application/pdf",
"value": "MySecondFile.pdf"
}
],
"MySubmodelElementCollection":
{
"myStringElement": "That’s a string",
"myIntegerElement": 5,
"myBooleanElement": true
}
}
166 | Asset Administration Shell Specification - Part 2: API
"idShort": "RotationSpeed",
"semanticId": {
"semanticId": {
"keys": [ {
"keys": [ {
"type": "GlobalReference",
"type":
"value":
"GlobalReference",
"http://purl.org/iot/vocab/iot-
"value": taxonomy-lite#RotationalSpeed"
"http://purl.org/iot/vocab/iot- } ],
taxonomy-lite#RotationalSpeed"
"type": "ExternalReference"
} ],
}
"type": "ExternalReference" } ]
}, }
"value": [ {
"modelType": "Property",
"idShort":
"MaxRotationSpeed",
"category": "PARAMETER",
"semanticId": {
"keys": [ {
"type":
"ConceptDescription",
"value": "0173-
1#02-BAA120#008"
168 | Asset Administration Shell Specification - Part 2: API
} ],
"type":
"ExternalReference"
},
"valueType": "xs:int",
"value": "5000"
} ]
} ]
}
"keys": [ {
"type": "GlobalReference",
"value": "0173-1#01-AFZ615#016"
} ],
"type": "ExternalReference"
}
}
Summary and Outlook| 169
"type": "ExternalReference"
}
}
If applied to the Property, i.e. idShortPath If applied to the Property, i.e. idShortPath
“RotationSpeed.MaxRotationSpeed”: “RotationSpeed.MaxRotationSpeed”:
5000 5000
"value":
"http://i40.customer.com/type/1/1/7A71
04BDAB57E184"
} ],
"type": "ModelReference"
}
Summary and Outlook| 171
Note: IdShortPaths always start at the first Note: The SubmodelElementCollection “Rotation-
SubmodelElement. Speed” is the only direct child of the
Submodel, therefore, it’s the only entry.
[
[
"RotationSpeed",
"RotationSpeed"
"RotationSpeed.MaxRotationSpeed"
]
]
[ [
"RotationSpeed", "RotationSpeed",
"RotationSpeed.MaxRotationSpeed" "RotationSpeed.MaxRotationSpeed"
] ]
If applied to the Property inside the If applied to the Property inside the
SubmodelElementCollection: SubmodelElementCollection:
[ [
"RotationSpeed.MaxRotationSpeed" "RotationSpeed.MaxRotationSpeed"
] ]
"value": "http://purl.org/iot/vocab/iot-taxonomy-lite#RotationalSpeed"
} ],
"type": "ExternalReference"
},
"value": [ {
"modelType": "Property",
"idShort": "MaxRotationSpeed",
"category": "PARAMETER",
"semanticId": {
"keys": [ {
"type": "ConceptDescription",
"value": "0173-1#02-BAA120#008"
} ],
"type": "ExternalReference"
},
"valueType": "xs:int",
"value": "5000"
} ]
} ]
}
174 | Asset Administration Shell Specification - Part 2: API
"valueType": "xs:int",
"value": "5000"
}
"type": "ExternalReference"
}
}
5000
Summary and Outlook| 177
Annex D. Backus-Naur-Form
The Backus-Naur form (BNF) – a meta-syntax notation for context-free grammars – is used to define
grammars. For more information see Wikipedia9.
A BNF specification is a set of derivation rules, written as
<symbol> ::= __expression__
where:
• <symbol> is a nonterminal (variable) and the __expression__ consists of one or more sequences of
either terminal or nonterminal symbols,
• ::= means that the symbol on the left must be replaced with the expression on the right,
• more sequences of symbols are separated by the vertical bar "|", indicating a choice, the whole being
a possible substitution for the symbol on the left,
• symbols that never appear on a left side are terminals, while symbols that appear on a left side are
non-terminals and are always enclosed between the pair of angle brackets <>,
• terminals are enclosed with quotation marks: "text". "" is an empty string,
• optional items are enclosed in square brackets: [<item-x>],
• items existing 0 or more times are enclosed in curly brackets are suffixed with an asterisk (*) such as
<word> ::= <letter> {<letter>}*,
• Items existing 1 or more times are suffixed with an addition (plus) symbol, +, such as <word> ::=
{<letter>}+,
• round brackets are used to explicitly to define the order of expansion to indicate precedence, example:
( <symbol1> | <symbol2> ) <symbol3>,
• text without quotation marks is an informal explanation of what is expected; this text is cursive if
grammar is non-recursive and vice versa.
9 https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form
178 | Asset Administration Shell Specification - Part 2: API
Example:
<contact-address> ::= <name> "e-mail addresses:" <e-mail-Addresses>
<e-mail-Addresses> ::= {<e-mail-Address>}*
<e-mail-Addresse> ::= <local-part> "@" <domain>
<name> ::= characters
<local-part> ::= characters conformant to local-part in RFC 5322
<domain> ::= characters conformant to domain in RFC 5322
Annex E. Bibliography
[1] Specification of the Asset Administration Shell. Part 1: Metamodel, Version 3.0. Industrial
Digital Twin Association (IDTA), March 2023. Online. Available:
https://industrialdigitaltwin.org/en/content-hub
[2] Specification of the Asset Administration Shell. Part 3a: Data Specification – IEC 61360,
Version 3.0. Industrial Digital Twin Association (IDTA), March 2023. Online. Available:
https://industrialdigitaltwin.org/en/content-hub
[3] Specification of the Asset Administration Shell. Part 5: Package File Format, Version 3.0.
Industrial Digital Twin Association (IDTA), March 2023. Online. Available:
https://industrialdigitaltwin.org/en/content-hub
[5] RFC 8820: URI Design and Ownership. Internet Engineering Task Force (IETF), 2020.
Online. Available: https://tools.ietf.org/html/rfc8820
[6] DIN SPEC 91406: “Automatic identification of physical objects and information on
physical objects in IT systems, particularly IoT systems”. December 2019. Online.
Available: https://www.beuth.de/de/technische-regel/din-spec-91406/314564057
[7] Decentralized Identifiers (DIDs) v1.0. Edited by Manu Sporny, Amy Guy, Markus
Sabadello, and Drummond Reed. W3C Recommendation. Online. Available:
https://www.w3.org/TR/did-core
[8] OData Version 4.01 Part 1: Protocol. Edited by Michael Pizzo, Ralf Handl, and Martin
Zurmuehl. OASIS Standard. Online. Available: https://docs.oasis-
open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html
180 | Asset Administration Shell Specification - Part 2: API
Change Notes
1. General
• * Means not backward compatible
• (*) means not backward compatible but just renaming
• Remove “format: byte” from OpenAPI files, as this annotation enforces base64 encodings while
base64url is actually required. Remove the QueryParameter “level” from all requests ending with
/$metadata in the OpenAPI files.
• Change the values for the ServiceDescription class from enum to a list of strings in the OpenAPI
definition for the Part 2 classes.
• Clause 11.4.2 and 11.4.3: Change the ValueOnly attribute “annotation” to “annotations” and its value
from an array to ValueOnly for the AnnotatedRelationshipElementValue class in the examples and
schema to match the “AnnotatedRelationshipElement/annotations” attribute. Furthermore,
“AnnotatedRelationshipElementValue/annotations“ is optional now.
Summary and Outlook| 181
• Clause 11.4.2: Add serialisation rule for empty "FileValue/value" and "BlobValue/value".
• Clause 11.4.3: "FileValue/value" and "BlobValue/value" are optional but non-empty attributes.
• Clause 11.4.3: "EntityValue/statements" made optional.
• Clause 11.4.3: Fix maxLength for "FileValue/value" from 200 to 2000 characters.
• Clause 12.2: Remove the design decision for the ReferenceParent class, also removing it from the
OpenAPI file.
• Clause 12.3: Relax the requirements for API paths and version declaration.
• (Editorial) Clause 12.8: Added constraint on the return object for ValueOnly requests and that the
Level modifier is undefined for Metadata requests.
• Adopt the V3.0.1 bugfix changes of the AAS Metamodel in the OpenAPI files and references.
Minor:
• (Editorial) Fix links to SwaggerHub in Clause 4.6 and Clause 12
• (Editorial) Clause 8.2.2: Correct the Note that explains the usage of "globalAssetId” for the “assetIds”
parameter.
• (Editorial) ServiceSpecificationProfileEnum: Corrected explanations for Submodel Repository and
Registry profile entries
• (Editorial) Clause 11.4.2: Add “Submodel” to the list of possible ValueOnly objects and add more
details how SubmodelElementLists have to be serialized.
• (Editorial) Clause 11.4.4: Added sentence explaining where the idShortPath has to start.
• (Editorial) Clause 12.2: Correct example for GetAllAssetAdministrationShellIdsByAssetLink
• (Editorial) Correct Note 1 in Clause 12.4: “[…] IdshortPaths are base64url-encoded …” to “[…]
IdshortPaths are url-encoded …”
• (Editorial) Clause 12.13: Corrected the list of constraints.
• (Editorial) Annex C.2: Adjusted and extended the examples for GETs on Metadata, Path, and Value
• (Editorial) Annex C.3: Adjusted the examples for PATCH on Value
• Added Location header for POSTs that create a new resource, according to RFC 9110 Section
15.3.2
• Correcting definitions of SerialisationModifiers and Pagination parameters in the OpenAPI files.
• Cleaning of incorrectly located API Operations from the OpenAPI files.
• Removing several outdated/inconsistently named OpenAPI files from the Github Release.
• Fixing the values of the ServiceDescription/profiles enum in the OpenAPI Domain.
GetAASX Removed
GetSerializationByIds GenerateSerializationByIds Renamed
GetAllAASXPackageIds New
GetAASXByPackageId New
PostAASXPackage New
PutAASXByPackageId New
DeleteAASXByPackageId New
PutAssetAdministrationShell PutAssetAdministrationShellDescr Changed Naming pattern
Descriptor iptorById byId
PostAssetAdministrationDescripto New
r
PutSubmodelDescriptor PutSubmodelDescriptorById Changed Naming pattern
byId
PostSubmdeoDescriptor New
GetAllAssetAdministrationSh GetAssetAdministrationShellById Changed Naming pattern
ellsById resource singular
PostAssetAdministrationShell New
PutAssetAdministrationShell PutAssetAdministrationShellById Changed Naming pattern
byId
PutSubmodel PutSubmodelById Changed Naming pattern
byId
PostSubmodel New
GetAllAssetAdministrationSh Removed substituted by
ellIdsByAssetId GetAllAssetAdminis
trationShellIdsByAs
setLink and
GetAllAssetLinksBy
Id
PutAssetId Removed Substituted by
PutAllAssetLinksBy
Id and
DeleteAllAssetLinks
ById
GetAllAssetAdministrationShellIds New Before:
ByAssetLink GetAllAssetAdminis
trationShellIdsByAs
setId
GetAllAssetLinksById New
PutAllAssetLinksById New
DeleteAllAssetLinksById New
GetAllSubmodelIdsBySeman Removed
ticId
Summary and Outlook| 189
www.industrialdigitaltwin.org