@open-resource-discovery/specification 1.13.0 → 1.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,6 +3,7 @@
3
3
  "$schema": "http://json-schema.org/draft-07/schema#",
4
4
  "$id": "https://open-resource-discovery.org/spec-v1/interfaces/Document.schema.json#",
5
5
  "title": "Ord Document",
6
+ "x-ums-type": "ignore",
6
7
  "type": "object",
7
8
  "properties": {
8
9
  "$schema": {
@@ -36,10 +37,11 @@
36
37
  "1.10",
37
38
  "1.11",
38
39
  "1.12",
39
- "1.13"
40
+ "1.13",
41
+ "1.14"
40
42
  ],
41
43
  "examples": [
42
- "1.13"
44
+ "1.14"
43
45
  ]
44
46
  },
45
47
  "description": {
@@ -177,6 +179,15 @@
177
179
  "$ref": "#/definitions/DataProduct"
178
180
  }
179
181
  },
182
+ "agents": {
183
+ "type": "array",
184
+ "description": "Array of all AI Agents that are described in this ORD document.",
185
+ "x-introduced-in-version": "1.14.0",
186
+ "x-feature-status": "beta",
187
+ "items": {
188
+ "$ref": "#/definitions/Agent"
189
+ }
190
+ },
180
191
  "integrationDependencies": {
181
192
  "type": "array",
182
193
  "description": "Array of all integration dependencies that are described in this ORD document.",
@@ -248,6 +259,7 @@
248
259
  "Package": {
249
260
  "type": "object",
250
261
  "title": "Package",
262
+ "x-ums-type": "root",
251
263
  "description": "A [**Package**](../concepts/grouping-and-bundling#package) organizes a set of related resources together, by publishing and catalog presentation concerns.\n\nThe Package can also be used to indicate which products or vendors provided the packaged resources.\nFor partner or customer content, the Package can indicate this via the `vendor` and `partOfProducts` assignments.\nIn any case, the Package `ordID` namespace MUST reflect the namespace of the providing application (which hosts the resource), not the resource definition owner, which could be a customer or partner.\n\nA Package SHOULD contain at least one resource. Avoid empty Packages.\n\nThe Package assignment of a resource MAY change, so consumers MUST not rely on this to be stable.\n\nA Package does not have a `visibility` property.\nWhether it is displayed is decided by the fact, whether it contains any visible resources according to the visibility role of the aggregator.\n\nTo learn more about the concept and further guidance, see [Package](../concepts/grouping-and-bundling#package).",
252
264
  "properties": {
253
265
  "ordId": {
@@ -660,6 +672,7 @@
660
672
  "ConsumptionBundle": {
661
673
  "type": "object",
662
674
  "title": "Consumption Bundle",
675
+ "x-ums-type": "root",
663
676
  "description": "A [**Consumption Bundle**](../concepts/grouping-and-bundling#consumption-bundle) groups APIs and Events together that can be consumed with the credentials and auth mechanism.\nIdeally it also includes instructions and details how to request access and credentials for resources.\n\nFor more documentation and guidance how to correctly this correctly, see [Consumption Bundle details](../concepts/grouping-and-bundling#consumption-bundle).\n\nA Consumption Bundle SHOULD have at least one association with a resource (0..n). Avoid empty Consumption Bundles.\nA Consumption Bundle MUST NOT contain APIs and Events that are NOT defined in the ORD document(s) returned\nby the system instance that defines the Consumption Bundle.\n\nPlease note that some ORD consumer use cases MAY depend on Consumption Bundle assignments to work with the resources.\n\nTo learn more about the concept, see [Consumption Bundle](../concepts/grouping-and-bundling#consumption-bundle).",
664
677
  "properties": {
665
678
  "ordId": {
@@ -742,19 +755,19 @@
742
755
  },
743
756
  "visibility": {
744
757
  "type": "string",
745
- "description": "The visibility states who is allowed to \"see\" the described resource or capability.",
758
+ "description": "Defines metadata access control - which categories of consumers are allowed to discover and access the resource and its metadata.\n\nThis controls who can see that the resource exists and retrieve its metadata level information.\nIt does NOT control runtime access to the resource itself - that is managed separately through authentication and authorization mechanisms.\n\nUse this to prevent exposing internal implementation details to inappropriate consumer audiences.",
746
759
  "oneOf": [
747
760
  {
748
761
  "const": "public",
749
- "description": "Publicly visible to customers and 3rd parties.\nUsually this includes an contract on the API stability, e.g. the [SAP API Deprecation Policy](https://help.sap.com/viewer/84b35b9c39b247e3ba2a31f02beee46d/Cloud/en-US/5cbfda5a9efe4e97a3e24ddaf7ec5c16.html)."
762
+ "description": "Metadata can be discovered and accessed by anyone, including customers, partners, and unauthenticated external parties.\n\nPublic resources typically come with stability guarantees, expressed via versioning and follow formal API lifecycle management. For more details see [Version and Lifecycle](../index.md#version-and-lifecycle) section.\nand follow formal API lifecycle management and deprecation policies.\n\nExample: A REST API that customers use to integrate with your SaaS product."
750
763
  },
751
764
  {
752
765
  "const": "internal",
753
- "description": "Visible to other applications within the same [vendor](#vendor).\nHowever, they are not officially exposed and communicated to customers and 3rd parties.\nThey might not come with the same guarantees on API stability.\n\nInternal resources MUST NOT be made available to consumers without checking the necessary access permissions, e.g., a public API Catalog.\nInternal resources MAY be published through an internal API Catalog if the access permissions are ensured by it."
766
+ "description": "Metadata can only be discovered and accessed by vendor internal consumers (e.g. applications or services of the same vendor).\nMUST NOT be made available to external parties or vendor customers.\n\nInternal resources are intended for integration between a vendors own applications and services.\nAPI stability and maturity are explicitly defined via the `releaseStatus` property, which is a separate concern from visibility.\n\nInternal resources MUST NOT be made available without checking the necessary access permissions.\nInternal resources MAY be published through an internal API Catalog if access permissions are ensured by it."
754
767
  },
755
768
  {
756
769
  "const": "private",
757
- "description": "Visible only to the provider application or service, usually within the same system namespace / system type.\n\nPrivate resources MUST NOT be made available to public consumers or consumers outside of the \"private\" scope of the described application."
770
+ "description": "Metadata should not be discoverable outside the application / service's own deployment scope (e.g., outside of the provider application or the same system namespace / system type).\nUsed for metadata completeness when describing implementation details or dependencies.\n\nPrivate resources usually have no stability guarantees and can change or be removed at any time.\nThese are typically implementation details not meant for consumption by other services.\n\nExample: Services only used within a microservice architecture or APIs that are only used for the own UIs, not for general consumption.\n\nPrivate resources MUST NOT be made discoverable or accessible outside the application / service's own deployment scope."
758
771
  }
759
772
  ]
760
773
  },
@@ -808,6 +821,7 @@
808
821
  "ConsumptionBundleReference": {
809
822
  "type": "object",
810
823
  "title": "Consumption Bundle Reference",
824
+ "x-ums-type": "embedded",
811
825
  "description": "Reference to a Consumption Bundle.\n\nThis is a complex object to allow additional properties / selections to be attached.",
812
826
  "properties": {
813
827
  "ordId": {
@@ -836,6 +850,7 @@
836
850
  "ApiResource": {
837
851
  "type": "object",
838
852
  "title": "Api Resource",
853
+ "x-ums-type": "root",
839
854
  "description": "The API Resource provides a high-level description of an exposed API.\nYou can find more information, such as the API resource definitions, in the links in the table below.\n\nAn API Resource bundles multiple endpoints and resources together.\nThey share the same API namespace and lifecycle (API major version).\nHowever, the exact granularity of this is up to the implementer of the API.\nAs a consequence, an API resource MUST NOT bundle together endpoints from different API versions or namespaces.\n\nA common practice is to bundle endpoints that are based on the same domain or Business Object.\n\nPlease note that APIs can be described, but still be [`disabled`](#api-resource_disabled).\n\nIf the API is not created or owned by the user of the system or by third parties (like partners), it MUST be assigned to dedicated [Packages](#package) that state this the ownership via the `vendor` property.",
840
855
  "properties": {
841
856
  "ordId": {
@@ -981,43 +996,50 @@
981
996
  "2022-12-19T15:47:04+00:00"
982
997
  ]
983
998
  },
999
+ "abstract": {
1000
+ "type": "boolean",
1001
+ "default": false,
1002
+ "x-introduced-in-version": "1.13.0",
1003
+ "x-feature-status": "beta",
1004
+ "description": "Indicates that the resource serves as interface only and cannot be called directly, similar to the abstract keyword in programming languages like Java.\n\nAbstract resources define contracts that other resources can declare compatibility with through the `compatibleWith` property.\n\nMore details can be found on the [Compatibility](../concepts/compatibility) concept page."
1005
+ },
984
1006
  "visibility": {
985
1007
  "type": "string",
986
- "description": "The visibility states who is allowed to \"see\" the described resource or capability.",
1008
+ "description": "Defines metadata access control - which categories of consumers are allowed to discover and access the resource and its metadata.\n\nThis controls who can see that the resource exists and retrieve its metadata level information.\nIt does NOT control runtime access to the resource itself - that is managed separately through authentication and authorization mechanisms.\n\nUse this to prevent exposing internal implementation details to inappropriate consumer audiences.",
987
1009
  "oneOf": [
988
1010
  {
989
1011
  "const": "public",
990
- "description": "Publicly visible to customers and 3rd parties.\nUsually this includes an contract on the API stability, e.g. the [SAP API Deprecation Policy](https://help.sap.com/viewer/84b35b9c39b247e3ba2a31f02beee46d/Cloud/en-US/5cbfda5a9efe4e97a3e24ddaf7ec5c16.html)."
1012
+ "description": "Metadata can be discovered and accessed by anyone, including customers, partners, and unauthenticated external parties.\n\nPublic resources typically come with stability guarantees, expressed via versioning and follow formal API lifecycle management. For more details see [Version and Lifecycle](../index.md#version-and-lifecycle) section.\nand follow formal API lifecycle management and deprecation policies.\n\nExample: A REST API that customers use to integrate with your SaaS product."
991
1013
  },
992
1014
  {
993
1015
  "const": "internal",
994
- "description": "Visible to other applications within the same [vendor](#vendor).\nHowever, they are not officially exposed and communicated to customers and 3rd parties.\nThey might not come with the same guarantees on API stability.\n\nInternal resources MUST NOT be made available to consumers without checking the necessary access permissions, e.g., a public API Catalog.\nInternal resources MAY be published through an internal API Catalog if the access permissions are ensured by it."
1016
+ "description": "Metadata can only be discovered and accessed by vendor internal consumers (e.g. applications or services of the same vendor).\nMUST NOT be made available to external parties or vendor customers.\n\nInternal resources are intended for integration between a vendors own applications and services.\nAPI stability and maturity are explicitly defined via the `releaseStatus` property, which is a separate concern from visibility.\n\nInternal resources MUST NOT be made available without checking the necessary access permissions.\nInternal resources MAY be published through an internal API Catalog if access permissions are ensured by it."
995
1017
  },
996
1018
  {
997
1019
  "const": "private",
998
- "description": "Visible only to the provider application or service, usually within the same system namespace / system type.\n\nPrivate resources MUST NOT be made available to public consumers or consumers outside of the \"private\" scope of the described application."
1020
+ "description": "Metadata should not be discoverable outside the application / service's own deployment scope (e.g., outside of the provider application or the same system namespace / system type).\nUsed for metadata completeness when describing implementation details or dependencies.\n\nPrivate resources usually have no stability guarantees and can change or be removed at any time.\nThese are typically implementation details not meant for consumption by other services.\n\nExample: Services only used within a microservice architecture or APIs that are only used for the own UIs, not for general consumption.\n\nPrivate resources MUST NOT be made discoverable or accessible outside the application / service's own deployment scope."
999
1021
  }
1000
1022
  ]
1001
1023
  },
1002
1024
  "releaseStatus": {
1003
1025
  "type": "string",
1004
- "description": "The `releaseStatus` specifies the stability of the resource and its external contract.",
1026
+ "description": "Defines the maturity level and stability commitment for the resource's API contract (interface, behavior, data models).\n\nThis indicates whether the resource may undergo backward-incompatible changes. It helps consumers understand the risk\nof depending on the resource and whether it's suitable for production use.\n\nNote: This is independent of `visibility` and does not imply availability guarantees or SLAs - it concerns only the API contract stability.\n\nSee [Lifecycle](../index.md#lifecycle) and [Compatibility](../concepts/compatibility.md) for more details.",
1005
1027
  "oneOf": [
1006
1028
  {
1007
1029
  "const": "beta",
1008
- "description": "The contract for the resource is beta and may not be meant for productive use.\nResources of `beta` status MAY be changed or deleted at the providers discretion."
1030
+ "description": "The API contract has no stability guarantees. Breaking changes may occur at any time without notice or deprecation period.\n\nNot recommended for production use unless you can tolerate breaking changes. Suitable for experimentation, early adopters,\nand feedback gathering. Resources of `beta` status MAY be changed or removed at the provider's discretion."
1009
1031
  },
1010
1032
  {
1011
1033
  "const": "active",
1012
- "description": "Resource is meant for productive use and provides a stable API contract."
1034
+ "description": "The API contract is stable and recommended for production use.\n\nBreaking changes will only be introduced through proper deprecation cycles or new major versions,\nfollowing versioning and compatibility policies. Consumers can rely on active resources with confidence."
1013
1035
  },
1014
1036
  {
1015
1037
  "const": "deprecated",
1016
- "description": "Resource has been deprecated.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (aka. decommissioned / removed) in the future, through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
1038
+ "description": "The resource is still functional but scheduled for removal. No new development should depend on it.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (decommissioned/removed) in the future through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
1017
1039
  },
1018
1040
  {
1019
1041
  "const": "sunset",
1020
- "description": "Resource has been sunset, but is still described.\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
1042
+ "description": "The resource has been decommissioned and is no longer available at runtime. This entry exists for historical reference only.\n\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
1021
1043
  }
1022
1044
  ],
1023
1045
  "examples": [
@@ -1123,32 +1145,32 @@
1123
1145
  },
1124
1146
  {
1125
1147
  "const": "odata-v2",
1126
- "description": "[OData Version 2.0](https://www.odata.org/documentation/odata-version-2-0/) API.\nAn API Resource definition of type `edmx` MUST be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `edmx`, `csdl-json`, `openapi-v2`, `openapi-v3`, `openapi-v3.1+`, `sap-csn-interop-effective-v1` or `custom`."
1148
+ "description": "[OData Version 2.0](https://www.odata.org/documentation/odata-version-2-0/) API.\nAn API Resource definition of type `edmx` MUST be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `edmx`, `csdl-json`, `openapi-v2`, `openapi-v3`, `openapi-v3.1+`, `sap-csn-interop-effective-v1`, `custom` or any valid [Specification ID](../index.md#specification-id)."
1127
1149
  },
1128
1150
  {
1129
1151
  "const": "odata-v4",
1130
- "description": "[OData Version 4](https://www.odata.org/documentation/) API.\nAn OData V4 API MUST be described via a Common Schema Definition Language (CSDL).\nAn API Resource definition of type `edmx` MUST be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `edmx`, `csdl-json`, `openapi-v2`, `openapi-v3`, `openapi-v3.1+`, `sap-csn-interop-effective-v1` or `custom`."
1152
+ "description": "[OData Version 4](https://www.odata.org/documentation/) API.\nAn OData V4 API MUST be described via a Common Schema Definition Language (CSDL).\nAn API Resource definition of type `edmx` MUST be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `edmx`, `csdl-json`, `openapi-v2`, `openapi-v3`, `openapi-v3.1+`, `sap-csn-interop-effective-v1`, `custom` or any valid [Specification ID](../index.md#specification-id)."
1131
1153
  },
1132
1154
  {
1133
1155
  "const": "rest",
1134
- "description": "Generic [REST](https://en.wikipedia.org/wiki/Representational_state_transfer) API.\nPlease not that while OData is also a REST API, the most precise/opinionated `apiProtocol` MUST be chosen.\nAn API Resource definition of type `openapi-v3` (RECOMMENDED) or another appropriate option SHOULD be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `openapi-v2`, `openapi-v3`, `openapi-v3.1+`, `raml-v1`, `sap-csn-interop-effective-v1` or `custom`."
1156
+ "description": "Generic [REST](https://en.wikipedia.org/wiki/Representational_state_transfer) API.\nPlease not that while OData is also a REST API, the most precise/opinionated `apiProtocol` MUST be chosen.\nAn API Resource definition of type `openapi-v3` (RECOMMENDED) or another appropriate option SHOULD be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `openapi-v2`, `openapi-v3`, `openapi-v3.1+`, `raml-v1`, `sap-csn-interop-effective-v1`, `custom` or any valid [Specification ID](../index.md#specification-id)."
1135
1157
  },
1136
1158
  {
1137
1159
  "const": "graphql",
1138
- "description": "[GraphQL](https://graphql.org/) API.\nAn API Resource definition of type `graphql-sdl` SHOULD be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `graphql-sdl`, `sap-csn-interop-effective-v1` or `custom`."
1160
+ "description": "[GraphQL](https://graphql.org/) API.\nAn API Resource definition of type `graphql-sdl` SHOULD be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `graphql-sdl`, `sap-csn-interop-effective-v1`, `custom` or any valid [Specification ID](../index.md#specification-id)."
1139
1161
  },
1140
1162
  {
1141
1163
  "const": "delta-sharing",
1142
1164
  "x-introduced-in-version": "1.8.0",
1143
- "description": "[Delta Sharing](https://github.com/delta-io/delta-sharing/blob/main/PROTOCOL.md) Protocol, where one API Resource corresponds to a share.\nFor each API Resource definition: `type` MUST ONLY be set to `sap-csn-interop-effective-v1` or to `custom`.\nFor delta-sharing APIs the resource definition MAY be omitted, as the protocol itself allows for metadata discovery at runtime."
1165
+ "description": "[Delta Sharing](https://github.com/delta-io/delta-sharing/blob/main/PROTOCOL.md) Protocol, where one API Resource corresponds to a share.\nFor each API Resource definition: `type` MUST ONLY be set to `sap-csn-interop-effective-v1`, `custom` or any valid [Specification ID](../index.md#specification-id).\nFor delta-sharing APIs the resource definition MAY be omitted, as the protocol itself allows for metadata discovery at runtime."
1144
1166
  },
1145
1167
  {
1146
1168
  "const": "soap-inbound",
1147
- "description": "[SOAP](https://en.wikipedia.org/wiki/SOAP) API that provides inbound interfaces.\nAn API Resource definition of type `wsdl-v2` (RECOMMENDED) or `wsdl-v1` MUST be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `wsdl-v1`, `wsdl-v2` or `custom`."
1169
+ "description": "[SOAP](https://en.wikipedia.org/wiki/SOAP) API that provides inbound interfaces.\nAn API Resource definition of type `wsdl-v2` (RECOMMENDED) or `wsdl-v1` MUST be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `wsdl-v1`, `wsdl-v2`, `custom` or any valid [Specification ID](../index.md#specification-id)."
1148
1170
  },
1149
1171
  {
1150
1172
  "const": "soap-outbound",
1151
- "description": "[SOAP](https://en.wikipedia.org/wiki/SOAP) API that provides/describes outbound interfaces for async communication.\nAn API Resource definition of type `wsdl-v2` (RECOMMENDED) or `wsdl-v1` MUST be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `wsdl-v1`, `wsdl-v2` or `custom`."
1173
+ "description": "[SOAP](https://en.wikipedia.org/wiki/SOAP) API that provides/describes outbound interfaces for async communication.\nAn API Resource definition of type `wsdl-v2` (RECOMMENDED) or `wsdl-v1` MUST be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `wsdl-v1`, `wsdl-v2`, `custom` or any valid [Specification ID](../index.md#specification-id)."
1152
1174
  },
1153
1175
  {
1154
1176
  "const": "mcp",
@@ -1156,7 +1178,7 @@
1156
1178
  },
1157
1179
  {
1158
1180
  "const": "websocket",
1159
- "description": "Generic [WebSocket](https://datatracker.ietf.org/doc/html/rfc6455) Protocol.\nSince WebSocket is very generic, it is important to also define or least describe which semantics are concretely used, e.g. via an `implementationStandard`.\nThe API Resource definitions `type` MUST ONLY be set to `custom`."
1181
+ "description": "Generic [WebSocket](https://datatracker.ietf.org/doc/html/rfc6455) Protocol.\nSince WebSocket is very generic, it is important to also define or least describe which semantics are concretely used, e.g. via an `implementationStandard`.\nThe API Resource definitions `type` MUST ONLY be set to `custom` or any valid [Specification ID](../index.md#specification-id)."
1160
1182
  },
1161
1183
  {
1162
1184
  "const": "a2a",
@@ -1165,11 +1187,13 @@
1165
1187
  },
1166
1188
  {
1167
1189
  "const": "sap-rfc",
1168
- "description": "[SAP RFC](https://help.sap.com/viewer/753088fc00704d0a80e7fbd6803c8adb/202009.000/en-US/4888068ad9134076e10000000a42189d.html) (Remote Function Call) is the standard SAP interface for communication between SAP systems.\nRFC calls a function to be executed in a remote system.\nAn API Resource definition of type `sap-rfc-metadata-v1` MUST be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `sap-rfc-metadata-v1` or `custom`."
1190
+ "x-introduced-in-version": "1.5.0",
1191
+ "description": "[SAP RFC](https://help.sap.com/viewer/753088fc00704d0a80e7fbd6803c8adb/202009.000/en-US/4888068ad9134076e10000000a42189d.html) (Remote Function Call) is the standard SAP interface for communication between SAP systems.\nRFC calls a function to be executed in a remote system.\nAn API Resource definition of type `sap-rfc-metadata-v1` MUST be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `sap-rfc-metadata-v1`, `custom` or any valid [Specification ID](../index.md#specification-id)."
1169
1192
  },
1170
1193
  {
1171
1194
  "const": "sap-sql-api-v1",
1172
- "description": "SAP SQL API that follows the [SQL interface specification for SAP ecosystem](https://github.com/SAP/sql-interface-specification).\nAn API Resource definition of type `sap-sql-api-definition-v1` MUST be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `sap-sql-api-definition-v1`, `sap-csn-interop-effective-v1` or `custom`."
1195
+ "x-introduced-in-version": "1.9.2",
1196
+ "description": "SAP SQL API that follows the [SQL interface specification for SAP ecosystem](https://github.com/SAP/sql-interface-specification).\nAn API Resource definition of type `sap-sql-api-definition-v1` SHOULD be provided.\nFor each API Resource definition: `type` MUST ONLY be set to `sap-sql-api-definition-v1`, `sap-csn-interop-effective-v1`, `custom` or any valid [Specification ID](../index.md#specification-id)."
1173
1197
  },
1174
1198
  {
1175
1199
  "const": "sap-ina-api-v1",
@@ -1227,15 +1251,19 @@
1227
1251
  ]
1228
1252
  },
1229
1253
  "compatibleWith": {
1254
+ "x-introduced-in-version": "1.13.0",
1255
+ "x-feature-status": "beta",
1230
1256
  "type": "array",
1231
- "description": "A reference to the interface (API contract) that this API implements.\nServes as a declaration of compatible implementation of API contract, effectively functioning as an \"implementationOf\" relationship.\n\nMUST be a valid reference to an (usually external) [API Resource](#api-resource) ORD ID.\n\nAll APIs that share the same `compatibleWith` value MAY be treated the same or similar by a consumer client.",
1257
+ "description": "A reference to the interface (API contract) and its maximum version that this API implements. Even if the interface contract evolves compatible, this resource will not be compatible with versions beyond the specified one.\n\nServes as a declaration of compatible implementation of API contract, effectively functioning as an \"implementationOf\" relationship. The data that compatible APIs return follow the same schema, but itself can be different.\nThis means that if one API is returning 1 record for a dedicated request, a compatible API could return multiple and different records, as long as they adhere to the same schema.\n\nMUST be a valid reference to an (usually external) [API Resource](#api-resource) ORD ID.\n\nAll APIs that share the same `compatibleWith` value MAY be treated the same or similar by a consumer client.\n\nMore details can be found on the [Compatibility](../concepts/compatibility) concept page.",
1232
1258
  "items": {
1233
- "type": "string",
1234
- "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(apiResource):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$"
1259
+ "$ref": "#/definitions/ApiCompatibility"
1235
1260
  },
1236
1261
  "examples": [
1237
1262
  [
1238
- "sap.s4com:apiResource:SomeSharedContract:v1"
1263
+ {
1264
+ "ordId": "sap.s4com:apiResource:SomeSharedContract:v1",
1265
+ "maxVersion": "1.2"
1266
+ }
1239
1267
  ]
1240
1268
  ]
1241
1269
  },
@@ -1652,6 +1680,7 @@
1652
1680
  "EventResource": {
1653
1681
  "type": "object",
1654
1682
  "title": "Event Resource",
1683
+ "x-ums-type": "root",
1655
1684
  "description": "The event resource provides a high-level description of a collection of related Events. More detailed information, such as the event resource definitions, are provided in links in the table below.\nWhich events are considered \"related\" is up to the implementer. A common practice is to bundle events that are based on the same resource/Business Object. It is also an option to bundle all available events into a single event resource/event catalog.\nPlease note that event resources can be described, but still be [`disabled`](#event-resource_disabled).\nIf the event resource is not created or owned by the user / customer of the system or by partners / third parties, it MUST be assigned to dedicated [Packages](#package) that state this the ownership via the `vendor` property.",
1656
1685
  "properties": {
1657
1686
  "ordId": {
@@ -1799,43 +1828,50 @@
1799
1828
  "2022-12-19T15:47:04+00:00"
1800
1829
  ]
1801
1830
  },
1831
+ "abstract": {
1832
+ "type": "boolean",
1833
+ "default": false,
1834
+ "x-introduced-in-version": "1.13.0",
1835
+ "x-feature-status": "beta",
1836
+ "description": "Indicates that the resource serves as interface only and cannot be called directly, similar to the abstract keyword in programming languages like Java.\n\nAbstract resources define contracts that other resources can declare compatibility with through the `compatibleWith` property.\n\nMore details can be found on the [Compatibility](../concepts/compatibility) concept page."
1837
+ },
1802
1838
  "visibility": {
1803
1839
  "type": "string",
1804
- "description": "The visibility states who is allowed to \"see\" the described resource or capability.",
1840
+ "description": "Defines metadata access control - which categories of consumers are allowed to discover and access the resource and its metadata.\n\nThis controls who can see that the resource exists and retrieve its metadata level information.\nIt does NOT control runtime access to the resource itself - that is managed separately through authentication and authorization mechanisms.\n\nUse this to prevent exposing internal implementation details to inappropriate consumer audiences.",
1805
1841
  "oneOf": [
1806
1842
  {
1807
1843
  "const": "public",
1808
- "description": "Publicly visible to customers and 3rd parties.\nUsually this includes an contract on the API stability, e.g. the [SAP API Deprecation Policy](https://help.sap.com/viewer/84b35b9c39b247e3ba2a31f02beee46d/Cloud/en-US/5cbfda5a9efe4e97a3e24ddaf7ec5c16.html)."
1844
+ "description": "Metadata can be discovered and accessed by anyone, including customers, partners, and unauthenticated external parties.\n\nPublic resources typically come with stability guarantees, expressed via versioning and follow formal API lifecycle management. For more details see [Version and Lifecycle](../index.md#version-and-lifecycle) section.\nand follow formal API lifecycle management and deprecation policies.\n\nExample: A REST API that customers use to integrate with your SaaS product."
1809
1845
  },
1810
1846
  {
1811
1847
  "const": "internal",
1812
- "description": "Visible to other applications within the same [vendor](#vendor).\nHowever, they are not officially exposed and communicated to customers and 3rd parties.\nThey might not come with the same guarantees on API stability.\n\nInternal resources MUST NOT be made available to consumers without checking the necessary access permissions, e.g., a public API Catalog.\nInternal resources MAY be published through an internal API Catalog if the access permissions are ensured by it."
1848
+ "description": "Metadata can only be discovered and accessed by vendor internal consumers (e.g. applications or services of the same vendor).\nMUST NOT be made available to external parties or vendor customers.\n\nInternal resources are intended for integration between a vendors own applications and services.\nAPI stability and maturity are explicitly defined via the `releaseStatus` property, which is a separate concern from visibility.\n\nInternal resources MUST NOT be made available without checking the necessary access permissions.\nInternal resources MAY be published through an internal API Catalog if access permissions are ensured by it."
1813
1849
  },
1814
1850
  {
1815
1851
  "const": "private",
1816
- "description": "Visible only to the provider application or service, usually within the same system namespace / system type.\n\nPrivate resources MUST NOT be made available to public consumers or consumers outside of the \"private\" scope of the described application."
1852
+ "description": "Metadata should not be discoverable outside the application / service's own deployment scope (e.g., outside of the provider application or the same system namespace / system type).\nUsed for metadata completeness when describing implementation details or dependencies.\n\nPrivate resources usually have no stability guarantees and can change or be removed at any time.\nThese are typically implementation details not meant for consumption by other services.\n\nExample: Services only used within a microservice architecture or APIs that are only used for the own UIs, not for general consumption.\n\nPrivate resources MUST NOT be made discoverable or accessible outside the application / service's own deployment scope."
1817
1853
  }
1818
1854
  ]
1819
1855
  },
1820
1856
  "releaseStatus": {
1821
1857
  "type": "string",
1822
- "description": "The `releaseStatus` specifies the stability of the resource and its external contract.",
1858
+ "description": "Defines the maturity level and stability commitment for the resource's API contract (interface, behavior, data models).\n\nThis indicates whether the resource may undergo backward-incompatible changes. It helps consumers understand the risk\nof depending on the resource and whether it's suitable for production use.\n\nNote: This is independent of `visibility` and does not imply availability guarantees or SLAs - it concerns only the API contract stability.\n\nSee [Lifecycle](../index.md#lifecycle) and [Compatibility](../concepts/compatibility.md) for more details.",
1823
1859
  "oneOf": [
1824
1860
  {
1825
1861
  "const": "beta",
1826
- "description": "The contract for the resource is beta and may not be meant for productive use.\nResources of `beta` status MAY be changed or deleted at the providers discretion."
1862
+ "description": "The API contract has no stability guarantees. Breaking changes may occur at any time without notice or deprecation period.\n\nNot recommended for production use unless you can tolerate breaking changes. Suitable for experimentation, early adopters,\nand feedback gathering. Resources of `beta` status MAY be changed or removed at the provider's discretion."
1827
1863
  },
1828
1864
  {
1829
1865
  "const": "active",
1830
- "description": "Resource is meant for productive use and provides a stable API contract."
1866
+ "description": "The API contract is stable and recommended for production use.\n\nBreaking changes will only be introduced through proper deprecation cycles or new major versions,\nfollowing versioning and compatibility policies. Consumers can rely on active resources with confidence."
1831
1867
  },
1832
1868
  {
1833
1869
  "const": "deprecated",
1834
- "description": "Resource has been deprecated.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (aka. decommissioned / removed) in the future, through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
1870
+ "description": "The resource is still functional but scheduled for removal. No new development should depend on it.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (decommissioned/removed) in the future through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
1835
1871
  },
1836
1872
  {
1837
1873
  "const": "sunset",
1838
- "description": "Resource has been sunset, but is still described.\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
1874
+ "description": "The resource has been decommissioned and is no longer available at runtime. This entry exists for historical reference only.\n\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
1839
1875
  }
1840
1876
  ],
1841
1877
  "examples": [
@@ -1947,15 +1983,19 @@
1947
1983
  ]
1948
1984
  },
1949
1985
  "compatibleWith": {
1986
+ "x-introduced-in-version": "1.13.0",
1987
+ "x-feature-status": "beta",
1950
1988
  "type": "array",
1951
- "description": "Declares this event resource is a compatible implementation of the referenced contract.\nThis is also sometimes known as [Service Provider Interface](https://en.wikipedia.org/wiki/Service_provider_interface).\n\nMUST be a valid reference to an (usually external) [Event Resource](#event-resource) ORD ID.\n\nAll event resources that share the same `compatibleWith` value MAY be treated the same or similar by a consumer client.",
1989
+ "description": "A reference to the interface (event contract) and its maximum version that this event implements. Even if the interface contract evolves compatible, this resource will not be compatible with versions beyond the specified one.\n\nServes as a declaration of compatible implementation of event contract, effectively functioning as an \"implementationOf\" relationship. The data that compatible events return follow the same schema, but itself can be different.\nThis means that if one event is returning 1 record for a dedicated request, a compatible event could return multiple and different records, as long as they adhere to the same schema.\n\nAll events that share the same `compatibleWith` value MAY be treated the same or similar by a consumer client.\n\nMore details can be found on the [Compatibility](../concepts/compatibility) concept page.",
1952
1990
  "items": {
1953
- "type": "string",
1954
- "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(eventResource):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$"
1991
+ "$ref": "#/definitions/EventCompatibility"
1955
1992
  },
1956
1993
  "examples": [
1957
1994
  [
1958
- "sap.s4com:eventResource:SomeSharedContract:v1"
1995
+ {
1996
+ "ordId": "sap.s4:eventResource:BillofMaterialEvents:v1",
1997
+ "maxVersion": "1.2"
1998
+ }
1959
1999
  ]
1960
2000
  ]
1961
2001
  },
@@ -2320,6 +2360,7 @@
2320
2360
  "EntityType": {
2321
2361
  "type": "object",
2322
2362
  "title": "Entity Type",
2363
+ "x-ums-type": "root",
2323
2364
  "description": "An [**Entity Type**](../concepts/grouping-and-bundling#entity-type) describes either a business concept / term or an underlying conceptual model.\nThe same entity type can be exposed through one or multiple API and events resources.\n\nTo learn more about the concept, see [Entity Type](../concepts/grouping-and-bundling#entity-type).",
2324
2365
  "x-introduced-in-version": "1.8.0",
2325
2366
  "properties": {
@@ -2458,41 +2499,41 @@
2458
2499
  },
2459
2500
  "visibility": {
2460
2501
  "type": "string",
2461
- "description": "The visibility states who is allowed to \"see\" the described resource or capability.",
2502
+ "description": "Defines metadata access control - which categories of consumers are allowed to discover and access the resource and its metadata.\n\nThis controls who can see that the resource exists and retrieve its metadata level information.\nIt does NOT control runtime access to the resource itself - that is managed separately through authentication and authorization mechanisms.\n\nUse this to prevent exposing internal implementation details to inappropriate consumer audiences.",
2462
2503
  "oneOf": [
2463
2504
  {
2464
2505
  "const": "public",
2465
- "description": "Publicly visible to customers and 3rd parties.\nUsually this includes an contract on the API stability, e.g. the [SAP API Deprecation Policy](https://help.sap.com/viewer/84b35b9c39b247e3ba2a31f02beee46d/Cloud/en-US/5cbfda5a9efe4e97a3e24ddaf7ec5c16.html)."
2506
+ "description": "Metadata can be discovered and accessed by anyone, including customers, partners, and unauthenticated external parties.\n\nPublic resources typically come with stability guarantees, expressed via versioning and follow formal API lifecycle management. For more details see [Version and Lifecycle](../index.md#version-and-lifecycle) section.\nand follow formal API lifecycle management and deprecation policies.\n\nExample: A REST API that customers use to integrate with your SaaS product."
2466
2507
  },
2467
2508
  {
2468
2509
  "const": "internal",
2469
- "description": "Visible to other applications within the same [vendor](#vendor).\nHowever, they are not officially exposed and communicated to customers and 3rd parties.\nThey might not come with the same guarantees on API stability.\n\nInternal resources MUST NOT be made available to consumers without checking the necessary access permissions, e.g., a public API Catalog.\nInternal resources MAY be published through an internal API Catalog if the access permissions are ensured by it."
2510
+ "description": "Metadata can only be discovered and accessed by vendor internal consumers (e.g. applications or services of the same vendor).\nMUST NOT be made available to external parties or vendor customers.\n\nInternal resources are intended for integration between a vendors own applications and services.\nAPI stability and maturity are explicitly defined via the `releaseStatus` property, which is a separate concern from visibility.\n\nInternal resources MUST NOT be made available without checking the necessary access permissions.\nInternal resources MAY be published through an internal API Catalog if access permissions are ensured by it."
2470
2511
  },
2471
2512
  {
2472
2513
  "const": "private",
2473
- "description": "Visible only to the provider application or service, usually within the same system namespace / system type.\n\nPrivate resources MUST NOT be made available to public consumers or consumers outside of the \"private\" scope of the described application."
2514
+ "description": "Metadata should not be discoverable outside the application / service's own deployment scope (e.g., outside of the provider application or the same system namespace / system type).\nUsed for metadata completeness when describing implementation details or dependencies.\n\nPrivate resources usually have no stability guarantees and can change or be removed at any time.\nThese are typically implementation details not meant for consumption by other services.\n\nExample: Services only used within a microservice architecture or APIs that are only used for the own UIs, not for general consumption.\n\nPrivate resources MUST NOT be made discoverable or accessible outside the application / service's own deployment scope."
2474
2515
  }
2475
2516
  ]
2476
2517
  },
2477
2518
  "releaseStatus": {
2478
2519
  "type": "string",
2479
- "description": "The `releaseStatus` specifies the stability of the resource and its external contract.",
2520
+ "description": "Defines the maturity level and stability commitment for the resource's API contract (interface, behavior, data models).\n\nThis indicates whether the resource may undergo backward-incompatible changes. It helps consumers understand the risk\nof depending on the resource and whether it's suitable for production use.\n\nNote: This is independent of `visibility` and does not imply availability guarantees or SLAs - it concerns only the API contract stability.\n\nSee [Lifecycle](../index.md#lifecycle) and [Compatibility](../concepts/compatibility.md) for more details.",
2480
2521
  "oneOf": [
2481
2522
  {
2482
2523
  "const": "beta",
2483
- "description": "The contract for the resource is beta and may not be meant for productive use.\nResources of `beta` status MAY be changed or deleted at the providers discretion."
2524
+ "description": "The API contract has no stability guarantees. Breaking changes may occur at any time without notice or deprecation period.\n\nNot recommended for production use unless you can tolerate breaking changes. Suitable for experimentation, early adopters,\nand feedback gathering. Resources of `beta` status MAY be changed or removed at the provider's discretion."
2484
2525
  },
2485
2526
  {
2486
2527
  "const": "active",
2487
- "description": "Resource is meant for productive use and provides a stable API contract."
2528
+ "description": "The API contract is stable and recommended for production use.\n\nBreaking changes will only be introduced through proper deprecation cycles or new major versions,\nfollowing versioning and compatibility policies. Consumers can rely on active resources with confidence."
2488
2529
  },
2489
2530
  {
2490
2531
  "const": "deprecated",
2491
- "description": "Resource has been deprecated.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (aka. decommissioned / removed) in the future, through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
2532
+ "description": "The resource is still functional but scheduled for removal. No new development should depend on it.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (decommissioned/removed) in the future through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
2492
2533
  },
2493
2534
  {
2494
2535
  "const": "sunset",
2495
- "description": "Resource has been sunset, but is still described.\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
2536
+ "description": "The resource has been decommissioned and is no longer available at runtime. This entry exists for historical reference only.\n\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
2496
2537
  }
2497
2538
  ],
2498
2539
  "examples": [
@@ -2686,6 +2727,7 @@
2686
2727
  "DataProduct": {
2687
2728
  "type": "object",
2688
2729
  "title": "Data Product",
2730
+ "x-ums-type": "root",
2689
2731
  "x-introduced-in-version": "1.8.0",
2690
2732
  "description": "A [Data Product](../concepts/data-product) is a data set exposed for consumption outside the boundaries of the producing application via APIs and described by high quality metadata that can be accessed through the [ORD Aggregator](../../spec-v1/#ord-aggregator).\n\nPlease note that this concept is in beta, see [Data Product - Current Status](../concepts/data-product#current-status).",
2691
2733
  "properties": {
@@ -2814,15 +2856,15 @@
2814
2856
  "oneOf": [
2815
2857
  {
2816
2858
  "const": "public",
2817
- "description": "Publicly visible to customers and 3rd parties.\nUsually this includes an contract on the API stability, e.g. the [SAP API Deprecation Policy](https://help.sap.com/viewer/84b35b9c39b247e3ba2a31f02beee46d/Cloud/en-US/5cbfda5a9efe4e97a3e24ddaf7ec5c16.html)."
2859
+ "description": "Metadata can be discovered and accessed by anyone, including customers, partners, and unauthenticated external parties.\n\nPublic resources typically come with stability guarantees, expressed via versioning and follow formal API lifecycle management. For more details see [Version and Lifecycle](../index.md#version-and-lifecycle) section.\nand follow formal API lifecycle management and deprecation policies.\n\nExample: A REST API that customers use to integrate with your SaaS product."
2818
2860
  },
2819
2861
  {
2820
2862
  "const": "internal",
2821
- "description": "Visible to other applications within the same [vendor](#vendor).\nHowever, they are not officially exposed and communicated to customers and 3rd parties.\nThey might not come with the same guarantees on API stability.\n\nInternal resources MUST NOT be made available to consumers without checking the necessary access permissions, e.g., a public API Catalog.\nInternal resources MAY be published through an internal API Catalog if the access permissions are ensured by it."
2863
+ "description": "Metadata can only be discovered and accessed by vendor internal consumers (e.g. applications or services of the same vendor).\nMUST NOT be made available to external parties or vendor customers.\n\nInternal resources are intended for integration between a vendors own applications and services.\nAPI stability and maturity are explicitly defined via the `releaseStatus` property, which is a separate concern from visibility.\n\nInternal resources MUST NOT be made available without checking the necessary access permissions.\nInternal resources MAY be published through an internal API Catalog if access permissions are ensured by it."
2822
2864
  },
2823
2865
  {
2824
2866
  "const": "private",
2825
- "description": "Visible only to the provider application or service, usually within the same system namespace / system type.\n\nPrivate resources MUST NOT be made available to public consumers or consumers outside of the \"private\" scope of the described application."
2867
+ "description": "Metadata should not be discoverable outside the application / service's own deployment scope (e.g., outside of the provider application or the same system namespace / system type).\nUsed for metadata completeness when describing implementation details or dependencies.\n\nPrivate resources usually have no stability guarantees and can change or be removed at any time.\nThese are typically implementation details not meant for consumption by other services.\n\nExample: Services only used within a microservice architecture or APIs that are only used for the own UIs, not for general consumption.\n\nPrivate resources MUST NOT be made discoverable or accessible outside the application / service's own deployment scope."
2826
2868
  }
2827
2869
  ]
2828
2870
  },
@@ -2832,19 +2874,19 @@
2832
2874
  "oneOf": [
2833
2875
  {
2834
2876
  "const": "beta",
2835
- "description": "The contract for the resource is beta and may not be meant for productive use.\nResources of `beta` status MAY be changed or deleted at the providers discretion."
2877
+ "description": "The API contract has no stability guarantees. Breaking changes may occur at any time without notice or deprecation period.\n\nNot recommended for production use unless you can tolerate breaking changes. Suitable for experimentation, early adopters,\nand feedback gathering. Resources of `beta` status MAY be changed or removed at the provider's discretion."
2836
2878
  },
2837
2879
  {
2838
2880
  "const": "active",
2839
- "description": "Resource is meant for productive use and provides a stable API contract."
2881
+ "description": "The API contract is stable and recommended for production use.\n\nBreaking changes will only be introduced through proper deprecation cycles or new major versions,\nfollowing versioning and compatibility policies. Consumers can rely on active resources with confidence."
2840
2882
  },
2841
2883
  {
2842
2884
  "const": "deprecated",
2843
- "description": "Resource has been deprecated.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (aka. decommissioned / removed) in the future, through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
2885
+ "description": "The resource is still functional but scheduled for removal. No new development should depend on it.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (decommissioned/removed) in the future through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
2844
2886
  },
2845
2887
  {
2846
2888
  "const": "sunset",
2847
- "description": "Resource has been sunset, but is still described.\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
2889
+ "description": "The resource has been decommissioned and is no longer available at runtime. This entry exists for historical reference only.\n\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
2848
2890
  }
2849
2891
  ],
2850
2892
  "examples": [
@@ -2857,6 +2899,13 @@
2857
2899
  "default": false,
2858
2900
  "description": "Indicates that this resource is currently not available for consumption at runtime, but could be configured to be so.\nThis can happen either because it has not been setup for use or disabled by an admin / user.\n\nIf the resource is not available in principle for a particular system instance, e.g. due to lack of entitlement, it MUST not be described in the system-instance-aware perspective.\n\nThis property can only reflect the knowledge of the described system instance itself.\nOutside factors for availability can't need to be considered (e.g. network connectivity, middlewares).\n\nA disabled resource MAY skip describing its resource definitions.\n"
2859
2901
  },
2902
+ "abstract": {
2903
+ "type": "boolean",
2904
+ "default": false,
2905
+ "x-introduced-in-version": "1.13.0",
2906
+ "x-feature-status": "beta",
2907
+ "description": "Indicates that the data product serves as interface only. All output ports MUST be marked as abstract.\n\nImplementations of this data product MUST declare compatible with on their specific output port resources as consumption of data products happens through the output ports."
2908
+ },
2860
2909
  "minSystemVersion": {
2861
2910
  "type": "string",
2862
2911
  "description": "The resource has been introduced in the given [system version](../index.md#system-version).\nThis implies that the resource is only available if the system instance is of at least that system version.\n\nIt MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard.",
@@ -3395,6 +3444,7 @@
3395
3444
  "DataProductInputPort": {
3396
3445
  "type": "object",
3397
3446
  "title": "Data Product Input Port",
3447
+ "x-ums-type": "embedded",
3398
3448
  "description": "An input port of a data product states where it retrieves its data inputs from.\n\nIt is described as via an ORD Integration Dependency.",
3399
3449
  "properties": {
3400
3450
  "ordId": {
@@ -3418,6 +3468,7 @@
3418
3468
  "DataProductOutputPort": {
3419
3469
  "type": "object",
3420
3470
  "title": "Data Product Output Port",
3471
+ "x-ums-type": "embedded",
3421
3472
  "description": "A data product output port references the APIs or Events that can be used to access the data-set.\nIt MAY provide full access to the complete data set, but can also just expose a subset of it - if other output ports cover the missing parts.\n\nReferenced API or Event ORD resources don't need to be provided within the same ORD document.\nIf a data product is built against a specific API contract of another application or data product, this API resource should be referred to.\nIn this case the other application is responsible for the lifecycle of the API contract and will update its ORD description independently.",
3422
3473
  "properties": {
3423
3474
  "ordId": {
@@ -3444,6 +3495,7 @@
3444
3495
  "type": "object",
3445
3496
  "title": "Api Resource Definition",
3446
3497
  "description": "Link and categorization of a machine-readable API definition.\nFor example, OpenAPI definition, OData Metadata, etc.",
3498
+ "x-ums-type": "custom",
3447
3499
  "properties": {
3448
3500
  "type": {
3449
3501
  "description": "Type of the API Resource Definition\nIf \"custom\" is chosen, a customType MUST be provided",
@@ -3530,27 +3582,11 @@
3530
3582
  "mediaType": {
3531
3583
  "description": "The [Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml) of the definition serialization format.\nA consuming application can use this information to know which file format parser it needs to use.\nFor example, for OpenAPI 3, it's valid to express the same definition in both YAML and JSON.\n\nIf no Media Type is registered for the referenced file,\n`text/plain` MAY be used for arbitrary plain-text and `application/octet-stream` for arbitrary binary data.\n",
3532
3584
  "type": "string",
3533
- "oneOf": [
3534
- {
3535
- "const": "application/json"
3536
- },
3537
- {
3538
- "const": "application/xml"
3539
- },
3540
- {
3541
- "const": "text/yaml"
3542
- },
3543
- {
3544
- "const": "text/plain",
3545
- "description": "For a plain-text format where no other serialization Media Type fits"
3546
- },
3547
- {
3548
- "const": "application/octet-stream",
3549
- "description": "For a binary format where no other serialization Media Type fits"
3550
- }
3551
- ],
3585
+ "pattern": "^(application|text)\\/[a-zA-Z0-9][a-zA-Z0-9.+\\-]*$",
3552
3586
  "examples": [
3553
- "application/json"
3587
+ "application/json",
3588
+ "text/plain",
3589
+ "application/xml"
3554
3590
  ]
3555
3591
  },
3556
3592
  "url": {
@@ -3568,15 +3604,15 @@
3568
3604
  "oneOf": [
3569
3605
  {
3570
3606
  "const": "public",
3571
- "description": "Publicly visible to customers and 3rd parties.\nUsually this includes an contract on the API stability, e.g. the [SAP API Deprecation Policy](https://help.sap.com/viewer/84b35b9c39b247e3ba2a31f02beee46d/Cloud/en-US/5cbfda5a9efe4e97a3e24ddaf7ec5c16.html)."
3607
+ "description": "Metadata can be discovered and accessed by anyone, including customers, partners, and unauthenticated external parties.\n\nPublic resources typically come with stability guarantees, expressed via versioning and follow formal API lifecycle management. For more details see [Version and Lifecycle](../index.md#version-and-lifecycle) section.\nand follow formal API lifecycle management and deprecation policies.\n\nExample: A REST API that customers use to integrate with your SaaS product."
3572
3608
  },
3573
3609
  {
3574
3610
  "const": "internal",
3575
- "description": "Visible to other applications within the same [vendor](#vendor).\nHowever, they are not officially exposed and communicated to customers and 3rd parties.\nThey might not come with the same guarantees on API stability.\n\nInternal resources MUST NOT be made available to consumers without checking the necessary access permissions, e.g., a public API Catalog.\nInternal resources MAY be published through an internal API Catalog if the access permissions are ensured by it."
3611
+ "description": "Metadata can only be discovered and accessed by vendor internal consumers (e.g. applications or services of the same vendor).\nMUST NOT be made available to external parties or vendor customers.\n\nInternal resources are intended for integration between a vendors own applications and services.\nAPI stability and maturity are explicitly defined via the `releaseStatus` property, which is a separate concern from visibility.\n\nInternal resources MUST NOT be made available without checking the necessary access permissions.\nInternal resources MAY be published through an internal API Catalog if access permissions are ensured by it."
3576
3612
  },
3577
3613
  {
3578
3614
  "const": "private",
3579
- "description": "Visible only to the provider application or service, usually within the same system namespace / system type.\n\nPrivate resources MUST NOT be made available to public consumers or consumers outside of the \"private\" scope of the described application."
3615
+ "description": "Metadata should not be discoverable outside the application / service's own deployment scope (e.g., outside of the provider application or the same system namespace / system type).\nUsed for metadata completeness when describing implementation details or dependencies.\n\nPrivate resources usually have no stability guarantees and can change or be removed at any time.\nThese are typically implementation details not meant for consumption by other services.\n\nExample: Services only used within a microservice architecture or APIs that are only used for the own UIs, not for general consumption.\n\nPrivate resources MUST NOT be made discoverable or accessible outside the application / service's own deployment scope."
3580
3616
  }
3581
3617
  ]
3582
3618
  },
@@ -3606,6 +3642,7 @@
3606
3642
  "EventResourceDefinition": {
3607
3643
  "type": "object",
3608
3644
  "title": "Event Resource Definition",
3645
+ "x-ums-type": "custom",
3609
3646
  "description": "Link and categorization of a machine-readable API definition.\nFor example, AsyncAPI or OpenAPI with callbacks, etc.",
3610
3647
  "properties": {
3611
3648
  "type": {
@@ -3646,27 +3683,11 @@
3646
3683
  "mediaType": {
3647
3684
  "description": "The [Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml) of the definition serialization format.\nA consuming application can use this information to know which file format parser it needs to use.\nFor example, for OpenAPI 3, it's valid to express the same definition in both YAML and JSON.\n\nIf no Media Type is registered for the referenced file,\n`text/plain` MAY be used for arbitrary plain-text and `application/octet-stream` for arbitrary binary data.\n",
3648
3685
  "type": "string",
3649
- "oneOf": [
3650
- {
3651
- "const": "application/json"
3652
- },
3653
- {
3654
- "const": "application/xml"
3655
- },
3656
- {
3657
- "const": "text/yaml"
3658
- },
3659
- {
3660
- "const": "text/plain",
3661
- "description": "For a plain-text format where no other serialization Media Type fits"
3662
- },
3663
- {
3664
- "const": "application/octet-stream",
3665
- "description": "For a binary format where no other serialization Media Type fits"
3666
- }
3667
- ],
3686
+ "pattern": "^(application|text)\\/[a-zA-Z0-9][a-zA-Z0-9.+\\-]*$",
3668
3687
  "examples": [
3669
- "application/json"
3688
+ "application/json",
3689
+ "text/plain",
3690
+ "application/xml"
3670
3691
  ]
3671
3692
  },
3672
3693
  "url": {
@@ -3698,15 +3719,15 @@
3698
3719
  "oneOf": [
3699
3720
  {
3700
3721
  "const": "public",
3701
- "description": "Publicly visible to customers and 3rd parties.\nUsually this includes an contract on the API stability, e.g. the [SAP API Deprecation Policy](https://help.sap.com/viewer/84b35b9c39b247e3ba2a31f02beee46d/Cloud/en-US/5cbfda5a9efe4e97a3e24ddaf7ec5c16.html)."
3722
+ "description": "Metadata can be discovered and accessed by anyone, including customers, partners, and unauthenticated external parties.\n\nPublic resources typically come with stability guarantees, expressed via versioning and follow formal API lifecycle management. For more details see [Version and Lifecycle](../index.md#version-and-lifecycle) section.\nand follow formal API lifecycle management and deprecation policies.\n\nExample: A REST API that customers use to integrate with your SaaS product."
3702
3723
  },
3703
3724
  {
3704
3725
  "const": "internal",
3705
- "description": "Visible to other applications within the same [vendor](#vendor).\nHowever, they are not officially exposed and communicated to customers and 3rd parties.\nThey might not come with the same guarantees on API stability.\n\nInternal resources MUST NOT be made available to consumers without checking the necessary access permissions, e.g., a public API Catalog.\nInternal resources MAY be published through an internal API Catalog if the access permissions are ensured by it."
3726
+ "description": "Metadata can only be discovered and accessed by vendor internal consumers (e.g. applications or services of the same vendor).\nMUST NOT be made available to external parties or vendor customers.\n\nInternal resources are intended for integration between a vendors own applications and services.\nAPI stability and maturity are explicitly defined via the `releaseStatus` property, which is a separate concern from visibility.\n\nInternal resources MUST NOT be made available without checking the necessary access permissions.\nInternal resources MAY be published through an internal API Catalog if access permissions are ensured by it."
3706
3727
  },
3707
3728
  {
3708
3729
  "const": "private",
3709
- "description": "Visible only to the provider application or service, usually within the same system namespace / system type.\n\nPrivate resources MUST NOT be made available to public consumers or consumers outside of the \"private\" scope of the described application."
3730
+ "description": "Metadata should not be discoverable outside the application / service's own deployment scope (e.g., outside of the provider application or the same system namespace / system type).\nUsed for metadata completeness when describing implementation details or dependencies.\n\nPrivate resources usually have no stability guarantees and can change or be removed at any time.\nThese are typically implementation details not meant for consumption by other services.\n\nExample: Services only used within a microservice architecture or APIs that are only used for the own UIs, not for general consumption.\n\nPrivate resources MUST NOT be made discoverable or accessible outside the application / service's own deployment scope."
3710
3731
  }
3711
3732
  ]
3712
3733
  }
@@ -3718,126 +3739,21 @@
3718
3739
  "url"
3719
3740
  ]
3720
3741
  },
3721
- "Product": {
3722
- "type": "object",
3723
- "title": "Product",
3724
- "description": "A **product** in ORD is understood as a commercial product or service.\n\nIt is a high-level entity for structuring the software portfolio from a sales / software logistics perspective.\nWhile **system type** is a technical concept, **product** covers the commercial and marketing view.\n\nPlease note that the ORD concept of a product is very simple on purpose.\nThere is no distinction between products and services and concepts like product versions, variants, etc.\n\nORD assumes that this is handled by specialized systems and that ORD only provides the means to correlate to them.",
3725
- "properties": {
3726
- "ordId": {
3727
- "type": "string",
3728
- "description": "The ORD ID is a stable, globally unique ID for ORD resources or taxonomy.\n\nIt MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type.",
3729
- "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(product):([a-zA-Z0-9._\\-]+):()$",
3730
- "maxLength": 255,
3731
- "examples": [
3732
- "sap:product:S4HANA_OD:"
3733
- ]
3734
- },
3735
- "correlationIds": {
3736
- "type": "array",
3737
- "description": "Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record).\n\nThey express an \"identity\" / \"equals\" / \"mappable\" relationship to the target ID.\n\nIf a \"part of\" relationship needs to be expressed, use the `partOfGroups` assignment instead.\n\nMUST be a valid [Correlation ID](../index.md#correlation-id).",
3738
- "items": {
3739
- "type": "string",
3740
- "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+):([a-zA-Z0-9._\\-\\/]+)$",
3741
- "maxLength": 255
3742
- },
3743
- "examples": [
3744
- [
3745
- "sap.xref:product:ABC"
3746
- ]
3747
- ]
3748
- },
3749
- "title": {
3750
- "type": "string",
3751
- "description": "Human-readable title.\n\nMUST NOT exceed 255 chars.\nMUST NOT contain line breaks.",
3752
- "minLength": 1,
3753
- "maxLength": 255,
3754
- "examples": [
3755
- "SAP S/4HANA Cloud"
3756
- ]
3757
- },
3758
- "shortDescription": {
3759
- "type": "string",
3760
- "description": "Plain text short description.\n\nMUST NOT exceed 255 chars.\nMUST NOT contain line breaks.",
3761
- "minLength": 1,
3762
- "maxLength": 255,
3763
- "examples": [
3764
- "The next generation digital core designed to help you run simple in a digital economy."
3765
- ]
3766
- },
3767
- "description": {
3768
- "type": "string",
3769
- "minLength": 1,
3770
- "description": "Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown).\n\nThe description SHOULD not be excessive in length and is not meant to provide full documentation.\nDetailed documentation SHOULD be attached as (typed) links.",
3771
- "examples": []
3772
- },
3773
- "vendor": {
3774
- "type": "string",
3775
- "description": "Vendor / organization that is responsible for the Product.\n\nMUST be a valid reference to a [Vendor](#vendor) ORD ID.",
3776
- "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(vendor):([a-zA-Z0-9._\\-]+):()$",
3777
- "maxLength": 256,
3778
- "x-association-target": [
3779
- "#/definitions/Vendor/ordId"
3780
- ],
3781
- "examples": [
3782
- "sap:vendor:SAP:",
3783
- "customer:vendor:Customer:",
3784
- "microsoft:vendor:Microsoft:"
3785
- ]
3786
- },
3787
- "parent": {
3788
- "type": "string",
3789
- "description": "Optional product parent ORD ID, if a hierarchical product structure needs to be expressed.\n\nMUST be a valid reference to a [Product](#product) ORD ID.",
3790
- "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(product):([a-zA-Z0-9._\\-]+):()$",
3791
- "x-association-target": [
3792
- "#/definitions/Product/ordId"
3793
- ],
3794
- "examples": [
3795
- "sap:product:S4HANA_OD:"
3796
- ]
3797
- },
3798
- "tags": {
3799
- "type": "array",
3800
- "items": {
3801
- "type": "string",
3802
- "pattern": "^[a-zA-Z0-9-_.\\/ ]*$",
3803
- "minLength": 1
3804
- },
3805
- "description": "List of free text style tags.\nNo special characters are allowed except `-`, `_`, `.`, `/` and ` `.\n\nTags that are assigned to a `Package` are inherited to all of the ORD resources it contains.",
3806
- "examples": [
3807
- [
3808
- "storage",
3809
- "high-availability"
3810
- ]
3811
- ]
3812
- },
3813
- "labels": {
3814
- "$ref": "#/definitions/Labels"
3815
- },
3816
- "documentationLabels": {
3817
- "$ref": "#/definitions/DocumentationLabels"
3818
- }
3819
- },
3820
- "additionalProperties": false,
3821
- "required": [
3822
- "ordId",
3823
- "title",
3824
- "shortDescription",
3825
- "vendor"
3826
- ]
3827
- },
3828
- "Capability": {
3742
+ "Agent": {
3829
3743
  "type": "object",
3830
- "title": "Capability",
3831
- "x-introduced-in-version": "1.4.0",
3832
- "description": "Capabilities can be used to describe use case specific capabilities, most notably supported features or additional information (like configuration) that needs to be understood from outside.\nThis is a generic ORD concept that aims to cover many different capability discovery use cases that would otherwise need be implemented as individual service provider interfaces (SPIs).\n\nIf a capability needs to expose more information than possible with generic capability properties, a custom capability definition can be defined and referenced in ORD.\nThis is the same idea and mechanism as with API resources and their resource definition formats.",
3744
+ "title": "Agent",
3745
+ "x-ums-type": "root",
3746
+ "x-introduced-in-version": "1.14.0",
3747
+ "x-feature-status": "beta",
3748
+ "description": "An **Agent** provides a high-level description of an AI-powered autonomous system that can perform tasks, make decisions, and interact with users or other systems to achieve specific business goals.\n\nAn Agent can relate to specific entity types it works with, declare integration dependencies on external systems it requires, and expose its capabilities through APIs using protocols like A2A (Agent-to-Agent).\n\nAgents enable intelligent automation and decision-making within business processes by providing semantic understanding and context-aware capabilities beyond traditional API-based integrations.\n\nFor more details, see [AI Agents and Protocols](../concepts/ai-agents-and-protocols.md).",
3833
3749
  "properties": {
3834
3750
  "ordId": {
3835
3751
  "type": "string",
3836
3752
  "description": "The ORD ID is a stable, globally unique ID for ORD resources or taxonomy.\n\nIt MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type.",
3837
- "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(capability):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
3753
+ "pattern": "^([a-z0-9-]+(?:[.][a-z0-9-]+)*):(agent):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
3838
3754
  "maxLength": 255,
3839
3755
  "examples": [
3840
- "sap.foo.bar:capability:fieldExtensibility:v1"
3756
+ "sap.foo.bar:agent:disputeAgent:v1"
3841
3757
  ]
3842
3758
  },
3843
3759
  "localId": {
@@ -3864,44 +3780,13 @@
3864
3780
  ]
3865
3781
  ]
3866
3782
  },
3867
- "type": {
3868
- "description": "Type of the Capability",
3869
- "type": "string",
3870
- "anyOf": [
3871
- {
3872
- "type": "string",
3873
- "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
3874
- "description": "Any valid [Specification ID](../index.md#specification-id)."
3875
- },
3876
- {
3877
- "const": "sap.mdo:mdi-capability:v1",
3878
- "description": "Capability for SAP Master Data Integration (MDI).\n\nFor the capability definitions: `type` MUST ONLY be set to `sap.mdo:mdi-capability-definition:v1`."
3879
- },
3880
- {
3881
- "const": "custom",
3882
- "description": "If chosen, `customType` MUST be provided."
3883
- }
3884
- ],
3885
- "examples": [
3886
- "custom"
3887
- ]
3888
- },
3889
- "customType": {
3890
- "type": "string",
3891
- "description": "If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided.\n\nMUST be a valid [Specification ID](../index.md#specification-id).\n\nMUST only be provided if `type` is set to `custom`.",
3892
- "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
3893
- "maxLength": 255,
3894
- "examples": [
3895
- "sap:custom-definition-format:v1"
3896
- ]
3897
- },
3898
3783
  "title": {
3899
3784
  "type": "string",
3900
3785
  "description": "Human-readable title.\n\nMUST NOT exceed 255 chars.\nMUST NOT contain line breaks.",
3901
3786
  "minLength": 1,
3902
3787
  "maxLength": 255,
3903
3788
  "examples": [
3904
- "MDI Capability"
3789
+ "Dispute Agent"
3905
3790
  ]
3906
3791
  },
3907
3792
  "shortDescription": {
@@ -3964,41 +3849,41 @@
3964
3849
  },
3965
3850
  "visibility": {
3966
3851
  "type": "string",
3967
- "description": "The visibility states who is allowed to \"see\" the described resource or capability.",
3852
+ "description": "Defines metadata access control - which categories of consumers are allowed to discover and access the resource and its metadata.\n\nThis controls who can see that the resource exists and retrieve its metadata level information.\nIt does NOT control runtime access to the resource itself - that is managed separately through authentication and authorization mechanisms.\n\nUse this to prevent exposing internal implementation details to inappropriate consumer audiences.",
3968
3853
  "oneOf": [
3969
3854
  {
3970
3855
  "const": "public",
3971
- "description": "Publicly visible to customers and 3rd parties.\nUsually this includes an contract on the API stability, e.g. the [SAP API Deprecation Policy](https://help.sap.com/viewer/84b35b9c39b247e3ba2a31f02beee46d/Cloud/en-US/5cbfda5a9efe4e97a3e24ddaf7ec5c16.html)."
3856
+ "description": "Metadata can be discovered and accessed by anyone, including customers, partners, and unauthenticated external parties.\n\nPublic resources typically come with stability guarantees, expressed via versioning and follow formal API lifecycle management. For more details see [Version and Lifecycle](../index.md#version-and-lifecycle) section.\nand follow formal API lifecycle management and deprecation policies.\n\nExample: A REST API that customers use to integrate with your SaaS product."
3972
3857
  },
3973
3858
  {
3974
3859
  "const": "internal",
3975
- "description": "Visible to other applications within the same [vendor](#vendor).\nHowever, they are not officially exposed and communicated to customers and 3rd parties.\nThey might not come with the same guarantees on API stability.\n\nInternal resources MUST NOT be made available to consumers without checking the necessary access permissions, e.g., a public API Catalog.\nInternal resources MAY be published through an internal API Catalog if the access permissions are ensured by it."
3860
+ "description": "Metadata can only be discovered and accessed by vendor internal consumers (e.g. applications or services of the same vendor).\nMUST NOT be made available to external parties or vendor customers.\n\nInternal resources are intended for integration between a vendors own applications and services.\nAPI stability and maturity are explicitly defined via the `releaseStatus` property, which is a separate concern from visibility.\n\nInternal resources MUST NOT be made available without checking the necessary access permissions.\nInternal resources MAY be published through an internal API Catalog if access permissions are ensured by it."
3976
3861
  },
3977
3862
  {
3978
3863
  "const": "private",
3979
- "description": "Visible only to the provider application or service, usually within the same system namespace / system type.\n\nPrivate resources MUST NOT be made available to public consumers or consumers outside of the \"private\" scope of the described application."
3864
+ "description": "Metadata should not be discoverable outside the application / service's own deployment scope (e.g., outside of the provider application or the same system namespace / system type).\nUsed for metadata completeness when describing implementation details or dependencies.\n\nPrivate resources usually have no stability guarantees and can change or be removed at any time.\nThese are typically implementation details not meant for consumption by other services.\n\nExample: Services only used within a microservice architecture or APIs that are only used for the own UIs, not for general consumption.\n\nPrivate resources MUST NOT be made discoverable or accessible outside the application / service's own deployment scope."
3980
3865
  }
3981
3866
  ]
3982
3867
  },
3983
3868
  "releaseStatus": {
3984
3869
  "type": "string",
3985
- "description": "The `releaseStatus` specifies the stability of the resource and its external contract.",
3870
+ "description": "Defines the maturity level and stability commitment for the resource's API contract (interface, behavior, data models).\n\nThis indicates whether the resource may undergo backward-incompatible changes. It helps consumers understand the risk\nof depending on the resource and whether it's suitable for production use.\n\nNote: This is independent of `visibility` and does not imply availability guarantees or SLAs - it concerns only the API contract stability.\n\nSee [Lifecycle](../index.md#lifecycle) and [Compatibility](../concepts/compatibility.md) for more details.",
3986
3871
  "oneOf": [
3987
3872
  {
3988
3873
  "const": "beta",
3989
- "description": "The contract for the resource is beta and may not be meant for productive use.\nResources of `beta` status MAY be changed or deleted at the providers discretion."
3874
+ "description": "The API contract has no stability guarantees. Breaking changes may occur at any time without notice or deprecation period.\n\nNot recommended for production use unless you can tolerate breaking changes. Suitable for experimentation, early adopters,\nand feedback gathering. Resources of `beta` status MAY be changed or removed at the provider's discretion."
3990
3875
  },
3991
3876
  {
3992
3877
  "const": "active",
3993
- "description": "Resource is meant for productive use and provides a stable API contract."
3878
+ "description": "The API contract is stable and recommended for production use.\n\nBreaking changes will only be introduced through proper deprecation cycles or new major versions,\nfollowing versioning and compatibility policies. Consumers can rely on active resources with confidence."
3994
3879
  },
3995
3880
  {
3996
3881
  "const": "deprecated",
3997
- "description": "Resource has been deprecated.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (aka. decommissioned / removed) in the future, through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
3882
+ "description": "The resource is still functional but scheduled for removal. No new development should depend on it.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (decommissioned/removed) in the future through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
3998
3883
  },
3999
3884
  {
4000
3885
  "const": "sunset",
4001
- "description": "Resource has been sunset, but is still described.\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
3886
+ "description": "The resource has been decommissioned and is no longer available at runtime. This entry exists for historical reference only.\n\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
4002
3887
  }
4003
3888
  ],
4004
3889
  "examples": [
@@ -4020,44 +3905,720 @@
4020
3905
  "2024.8.0"
4021
3906
  ]
4022
3907
  },
4023
- "relatedEntityTypes": {
3908
+ "partOfProducts": {
4024
3909
  "type": "array",
4025
- "description": "Optional list of related EntityType Resources.\nMUST be a valid reference to an [EntityType Resource](#entity-type) ORD ID.",
3910
+ "description": "List of products the resources of the Package are a part of.\n\nMUST be a valid reference to a [Product](#product) ORD ID.\n\n`partOfProducts` that are assigned to a `Package` are inherited to all of the ORD resources it contains.",
4026
3911
  "items": {
4027
3912
  "type": "string",
4028
- "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(entityType):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
3913
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(product):([a-zA-Z0-9._\\-]+):()$",
3914
+ "maxLength": 255,
4029
3915
  "x-association-target": [
4030
- "#/definitions/EntityType/ordId"
3916
+ "#/definitions/Product/ordId"
4031
3917
  ]
4032
3918
  },
3919
+ "minItems": 0,
4033
3920
  "examples": [
4034
3921
  [
4035
- "sap.odm:entityType:WorkforcePerson:v1"
3922
+ "sap:product:S4HANA_OD:"
4036
3923
  ]
4037
3924
  ]
4038
3925
  },
4039
- "definitions": {
3926
+ "responsible": {
3927
+ "type": "string",
3928
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+):([a-zA-Z0-9._\\-\\/]+)$",
3929
+ "maxLength": 255,
3930
+ "x-introduced-in-version": "1.8.0",
3931
+ "description": "Contains typically the organization that is responsible in the sense of RACI matrix for this ORD resource. This includes support and feature requests. It is maintained as correlation id to for example support components.",
3932
+ "examples": [
3933
+ "sap:ach:CIC-DP-CO"
3934
+ ]
3935
+ },
3936
+ "deprecationDate": {
3937
+ "type": "string",
3938
+ "format": "date-time",
3939
+ "description": "The deprecation date defines when the resource has been set as deprecated.\nThis is not to be confused with the `sunsetDate` which defines when the resource will be actually sunset, aka. decommissioned / removed / archived.\n\nThe date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6).",
3940
+ "examples": [
3941
+ "2020-12-08T15:47:04+00:00"
3942
+ ]
3943
+ },
3944
+ "sunsetDate": {
3945
+ "type": "string",
3946
+ "format": "date-time",
3947
+ "description": "The sunset date defines when the resource is scheduled to be decommissioned / removed / archived.\n\nIf the `releaseStatus` is set to `deprecated`, the `sunsetDate` SHOULD be provided (if already known).\nOnce the sunset date is known and ready to be communicated externally, it MUST be provided here.\n\nThe date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6).",
3948
+ "examples": [
3949
+ "2022-01-08T15:47:04+00:00"
3950
+ ]
3951
+ },
3952
+ "successors": {
4040
3953
  "type": "array",
4041
- "description": "List of available machine-readable definitions, which describe the resource or capability in detail.\nSee also [Resource Definitions](../index.md#resource-definitions) for more context.\n\nEach definition is to be understood as an alternative description format, describing the same resource / capability.\nAs a consequence the same definition type MUST NOT be provided more than once.\nThe exception is when the same definition type is provided more than once, but with a different `visibility`.\n\nIt is RECOMMENDED to provide the definitions as they enable machine-readable use cases.\nIf the definitions are added or changed, the `version` MUST be incremented.\nAn ORD aggregator MAY only (re)fetch the definitions again when the `version` was incremented.",
3954
+ "description": "The successor resource(s).\n\nMUST be a valid reference to an ORD ID.\n\nIf the `releaseStatus` is set to `deprecated`, `successors` MUST be provided if one exists.\nIf `successors` is given, the described resource SHOULD set its `releaseStatus` to `deprecated`.",
4042
3955
  "items": {
4043
- "$ref": "#/definitions/CapabilityDefinition"
3956
+ "type": "string",
3957
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(agent):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
3958
+ "x-association-target": [
3959
+ "#/definitions/Agent/ordId"
3960
+ ],
3961
+ "maxLength": 255
4044
3962
  }
4045
3963
  },
4046
- "links": {
3964
+ "changelogEntries": {
4047
3965
  "type": "array",
4048
- "description": "Generic Links with arbitrary meaning and content.",
3966
+ "description": "Contains changelog entries that summarize changes with special regards to version and releaseStatus",
4049
3967
  "items": {
4050
- "$ref": "#/definitions/Link"
3968
+ "$ref": "#/definitions/ChangelogEntry"
4051
3969
  }
4052
3970
  },
4053
- "tags": {
3971
+ "policyLevels": {
4054
3972
  "type": "array",
3973
+ "description": "A list of [policy levels](../../spec-extensions/policy-levels/) that the described resources need to be compliant with.\nFor each chosen policy level, additional expectations and validations rules will be applied.\n\nPolicy levels can be defined on ORD Document level, but also be overwritten on an individual package or resource level.\n\nA policy level MUST be a valid [Specification ID](../index.md#specification-id).",
3974
+ "x-introduced-in-version": "1.9.9",
4055
3975
  "items": {
4056
3976
  "type": "string",
4057
- "pattern": "^[a-zA-Z0-9-_.\\/ ]*$",
4058
- "minLength": 1
4059
- },
4060
- "description": "List of free text style tags.\nNo special characters are allowed except `-`, `_`, `.`, `/` and ` `.\n\nTags that are assigned to a `Package` are inherited to all of the ORD resources it contains.",
3977
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
3978
+ "maxLength": 255,
3979
+ "examples": [
3980
+ "sap:core:v1"
3981
+ ]
3982
+ }
3983
+ },
3984
+ "countries": {
3985
+ "type": "array",
3986
+ "items": {
3987
+ "type": "string",
3988
+ "pattern": "^[A-Z]{2}$"
3989
+ },
3990
+ "description": "List of countries that the Package resources are applicable to.\n\nMUST be expressed as an array of country codes according to [IES ISO-3166 ALPHA-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).\n\n`countries` that are assigned to a `Package` are inherited to all of the ORD resources it contains.",
3991
+ "examples": [
3992
+ [
3993
+ "DE",
3994
+ "US"
3995
+ ]
3996
+ ]
3997
+ },
3998
+ "lineOfBusiness": {
3999
+ "type": "array",
4000
+ "items": {
4001
+ "type": "string",
4002
+ "pattern": "^[a-zA-Z0-9-_.\\/& ]*$",
4003
+ "minLength": 1,
4004
+ "anyOf": [
4005
+ {
4006
+ "type": "string"
4007
+ },
4008
+ {
4009
+ "const": "Asset Management"
4010
+ },
4011
+ {
4012
+ "const": "Commerce"
4013
+ },
4014
+ {
4015
+ "const": "Finance"
4016
+ },
4017
+ {
4018
+ "const": "Human Resources"
4019
+ },
4020
+ {
4021
+ "const": "Manufacturing"
4022
+ },
4023
+ {
4024
+ "const": "Marketing"
4025
+ },
4026
+ {
4027
+ "const": "R&D Engineering"
4028
+ },
4029
+ {
4030
+ "const": "Sales"
4031
+ },
4032
+ {
4033
+ "const": "Service"
4034
+ },
4035
+ {
4036
+ "const": "Sourcing and Procurement"
4037
+ },
4038
+ {
4039
+ "const": "Strategy, Compliance, and Governance"
4040
+ },
4041
+ {
4042
+ "const": "Supply Chain"
4043
+ },
4044
+ {
4045
+ "const": "Sustainability"
4046
+ },
4047
+ {
4048
+ "const": "Metering"
4049
+ },
4050
+ {
4051
+ "const": "Grid Operations and Maintenance"
4052
+ },
4053
+ {
4054
+ "const": "Plant Operations and Maintenance"
4055
+ },
4056
+ {
4057
+ "const": "Maintenance and Engineering"
4058
+ }
4059
+ ]
4060
+ },
4061
+ "description": "List of line of business tags.\nNo special characters are allowed except `-`, `_`, `.`, `/` and ` `.\n\n`lineOfBusiness` that are assigned to a `Package` are inherited to all of the ORD resources it contains.",
4062
+ "examples": [
4063
+ [
4064
+ "Sales"
4065
+ ]
4066
+ ]
4067
+ },
4068
+ "industry": {
4069
+ "type": "array",
4070
+ "items": {
4071
+ "type": "string",
4072
+ "pattern": "^[a-zA-Z0-9-_.\\/& ]*$",
4073
+ "minLength": 1,
4074
+ "anyOf": [
4075
+ {
4076
+ "type": "string"
4077
+ },
4078
+ {
4079
+ "const": "Aerospace and Defense"
4080
+ },
4081
+ {
4082
+ "const": "Agribusiness"
4083
+ },
4084
+ {
4085
+ "const": "Automotive"
4086
+ },
4087
+ {
4088
+ "const": "Banking"
4089
+ },
4090
+ {
4091
+ "const": "Chemicals"
4092
+ },
4093
+ {
4094
+ "const": "Consumer Industries"
4095
+ },
4096
+ {
4097
+ "const": "Consumer Products"
4098
+ },
4099
+ {
4100
+ "const": "Defense and Security"
4101
+ },
4102
+ {
4103
+ "const": "Discrete Industries"
4104
+ },
4105
+ {
4106
+ "const": "Energy and Natural Resources"
4107
+ },
4108
+ {
4109
+ "const": "Engineering Construction and Operations"
4110
+ },
4111
+ {
4112
+ "const": "Financial Services"
4113
+ },
4114
+ {
4115
+ "const": "Future Cities"
4116
+ },
4117
+ {
4118
+ "const": "Healthcare"
4119
+ },
4120
+ {
4121
+ "const": "High Tech"
4122
+ },
4123
+ {
4124
+ "const": "Higher Education and Research"
4125
+ },
4126
+ {
4127
+ "const": "Industrial Machinery and Components"
4128
+ },
4129
+ {
4130
+ "const": "Insurance"
4131
+ },
4132
+ {
4133
+ "const": "Life Sciences"
4134
+ },
4135
+ {
4136
+ "const": "Media"
4137
+ },
4138
+ {
4139
+ "const": "Mill Products"
4140
+ },
4141
+ {
4142
+ "const": "Mining"
4143
+ },
4144
+ {
4145
+ "const": "Oil and Gas"
4146
+ },
4147
+ {
4148
+ "const": "Professional Services"
4149
+ },
4150
+ {
4151
+ "const": "Public Sector"
4152
+ },
4153
+ {
4154
+ "const": "Public Services"
4155
+ },
4156
+ {
4157
+ "const": "Retail"
4158
+ },
4159
+ {
4160
+ "const": "Service Industries"
4161
+ },
4162
+ {
4163
+ "const": "Sports and Entertainment"
4164
+ },
4165
+ {
4166
+ "const": "Telecommunications"
4167
+ },
4168
+ {
4169
+ "const": "Travel and Transportation"
4170
+ },
4171
+ {
4172
+ "const": "Utilities"
4173
+ },
4174
+ {
4175
+ "const": "Wholesale Distribution"
4176
+ }
4177
+ ]
4178
+ },
4179
+ "description": "List of industry tags.\nNo special characters are allowed except `-`, `_`, `.`, `/` and ` `.\n\n`industry` that are assigned to a `Package` are inherited to all of the ORD resources it contains.",
4180
+ "examples": [
4181
+ [
4182
+ "Automotive"
4183
+ ],
4184
+ [
4185
+ "Retail",
4186
+ "Public Sector"
4187
+ ],
4188
+ []
4189
+ ]
4190
+ },
4191
+ "relatedEntityTypes": {
4192
+ "type": "array",
4193
+ "description": "Optional list of related EntityType Resources.\n\nMUST be a valid reference to an [EntityType Resource](#entity-type) ORD ID.",
4194
+ "items": {
4195
+ "type": "string",
4196
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(entityType):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
4197
+ "x-association-target": [
4198
+ "#/definitions/EntityType/ordId"
4199
+ ]
4200
+ },
4201
+ "examples": [
4202
+ [
4203
+ "sap.odm:entityType:WorkforcePerson:v1"
4204
+ ]
4205
+ ]
4206
+ },
4207
+ "exposedApiResources": {
4208
+ "type": "array",
4209
+ "description": "Optional list of API Resources that expose the functionality of the agent. Typically using the A2A protocol, but other protocols are possible as well.\n\nMUST be a valid reference to an [API Resource](#api-resource) ORD ID.",
4210
+ "items": {
4211
+ "$ref": "#/definitions/ExposedApiResourcesTarget"
4212
+ },
4213
+ "examples": [
4214
+ [
4215
+ {
4216
+ "ordId": "sap.foo:apiResource:DisputeResolutionAgent:v1"
4217
+ }
4218
+ ]
4219
+ ]
4220
+ },
4221
+ "integrationDependencies": {
4222
+ "type": "array",
4223
+ "description": "Optional list of integration dependencies that the agent relies on.\n\nMUST be a valid reference to an [Integration Dependency](#integration-dependency) ORD ID.",
4224
+ "items": {
4225
+ "type": "string",
4226
+ "pattern": "^([a-z0-9-]+(?:[.][a-z0-9-]+)*):(integrationDependency):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
4227
+ "maxLength": 255,
4228
+ "x-association-target": [
4229
+ "#/definitions/IntegrationDependency/ordId"
4230
+ ]
4231
+ },
4232
+ "examples": [
4233
+ [
4234
+ "sap.foo.bar:integrationDependency:DisputeCaseManagement:v1"
4235
+ ]
4236
+ ]
4237
+ },
4238
+ "links": {
4239
+ "type": "array",
4240
+ "description": "Generic Links with arbitrary meaning and content.",
4241
+ "items": {
4242
+ "$ref": "#/definitions/Link"
4243
+ }
4244
+ },
4245
+ "tags": {
4246
+ "type": "array",
4247
+ "items": {
4248
+ "type": "string",
4249
+ "pattern": "^[a-zA-Z0-9-_.\\/ ]*$",
4250
+ "minLength": 1
4251
+ },
4252
+ "description": "List of free text style tags.\nNo special characters are allowed except `-`, `_`, `.`, `/` and ` `.\n\nTags that are assigned to a `Package` are inherited to all of the ORD resources it contains.",
4253
+ "examples": [
4254
+ [
4255
+ "storage",
4256
+ "high-availability"
4257
+ ]
4258
+ ]
4259
+ },
4260
+ "labels": {
4261
+ "$ref": "#/definitions/Labels"
4262
+ },
4263
+ "documentationLabels": {
4264
+ "$ref": "#/definitions/DocumentationLabels"
4265
+ }
4266
+ },
4267
+ "additionalProperties": false,
4268
+ "required": [
4269
+ "ordId",
4270
+ "title",
4271
+ "version",
4272
+ "releaseStatus",
4273
+ "visibility",
4274
+ "partOfPackage"
4275
+ ],
4276
+ "x-recommended": [
4277
+ "lastUpdate"
4278
+ ]
4279
+ },
4280
+ "Product": {
4281
+ "type": "object",
4282
+ "title": "Product",
4283
+ "x-ums-type": "root",
4284
+ "description": "A **product** in ORD is understood as a commercial product or service.\n\nIt is a high-level entity for structuring the software portfolio from a sales / software logistics perspective.\nWhile **system type** is a technical concept, **product** covers the commercial and marketing view.\n\nPlease note that the ORD concept of a product is very simple on purpose.\nThere is no distinction between products and services and concepts like product versions, variants, etc.\n\nORD assumes that this is handled by specialized systems and that ORD only provides the means to correlate to them.",
4285
+ "properties": {
4286
+ "ordId": {
4287
+ "type": "string",
4288
+ "description": "The ORD ID is a stable, globally unique ID for ORD resources or taxonomy.\n\nIt MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type.",
4289
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(product):([a-zA-Z0-9._\\-]+):()$",
4290
+ "maxLength": 255,
4291
+ "examples": [
4292
+ "sap:product:S4HANA_OD:"
4293
+ ]
4294
+ },
4295
+ "correlationIds": {
4296
+ "type": "array",
4297
+ "description": "Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record).\n\nThey express an \"identity\" / \"equals\" / \"mappable\" relationship to the target ID.\n\nIf a \"part of\" relationship needs to be expressed, use the `partOfGroups` assignment instead.\n\nMUST be a valid [Correlation ID](../index.md#correlation-id).",
4298
+ "items": {
4299
+ "type": "string",
4300
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+):([a-zA-Z0-9._\\-\\/]+)$",
4301
+ "maxLength": 255
4302
+ },
4303
+ "examples": [
4304
+ [
4305
+ "sap.xref:product:ABC"
4306
+ ]
4307
+ ]
4308
+ },
4309
+ "title": {
4310
+ "type": "string",
4311
+ "description": "Human-readable title.\n\nMUST NOT exceed 255 chars.\nMUST NOT contain line breaks.",
4312
+ "minLength": 1,
4313
+ "maxLength": 255,
4314
+ "examples": [
4315
+ "SAP S/4HANA Cloud"
4316
+ ]
4317
+ },
4318
+ "shortDescription": {
4319
+ "type": "string",
4320
+ "description": "Plain text short description.\n\nMUST NOT exceed 255 chars.\nMUST NOT contain line breaks.",
4321
+ "minLength": 1,
4322
+ "maxLength": 255,
4323
+ "examples": [
4324
+ "The next generation digital core designed to help you run simple in a digital economy."
4325
+ ]
4326
+ },
4327
+ "description": {
4328
+ "type": "string",
4329
+ "minLength": 1,
4330
+ "description": "Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown).\n\nThe description SHOULD not be excessive in length and is not meant to provide full documentation.\nDetailed documentation SHOULD be attached as (typed) links.",
4331
+ "examples": []
4332
+ },
4333
+ "vendor": {
4334
+ "type": "string",
4335
+ "description": "Vendor / organization that is responsible for the Product.\n\nMUST be a valid reference to a [Vendor](#vendor) ORD ID.",
4336
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(vendor):([a-zA-Z0-9._\\-]+):()$",
4337
+ "maxLength": 256,
4338
+ "x-association-target": [
4339
+ "#/definitions/Vendor/ordId"
4340
+ ],
4341
+ "examples": [
4342
+ "sap:vendor:SAP:",
4343
+ "customer:vendor:Customer:",
4344
+ "microsoft:vendor:Microsoft:"
4345
+ ]
4346
+ },
4347
+ "parent": {
4348
+ "type": "string",
4349
+ "description": "Optional product parent ORD ID, if a hierarchical product structure needs to be expressed.\n\nMUST be a valid reference to a [Product](#product) ORD ID.",
4350
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(product):([a-zA-Z0-9._\\-]+):()$",
4351
+ "x-association-target": [
4352
+ "#/definitions/Product/ordId"
4353
+ ],
4354
+ "examples": [
4355
+ "sap:product:S4HANA_OD:"
4356
+ ]
4357
+ },
4358
+ "tags": {
4359
+ "type": "array",
4360
+ "items": {
4361
+ "type": "string",
4362
+ "pattern": "^[a-zA-Z0-9-_.\\/ ]*$",
4363
+ "minLength": 1
4364
+ },
4365
+ "description": "List of free text style tags.\nNo special characters are allowed except `-`, `_`, `.`, `/` and ` `.\n\nTags that are assigned to a `Package` are inherited to all of the ORD resources it contains.",
4366
+ "examples": [
4367
+ [
4368
+ "storage",
4369
+ "high-availability"
4370
+ ]
4371
+ ]
4372
+ },
4373
+ "labels": {
4374
+ "$ref": "#/definitions/Labels"
4375
+ },
4376
+ "documentationLabels": {
4377
+ "$ref": "#/definitions/DocumentationLabels"
4378
+ }
4379
+ },
4380
+ "additionalProperties": false,
4381
+ "required": [
4382
+ "ordId",
4383
+ "title",
4384
+ "shortDescription",
4385
+ "vendor"
4386
+ ]
4387
+ },
4388
+ "Capability": {
4389
+ "type": "object",
4390
+ "title": "Capability",
4391
+ "x-ums-type": "root",
4392
+ "x-introduced-in-version": "1.4.0",
4393
+ "description": "Capabilities can be used to describe use case specific capabilities, most notably supported features or additional information (like configuration) that needs to be understood from outside.\nThis is a generic ORD concept that aims to cover many different capability discovery use cases that would otherwise need be implemented as individual service provider interfaces (SPIs).\n\nIf a capability needs to expose more information than possible with generic capability properties, a custom capability definition can be defined and referenced in ORD.\nThis is the same idea and mechanism as with API resources and their resource definition formats.",
4394
+ "properties": {
4395
+ "ordId": {
4396
+ "type": "string",
4397
+ "description": "The ORD ID is a stable, globally unique ID for ORD resources or taxonomy.\n\nIt MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type.",
4398
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(capability):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
4399
+ "maxLength": 255,
4400
+ "examples": [
4401
+ "sap.foo.bar:capability:fieldExtensibility:v1"
4402
+ ]
4403
+ },
4404
+ "localId": {
4405
+ "type": "string",
4406
+ "x-introduced-in-version": "1.2.1",
4407
+ "description": "The locally unique ID under which this resource can be looked up / resolved in the described system itself.\nUnlike the ORD ID it's not globally unique, but it may be useful to document the original ID / technical name.\n\nIt MAY also be used as the `<resourceName>` fragment in the ORD ID, IF it can fulfill the charset and length limitations within the ORD ID.\nBut since this is not always possible, no assumptions MUST be made about the local ID being the same as the `<resourceName>` fragment in the ORD ID.",
4408
+ "maxLength": 255,
4409
+ "examples": [
4410
+ "SuccessFactorsRecruiting",
4411
+ "91cd9972-c05d-4d29-8b6e-dbef2a2d48e9"
4412
+ ]
4413
+ },
4414
+ "correlationIds": {
4415
+ "type": "array",
4416
+ "description": "Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record).\n\nThey express an \"identity\" / \"equals\" / \"mappable\" relationship to the target ID.\n\nIf a \"part of\" relationship needs to be expressed, use the `partOfGroups` assignment instead.\n\nMUST be a valid [Correlation ID](../index.md#correlation-id).",
4417
+ "items": {
4418
+ "type": "string",
4419
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+):([a-zA-Z0-9._\\-\\/]+)$",
4420
+ "maxLength": 255
4421
+ },
4422
+ "examples": [
4423
+ [
4424
+ "sap.s4:communicationScenario:SAP_COM_0008"
4425
+ ]
4426
+ ]
4427
+ },
4428
+ "type": {
4429
+ "description": "Type of the Capability",
4430
+ "type": "string",
4431
+ "anyOf": [
4432
+ {
4433
+ "type": "string",
4434
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
4435
+ "description": "Any valid [Specification ID](../index.md#specification-id)."
4436
+ },
4437
+ {
4438
+ "const": "sap.mdo:mdi-capability:v1",
4439
+ "description": "Capability for SAP Master Data Integration (MDI).\n\nFor the capability definitions: `type` MUST ONLY be set to `sap.mdo:mdi-capability-definition:v1`."
4440
+ },
4441
+ {
4442
+ "const": "custom",
4443
+ "description": "If chosen, `customType` MUST be provided."
4444
+ }
4445
+ ],
4446
+ "examples": [
4447
+ "custom"
4448
+ ]
4449
+ },
4450
+ "customType": {
4451
+ "type": "string",
4452
+ "description": "If the fixed `type` enum values need to be extended, an arbitrary `customType` can be provided.\n\nMUST be a valid [Specification ID](../index.md#specification-id).\n\nMUST only be provided if `type` is set to `custom`.",
4453
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
4454
+ "maxLength": 255,
4455
+ "examples": [
4456
+ "sap:custom-definition-format:v1"
4457
+ ]
4458
+ },
4459
+ "title": {
4460
+ "type": "string",
4461
+ "description": "Human-readable title.\n\nMUST NOT exceed 255 chars.\nMUST NOT contain line breaks.",
4462
+ "minLength": 1,
4463
+ "maxLength": 255,
4464
+ "examples": [
4465
+ "MDI Capability"
4466
+ ]
4467
+ },
4468
+ "shortDescription": {
4469
+ "type": "string",
4470
+ "description": "Plain text short description.\n\nMUST NOT exceed 255 chars.\nMUST NOT contain line breaks.",
4471
+ "minLength": 1,
4472
+ "maxLength": 255,
4473
+ "examples": [
4474
+ "SAP S/4HANA Cloud, our next generation cloud ERP suite designed for in-memory computing."
4475
+ ]
4476
+ },
4477
+ "description": {
4478
+ "type": "string",
4479
+ "minLength": 1,
4480
+ "description": "Full description, notated in [CommonMark](https://spec.commonmark.org/) (Markdown).\n\nThe description SHOULD not be excessive in length and is not meant to provide full documentation.\nDetailed documentation SHOULD be attached as (typed) links.",
4481
+ "examples": [
4482
+ "SAP S/4HANA Cloud, our next generation cloud ERP suite designed for\nin-memory computing, acts as a digital core, connecting your\nenterprise with people, business networks, the Internet of Things,\nBig Data, and more.\n"
4483
+ ]
4484
+ },
4485
+ "partOfPackage": {
4486
+ "type": "string",
4487
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(package):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
4488
+ "x-association-target": [
4489
+ "#/definitions/Package/ordId"
4490
+ ],
4491
+ "maxLength": 255,
4492
+ "description": "Defines which Package the resource is part of.\n\nMUST be a valid reference to a [Package](#package) ORD ID.\n\nEvery resource MUST be part of one package.",
4493
+ "examples": [
4494
+ "sap.xref:package:SomePackage:v1"
4495
+ ]
4496
+ },
4497
+ "partOfGroups": {
4498
+ "type": "array",
4499
+ "items": {
4500
+ "type": "string",
4501
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+):([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+)$",
4502
+ "x-association-target": [
4503
+ "#/definitions/Group/groupId"
4504
+ ]
4505
+ },
4506
+ "description": "Defines which groups the resource is assigned to.\n\nThe property is optional, but if given the value MUST be an array of valid Group IDs.\n\nGroups are a lightweight custom taxonomy concept.\nThey express a \"part of\" relationship to the chosen group concept.\nIf an \"identity / equals\" relationship needs to be expressed, use the `correlationIds` instead.\n\nAll resources that share the same group ID assignment are effectively grouped together."
4507
+ },
4508
+ "version": {
4509
+ "type": "string",
4510
+ "description": "The complete [SemVer](https://semver.org/) version string.\n\nIt MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard.\nIt SHOULD be changed if the ORD information or referenced resource definitions changed.\nIt SHOULD express minor and patch changes that don't lead to incompatible changes.\n\nWhen the `version` major version changes, the [ORD ID](../index.md#ord-id) `<majorVersion>` fragment MUST be updated to be identical.\nIn case that a resource definition file also contains a version number (e.g. [OpenAPI `info`.`version`](https://spec.openapis.org/oas/v3.1.1.html#info-object)), it MUST be equal with the resource `version` to avoid inconsistencies.\n\nIf the resource has been extended by the user, the change MUST be indicated via `lastUpdate`.\nThe `version` MUST not be bumped for changes in extensions.\n\nThe general [Version and Lifecycle](../index.md#version-and-lifecycle) flow MUST be followed.\n\nNote: A change is only relevant for a version increment, if it affects the ORD resource or ORD taxonomy directly.\nFor example: If a resource within a `Package` changes, but the Package itself did not, the Package version does not need to be incremented.",
4511
+ "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
4512
+ "examples": [
4513
+ "1.2.3",
4514
+ "1.0.0-alpha.1"
4515
+ ]
4516
+ },
4517
+ "lastUpdate": {
4518
+ "type": "string",
4519
+ "format": "date-time",
4520
+ "x-introduced-in-version": "1.4.0",
4521
+ "description": "Optional, but RECOMMENDED indicator when (date-time) the last change to the resource (including its definitions) happened.\n\nThe date format MUST comply with [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6).\n\nWhen retrieved from an ORD aggregator, `lastUpdate` will be reliable there and reflect either the provider based update time or the aggregator processing time.\nTherefore consumers MAY rely on it to detect changes to the metadata and the attached resource definition files.\n\nIf the resource has attached definitions, either the `version` or `lastUpdate` property MUST be defined and updated to let the ORD aggregator know that they need to be fetched again.\n\nTogether with `perspectives`, this property SHOULD be used to optimize the metadata crawling process of the ORD aggregators.",
4522
+ "examples": [
4523
+ "2022-12-19T15:47:04+00:00"
4524
+ ]
4525
+ },
4526
+ "visibility": {
4527
+ "type": "string",
4528
+ "description": "Defines metadata access control - which categories of consumers are allowed to discover and access the resource and its metadata.\n\nThis controls who can see that the resource exists and retrieve its metadata level information.\nIt does NOT control runtime access to the resource itself - that is managed separately through authentication and authorization mechanisms.\n\nUse this to prevent exposing internal implementation details to inappropriate consumer audiences.",
4529
+ "oneOf": [
4530
+ {
4531
+ "const": "public",
4532
+ "description": "Metadata can be discovered and accessed by anyone, including customers, partners, and unauthenticated external parties.\n\nPublic resources typically come with stability guarantees, expressed via versioning and follow formal API lifecycle management. For more details see [Version and Lifecycle](../index.md#version-and-lifecycle) section.\nand follow formal API lifecycle management and deprecation policies.\n\nExample: A REST API that customers use to integrate with your SaaS product."
4533
+ },
4534
+ {
4535
+ "const": "internal",
4536
+ "description": "Metadata can only be discovered and accessed by vendor internal consumers (e.g. applications or services of the same vendor).\nMUST NOT be made available to external parties or vendor customers.\n\nInternal resources are intended for integration between a vendors own applications and services.\nAPI stability and maturity are explicitly defined via the `releaseStatus` property, which is a separate concern from visibility.\n\nInternal resources MUST NOT be made available without checking the necessary access permissions.\nInternal resources MAY be published through an internal API Catalog if access permissions are ensured by it."
4537
+ },
4538
+ {
4539
+ "const": "private",
4540
+ "description": "Metadata should not be discoverable outside the application / service's own deployment scope (e.g., outside of the provider application or the same system namespace / system type).\nUsed for metadata completeness when describing implementation details or dependencies.\n\nPrivate resources usually have no stability guarantees and can change or be removed at any time.\nThese are typically implementation details not meant for consumption by other services.\n\nExample: Services only used within a microservice architecture or APIs that are only used for the own UIs, not for general consumption.\n\nPrivate resources MUST NOT be made discoverable or accessible outside the application / service's own deployment scope."
4541
+ }
4542
+ ]
4543
+ },
4544
+ "releaseStatus": {
4545
+ "type": "string",
4546
+ "description": "Defines the maturity level and stability commitment for the resource's API contract (interface, behavior, data models).\n\nThis indicates whether the resource may undergo backward-incompatible changes. It helps consumers understand the risk\nof depending on the resource and whether it's suitable for production use.\n\nNote: This is independent of `visibility` and does not imply availability guarantees or SLAs - it concerns only the API contract stability.\n\nSee [Lifecycle](../index.md#lifecycle) and [Compatibility](../concepts/compatibility.md) for more details.",
4547
+ "oneOf": [
4548
+ {
4549
+ "const": "beta",
4550
+ "description": "The API contract has no stability guarantees. Breaking changes may occur at any time without notice or deprecation period.\n\nNot recommended for production use unless you can tolerate breaking changes. Suitable for experimentation, early adopters,\nand feedback gathering. Resources of `beta` status MAY be changed or removed at the provider's discretion."
4551
+ },
4552
+ {
4553
+ "const": "active",
4554
+ "description": "The API contract is stable and recommended for production use.\n\nBreaking changes will only be introduced through proper deprecation cycles or new major versions,\nfollowing versioning and compatibility policies. Consumers can rely on active resources with confidence."
4555
+ },
4556
+ {
4557
+ "const": "deprecated",
4558
+ "description": "The resource is still functional but scheduled for removal. No new development should depend on it.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (decommissioned/removed) in the future through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
4559
+ },
4560
+ {
4561
+ "const": "sunset",
4562
+ "description": "The resource has been decommissioned and is no longer available at runtime. This entry exists for historical reference only.\n\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
4563
+ }
4564
+ ],
4565
+ "examples": [
4566
+ "active"
4567
+ ]
4568
+ },
4569
+ "disabled": {
4570
+ "type": "boolean",
4571
+ "default": false,
4572
+ "description": "Indicates that this resource is currently not available for consumption at runtime, but could be configured to be so.\nThis can happen either because it has not been setup for use or disabled by an admin / user.\n\nIf the resource is not available in principle for a particular system instance, e.g. due to lack of entitlement, it MUST not be described in the system-instance-aware perspective.\n\nThis property can only reflect the knowledge of the described system instance itself.\nOutside factors for availability can't need to be considered (e.g. network connectivity, middlewares).\n\nA disabled resource MAY skip describing its resource definitions.\n"
4573
+ },
4574
+ "minSystemVersion": {
4575
+ "type": "string",
4576
+ "description": "The resource has been introduced in the given [system version](../index.md#system-version).\nThis implies that the resource is only available if the system instance is of at least that system version.\n\nIt MUST follow the [Semantic Versioning 2.0.0](https://semver.org/) standard.",
4577
+ "x-introduced-in-version": "1.10.0",
4578
+ "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
4579
+ "examples": [
4580
+ "1.2.3",
4581
+ "2024.8.0"
4582
+ ]
4583
+ },
4584
+ "relatedEntityTypes": {
4585
+ "type": "array",
4586
+ "description": "Optional list of related EntityType Resources.\nMUST be a valid reference to an [EntityType Resource](#entity-type) ORD ID.",
4587
+ "items": {
4588
+ "type": "string",
4589
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(entityType):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
4590
+ "x-association-target": [
4591
+ "#/definitions/EntityType/ordId"
4592
+ ]
4593
+ },
4594
+ "examples": [
4595
+ [
4596
+ "sap.odm:entityType:WorkforcePerson:v1"
4597
+ ]
4598
+ ]
4599
+ },
4600
+ "definitions": {
4601
+ "type": "array",
4602
+ "description": "List of available machine-readable definitions, which describe the resource or capability in detail.\nSee also [Resource Definitions](../index.md#resource-definitions) for more context.\n\nEach definition is to be understood as an alternative description format, describing the same resource / capability.\nAs a consequence the same definition type MUST NOT be provided more than once.\nThe exception is when the same definition type is provided more than once, but with a different `visibility`.\n\nIt is RECOMMENDED to provide the definitions as they enable machine-readable use cases.\nIf the definitions are added or changed, the `version` MUST be incremented.\nAn ORD aggregator MAY only (re)fetch the definitions again when the `version` was incremented.",
4603
+ "items": {
4604
+ "$ref": "#/definitions/CapabilityDefinition"
4605
+ }
4606
+ },
4607
+ "links": {
4608
+ "type": "array",
4609
+ "description": "Generic Links with arbitrary meaning and content.",
4610
+ "items": {
4611
+ "$ref": "#/definitions/Link"
4612
+ }
4613
+ },
4614
+ "tags": {
4615
+ "type": "array",
4616
+ "items": {
4617
+ "type": "string",
4618
+ "pattern": "^[a-zA-Z0-9-_.\\/ ]*$",
4619
+ "minLength": 1
4620
+ },
4621
+ "description": "List of free text style tags.\nNo special characters are allowed except `-`, `_`, `.`, `/` and ` `.\n\nTags that are assigned to a `Package` are inherited to all of the ORD resources it contains.",
4061
4622
  "examples": [
4062
4623
  [
4063
4624
  "storage",
@@ -4098,6 +4659,7 @@
4098
4659
  "type": "object",
4099
4660
  "title": "Capability Definition",
4100
4661
  "x-introduced-in-version": "1.4.0",
4662
+ "x-ums-type": "custom",
4101
4663
  "description": "Link and categorization of a machine-readable capability definition.",
4102
4664
  "properties": {
4103
4665
  "type": {
@@ -4134,27 +4696,11 @@
4134
4696
  "mediaType": {
4135
4697
  "description": "The [Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml) of the definition serialization format.\nA consuming application can use this information to know which file format parser it needs to use.\nFor example, for OpenAPI 3, it's valid to express the same definition in both YAML and JSON.\n\nIf no Media Type is registered for the referenced file,\n`text/plain` MAY be used for arbitrary plain-text and `application/octet-stream` for arbitrary binary data.\n",
4136
4698
  "type": "string",
4137
- "oneOf": [
4138
- {
4139
- "const": "application/json"
4140
- },
4141
- {
4142
- "const": "application/xml"
4143
- },
4144
- {
4145
- "const": "text/yaml"
4146
- },
4147
- {
4148
- "const": "text/plain",
4149
- "description": "For a plain-text format where no other serialization Media Type fits"
4150
- },
4151
- {
4152
- "const": "application/octet-stream",
4153
- "description": "For a binary format where no other serialization Media Type fits"
4154
- }
4155
- ],
4699
+ "pattern": "^(application|text)\\/[a-zA-Z0-9][a-zA-Z0-9.+\\-]*$",
4156
4700
  "examples": [
4157
- "application/json"
4701
+ "application/json",
4702
+ "text/plain",
4703
+ "application/xml"
4158
4704
  ]
4159
4705
  },
4160
4706
  "url": {
@@ -4186,15 +4732,15 @@
4186
4732
  "oneOf": [
4187
4733
  {
4188
4734
  "const": "public",
4189
- "description": "Publicly visible to customers and 3rd parties.\nUsually this includes an contract on the API stability, e.g. the [SAP API Deprecation Policy](https://help.sap.com/viewer/84b35b9c39b247e3ba2a31f02beee46d/Cloud/en-US/5cbfda5a9efe4e97a3e24ddaf7ec5c16.html)."
4735
+ "description": "Metadata can be discovered and accessed by anyone, including customers, partners, and unauthenticated external parties.\n\nPublic resources typically come with stability guarantees, expressed via versioning and follow formal API lifecycle management. For more details see [Version and Lifecycle](../index.md#version-and-lifecycle) section.\nand follow formal API lifecycle management and deprecation policies.\n\nExample: A REST API that customers use to integrate with your SaaS product."
4190
4736
  },
4191
4737
  {
4192
4738
  "const": "internal",
4193
- "description": "Visible to other applications within the same [vendor](#vendor).\nHowever, they are not officially exposed and communicated to customers and 3rd parties.\nThey might not come with the same guarantees on API stability.\n\nInternal resources MUST NOT be made available to consumers without checking the necessary access permissions, e.g., a public API Catalog.\nInternal resources MAY be published through an internal API Catalog if the access permissions are ensured by it."
4739
+ "description": "Metadata can only be discovered and accessed by vendor internal consumers (e.g. applications or services of the same vendor).\nMUST NOT be made available to external parties or vendor customers.\n\nInternal resources are intended for integration between a vendors own applications and services.\nAPI stability and maturity are explicitly defined via the `releaseStatus` property, which is a separate concern from visibility.\n\nInternal resources MUST NOT be made available without checking the necessary access permissions.\nInternal resources MAY be published through an internal API Catalog if access permissions are ensured by it."
4194
4740
  },
4195
4741
  {
4196
4742
  "const": "private",
4197
- "description": "Visible only to the provider application or service, usually within the same system namespace / system type.\n\nPrivate resources MUST NOT be made available to public consumers or consumers outside of the \"private\" scope of the described application."
4743
+ "description": "Metadata should not be discoverable outside the application / service's own deployment scope (e.g., outside of the provider application or the same system namespace / system type).\nUsed for metadata completeness when describing implementation details or dependencies.\n\nPrivate resources usually have no stability guarantees and can change or be removed at any time.\nThese are typically implementation details not meant for consumption by other services.\n\nExample: Services only used within a microservice architecture or APIs that are only used for the own UIs, not for general consumption.\n\nPrivate resources MUST NOT be made discoverable or accessible outside the application / service's own deployment scope."
4198
4744
  }
4199
4745
  ]
4200
4746
  }
@@ -4209,6 +4755,7 @@
4209
4755
  "IntegrationDependency": {
4210
4756
  "type": "object",
4211
4757
  "title": "Integration Dependency",
4758
+ "x-ums-type": "root",
4212
4759
  "x-introduced-in-version": "1.7.0",
4213
4760
  "description": "An [Integration Dependency](../concepts/integration-dependency) states that the described system (self) can integrate with external systems (integration target) to achieve an integration purpose.\nThe purpose could be to enable a certain feature or integration scenario, but it could also be a mandatory prerequisite for the described system to work.\n\nThe integration dependency includes a list of individual **aspects** that the integration consists of.\nAspects are an \"ingredient\" for the integration scenario (and are logically combined with AND condition).\nEach aspect can express alternatives (OR condition) on what API and event resources can be used to achieve the same outcome.\n\nThe direction of connection establishment, data flow is not directly implied and needs to be inferred from the referenced resources.\n\nIt is not in scope for the Integration Dependency to describe scenarios that external consumers have with the own exposed resources.\nThis would overstep the boundary of self-description.\n\nIf an integration scenario consists of two sides integration with each other, each need to describe its own part in it as an Integration Dependency.\nTherefore, if an integration with multiple types of systems need to be setup, this SHOULD be separated into distinct Integration Dependencies.\n\nAn integration dependency is also not meant to describe a bigger process.\nInstead it focuses on the technical necessaries to create an integration for one particular purpose.\n\nTo learn more about the concept, see [Integration Dependency](../concepts/integration-dependency).",
4214
4761
  "properties": {
@@ -4314,41 +4861,41 @@
4314
4861
  },
4315
4862
  "visibility": {
4316
4863
  "type": "string",
4317
- "description": "The visibility states who is allowed to \"see\" the described resource or capability.",
4864
+ "description": "Defines metadata access control - which categories of consumers are allowed to discover and access the resource and its metadata.\n\nThis controls who can see that the resource exists and retrieve its metadata level information.\nIt does NOT control runtime access to the resource itself - that is managed separately through authentication and authorization mechanisms.\n\nUse this to prevent exposing internal implementation details to inappropriate consumer audiences.",
4318
4865
  "oneOf": [
4319
4866
  {
4320
4867
  "const": "public",
4321
- "description": "Publicly visible to customers and 3rd parties.\nUsually this includes an contract on the API stability, e.g. the [SAP API Deprecation Policy](https://help.sap.com/viewer/84b35b9c39b247e3ba2a31f02beee46d/Cloud/en-US/5cbfda5a9efe4e97a3e24ddaf7ec5c16.html)."
4868
+ "description": "Metadata can be discovered and accessed by anyone, including customers, partners, and unauthenticated external parties.\n\nPublic resources typically come with stability guarantees, expressed via versioning and follow formal API lifecycle management. For more details see [Version and Lifecycle](../index.md#version-and-lifecycle) section.\nand follow formal API lifecycle management and deprecation policies.\n\nExample: A REST API that customers use to integrate with your SaaS product."
4322
4869
  },
4323
4870
  {
4324
4871
  "const": "internal",
4325
- "description": "Visible to other applications within the same [vendor](#vendor).\nHowever, they are not officially exposed and communicated to customers and 3rd parties.\nThey might not come with the same guarantees on API stability.\n\nInternal resources MUST NOT be made available to consumers without checking the necessary access permissions, e.g., a public API Catalog.\nInternal resources MAY be published through an internal API Catalog if the access permissions are ensured by it."
4872
+ "description": "Metadata can only be discovered and accessed by vendor internal consumers (e.g. applications or services of the same vendor).\nMUST NOT be made available to external parties or vendor customers.\n\nInternal resources are intended for integration between a vendors own applications and services.\nAPI stability and maturity are explicitly defined via the `releaseStatus` property, which is a separate concern from visibility.\n\nInternal resources MUST NOT be made available without checking the necessary access permissions.\nInternal resources MAY be published through an internal API Catalog if access permissions are ensured by it."
4326
4873
  },
4327
4874
  {
4328
4875
  "const": "private",
4329
- "description": "Visible only to the provider application or service, usually within the same system namespace / system type.\n\nPrivate resources MUST NOT be made available to public consumers or consumers outside of the \"private\" scope of the described application."
4876
+ "description": "Metadata should not be discoverable outside the application / service's own deployment scope (e.g., outside of the provider application or the same system namespace / system type).\nUsed for metadata completeness when describing implementation details or dependencies.\n\nPrivate resources usually have no stability guarantees and can change or be removed at any time.\nThese are typically implementation details not meant for consumption by other services.\n\nExample: Services only used within a microservice architecture or APIs that are only used for the own UIs, not for general consumption.\n\nPrivate resources MUST NOT be made discoverable or accessible outside the application / service's own deployment scope."
4330
4877
  }
4331
4878
  ]
4332
4879
  },
4333
4880
  "releaseStatus": {
4334
4881
  "type": "string",
4335
- "description": "The `releaseStatus` specifies the stability of the resource and its external contract.",
4882
+ "description": "Defines the maturity level and stability commitment for the resource's API contract (interface, behavior, data models).\n\nThis indicates whether the resource may undergo backward-incompatible changes. It helps consumers understand the risk\nof depending on the resource and whether it's suitable for production use.\n\nNote: This is independent of `visibility` and does not imply availability guarantees or SLAs - it concerns only the API contract stability.\n\nSee [Lifecycle](../index.md#lifecycle) and [Compatibility](../concepts/compatibility.md) for more details.",
4336
4883
  "oneOf": [
4337
4884
  {
4338
4885
  "const": "beta",
4339
- "description": "The contract for the resource is beta and may not be meant for productive use.\nResources of `beta` status MAY be changed or deleted at the providers discretion."
4886
+ "description": "The API contract has no stability guarantees. Breaking changes may occur at any time without notice or deprecation period.\n\nNot recommended for production use unless you can tolerate breaking changes. Suitable for experimentation, early adopters,\nand feedback gathering. Resources of `beta` status MAY be changed or removed at the provider's discretion."
4340
4887
  },
4341
4888
  {
4342
4889
  "const": "active",
4343
- "description": "Resource is meant for productive use and provides a stable API contract."
4890
+ "description": "The API contract is stable and recommended for production use.\n\nBreaking changes will only be introduced through proper deprecation cycles or new major versions,\nfollowing versioning and compatibility policies. Consumers can rely on active resources with confidence."
4344
4891
  },
4345
4892
  {
4346
4893
  "const": "deprecated",
4347
- "description": "Resource has been deprecated.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (aka. decommissioned / removed) in the future, through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
4894
+ "description": "The resource is still functional but scheduled for removal. No new development should depend on it.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (decommissioned/removed) in the future through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
4348
4895
  },
4349
4896
  {
4350
4897
  "const": "sunset",
4351
- "description": "Resource has been sunset, but is still described.\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
4898
+ "description": "The resource has been decommissioned and is no longer available at runtime. This entry exists for historical reference only.\n\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
4352
4899
  }
4353
4900
  ],
4354
4901
  "examples": [
@@ -4451,6 +4998,7 @@
4451
4998
  "type": "object",
4452
4999
  "title": "Aspect",
4453
5000
  "x-introduced-in-version": "1.7.0",
5001
+ "x-ums-type": "custom",
4454
5002
  "description": "An (integration) aspect is the constituent part that makes up an Integration Dependency.\n\nEach aspect can list references to resources, which could be owned and defined by the integration target or by the described system itself.\nIn case the reference links to own resources, it is implied that they are to be used by the integration target to fulfill the Integration Dependency.\n\nIf multiple resources are given within an aspect, they are considered alternatives to each other (OR condition).\nIn case an AND condition is needed, multiple aspects need to be added to the Integration Dependency.",
4455
5003
  "properties": {
4456
5004
  "title": {
@@ -4503,6 +5051,7 @@
4503
5051
  "type": "object",
4504
5052
  "title": "Api Resource Integration Aspect",
4505
5053
  "x-introduced-in-version": "1.7.0",
5054
+ "x-ums-type": "custom",
4506
5055
  "description": "API resource related integration aspect",
4507
5056
  "properties": {
4508
5057
  "ordId": {
@@ -4522,6 +5071,13 @@
4522
5071
  "1.2.3",
4523
5072
  "1.0.0-alpha.1"
4524
5073
  ]
5074
+ },
5075
+ "subset": {
5076
+ "type": "array",
5077
+ "description": "List of individual API operations that are sufficient to achieve the aspect.",
5078
+ "items": {
5079
+ "$ref": "#/definitions/ApiResourceIntegrationAspectSubset"
5080
+ }
4525
5081
  }
4526
5082
  },
4527
5083
  "additionalProperties": false,
@@ -4533,6 +5089,7 @@
4533
5089
  "type": "object",
4534
5090
  "title": "Event Resource Integration Aspect",
4535
5091
  "x-introduced-in-version": "1.7.0",
5092
+ "x-ums-type": "custom",
4536
5093
  "description": "Event resource related integration aspect",
4537
5094
  "properties": {
4538
5095
  "ordId": {
@@ -4585,6 +5142,7 @@
4585
5142
  "type": "object",
4586
5143
  "title": "Event Resource Integration Aspect Subset",
4587
5144
  "x-introduced-in-version": "1.7.0",
5145
+ "x-ums-type": "custom",
4588
5146
  "description": "Defines that Event Resource Integration Aspect only requires a subset of the referenced contract.\n\nFor events, this could be a list of the events that need to be subscribed in order to make the integration work.\nThis information helps to narrow down what is really necessary and can help optimize the integration, e.g. by only publishing the events that are really needed.",
4589
5147
  "properties": {
4590
5148
  "eventType": {
@@ -4600,9 +5158,31 @@
4600
5158
  "eventType"
4601
5159
  ]
4602
5160
  },
5161
+ "ApiResourceIntegrationAspectSubset": {
5162
+ "type": "object",
5163
+ "title": "API Resource Integration Aspect Subset",
5164
+ "x-introduced-in-version": "1.10.0",
5165
+ "x-ums-type": "custom",
5166
+ "description": "Defines that API Resource Integration Aspect only requires a subset of the referenced contract.\n\nFor APIs, this is a list of the operations or tools that need to be available in order to make the integration work.\nThis information helps to narrow down what is really necessary and can help optimize the integration.",
5167
+ "properties": {
5168
+ "operationId": {
5169
+ "type": "string",
5170
+ "description": "The ID of the individual API operation or tool.\n\nThis MUST be an ID that is understood by the used protocol and resource definition format.\nE.g. for OpenAPI this is the `operationId`, for MCP this is the tool `name`.",
5171
+ "examples": [
5172
+ "getOrderById",
5173
+ "createCustomer"
5174
+ ]
5175
+ }
5176
+ },
5177
+ "additionalProperties": false,
5178
+ "required": [
5179
+ "operationId"
5180
+ ]
5181
+ },
4603
5182
  "Vendor": {
4604
5183
  "type": "object",
4605
5184
  "title": "Vendor",
5185
+ "x-ums-type": "root",
4606
5186
  "description": "The vendor of a product or a package, usually a corporation or a customer / user.\n\nThe vendor of a `Package` is the owner or creator of the content of the package.\nThe vendor of a `Product` is the owner of the product.\n\nIf the resources are created by the customer / user of the described system, `customer:vendor:Customer:` MUST be used as vendor.\n\nBoth have already a [vendor namespace](../index.md#vendor-namespace) within their ORD ID.\nThe `Vendor` entity is giving more details on the vendor namespace.\nFor one vendor namespace there MUST only be exactly one `Vendor` ORD entity describing it.\n\nFor example: The only correct value for a SAP vendor reference is `sap:vendor:SAP:`.",
4607
5187
  "properties": {
4608
5188
  "ordId": {
@@ -4673,6 +5253,7 @@
4673
5253
  "type": "object",
4674
5254
  "title": "Changelog Entry",
4675
5255
  "description": "A changelog entry can be used to indicate changes.\nUsually they lead to a change of the version number or the release status.",
5256
+ "x-ums-type": "custom",
4676
5257
  "properties": {
4677
5258
  "version": {
4678
5259
  "type": "string",
@@ -4684,23 +5265,23 @@
4684
5265
  },
4685
5266
  "releaseStatus": {
4686
5267
  "type": "string",
4687
- "description": "The `releaseStatus` specifies the stability of the resource and its external contract.",
5268
+ "description": "Defines the maturity level and stability commitment for the resource's API contract (interface, behavior, data models).\n\nThis indicates whether the resource may undergo backward-incompatible changes. It helps consumers understand the risk\nof depending on the resource and whether it's suitable for production use.\n\nNote: This is independent of `visibility` and does not imply availability guarantees or SLAs - it concerns only the API contract stability.\n\nSee [Lifecycle](../index.md#lifecycle) and [Compatibility](../concepts/compatibility.md) for more details.",
4688
5269
  "oneOf": [
4689
5270
  {
4690
5271
  "const": "beta",
4691
- "description": "The contract for the resource is beta and may not be meant for productive use.\nResources of `beta` status MAY be changed or deleted at the providers discretion."
5272
+ "description": "The API contract has no stability guarantees. Breaking changes may occur at any time without notice or deprecation period.\n\nNot recommended for production use unless you can tolerate breaking changes. Suitable for experimentation, early adopters,\nand feedback gathering. Resources of `beta` status MAY be changed or removed at the provider's discretion."
4692
5273
  },
4693
5274
  {
4694
5275
  "const": "active",
4695
- "description": "Resource is meant for productive use and provides a stable API contract."
5276
+ "description": "The API contract is stable and recommended for production use.\n\nBreaking changes will only be introduced through proper deprecation cycles or new major versions,\nfollowing versioning and compatibility policies. Consumers can rely on active resources with confidence."
4696
5277
  },
4697
5278
  {
4698
5279
  "const": "deprecated",
4699
- "description": "Resource has been deprecated.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (aka. decommissioned / removed) in the future, through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
5280
+ "description": "The resource is still functional but scheduled for removal. No new development should depend on it.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (decommissioned/removed) in the future through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
4700
5281
  },
4701
5282
  {
4702
5283
  "const": "sunset",
4703
- "description": "Resource has been sunset, but is still described.\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
5284
+ "description": "The resource has been decommissioned and is no longer available at runtime. This entry exists for historical reference only.\n\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
4704
5285
  }
4705
5286
  ],
4706
5287
  "examples": [
@@ -4740,6 +5321,7 @@
4740
5321
  "type": "object",
4741
5322
  "title": "Link",
4742
5323
  "description": "Link that can be attached to packages or Open Resource Discovery resources.\n",
5324
+ "x-ums-type": "custom",
4743
5325
  "properties": {
4744
5326
  "title": {
4745
5327
  "type": "string",
@@ -4781,6 +5363,7 @@
4781
5363
  "PackageLink": {
4782
5364
  "type": "object",
4783
5365
  "title": "Package Link",
5366
+ "x-ums-type": "custom",
4784
5367
  "description": "Links with specific semantic meaning that are related to `Package`.\n\nIf a generic [Link](#link) can also be expressed via a Package Link, the latter MUST be chosen.",
4785
5368
  "properties": {
4786
5369
  "type": {
@@ -4860,6 +5443,7 @@
4860
5443
  "APIEventResourceLink": {
4861
5444
  "type": "object",
4862
5445
  "title": "Api and Event Resource Link",
5446
+ "x-ums-type": "custom",
4863
5447
  "description": "Links with specific semantic meaning that are related to API or event resources.\n\nIf a generic [Link](#link) can also be expressed via an API / Event Resource Link, the latter MUST be chosen.",
4864
5448
  "properties": {
4865
5449
  "type": {
@@ -4942,6 +5526,7 @@
4942
5526
  "DataProductLink": {
4943
5527
  "type": "object",
4944
5528
  "title": "Data Product Link",
5529
+ "x-ums-type": "custom",
4945
5530
  "description": "Links with specific semantic meaning that are related to Data Product resources.\nIf a generic [Link](#link) can also be expressed via Data Product Link, the latter MUST be chosen.",
4946
5531
  "properties": {
4947
5532
  "type": {
@@ -5010,6 +5595,7 @@
5010
5595
  "SystemInstance": {
5011
5596
  "type": "object",
5012
5597
  "title": "System Instance",
5598
+ "x-ums-type": "ignore",
5013
5599
  "description": "A [system instance](../index.md#system-instance) is a concrete, running instance of a system type.\nIn a multi-tenant system, it corresponds to a tenant.\nIn a single-tenant system, it corresponds to the [system installation](../index.md#system-deployment) itself.",
5014
5600
  "properties": {
5015
5601
  "baseUrl": {
@@ -5074,6 +5660,7 @@
5074
5660
  "type": "object",
5075
5661
  "title": "System Type",
5076
5662
  "description": "A [system type](../index.md#system-type) is the abstract type of an application or service, from operational perspective.",
5663
+ "x-ums-type": "ignore",
5077
5664
  "properties": {
5078
5665
  "systemNamespace": {
5079
5666
  "type": "string",
@@ -5128,6 +5715,7 @@
5128
5715
  "type": "object",
5129
5716
  "title": "System Version",
5130
5717
  "description": "A [system version](../index.md#system-version) states the design-time version / release of a [system instance](../index.md#system-instance).\nIt provides versioning for operational purposes for the [system type](../index.md#system-type).",
5718
+ "x-ums-type": "ignore",
5131
5719
  "properties": {
5132
5720
  "version": {
5133
5721
  "type": "string",
@@ -5185,6 +5773,7 @@
5185
5773
  "type": "object",
5186
5774
  "title": "Metadata Definition Access Strategy",
5187
5775
  "description": "Defines the [access strategy](../../spec-extensions/access-strategies/) for accessing the resource definitions.",
5776
+ "x-ums-type": "custom",
5188
5777
  "properties": {
5189
5778
  "type": {
5190
5779
  "type": "string",
@@ -5250,6 +5839,7 @@
5250
5839
  "type": "object",
5251
5840
  "title": "Credential Exchange Strategy",
5252
5841
  "x-feature-status": "alpha",
5842
+ "x-ums-type": "custom",
5253
5843
  "description": "The credential exchange strategy specifies how a set of credentials for a particular usage\nof the APIs in the Consumption Bundle can be obtained.\nUntil a SAP-wide strategy for obtaining such credentials exists and is agreed upon,\nboth LoBs and aggregators (namely Unified Customer Landscape) can define their own strategy specifications.\n\nWhile the actual flow in term of API calls can differ between the different strategies,\nthe end goal would always be the possibility for automatically obtaining credentials for each client\nthat would like to use the APIs from a particular bundle.",
5254
5844
  "properties": {
5255
5845
  "type": {
@@ -5300,6 +5890,7 @@
5300
5890
  "title": "Labels",
5301
5891
  "type": "object",
5302
5892
  "description": "Generic labels that can be applied to most ORD information.\nThey are defined as an object that may have arbitrary keys.\nThe value of a key is an array of strings.\n\nLabels can be used to attach technical information that cannot be expressed natively in ORD.\nAn ORD aggregator should allow to categorize and query information based on the labels provided.\n\nIf multiple parties rely on the existence of certain label information,\nstandardization through ORD SHOULD be preferred.\n\nAll labels attached to a `Package` will be inherited to the resources they contain.\nDuplicate labels will be merged by the ORD aggregator according to the following rules:\n* Values of the same label key will be merged.\n* Duplicate values of the same label key will be removed.",
5893
+ "x-ums-type": "custom",
5303
5894
  "patternProperties": {
5304
5895
  "^[a-zA-Z0-9-_.]*$": {
5305
5896
  "type": "array",
@@ -5321,6 +5912,7 @@
5321
5912
  "GroupType": {
5322
5913
  "title": "Group Type",
5323
5914
  "type": "object",
5915
+ "x-ums-type": "root",
5324
5916
  "description": "A Group Type defines the semantics of [group assignments](#group).\nWhat the Group Type means and how it is to be used correctly SHOULD be described in the `description` (which may include markdown links).\n\nGroup Types can be defined centrally (ownership by authority namespace) or decentrally (defined by application / service itself).\n\nTo learn more about the concept, see [Group Concept Documentation](../concepts/grouping-and-bundling#groups).",
5325
5917
  "x-introduced-in-version": "1.9.0",
5326
5918
  "properties": {
@@ -5350,6 +5942,23 @@
5350
5942
  "SAP S/4HANA Cloud, our next generation cloud ERP suite designed for\nin-memory computing, acts as a digital core, connecting your\nenterprise with people, business networks, the Internet of Things,\nBig Data, and more.\n"
5351
5943
  ]
5352
5944
  },
5945
+ "labels": {
5946
+ "$ref": "#/definitions/Labels"
5947
+ },
5948
+ "correlationIds": {
5949
+ "type": "array",
5950
+ "description": "Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record).\n\nThey express an \"identity\" / \"equals\" / \"mappable\" relationship to the target ID.\n\nIf a \"part of\" relationship needs to be expressed, use the `partOfGroups` assignment instead.\n\nMUST be a valid [Correlation ID](../index.md#correlation-id).",
5951
+ "items": {
5952
+ "type": "string",
5953
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+):([a-zA-Z0-9._\\-\\/]+)$",
5954
+ "maxLength": 255
5955
+ },
5956
+ "examples": [
5957
+ [
5958
+ "sap.s4:communicationScenario:SAP_COM_0008"
5959
+ ]
5960
+ ]
5961
+ },
5353
5962
  "partOfGroupTypes": {
5354
5963
  "type": "array",
5355
5964
  "items": {
@@ -5377,6 +5986,7 @@
5377
5986
  "Group": {
5378
5987
  "title": "Group",
5379
5988
  "type": "object",
5989
+ "x-ums-type": "root",
5380
5990
  "description": "Group (instance) that resources can be assigned to.\n\nGroups are a lightweight custom taxonomy concept.\nThey express a \"part of\" relationship to the chosen group concept.\nIf an \"identity / equals\" relationship needs to be expressed, use the `correlationIds` instead.\n\nTo learn more about the concept, see [Group Concept Documentation](../concepts/grouping-and-bundling#groups).",
5381
5991
  "x-introduced-in-version": "1.9.0",
5382
5992
  "properties": {
@@ -5417,6 +6027,23 @@
5417
6027
  "SAP S/4HANA Cloud, our next generation cloud ERP suite designed for\nin-memory computing, acts as a digital core, connecting your\nenterprise with people, business networks, the Internet of Things,\nBig Data, and more.\n"
5418
6028
  ]
5419
6029
  },
6030
+ "labels": {
6031
+ "$ref": "#/definitions/Labels"
6032
+ },
6033
+ "correlationIds": {
6034
+ "type": "array",
6035
+ "description": "Correlation IDs can be used to create a reference to related data in other repositories (especially to the system of record).\n\nThey express an \"identity\" / \"equals\" / \"mappable\" relationship to the target ID.\n\nIf a \"part of\" relationship needs to be expressed, use the `partOfGroups` assignment instead.\n\nMUST be a valid [Correlation ID](../index.md#correlation-id).",
6036
+ "items": {
6037
+ "type": "string",
6038
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+):([a-zA-Z0-9._\\-\\/]+)$",
6039
+ "maxLength": 255
6040
+ },
6041
+ "examples": [
6042
+ [
6043
+ "sap.s4:communicationScenario:SAP_COM_0008"
6044
+ ]
6045
+ ]
6046
+ },
5420
6047
  "partOfGroups": {
5421
6048
  "type": "array",
5422
6049
  "items": {
@@ -5449,6 +6076,7 @@
5449
6076
  "type": "object",
5450
6077
  "description": "Generic documentation labels that can be applied to most ORD information.\nThey are defined as an object that may have arbitrary keys.\nThe value of a key is an array of [CommonMark](https://spec.commonmark.org/) (Markdown) text.\n\nDocumentation Labels can be used to attach human readable documentation that cannot be expressed natively in ORD.\nA documentation tool (like an API Catalog) can use the documentation labels to provide generic documentation \"snippets\".\nDue to the given structure they can be displayed e.g. as tables.\n\nThe key of the documentation Label is plain-text (MUST not contain line breaks) and denotes the subject matter that is described.\nThe values (multiple can be provided for the same key) are [CommonMark](https://spec.commonmark.org/) (Markdown) text\nwhich describes the subject matter or lists options for the key.\n\nIn contrast to regular labels, documentation labels are not meant to be used to categorize or query information.",
5451
6078
  "x-introduced-in-version": "1.1.0",
6079
+ "x-ums-type": "custom",
5452
6080
  "patternProperties": {
5453
6081
  "^.*$": {
5454
6082
  "type": "array",
@@ -5469,6 +6097,7 @@
5469
6097
  "Extensible": {
5470
6098
  "title": "Extensible",
5471
6099
  "type": "object",
6100
+ "x-ums-type": "embedded",
5472
6101
  "description": "Contains information about the extensibility of this resource.\n\nIf applicable, a description and further resources about extending this resource are provided.",
5473
6102
  "properties": {
5474
6103
  "supported": {
@@ -5504,6 +6133,7 @@
5504
6133
  "title": "Entity Type Mapping",
5505
6134
  "type": "object",
5506
6135
  "x-introduced-in-version": "1.6.0",
6136
+ "x-ums-type": "custom",
5507
6137
  "description": "An API or Event resource may optionally define its `entityTypeMappings`.\nThis is used to map and correlate the API models to the underlying, conceptual **entity types**.\n\nIf the mapping from API resource to entity types is not defined,\ncertain use-cases that rely on this explicit connection will not be possible.\n\nThis mapping is meant to be rather fine granular.\nTherefore, the mapping needs to be done on basis of one of the referenced resource definitions,\nas only there we know the details and the actual contents of the API Model of the API resource.\n\nFor the various resource definition formats the selection of API models may need to be expressed differently.\nAs a consequence, there are different types of selectors that are specialized toward certain resource definition formats.\n\nThe target of the mapping is a correlation to an entity type via a [Correlation ID](../index.md#correlation-id)\nor to an [ORD ID](../index.md#ord-id) of an entity type.\nIt is assumed that the entity types are described in more detail or on a different abstraction level via metadata.\nWhen the correlation ID is used, an ORD consumer may need to know how to access the entity type metadata through conventions.\nThis can be determined either by the namespace of the correlation ID,\nor through a defined and known `implementationStandard` that can resolve the `localId` fragment of the correlation ID .\n\nAt SAP, the metadata about entity types could be retrieved via the CSN_EXPOSURE service.\nTo indicate this, the service needs to be implemented and described in ORD with `implementationStandard` set to `sap:csn-exposure:v1`).\n\nODM 2.0 relies on the entity type mappings and uses the the mapping to express the relationship of an API to the\ncorresponding ODM entity. ORD consumers like SAP Business Accelerator Hub consume the mapping to make the relationships navigate-able for customers.",
5508
6138
  "properties": {
5509
6139
  "apiModelSelectors": {
@@ -5541,9 +6171,74 @@
5541
6171
  "entityTypeTargets"
5542
6172
  ]
5543
6173
  },
6174
+ "ApiCompatibility": {
6175
+ "title": "API Compatibility",
6176
+ "x-introduced-in-version": "1.13.0",
6177
+ "x-ums-type": "embedded",
6178
+ "type": "object",
6179
+ "description": "Describes the compatibility of the API with other APIs. This can be used to express that an API is compatible with another API version.",
6180
+ "properties": {
6181
+ "ordId": {
6182
+ "type": "string",
6183
+ "description": "ORD ID of the APIResource that serves as contract that this resource is compatible with.\n\nMUST be a valid reference to an (usually external) [API Resource](#api-resource) ORD ID.",
6184
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(apiResource):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
6185
+ "maxLength": 255,
6186
+ "examples": [
6187
+ "sap.s4:apiResource:API_BILL_OF_MATERIAL_SRV:v1"
6188
+ ]
6189
+ },
6190
+ "maxVersion": {
6191
+ "type": "string",
6192
+ "description": "Specifies the maximum version of the interface contract that this resource is compatible with. This is the version, that the resource fully implements and supports.\n\nEven if the interface contract evolves compatible, this resource will not be compatible with versions beyond the specified one. It is important to consider, given the example of an API version 1.0, that has the fields A and B.\nBeing compatible with version 1.0 means to have exactly the fields A and B and potential tenant specific extensions in a dedicated namespace.\nIf an API contract changes to version 1.1 compatible by adding field C, the API declaring compatibility towards 1.0, will miss field C. Only if adopting the contract of 1.1 with having fields A, B, and C, such an API is also\ncompatible with version 1.1 of the contract. However, a client relying on version 1.0 of the contract, can still work with the API being compatible with version 1.1 of the contract.\n\nFollowing the [Semantic Versioning 2.0.0](https://semver.org/) standard, patch versions (x.y.Z) must not have impact on the schema/contract. Therefore, the maxVersion are only the major.minor parts of a semantic version.",
6193
+ "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$",
6194
+ "examples": [
6195
+ "1.2",
6196
+ "2.0"
6197
+ ]
6198
+ }
6199
+ },
6200
+ "additionalProperties": false,
6201
+ "required": [
6202
+ "ordId",
6203
+ "maxVersion"
6204
+ ]
6205
+ },
6206
+ "EventCompatibility": {
6207
+ "title": "Event Compatibility",
6208
+ "x-introduced-in-version": "1.13.0",
6209
+ "x-ums-type": "embedded",
6210
+ "type": "object",
6211
+ "description": "Describes the compatibility of the Event with other Events. This can be used to express that an Event is compatible with another Event version.",
6212
+ "properties": {
6213
+ "ordId": {
6214
+ "type": "string",
6215
+ "description": "ORD ID of the EventResource that serves as contract that this resource is compatible with.\n\nMUST be a valid reference to an (usually external) [Event Resource](#event-resource) ORD ID.",
6216
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(eventResource):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
6217
+ "maxLength": 255,
6218
+ "examples": [
6219
+ "sap.s4:eventResource:BillofMaterialEvents:v1"
6220
+ ]
6221
+ },
6222
+ "maxVersion": {
6223
+ "type": "string",
6224
+ "description": "Specifies the maximum version of the interface contract that this resource is compatible with. This is the version, that the resource fully implements and supports.\n\nEven if the interface contract evolves compatible, this resource will not be compatible with versions beyond the specified one. It is important to consider, given the example of an event version 1.0, that has the fields A and B. Being compatible with version 1.0 means to have exactly the fields A and B and potential tenant specific extensions in a dedicated namespace.\nIf an event contract changes to version 1.1 compatible by adding field C, the event declaring compatibility towards 1.0, will miss field C. Only if adopting the contract of 1.1 with having fields A, B, and C, such an event is also\ncompatible with version 1.1 of the contract. However, a client relying on version 1.0 of the contract, can still work with the event being compatible with version 1.1 of the contract.\n\nFollowing the [Semantic Versioning 2.0.0](https://semver.org/) standard, patch versions (x.y.Z) must not have impact on the schema/contract. Therefore, the maxVersion are only the major.minor parts of a semantic version.",
6225
+ "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$",
6226
+ "examples": [
6227
+ "1.2",
6228
+ "2.0"
6229
+ ]
6230
+ }
6231
+ },
6232
+ "additionalProperties": false,
6233
+ "required": [
6234
+ "ordId",
6235
+ "maxVersion"
6236
+ ]
6237
+ },
5544
6238
  "ApiModelSelectorOData": {
5545
6239
  "title": "Api Model Selector (Odata)",
5546
6240
  "x-introduced-in-version": "1.6.0",
6241
+ "x-ums-type": "custom",
5547
6242
  "type": "object",
5548
6243
  "description": "API Model Selector for OData, using entity set names for the selection.\n\nMUST only be used if the API Resource provides an API Resource Definition of type `edmx`.",
5549
6244
  "properties": {
@@ -5578,6 +6273,7 @@
5578
6273
  "ApiModelSelectorJsonPointer": {
5579
6274
  "title": "Api Model Selector (Json Pointer)",
5580
6275
  "x-introduced-in-version": "1.6.0",
6276
+ "x-ums-type": "custom",
5581
6277
  "type": "object",
5582
6278
  "description": "Generic API Model Selector for JSON / YAML based resource definitions.\nIt uses a [JSON Pointer](https://datatracker.ietf.org/doc/html/rfc6901) that points to the\nentity type description within the resource definition.\n\nThe JSON Pointer always to refer to the structure of the document as originally provided, before further post-processing like resolving $ref properties.\n\nMUST only be used if the API Resource provides an API Resource Definition of media type `application/json` or `text/yaml`.",
5583
6279
  "properties": {
@@ -5611,9 +6307,35 @@
5611
6307
  }
5612
6308
  ]
5613
6309
  },
6310
+ "ExposedApiResourcesTarget": {
6311
+ "title": "Exposed API Resource",
6312
+ "x-introduced-in-version": "1.14.0",
6313
+ "x-ums-type": "embedded",
6314
+ "type": "object",
6315
+ "description": "Reference to an API Resource that exposes the functionality of an agent.\n\nThis is a complex object to allow additional properties / selections to be attached in the future.",
6316
+ "properties": {
6317
+ "ordId": {
6318
+ "type": "string",
6319
+ "description": "The API Resource ORD ID that this reference points to.\n\nMUST be a valid reference to an [API Resource](#api-resource) ORD ID.",
6320
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(apiResource):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
6321
+ "maxLength": 255,
6322
+ "examples": [
6323
+ "sap.foo:apiResource:DisputeResolutionAgent:v1"
6324
+ ],
6325
+ "x-association-target": [
6326
+ "#/definitions/ApiResource/ordId"
6327
+ ]
6328
+ }
6329
+ },
6330
+ "required": [
6331
+ "ordId"
6332
+ ],
6333
+ "additionalProperties": false
6334
+ },
5614
6335
  "EntityTypeOrdIdTarget": {
5615
- "title": "Entity Type Target (Ord Id)",
6336
+ "title": "Entity Type Target (ORD ID)",
5616
6337
  "x-introduced-in-version": "1.6.0",
6338
+ "x-ums-type": "custom",
5617
6339
  "type": "object",
5618
6340
  "description": "Define which entity type is the target of an entity type mapping\n\nEntity types can be referenced using a [ORD ID](../index.md#ord-id) of an entity type.",
5619
6341
  "properties": {
@@ -5640,6 +6362,7 @@
5640
6362
  "type": "object",
5641
6363
  "description": "Define which entity type is the target of an entity type mapping\n\nEntity types can be referenced using a [Correlation ID](../index.md#correlation-id).",
5642
6364
  "x-introduced-in-version": "1.6.0",
6365
+ "x-ums-type": "custom",
5643
6366
  "properties": {
5644
6367
  "correlationId": {
5645
6368
  "type": "string",
@@ -5658,6 +6381,7 @@
5658
6381
  "RelatedEntityType": {
5659
6382
  "title": "Related Entity Type",
5660
6383
  "x-introduced-in-version": "1.9.0",
6384
+ "x-ums-type": "embedded",
5661
6385
  "type": "object",
5662
6386
  "description": "Defines the relation between Entity Types (via its ORD ID).",
5663
6387
  "properties": {
@@ -5703,6 +6427,7 @@
5703
6427
  "type": "object",
5704
6428
  "description": "Defines which Entity Type is exposed through (via its ORD ID).",
5705
6429
  "x-introduced-in-version": "1.11.0",
6430
+ "x-ums-type": "embedded",
5706
6431
  "properties": {
5707
6432
  "ordId": {
5708
6433
  "type": "string",
@@ -5725,12 +6450,13 @@
5725
6450
  "Tombstone": {
5726
6451
  "type": "object",
5727
6452
  "title": "Tombstone",
6453
+ "x-ums-type": "ignore",
5728
6454
  "description": "A tombstone indicates that a previously published ORD resource or taxonomy has been removed / decommissioned / archived.\nThis MUST be indicated explicitly, so ORD aggregators and consumers can learn about the removal.\n\nExactly one of the IDs MUST be provided to state which ORD resource or taxonomy item the Tombstone addresses.\n\nThe tombstone MUST be kept sufficiently long (at least 31 days) so that all ORD aggregators can learn about the tombstone.",
5729
6455
  "properties": {
5730
6456
  "ordId": {
5731
6457
  "type": "string",
5732
6458
  "description": "[ORD ID](../index.md#ord-id) of the ORD resource/taxonomy that has been removed.",
5733
- "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(package|consumptionBundle|product|vendor|apiResource|eventResource|capability|entityType|integrationDependency|dataProduct):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*|)?$",
6459
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(package|consumptionBundle|product|vendor|apiResource|eventResource|capability|entityType|integrationDependency|dataProduct|agent):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*|)?$",
5734
6460
  "maxLength": 255,
5735
6461
  "examples": [
5736
6462
  "sap.xref:package:SomePackage:v1"
@@ -5745,7 +6471,8 @@
5745
6471
  "#/definitions/Capability/ordId",
5746
6472
  "#/definitions/EntityType/ordId",
5747
6473
  "#/definitions/IntegrationDependency/ordId",
5748
- "#/definitions/DataProduct/ordId"
6474
+ "#/definitions/DataProduct/ordId",
6475
+ "#/definitions/Agent/ordId"
5749
6476
  ]
5750
6477
  },
5751
6478
  "groupId": {
@@ -5805,12 +6532,13 @@
5805
6532
  "OrdResource": {
5806
6533
  "type": "object",
5807
6534
  "title": "Ord Resource (abstract)",
6535
+ "x-ums-type": "root",
5808
6536
  "description": "Abstract definition of shared properties across ORD Resources.",
5809
6537
  "properties": {
5810
6538
  "ordId": {
5811
6539
  "type": "string",
5812
6540
  "description": "The ORD ID is a stable, globally unique ID for ORD resources or taxonomy.\n\nIt MUST be a valid [ORD ID](../index.md#ord-id) of the appropriate ORD type.",
5813
- "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(apiResource|eventResource|capability|dataProduct):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*|)$",
6541
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(apiResource|eventResource|capability|dataProduct|agent):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*|)$",
5814
6542
  "maxLength": 255,
5815
6543
  "examples": []
5816
6544
  },
@@ -5893,41 +6621,41 @@
5893
6621
  },
5894
6622
  "visibility": {
5895
6623
  "type": "string",
5896
- "description": "The visibility states who is allowed to \"see\" the described resource or capability.",
6624
+ "description": "Defines metadata access control - which categories of consumers are allowed to discover and access the resource and its metadata.\n\nThis controls who can see that the resource exists and retrieve its metadata level information.\nIt does NOT control runtime access to the resource itself - that is managed separately through authentication and authorization mechanisms.\n\nUse this to prevent exposing internal implementation details to inappropriate consumer audiences.",
5897
6625
  "oneOf": [
5898
6626
  {
5899
6627
  "const": "public",
5900
- "description": "Publicly visible to customers and 3rd parties.\nUsually this includes an contract on the API stability, e.g. the [SAP API Deprecation Policy](https://help.sap.com/viewer/84b35b9c39b247e3ba2a31f02beee46d/Cloud/en-US/5cbfda5a9efe4e97a3e24ddaf7ec5c16.html)."
6628
+ "description": "Metadata can be discovered and accessed by anyone, including customers, partners, and unauthenticated external parties.\n\nPublic resources typically come with stability guarantees, expressed via versioning and follow formal API lifecycle management. For more details see [Version and Lifecycle](../index.md#version-and-lifecycle) section.\nand follow formal API lifecycle management and deprecation policies.\n\nExample: A REST API that customers use to integrate with your SaaS product."
5901
6629
  },
5902
6630
  {
5903
6631
  "const": "internal",
5904
- "description": "Visible to other applications within the same [vendor](#vendor).\nHowever, they are not officially exposed and communicated to customers and 3rd parties.\nThey might not come with the same guarantees on API stability.\n\nInternal resources MUST NOT be made available to consumers without checking the necessary access permissions, e.g., a public API Catalog.\nInternal resources MAY be published through an internal API Catalog if the access permissions are ensured by it."
6632
+ "description": "Metadata can only be discovered and accessed by vendor internal consumers (e.g. applications or services of the same vendor).\nMUST NOT be made available to external parties or vendor customers.\n\nInternal resources are intended for integration between a vendors own applications and services.\nAPI stability and maturity are explicitly defined via the `releaseStatus` property, which is a separate concern from visibility.\n\nInternal resources MUST NOT be made available without checking the necessary access permissions.\nInternal resources MAY be published through an internal API Catalog if access permissions are ensured by it."
5905
6633
  },
5906
6634
  {
5907
6635
  "const": "private",
5908
- "description": "Visible only to the provider application or service, usually within the same system namespace / system type.\n\nPrivate resources MUST NOT be made available to public consumers or consumers outside of the \"private\" scope of the described application."
6636
+ "description": "Metadata should not be discoverable outside the application / service's own deployment scope (e.g., outside of the provider application or the same system namespace / system type).\nUsed for metadata completeness when describing implementation details or dependencies.\n\nPrivate resources usually have no stability guarantees and can change or be removed at any time.\nThese are typically implementation details not meant for consumption by other services.\n\nExample: Services only used within a microservice architecture or APIs that are only used for the own UIs, not for general consumption.\n\nPrivate resources MUST NOT be made discoverable or accessible outside the application / service's own deployment scope."
5909
6637
  }
5910
6638
  ]
5911
6639
  },
5912
6640
  "releaseStatus": {
5913
6641
  "type": "string",
5914
- "description": "The `releaseStatus` specifies the stability of the resource and its external contract.",
6642
+ "description": "Defines the maturity level and stability commitment for the resource's API contract (interface, behavior, data models).\n\nThis indicates whether the resource may undergo backward-incompatible changes. It helps consumers understand the risk\nof depending on the resource and whether it's suitable for production use.\n\nNote: This is independent of `visibility` and does not imply availability guarantees or SLAs - it concerns only the API contract stability.\n\nSee [Lifecycle](../index.md#lifecycle) and [Compatibility](../concepts/compatibility.md) for more details.",
5915
6643
  "oneOf": [
5916
6644
  {
5917
6645
  "const": "beta",
5918
- "description": "The contract for the resource is beta and may not be meant for productive use.\nResources of `beta` status MAY be changed or deleted at the providers discretion."
6646
+ "description": "The API contract has no stability guarantees. Breaking changes may occur at any time without notice or deprecation period.\n\nNot recommended for production use unless you can tolerate breaking changes. Suitable for experimentation, early adopters,\nand feedback gathering. Resources of `beta` status MAY be changed or removed at the provider's discretion."
5919
6647
  },
5920
6648
  {
5921
6649
  "const": "active",
5922
- "description": "Resource is meant for productive use and provides a stable API contract."
6650
+ "description": "The API contract is stable and recommended for production use.\n\nBreaking changes will only be introduced through proper deprecation cycles or new major versions,\nfollowing versioning and compatibility policies. Consumers can rely on active resources with confidence."
5923
6651
  },
5924
6652
  {
5925
6653
  "const": "deprecated",
5926
- "description": "Resource has been deprecated.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (aka. decommissioned / removed) in the future, through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
6654
+ "description": "The resource is still functional but scheduled for removal. No new development should depend on it.\n\nIf the `releaseStatus` is set to `deprecated`, the `deprecationDate` SHOULD be provided.\n\nIf successor resources exist, they MUST be referenced through `successors`.\n\nA deprecated resource MAY be sunset (decommissioned/removed) in the future through setting a `Tombstone`.\nOnce the resource is sunset, its description MAY be removed from ORD, but could also be kept with `releaseStatus` set to `sunset`."
5927
6655
  },
5928
6656
  {
5929
6657
  "const": "sunset",
5930
- "description": "Resource has been sunset, but is still described.\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
6658
+ "description": "The resource has been decommissioned and is no longer available at runtime. This entry exists for historical reference only.\n\nIf the status is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
5931
6659
  }
5932
6660
  ],
5933
6661
  "examples": [