Skip to content

Add Arazzo workflow support (arazzo-v1, workflow capability, ord:orchestrates) - #158

Open
Fannon wants to merge 1 commit into
mainfrom
feat/arazzo-v1-support
Open

Add Arazzo workflow support (arazzo-v1, workflow capability, ord:orchestrates)#158
Fannon wants to merge 1 commit into
mainfrom
feat/arazzo-v1-support

Conversation

@Fannon

@Fannon Fannon commented Jul 3, 2026

Copy link
Copy Markdown
Member

Summary

Adds support for Arazzo multi-step API workflows in ORD.

  • arazzo-v1 on API Resource resourceDefinitions — for workflows scoped to a single API.
  • workflow Capability type with arazzo-v1 capability definition — for workflows that span multiple APIs. Such capabilities SHOULD list every covered API in relatedApiResources.
  • ord:orchestrates relationType — declares that the source resource (e.g. a workflow Capability) orchestrates the target API Resource.

Scheduled for the next patch release (1.16.4).

…estrates)

- New `arazzo-v1` resource definition type on API Resources (single-API workflows)
- New `workflow` standardized Capability type + `arazzo-v1` capability definition type (multi-API workflows)
- New `ord:orchestrates` relationType on `relatedApiResources` to declare which APIs a workflow invokes
@open-resource-discovery-bot

Copy link
Copy Markdown
PR Preview

QR code for preview link

🚀 View preview at:
https://open-resource-discovery.github.io/pr-preview/specification/pr-158/

Built to branch main at 2026-07-03 07:37 UTC.
open-resource-discovery/pr-preview-action

@Fannon
Fannon requested review from pavelkornev and swennemers July 3, 2026 07:37
@Fannon Fannon self-assigned this Jul 3, 2026
@Fannon Fannon added this to the 1.16.4 milestone Jul 3, 2026
Comment on lines +2852 to +2863
- const: arazzo-v1
x-introduced-in-version: "1.16.4"
description: |-
[Arazzo Specification v1.0.0](https://spec.openapis.org/arazzo/v1.0.0.html) workflow document
describing multi-step API interactions.
The `mediaType` MUST be set to `application/json` or `application/yaml`.

Attaching an Arazzo definition to a single API Resource is ONLY appropriate when the
workflow is scoped to that specific API. For workflows that span multiple APIs, publish
a [Capability](#capability) with `type: "workflow"` and a definition of `type: "arazzo-v1"` instead,
and list every covered API via [`relatedApiResources`](#capability_relatedapiresources) with
`relationType: "ord:orchestrates"`.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can always be a capability then, or?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

agree, the decision on API vs. Capability is unclear. How often to we have the use case of one API only arazzo definition? Do we need the complexity of adding it to API and as capability?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could be yes. But from what I've seen it doesn't seem uncommon to have a complementary Arazzo file for exactly one API, describing the flows within that one API. In this case it would be more convenient to have it directly attached to the API.

On the other hand, now we have two places where Arazzo could show up, which adds complexity as well.

Leaning toward making it a capability only

description: |-
The source resource patches one or more definition files of the target resource.
Used on [ORD Overlay Resources](#overlay) to declare which API or Event resource they patch.
- const: "ord:orchestrates"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

orchestrates

I think we should use "noun" as type names -> "orchestrator"

Can't it be also called ord:workflow here? Do we really need to introduce a new term?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actually, we use verbs here x "patches" y

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree with Sebastian, I would prefer consistent verb use

* If not provided, the relationship has no specific semantics ("related somehow").
*/
relationType?: (string | "ord:patches") & string;
relationType?: (string | "ord:patches" | "ord:orchestrates") & string;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We also need to add "ord:alias" here (it's already in-use)

@Fannon Fannon Jul 24, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, separate PR or include it here?

@Fannon Fannon added the enhancement New feature or request label Jul 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants