@open-resource-discovery/specification 1.14.4 → 1.15.0

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.
@@ -82,7 +82,7 @@
82
82
  "oneOf": [
83
83
  {
84
84
  "const": "system-type",
85
- "description": "Describes a static [system-type](../index.md#def-system-type) perspective, which is version independent.\n\nIf a system is not versioned (continuous delivery) or resources are not tied to a system, the system-type perspective\nimplies that the information apply, no matter which system version or instance."
85
+ "description": "Describes a static [system-type](../index.md#system-type) perspective, which is version independent.\n\nIf a system is not versioned (continuous delivery) or resources are not tied to a system, the system-type perspective\nimplies that the information apply, no matter which system version or instance."
86
86
  },
87
87
  {
88
88
  "const": "system-version",
@@ -38,10 +38,11 @@
38
38
  "1.11",
39
39
  "1.12",
40
40
  "1.13",
41
- "1.14"
41
+ "1.14",
42
+ "1.15"
42
43
  ],
43
44
  "examples": [
44
- "1.14"
45
+ "1.15"
45
46
  ]
46
47
  },
47
48
  "description": {
@@ -60,7 +61,7 @@
60
61
  "oneOf": [
61
62
  {
62
63
  "const": "system-type",
63
- "description": "Describes a static [system-type](../index.md#def-system-type) perspective, which is version independent.\n\nIf a system is not versioned (continuous delivery) or resources are not tied to a system, the system-type perspective\nimplies that the information apply, no matter which system version or instance."
64
+ "description": "Describes a static [system-type](../index.md#system-type) perspective, which is version independent.\n\nIf a system is not versioned (continuous delivery) or resources are not tied to a system, the system-type perspective\nimplies that the information apply, no matter which system version or instance."
64
65
  },
65
66
  {
66
67
  "const": "system-version",
@@ -80,10 +81,6 @@
80
81
  "system-instance"
81
82
  ]
82
83
  },
83
- "describedSystemInstance": {
84
- "$ref": "#/definitions/SystemInstance",
85
- "description": "Information on the [system-instance](../index.md#system-instance) that this ORD document describes.\n\nWhether this information is required or recommended to add, depends on the requirements of the ORD aggregator."
86
- },
87
84
  "describedSystemType": {
88
85
  "$ref": "#/definitions/SystemType",
89
86
  "x-introduced-in-version": "1.10.0",
@@ -94,6 +91,10 @@
94
91
  "x-introduced-in-version": "1.10.0",
95
92
  "description": "Information on the [system version](../index.md#system-version) that this ORD document describes."
96
93
  },
94
+ "describedSystemInstance": {
95
+ "$ref": "#/definitions/SystemInstance",
96
+ "description": "Information on the [system-instance](../index.md#system-instance) that this ORD document describes.\n\nWhether this information is required or recommended to add, depends on the requirements of the ORD aggregator."
97
+ },
97
98
  "policyLevel": {
98
99
  "type": "string",
99
100
  "description": "The [policy level](../../spec-extensions/policy-levels/) (aka. compliance level) that the described resources need to be compliant with.\nDepending on the chosen policy level, additional expectations and validations rules will be applied.\n\nThe policy level can be defined on ORD Document level, but also be overwritten on an individual package or resource level.\n",
@@ -192,6 +193,15 @@
192
193
  "$ref": "#/definitions/Agent"
193
194
  }
194
195
  },
196
+ "overlays": {
197
+ "type": "array",
198
+ "description": "Array of all metadata overlays described in this ORD document.\n\nAn ORD Overlay resource is a standalone, versioned resource that references an overlay document which patches\nresource definitions (e.g. OpenAPI, AsyncAPI, OData CSDL) without modifying the originals.\n\nFor overlays that are tightly coupled to a single API or Event resource, consider attaching them directly\nas a `resourceDefinitions` entry with `type: ord:overlay:v1` instead.",
199
+ "x-introduced-in-version": "1.15.0",
200
+ "x-feature-status": "alpha",
201
+ "items": {
202
+ "$ref": "#/definitions/Overlay"
203
+ }
204
+ },
195
205
  "integrationDependencies": {
196
206
  "type": "array",
197
207
  "description": "Array of all integration dependencies that are described in this ORD document.",
@@ -285,6 +295,20 @@
285
295
  "91cd9972-c05d-4d29-8b6e-dbef2a2d48e9"
286
296
  ]
287
297
  },
298
+ "correlationIds": {
299
+ "type": "array",
300
+ "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).",
301
+ "items": {
302
+ "type": "string",
303
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+):([a-zA-Z0-9._\\-\\/]+)$",
304
+ "maxLength": 255
305
+ },
306
+ "examples": [
307
+ [
308
+ "foo.bar:conceptName:localIdentifier"
309
+ ]
310
+ ]
311
+ },
288
312
  "title": {
289
313
  "type": "string",
290
314
  "description": "Human-readable title.\n\nMUST NOT exceed 255 chars.\nMUST NOT contain line breaks.",
@@ -1260,7 +1284,7 @@
1260
1284
  },
1261
1285
  "resourceDefinitions": {
1262
1286
  "type": "array",
1263
- "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.",
1287
+ "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.\nThe combination of `type`, `purpose`, and `visibility` MUST be unique within the list.\n\nA definition without a `purpose` is considered the primary/default definition for its type.\nAdditional definitions of the same type MAY be provided if they have a distinct `purpose` (e.g., `ord:ai-enrichment` for AI-optimized definitions).\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.",
1264
1288
  "items": {
1265
1289
  "$ref": "#/definitions/ApiResourceDefinition"
1266
1290
  }
@@ -2033,7 +2057,7 @@
2033
2057
  },
2034
2058
  "resourceDefinitions": {
2035
2059
  "type": "array",
2036
- "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.",
2060
+ "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.\nThe combination of `type`, `purpose`, and `visibility` MUST be unique within the list.\n\nA definition without a `purpose` is considered the primary/default definition for its type.\nAdditional definitions of the same type MAY be provided if they have a distinct `purpose` (e.g., `ord:ai-enrichment` for AI-optimized definitions).\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.",
2037
2061
  "items": {
2038
2062
  "$ref": "#/definitions/EventResourceDefinition"
2039
2063
  }
@@ -2877,7 +2901,7 @@
2877
2901
  },
2878
2902
  "examples": [
2879
2903
  [
2880
- "sap.s4:communicationScenario:SAP_COM_0008"
2904
+ "foo.bar:conceptName:localIdentifier"
2881
2905
  ]
2882
2906
  ]
2883
2907
  },
@@ -3689,6 +3713,12 @@
3689
3713
  "description": "[CSN Interop Effective](https://sap.github.io/csn-interop-specification/) is a standardized and interoperable [CSN](https://cap.cloud.sap/docs/cds/csn) export, used to describe [CDS](https://cap.cloud.sap/docs/cds/) models.\nThe `mediaType` MUST be be set to `application/json`.",
3690
3714
  "x-introduced-in-version": "1.9.4"
3691
3715
  },
3716
+ {
3717
+ "const": "ord:overlay:v1",
3718
+ "x-feature-status": "alpha",
3719
+ "x-introduced-in-version": "1.15.0",
3720
+ "description": "ORD Overlay file for patching referenced resource definition files.\nFor details, see [ORD Overlay](../../spec-v1/interfaces/OrdOverlay).\nThe `mediaType` MUST be set to `application/json`."
3721
+ },
3692
3722
  {
3693
3723
  "const": "custom",
3694
3724
  "description": "If chosen, `customType` MUST be provided."
@@ -3758,6 +3788,26 @@
3758
3788
  }
3759
3789
  ]
3760
3790
  ]
3791
+ },
3792
+ "purpose": {
3793
+ "type": "string",
3794
+ "x-feature-status": "alpha",
3795
+ "x-introduced-in-version": "1.15.0",
3796
+ "description": "Describes the intended purpose or role of this resource definition.\n\nWhile `type` specifies the format (e.g., OpenAPI, AsyncAPI), `purpose` indicates what the definition is used for.\nThis allows multiple definitions of the same type to coexist when they serve different purposes.\n\nFor example, an API Resource might have multiple OpenAPI definitions:\none for standard API documentation and another specifically enriched for AI/agent consumption.\n\nMUST be a valid [Concept ID](../index.md#concept-id).",
3797
+ "anyOf": [
3798
+ {
3799
+ "type": "string",
3800
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+)$",
3801
+ "description": "Any valid [Concept ID](../index.md#concept-id)."
3802
+ },
3803
+ {
3804
+ "const": "ord:ai-enrichment",
3805
+ "description": "The definition is enriched with additional metadata specifically for AI/agent consumption.\nThis may include enhanced descriptions, examples, or semantic annotations that help AI systems\nbetter understand and utilize the API or event resource."
3806
+ }
3807
+ ],
3808
+ "examples": [
3809
+ "ord:ai-enrichment"
3810
+ ]
3761
3811
  }
3762
3812
  },
3763
3813
  "additionalProperties": false,
@@ -3790,6 +3840,12 @@
3790
3840
  "const": "sap-csn-interop-effective-v1",
3791
3841
  "description": "[CSN Interop Effective](https://sap.github.io/csn-interop-specification/) is a standardized and interoperable flavor of [CSN](https://cap.cloud.sap/docs/cds/csn).\nCSN is a notation for compact representations of [CDS](https://cap.cloud.sap/docs/cds/) models.\n\nIn CDS based frameworks (like ABAP, CAP), APIs and Events are derived from a CDS Service definition and its constituent entities.\nIn this case the original CDS service definition MAY be attached, as it usually contains more metadata insight than other formats.\n\nWARNING: Only expose the CDS Service definition that effectively is governed by the API contract and stability. Do not expose internal models!\n\nThe `mediaType` MUST be be set to `application/json`."
3792
3842
  },
3843
+ {
3844
+ "const": "ord:overlay:v1",
3845
+ "x-feature-status": "alpha",
3846
+ "x-introduced-in-version": "1.15.0",
3847
+ "description": "ORD Overlay file for patching metadata / resource definition files.\nFor details, see [ORD Overlay](../../spec-v1/interfaces/OrdOverlay).\nThe `mediaType` MUST be set to `application/json`."
3848
+ },
3793
3849
  {
3794
3850
  "const": "custom",
3795
3851
  "description": "If chosen, `customType` MUST be provided."
@@ -3858,6 +3914,26 @@
3858
3914
  "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."
3859
3915
  }
3860
3916
  ]
3917
+ },
3918
+ "purpose": {
3919
+ "type": "string",
3920
+ "x-feature-status": "alpha",
3921
+ "x-introduced-in-version": "1.15.0",
3922
+ "description": "Describes the intended purpose or role of this resource definition.\n\nWhile `type` specifies the format (e.g., OpenAPI, AsyncAPI), `purpose` indicates what the definition is used for.\nThis allows multiple definitions of the same type to coexist when they serve different purposes.\n\nFor example, an API Resource might have multiple OpenAPI definitions:\none for standard API documentation and another specifically enriched for AI/agent consumption.\n\nMUST be a valid [Concept ID](../index.md#concept-id).",
3923
+ "anyOf": [
3924
+ {
3925
+ "type": "string",
3926
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+)$",
3927
+ "description": "Any valid [Concept ID](../index.md#concept-id)."
3928
+ },
3929
+ {
3930
+ "const": "ord:ai-enrichment",
3931
+ "description": "The definition is enriched with additional metadata specifically for AI/agent consumption.\nThis may include enhanced descriptions, examples, or semantic annotations that help AI systems\nbetter understand and utilize the API or event resource."
3932
+ }
3933
+ ],
3934
+ "examples": [
3935
+ "ord:ai-enrichment"
3936
+ ]
3861
3937
  }
3862
3938
  },
3863
3939
  "additionalProperties": false,
@@ -3904,7 +3980,7 @@
3904
3980
  },
3905
3981
  "examples": [
3906
3982
  [
3907
- "sap.s4:communicationScenario:SAP_COM_0008"
3983
+ "foo.bar:conceptName:localIdentifier"
3908
3984
  ]
3909
3985
  ]
3910
3986
  },
@@ -4407,6 +4483,277 @@
4407
4483
  "lastUpdate"
4408
4484
  ]
4409
4485
  },
4486
+ "Overlay": {
4487
+ "type": "object",
4488
+ "title": "Overlay",
4489
+ "x-ums-type": "root",
4490
+ "x-introduced-in-version": "1.15.0",
4491
+ "x-feature-status": "alpha",
4492
+ "description": "An Overlay Resource is a standalone, versioned resource that references a metadata patch file.\nOverlays enrich / patch resource definition files (e.g. OpenAPI) without modifying the originals, e.g. to add AI-optimized descriptions, apply governance annotations, or adapt definitions for a specific audience / purpose.\n\nUse an Overlay Resource for overlays that serve a different concern or audience than the original metadata — such as AI enrichment, governance annotations, or audience-specific adaptations — and are managed independently or applied across multiple resources.\nFor producer-owned overlays that belong to a single resource, they SHOULD instead be attached directly as a `resourceDefinitions` entry with `type: ord:overlay:v1`.",
4493
+ "properties": {
4494
+ "ordId": {
4495
+ "type": "string",
4496
+ "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.",
4497
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):(overlay):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
4498
+ "maxLength": 255,
4499
+ "examples": [
4500
+ "sap.foo:overlay:astronomy-api-ai-enrichment:v1"
4501
+ ]
4502
+ },
4503
+ "title": {
4504
+ "type": "string",
4505
+ "description": "Human-readable title.\n\nMUST NOT exceed 255 chars.\nMUST NOT contain line breaks.",
4506
+ "minLength": 1,
4507
+ "maxLength": 255,
4508
+ "examples": [
4509
+ "Astronomy API AI Enrichment Overlay"
4510
+ ]
4511
+ },
4512
+ "description": {
4513
+ "type": "string",
4514
+ "minLength": 1,
4515
+ "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."
4516
+ },
4517
+ "version": {
4518
+ "type": "string",
4519
+ "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.",
4520
+ "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-]+)*))?$",
4521
+ "examples": [
4522
+ "1.2.3",
4523
+ "1.0.0-alpha.1"
4524
+ ]
4525
+ },
4526
+ "lastUpdate": {
4527
+ "type": "string",
4528
+ "format": "date-time",
4529
+ "x-introduced-in-version": "1.4.0",
4530
+ "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.",
4531
+ "examples": [
4532
+ "2022-12-19T15:47:04+00:00"
4533
+ ]
4534
+ },
4535
+ "visibility": {
4536
+ "type": "string",
4537
+ "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.",
4538
+ "oneOf": [
4539
+ {
4540
+ "const": "public",
4541
+ "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."
4542
+ },
4543
+ {
4544
+ "const": "internal",
4545
+ "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."
4546
+ },
4547
+ {
4548
+ "const": "private",
4549
+ "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."
4550
+ }
4551
+ ]
4552
+ },
4553
+ "releaseStatus": {
4554
+ "type": "string",
4555
+ "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.",
4556
+ "oneOf": [
4557
+ {
4558
+ "const": "development",
4559
+ "x-introduced-in-version": "1.14.2",
4560
+ "description": "The resource is unreleased and under active development. The API contract is unstable and subject to\nbreaking changes at any time. Not intended for consumption outside of the development team."
4561
+ },
4562
+ {
4563
+ "const": "beta",
4564
+ "description": "The API contract is released / available to consumers, but has no final stability guarantees.\nBreaking 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` `releaseStatus` MAY be changed or removed at the provider's discretion."
4565
+ },
4566
+ {
4567
+ "const": "active",
4568
+ "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."
4569
+ },
4570
+ {
4571
+ "const": "deprecated",
4572
+ "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.\nIf the `releaseStatus` is set to `deprecated`, and the `sunsetDate` is already known, then the `sunsetDate` 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`."
4573
+ },
4574
+ {
4575
+ "const": "sunset",
4576
+ "description": "The resource has been decommissioned and is no longer available at runtime. This entry exists for historical reference only.\n\nIf the `releaseStatus` is set to `sunset`, a `Tombstone` MUST be set as well and a `sunsetDate` MUST be provided."
4577
+ }
4578
+ ],
4579
+ "examples": [
4580
+ "active"
4581
+ ]
4582
+ },
4583
+ "relatedApiResources": {
4584
+ "type": "array",
4585
+ "x-introduced-in-version": "1.15.0",
4586
+ "description": "Optional list of API Resources whose definition files this overlay patches.\n\nSHOULD be provided when the target resource is described in an ORD document accessible to the same aggregator,\nas it enables efficient indexing without requiring the aggregator to parse each overlay file.\nUse `relationType: ord:patches` to express the patching relationship.\n\nMay be omitted when the target resource is not described in an accessible ORD document,\nor when the overlay is cross-cutting and patches resources from multiple providers.",
4587
+ "items": {
4588
+ "$ref": "#/definitions/RelatedApiResource"
4589
+ },
4590
+ "examples": [
4591
+ [
4592
+ {
4593
+ "ordId": "sap.s4:apiResource:API_BUSINESS_PARTNER:v1",
4594
+ "relationType": "foo.bar:relationName"
4595
+ }
4596
+ ]
4597
+ ]
4598
+ },
4599
+ "relatedEventResources": {
4600
+ "type": "array",
4601
+ "x-introduced-in-version": "1.15.0",
4602
+ "description": "Optional list of Event Resources whose definition files this overlay patches.\n\nSHOULD be provided when the target resource is described in an ORD document accessible to the same aggregator,\nas it enables efficient indexing without requiring the aggregator to parse each overlay file.\nUse `relationType: ord:patches` to express the patching relationship.\n\nMay be omitted when the target resource is not described in an accessible ORD document,\nor when the overlay is cross-cutting and patches resources from multiple providers.",
4603
+ "items": {
4604
+ "$ref": "#/definitions/RelatedEventResource"
4605
+ },
4606
+ "examples": [
4607
+ [
4608
+ {
4609
+ "ordId": "sap.s4:eventResource:BusinessPartnerEvents:v1",
4610
+ "relationType": "foo.bar:relationName"
4611
+ }
4612
+ ]
4613
+ ]
4614
+ },
4615
+ "definitions": {
4616
+ "type": "array",
4617
+ "description": "List of overlay definition files referenced by this ORD Overlay Resource.\nEach entry points to an ORD Overlay document (`type: ord:overlay:v1`) that contains the actual patches.",
4618
+ "items": {
4619
+ "$ref": "#/definitions/OverlayDefinition"
4620
+ }
4621
+ },
4622
+ "tags": {
4623
+ "type": "array",
4624
+ "items": {
4625
+ "type": "string",
4626
+ "pattern": "^[a-zA-Z0-9-_.\\/ ]*$",
4627
+ "minLength": 1
4628
+ },
4629
+ "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.",
4630
+ "examples": [
4631
+ [
4632
+ "storage",
4633
+ "high-availability"
4634
+ ]
4635
+ ]
4636
+ },
4637
+ "labels": {
4638
+ "$ref": "#/definitions/Labels"
4639
+ }
4640
+ },
4641
+ "additionalProperties": false,
4642
+ "required": [
4643
+ "ordId",
4644
+ "version",
4645
+ "releaseStatus",
4646
+ "visibility"
4647
+ ],
4648
+ "x-recommended": [
4649
+ "lastUpdate"
4650
+ ]
4651
+ },
4652
+ "OverlayDefinition": {
4653
+ "type": "object",
4654
+ "title": "Overlay Definition",
4655
+ "x-ums-type": "custom",
4656
+ "x-introduced-in-version": "1.15.0",
4657
+ "x-feature-status": "alpha",
4658
+ "description": "Link to a machine-readable [ORD Overlay](../../spec-v1/interfaces/OrdOverlay) document.",
4659
+ "properties": {
4660
+ "type": {
4661
+ "description": "Type of the overlay definition",
4662
+ "type": "string",
4663
+ "anyOf": [
4664
+ {
4665
+ "const": "ord:overlay:v1",
4666
+ "description": "ORD Overlay document (v1). The `mediaType` MUST be set to `application/json`."
4667
+ },
4668
+ {
4669
+ "type": "string",
4670
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-]+):(v0|v[1-9][0-9]*)$",
4671
+ "description": "Any valid [Specification ID](../index.md#specification-id)."
4672
+ }
4673
+ ],
4674
+ "examples": [
4675
+ "ord:overlay:v1"
4676
+ ]
4677
+ },
4678
+ "mediaType": {
4679
+ "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",
4680
+ "type": "string",
4681
+ "pattern": "^(application|text)\\/[a-zA-Z0-9][a-zA-Z0-9.+\\-]*$",
4682
+ "examples": [
4683
+ "application/json",
4684
+ "text/plain",
4685
+ "application/xml"
4686
+ ]
4687
+ },
4688
+ "url": {
4689
+ "type": "string",
4690
+ "format": "uri-reference",
4691
+ "description": "[URL reference](https://tools.ietf.org/html/rfc3986#section-4.1) (URL or relative reference) to the resource definition file.\n\nIt is RECOMMENDED to provide a relative URL (to base URL).",
4692
+ "examples": [
4693
+ "/open-resource-discovery/v1/overlays/ai-enrichment.overlay.json"
4694
+ ]
4695
+ },
4696
+ "accessStrategies": {
4697
+ "type": "array",
4698
+ "description": "List of supported access strategies for retrieving metadata from the ORD provider.\nAn ORD Consumer/ORD Aggregator MAY choose any of the strategies.\n\nThe access strategies only apply to the metadata access and not the actual API access.\nThe actual access to the APIs for clients is described via Consumption Bundles.\n\nIf this property is not provided, the definition URL will be available through the same access strategy as this ORD document.\nIt is RECOMMENDED anyway that the attached metadata definitions are available with the same access strategies, to simplify the aggregator crawling process.",
4699
+ "items": {
4700
+ "$ref": "#/definitions/AccessStrategy"
4701
+ },
4702
+ "minItems": 1,
4703
+ "examples": [
4704
+ [
4705
+ {
4706
+ "type": "open"
4707
+ }
4708
+ ]
4709
+ ]
4710
+ },
4711
+ "visibility": {
4712
+ "type": "string",
4713
+ "description": "The visibility states who is allowed to \"see\" and access the resource definition, in case it differs from the resource visibility.\n\nIf not given, the resource definition has the same visibility as the resource it describes.\nThe visibility of a resource definition MUST be lower (more restrictive) than the visibility of the resource it describes.\nE.g. a public resource can have metadata definitions that are internal only. An internal resource can't declare to have a public metadata definition.\n\nThis makes it also possible to provide both a public and an internal metadata description of the resource,\nin case that some metadata must only be made accessible to internal consumers.",
4714
+ "oneOf": [
4715
+ {
4716
+ "const": "public",
4717
+ "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."
4718
+ },
4719
+ {
4720
+ "const": "internal",
4721
+ "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."
4722
+ },
4723
+ {
4724
+ "const": "private",
4725
+ "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."
4726
+ }
4727
+ ]
4728
+ },
4729
+ "purpose": {
4730
+ "type": "string",
4731
+ "x-feature-status": "alpha",
4732
+ "x-introduced-in-version": "1.15.0",
4733
+ "description": "Describes the intended purpose or role of this resource definition.\n\nWhile `type` specifies the format (e.g., OpenAPI, AsyncAPI), `purpose` indicates what the definition is used for.\nThis allows multiple definitions of the same type to coexist when they serve different purposes.\n\nFor example, an API Resource might have multiple OpenAPI definitions:\none for standard API documentation and another specifically enriched for AI/agent consumption.\n\nMUST be a valid [Concept ID](../index.md#concept-id).",
4734
+ "anyOf": [
4735
+ {
4736
+ "type": "string",
4737
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+)$",
4738
+ "description": "Any valid [Concept ID](../index.md#concept-id)."
4739
+ },
4740
+ {
4741
+ "const": "ord:ai-enrichment",
4742
+ "description": "The definition is enriched with additional metadata specifically for AI/agent consumption.\nThis may include enhanced descriptions, examples, or semantic annotations that help AI systems\nbetter understand and utilize the API or event resource."
4743
+ }
4744
+ ],
4745
+ "examples": [
4746
+ "ord:ai-enrichment"
4747
+ ]
4748
+ }
4749
+ },
4750
+ "additionalProperties": false,
4751
+ "required": [
4752
+ "type",
4753
+ "mediaType",
4754
+ "url"
4755
+ ]
4756
+ },
4410
4757
  "Product": {
4411
4758
  "type": "object",
4412
4759
  "title": "Product",
@@ -4551,7 +4898,7 @@
4551
4898
  },
4552
4899
  "examples": [
4553
4900
  [
4554
- "sap.s4:communicationScenario:SAP_COM_0008"
4901
+ "foo.bar:conceptName:localIdentifier"
4555
4902
  ]
4556
4903
  ]
4557
4904
  },
@@ -4779,7 +5126,7 @@
4779
5126
  },
4780
5127
  "definitions": {
4781
5128
  "type": "array",
4782
- "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.",
5129
+ "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.\nThe combination of `type`, `purpose`, and `visibility` MUST be unique within the list.\n\nA definition without a `purpose` is considered the primary/default definition for its type.\nAdditional definitions of the same type MAY be provided if they have a distinct `purpose` (e.g., `ord:ai-enrichment` for AI-optimized definitions).\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.",
4783
5130
  "items": {
4784
5131
  "$ref": "#/definitions/CapabilityDefinition"
4785
5132
  }
@@ -4925,6 +5272,26 @@
4925
5272
  "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."
4926
5273
  }
4927
5274
  ]
5275
+ },
5276
+ "purpose": {
5277
+ "type": "string",
5278
+ "x-feature-status": "alpha",
5279
+ "x-introduced-in-version": "1.15.0",
5280
+ "description": "Describes the intended purpose or role of this resource definition.\n\nWhile `type` specifies the format (e.g., OpenAPI, AsyncAPI), `purpose` indicates what the definition is used for.\nThis allows multiple definitions of the same type to coexist when they serve different purposes.\n\nFor example, an API Resource might have multiple OpenAPI definitions:\none for standard API documentation and another specifically enriched for AI/agent consumption.\n\nMUST be a valid [Concept ID](../index.md#concept-id).",
5281
+ "anyOf": [
5282
+ {
5283
+ "type": "string",
5284
+ "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+)$",
5285
+ "description": "Any valid [Concept ID](../index.md#concept-id)."
5286
+ },
5287
+ {
5288
+ "const": "ord:ai-enrichment",
5289
+ "description": "The definition is enriched with additional metadata specifically for AI/agent consumption.\nThis may include enhanced descriptions, examples, or semantic annotations that help AI systems\nbetter understand and utilize the API or event resource."
5290
+ }
5291
+ ],
5292
+ "examples": [
5293
+ "ord:ai-enrichment"
5294
+ ]
4928
5295
  }
4929
5296
  },
4930
5297
  "additionalProperties": false,
@@ -4970,7 +5337,7 @@
4970
5337
  },
4971
5338
  "examples": [
4972
5339
  [
4973
- "sap.s4:communicationScenario:SAP_COM_0008"
5340
+ "foo.bar:conceptName:localIdentifier"
4974
5341
  ]
4975
5342
  ]
4976
5343
  },
@@ -6237,7 +6604,7 @@
6237
6604
  },
6238
6605
  "examples": [
6239
6606
  [
6240
- "sap.s4:communicationScenario:SAP_COM_0008"
6607
+ "foo.bar:conceptName:localIdentifier"
6241
6608
  ]
6242
6609
  ]
6243
6610
  },
@@ -6319,7 +6686,7 @@
6319
6686
  },
6320
6687
  "examples": [
6321
6688
  [
6322
- "sap.s4:communicationScenario:SAP_COM_0008"
6689
+ "foo.bar:conceptName:localIdentifier"
6323
6690
  ]
6324
6691
  ]
6325
6692
  },
@@ -6381,12 +6748,23 @@
6381
6748
  "properties": {
6382
6749
  "supported": {
6383
6750
  "type": "string",
6384
- "enum": [
6385
- "no",
6386
- "manual",
6387
- "automatic"
6388
- ],
6389
- "description": "This property defines whether the resource is extensible.\n\n**Not extensible** means that the data model of the resource (i.e. API or event) cannot be extended with custom fields.\n**Manually extensible** means that in addition to defining a custom field, manual activities to include the field in the data model of the resource (i.e. API or event) are required. E.g. using a specific mapping tool or by selecting the resource in the data model extension tool.\n**Automatically extensible** means that after defining a custom field in the local domain model, the resource (i.e. API or event) is automatically extended as part of the default extension field definition."
6751
+ "title": "Extensibility Support Level",
6752
+ "x-ums-type": "ignore",
6753
+ "description": "Defines whether and how the resource can be extended with custom fields.",
6754
+ "oneOf": [
6755
+ {
6756
+ "const": "no",
6757
+ "description": "Not extensible.\n\nThe data model of the resource (API or event) cannot be extended with custom fields."
6758
+ },
6759
+ {
6760
+ "const": "manual",
6761
+ "description": "Manually extensible.\n\nIn addition to defining a custom field, manual activities are required to include the field\nin the data model of the resource (API or event).\nExamples: using a specific mapping tool or selecting the resource in a data model extension tool."
6762
+ },
6763
+ {
6764
+ "const": "automatic",
6765
+ "description": "Automatically extensible.\n\nAfter defining a custom field in the local domain model, the resource (API or event)\nis automatically extended as part of the default extension field definition."
6766
+ }
6767
+ ]
6390
6768
  },
6391
6769
  "description": {
6392
6770
  "type": "string",
@@ -6744,6 +7122,11 @@
6744
7122
  "type": "string",
6745
7123
  "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+)$",
6746
7124
  "description": "Any valid [Concept ID](../index.md#concept-id)."
7125
+ },
7126
+ {
7127
+ "const": "ord:patches",
7128
+ "x-introduced-in-version": "1.15.0",
7129
+ "description": "The source resource patches one or more definition files of the target resource.\nUsed on [ORD Overlay Resources](#ord-overlay-resource) to declare which API or Event resource they patch."
6747
7130
  }
6748
7131
  ],
6749
7132
  "examples": [
@@ -6783,6 +7166,11 @@
6783
7166
  "type": "string",
6784
7167
  "pattern": "^([a-z0-9]+(?:[.][a-z0-9]+)*):([a-zA-Z0-9._\\-\\/]+)$",
6785
7168
  "description": "Any valid [Concept ID](../index.md#concept-id)."
7169
+ },
7170
+ {
7171
+ "const": "ord:patches",
7172
+ "x-introduced-in-version": "1.15.0",
7173
+ "description": "The source resource patches one or more definition files of the target resource.\nUsed on [ORD Overlay Resources](#ord-overlay-resource) to declare which API or Event resource they patch."
6786
7174
  }
6787
7175
  ],
6788
7176
  "examples": [