@openwop/spec-artifacts 2.42.6 → 2.42.7

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.
Files changed (63) hide show
  1. package/CORPUS-STAMP.json +64 -63
  2. package/api/seams-v2.yaml +187 -322
  3. package/api/v2/asyncapi.yaml +83 -113
  4. package/api/v2/openapi.yaml +339 -724
  5. package/package.json +1 -1
  6. package/schemas/audit-verify-result.schema.json +2 -2
  7. package/schemas/v2/audit-verify-result.schema.json +2 -2
  8. package/schemas/v2/capabilities.schema.json +2 -5
  9. package/spec/v1/core-standard-manifest.json +2 -2
  10. package/spec/v1/gaps.json +171 -1
  11. package/spec/v2/README.md +34 -36
  12. package/spec/v2/core/capabilities.md +186 -119
  13. package/spec/v2/core/conformance.md +78 -27
  14. package/spec/v2/core/connection-packs.md +8 -3
  15. package/spec/v2/core/conversation.md +10 -4
  16. package/spec/v2/core/errors.md +30 -9
  17. package/spec/v2/core/events.md +116 -80
  18. package/spec/v2/core/form-content-packs.md +11 -13
  19. package/spec/v2/core/headers.md +22 -14
  20. package/spec/v2/core/host-services.md +22 -5
  21. package/spec/v2/core/idempotency.md +48 -36
  22. package/spec/v2/core/identity.md +110 -42
  23. package/spec/v2/core/interop.md +82 -21
  24. package/spec/v2/core/interrupt.md +79 -40
  25. package/spec/v2/core/node-pack-runtimes.md +18 -4
  26. package/spec/v2/core/oauth.md +40 -6
  27. package/spec/v2/core/overview.md +61 -33
  28. package/spec/v2/core/packs.md +53 -28
  29. package/spec/v2/core/persistence.md +61 -80
  30. package/spec/v2/core/replay.md +56 -42
  31. package/spec/v2/core/runs.md +198 -60
  32. package/spec/v2/core/security-defaults.md +57 -33
  33. package/spec/v2/core/tool-catalog.md +29 -6
  34. package/spec/v2/core/versioning.md +95 -49
  35. package/spec/v2/core/webhooks.md +59 -20
  36. package/spec/v2/core/workflow-chain-packs.md +16 -14
  37. package/spec/v2/corrections.json +17 -1
  38. package/spec/v2/corrections.schema.json +1 -1
  39. package/spec/v2/declaration.json +24 -7
  40. package/spec/v2/declaration.schema.json +10 -0
  41. package/spec/v2/errors.json +109 -2
  42. package/spec/v2/errors.schema.json +38 -0
  43. package/spec/v2/ext/README.md +36 -23
  44. package/spec/v2/ext/a2uiSurface/README.md +75 -89
  45. package/spec/v2/ext/brand/README.md +15 -15
  46. package/spec/v2/ext/canvas/README.md +15 -15
  47. package/spec/v2/ext/chat/README.md +15 -15
  48. package/spec/v2/ext/coordination/README.md +15 -15
  49. package/spec/v2/ext/dataIntegration/README.md +17 -20
  50. package/spec/v2/ext/entities/README.md +15 -15
  51. package/spec/v2/ext/grpc-transport/README.md +6 -8
  52. package/spec/v2/ext/kanban/README.md +15 -15
  53. package/spec/v2/ext/knowledge/README.md +15 -15
  54. package/spec/v2/ext/launchStudio/README.md +16 -16
  55. package/spec/v2/ext/messaging/README.md +15 -15
  56. package/spec/v2/ext/portability/README.md +3 -17
  57. package/spec/v2/ext/provider-idempotency/README.md +7 -10
  58. package/spec/v2/ext/restTransport/README.md +30 -19
  59. package/spec/v2/ext/sandbox-runtime-notes/README.md +7 -9
  60. package/spec/v2/ext/webResearch/README.md +16 -16
  61. package/spec/v2/profiles.json +6 -2
  62. package/spec/v2/release.json +2 -2
  63. package/spec/v2/surface-baseline.json +542 -2
@@ -1,12 +1,15 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
3
  title: OpenWOP v2 API
4
- version: 2.42.6
4
+ version: 2.42.7
5
5
  summary: REST surface for declaring, executing, suspending, resuming, and observing multi-step workflows.
6
- description: GENERATED by scripts/derive-v2-api.py from api/openapi.yaml and the RFC 0167 children (v2 charter Phase 3,
7
- P3-C). Bare origin, unversioned path keys, negotiation by `OpenWOP-Version` + `protocolVersions[]` (RFC 0172 §A). No seam
8
- or test-mode operation lives here (RFC 0168 §C.2 — see api/seams-v2.yaml). Every non-standard header is `OpenWOP-<Name>`
9
- (RFC 0171 §C.1). Retry timing lives in `Retry-After` only (RFC 0171 §B.2).
6
+ description: 'The OpenWOP v2 REST API. Paths are unversioned and served at the bare origin; a client selects a version with
7
+ the `OpenWOP-Version` header from the host''s `protocolVersions[]`. Conformance seams and test-mode operations are not
8
+ in this document: they are in `api/seams-v2.yaml`. Every non-standard header is named `OpenWOP-<Name>`. Retry timing is
9
+ carried only in `Retry-After`.
10
+
11
+
12
+ Generated from `api/openapi.yaml` by `scripts/derive-v2-api.py`; do not edit.'
10
13
  contact:
11
14
  name: openwop spec working group
12
15
  url: https://openwop.dev/spec/v1/
@@ -14,11 +17,11 @@ info:
14
17
  name: Apache-2.0
15
18
  identifier: Apache-2.0
16
19
  externalDocs:
17
- description: openwop spec v1 corpus
20
+ description: OpenWOP specification (v1 corpus)
18
21
  url: https://openwop.dev/spec/v1/
19
22
  servers:
20
23
  - url: https://{host}
21
- description: openwop-compliant server
24
+ description: An OpenWOP server.
22
25
  variables:
23
26
  host:
24
27
  default: api.example.com
@@ -33,11 +36,11 @@ tags:
33
36
  - name: runs
34
37
  description: Run lifecycle — create, read, stream, cancel, fork.
35
38
  - name: agents
36
- description: Manifest-agent inventory (RFC 0072 §A). Read-only; gated on capabilities.agents.manifestRuntime. Dispatch rides
37
- the run surface (WorkflowNode.agent + POST /v1/runs).
39
+ description: Manifest-agent inventory. Read-only; gated on `capabilities.agents.manifestRuntime`. Dispatch uses the run
40
+ surface (`WorkflowNode.agent` + `POST /runs`).
38
41
  - name: tools
39
- description: Portable tool catalog (RFC 0078 §B). Read-only ToolDescriptor projection across tool sources (node-pack / workflow
40
- / mcp / connector / host-extension); gated on capabilities.toolCatalog; authorization-scoped per §F-2.
42
+ description: 'Portable tool catalog: a read-only `ToolDescriptor` projection across tool sources (node-pack, workflow, mcp,
43
+ connector, host-extension). Gated on `capabilities.toolCatalog`; scoped to the tools the caller is authorized to invoke.'
41
44
  - name: hitl
42
45
  description: Human-in-the-loop interrupts and approvals.
43
46
  - name: artifacts
@@ -45,16 +48,16 @@ tags:
45
48
  - name: webhooks
46
49
  description: Subscribe to run events via outbound HTTP.
47
50
  - name: triggers
48
- description: Durable trigger-bridge subscriptions (RFC 0083). RFC 0099 adds the external-event create surface (`POST /v1/trigger-subscriptions`);
51
+ description: Durable trigger-bridge subscriptions. The external-event create surface (`POST /trigger-subscriptions`) is
49
52
  gated on `capabilities.triggerBridge.ingestion.registrationEndpoint`.
50
53
  - name: audit
51
54
  description: Audit-log integrity verification (gated on the `openwop-audit-log-integrity` profile).
52
55
  - name: prompts
53
- description: Prompt-template library — list, fetch, render, mutate (RFC 0028; gated on `capabilities.prompts.*`).
56
+ description: 'Prompt-template library: list, fetch, render, mutate. Gated on `capabilities.prompts.*`.'
54
57
  - name: content
55
- description: Localized authored content — public delivery + tenant-scoped admin CRUD (RFC 0103; gated on `capabilities.content.supported`).
58
+ description: 'Localized authored content: public delivery and tenant-scoped admin CRUD. Gated on `capabilities.content.supported`.'
56
59
  - name: host
57
- description: Host-capability resources — e.g. the RFC 0059 agent workspace file store (gated on `capabilities.workspace.*`).
60
+ description: Host-capability resources, such as the agent workspace file store (gated on `capabilities.workspace.*`).
58
61
  paths:
59
62
  /.well-known/openwop:
60
63
  get:
@@ -69,10 +72,9 @@ paths:
69
72
  required: false
70
73
  schema:
71
74
  type: string
72
- description: 'RFC 0165 §C.2; runs.md §Snapshot. Standard conditional request against any resource that carries an
73
- `ETag` — the discovery document (capabilities.md §1) and the run snapshot (runs.md §Snapshot): a matching value
74
- MUST yield `304 Not Modified` with no body, and the 304 carries `OpenWOP-Version` like every response (versioning.md
75
- §1.4).'
75
+ description: Conditional request on the discovery document (capabilities.md §1) and the run snapshot (runs.md §Snapshot).
76
+ A value matching the `ETag` the host sent MUST yield `304 Not Modified` with no body. The 304 carries `OpenWOP-Version`
77
+ like every response (versioning.md §1.4).
76
78
  - $ref: '#/components/parameters/OpenWOPVersion'
77
79
  responses:
78
80
  '200':
@@ -85,9 +87,8 @@ paths:
85
87
  ETag:
86
88
  schema:
87
89
  type: string
88
- description: 'capabilities.md §1 (RFC 0165 §C.2). Standard strong validator for the discovery document: a v2
89
- host MUST send it and MUST honor `If-None-Match` with `304`; a host that changes semantics without changing
90
- the bytes is non-conformant.'
90
+ description: Strong validator for the discovery document (capabilities.md §1). A v2 host MUST send it and MUST
91
+ honor `If-None-Match` with `304`. A host that changes semantics without changing the bytes is non-conformant.
91
92
  OpenWOP-Version:
92
93
  $ref: '#/components/headers/OpenWOPVersion'
93
94
  content:
@@ -95,7 +96,7 @@ paths:
95
96
  schema:
96
97
  $ref: '#/components/schemas/Capabilities'
97
98
  '304':
98
- description: RFC 0165 §C.2 — `If-None-Match` matched the current `ETag`; the body is unchanged.
99
+ description: '`If-None-Match` matched the current `ETag`; the body is unchanged.'
99
100
  headers:
100
101
  OpenWOP-Version:
101
102
  $ref: '#/components/headers/OpenWOPVersion'
@@ -189,25 +190,16 @@ paths:
189
190
  type: string
190
191
  enum:
191
192
  - enforce
192
- description: When set, server cross-host claim system rejects duplicate `(tenantId, scopeId)` pairs with `409 Conflict`.
193
+ description: When set, the host's cross-host claim system rejects a duplicate `(tenantId, scopeId)` pair with `409
194
+ Conflict`.
193
195
  - in: header
194
196
  name: OpenWOP-Force-Engine-Version
195
197
  schema:
196
198
  type: integer
197
199
  minimum: 0
198
- description: '**Test-keys-only.** When set, the server emits events for this run AS IF it
199
-
200
- were running the specified engine version (must be within the server''s
201
-
202
- advertised `Capabilities.testing.forceEngineVersionRange`). Used by the
203
-
204
- conformance suite to verify version-negotiation fold-best-effort tolerance
205
-
206
- across the spec''s forward-compat matrix. Servers MUST reject on production
207
-
208
- API keys with `403 force_engine_version_forbidden`. Closes F5.
209
-
210
- '
200
+ description: Test keys only. The server emits this run's events as if it ran the given engine version, which must
201
+ be within `Capabilities.testing.forceEngineVersionRange`. Servers MUST reject it on production API keys with `403
202
+ force_engine_version_forbidden`.
211
203
  - $ref: '#/components/parameters/OpenWOPVersion'
212
204
  requestBody:
213
205
  required: true
@@ -228,10 +220,10 @@ paths:
228
220
  $ref: ../../schemas/v2/residency.schema.json
229
221
  tenantId:
230
222
  type: string
231
- description: Tenant scoping. Server typically defaults from API key.
223
+ description: Tenant scope. A host typically derives it from the API key.
232
224
  scopeId:
233
225
  type: string
234
- description: Opaque correlation ID for `X-Dedup` semantics.
226
+ description: Opaque correlation ID for `OpenWOP-Dedup`.
235
227
  callbackUrl:
236
228
  type: string
237
229
  format: uri
@@ -240,29 +232,18 @@ paths:
240
232
  type: string
241
233
  enum:
242
234
  - eval
243
- description: 'RFC 0081 §B. When `eval`, this run is an eval-suite projection
244
-
245
- (not a workflow run): the host runs the `evalSuiteRef` against
246
-
247
- `agentId`, emits the content-free `eval.*` family, and terminates
248
-
249
- with an `EvalSummary` readable via `GET /v1/runs/{runId}/eval-summary`.
250
-
251
- Capability-gated on `capabilities.agents.evalSuite.supported`; a
252
-
253
- host that omits it rejects `mode: "eval"` with 501. Omit for a
254
-
255
- normal workflow run.
256
-
257
- '
235
+ description: 'Set to `eval` to run an eval-suite projection instead of a workflow run: the host runs the
236
+ `evalSuiteRef` against `agentId`, emits the content-free `eval.*` family, and terminates with an `EvalSummary`
237
+ readable at `GET /runs/{runId}/eval-summary`. Gated on `capabilities.agents.evalSuite.supported`; a
238
+ host that omits it rejects `mode: "eval"` with 501. Omit for a normal workflow run.'
258
239
  evalSuiteRef:
259
240
  type: string
260
241
  minLength: 1
261
- description: RFC 0081 — URI of the `AgentEvalSuite` to run. Required when mode is `eval`.
242
+ description: URI of the `AgentEvalSuite` to run. Required when mode is `eval`.
262
243
  agentId:
263
244
  type: string
264
245
  minLength: 1
265
- description: RFC 0081 — the manifest agent the eval suite targets. Required when mode is `eval`.
246
+ description: The manifest agent the eval suite targets. Required when mode is `eval`.
266
247
  if:
267
248
  properties:
268
249
  mode:
@@ -319,7 +300,7 @@ paths:
319
300
  '403':
320
301
  $ref: '#/components/responses/Forbidden'
321
302
  '409':
322
- description: '`X-Dedup` collision OR concurrent `Idempotency-Key` collision.'
303
+ description: An `OpenWOP-Dedup` collision, or a concurrent `Idempotency-Key` collision.
323
304
  headers:
324
305
  Retry-After:
325
306
  schema:
@@ -337,11 +318,13 @@ paths:
337
318
  tags:
338
319
  - runs
339
320
  operationId: listRuns
340
- summary: The caller's runs, newest first, cursor-paginated (RFC 0182)
341
- description: 'Tenant-scoped by construction: only runs whose tenant segment is the caller''s, every runId bound (identity.md
342
- §5). Gated on the `runList` family — 404 not_found when unadvertised. `limit` is honoured up to `runList.maxPageSize`;
343
- `cursor` is opaque and a cursor the host did not mint is 400 validation_error; `workflowId` and `status` are exact-match
344
- filters when `runList.filters` names them (an unadvertised filter is ignored).'
321
+ summary: List the caller's runs, newest first
322
+ description: 'Lists only runs whose tenant segment is the caller''s; every `runId` is tenant-bound (identity.md §5).
323
+ The list is cursor-paginated. Gated on the `runList` family: a host that does not advertise it answers `404 not_found`.
324
+
325
+
326
+ `limit` is honoured up to `runList.maxPageSize`. `cursor` is opaque; a cursor the host did not mint is `400 validation_error`.
327
+ `workflowId` and `status` are exact-match filters when `runList.filters` names them; an unadvertised filter is ignored.'
345
328
  parameters:
346
329
  - name: limit
347
330
  in: query
@@ -349,7 +332,7 @@ paths:
349
332
  schema:
350
333
  type: integer
351
334
  minimum: 1
352
- description: Page size; clamped to runList.maxPageSize.
335
+ description: Page size; clamped to `runList.maxPageSize`.
353
336
  - name: cursor
354
337
  in: query
355
338
  required: false
@@ -357,13 +340,13 @@ paths:
357
340
  type: string
358
341
  minLength: 1
359
342
  maxLength: 2048
360
- description: Opaque cursor from a previous page's nextCursor.
343
+ description: Opaque cursor from a previous page's `nextCursor`.
361
344
  - name: workflowId
362
345
  in: query
363
346
  required: false
364
347
  schema:
365
348
  $ref: ../../schemas/v2/ids.schema.json#/$defs/workflowId
366
- description: Exact-match filter (when advertised in runList.filters).
349
+ description: Exact-match filter, when advertised in `runList.filters`.
367
350
  - name: status
368
351
  in: query
369
352
  required: false
@@ -380,7 +363,7 @@ paths:
380
363
  - failed
381
364
  - cancelling
382
365
  - cancelled
383
- description: Exact-match filter (when advertised in runList.filters).
366
+ description: Exact-match filter, when advertised in `runList.filters`.
384
367
  - $ref: '#/components/parameters/OpenWOPVersion'
385
368
  responses:
386
369
  '200':
@@ -425,10 +408,9 @@ paths:
425
408
  required: false
426
409
  schema:
427
410
  type: string
428
- description: 'RFC 0165 §C.2; runs.md §Snapshot. Standard conditional request against any resource that carries an
429
- `ETag` — the discovery document (capabilities.md §1) and the run snapshot (runs.md §Snapshot): a matching value
430
- MUST yield `304 Not Modified` with no body, and the 304 carries `OpenWOP-Version` like every response (versioning.md
431
- §1.4).'
411
+ description: Conditional request on the discovery document (capabilities.md §1) and the run snapshot (runs.md §Snapshot).
412
+ A value matching the `ETag` the host sent MUST yield `304 Not Modified` with no body. The 304 carries `OpenWOP-Version`
413
+ like every response (versioning.md §1.4).
432
414
  - $ref: '#/components/parameters/OpenWOPVersion'
433
415
  responses:
434
416
  '200':
@@ -437,13 +419,8 @@ paths:
437
419
  ETag:
438
420
  schema:
439
421
  type: string
440
- description: 'RFC 0115. Strong validator derived from the run''s latest
441
-
442
- persisted event-log sequence number; changes on every
443
-
444
- observable state transition, stable while none occurs.
445
-
446
- '
422
+ description: Strong validator derived from the run's latest persisted event-log sequence number. It changes
423
+ on every observable state transition and is stable while none occurs.
447
424
  Content-Encoding:
448
425
  required: false
449
426
  schema:
@@ -452,13 +429,8 @@ paths:
452
429
  - gzip
453
430
  - br
454
431
  - zstd
455
- description: 'RFC 0115. Present only when the host negotiated compression
456
-
457
- from `Accept-Encoding`; pairs with `Vary: Accept-Encoding`.
458
-
459
- The decoded body is byte-identical to the identity body.
460
-
461
- '
432
+ description: 'Present only when the host negotiated compression from `Accept-Encoding`; pairs with `Vary: Accept-Encoding`.
433
+ The decoded body is byte-identical to the identity body.'
462
434
  OpenWOP-Version:
463
435
  $ref: '#/components/headers/OpenWOPVersion'
464
436
  content:
@@ -466,7 +438,7 @@ paths:
466
438
  schema:
467
439
  $ref: '#/components/schemas/RunSnapshot'
468
440
  '304':
469
- description: RFC 0115. Not Modified — `If-None-Match` matched the current `ETag`. Empty body.
441
+ description: 'Not Modified: `If-None-Match` matched the current `ETag`. Empty body.'
470
442
  headers:
471
443
  OpenWOP-Version:
472
444
  $ref: '#/components/headers/OpenWOPVersion'
@@ -497,26 +469,17 @@ paths:
497
469
  type: string
498
470
  pattern: ^(values|(updates|messages|debug)(,(updates|messages|debug))*)$
499
471
  default: updates
500
- description: RFC 0171 §E.1 — the closed set and its comma-separated combinations; `values` never combines.
472
+ description: A stream mode from the closed set, or a comma-separated combination of them. `values` never combines.
501
473
  - in: query
502
474
  name: bufferMs
503
475
  schema:
504
476
  type: integer
505
477
  minimum: 0
506
478
  maximum: 5000
507
- description: 'Optional batching hint per S3 closure. When set, the server
508
-
509
- accumulates events for up to N ms (or until a forced-flush
510
-
511
- trigger fires — terminal events, suspensions, connection close)
512
-
513
- and emits a single SSE event with `event: batch` and `data:` as
514
-
515
- a JSON array of `RunEventDoc`. Range 0..5000; `0` = no buffering.
516
-
517
- See `stream-modes.md` §Aggregation hint.
518
-
519
- '
479
+ description: 'Optional batching hint. When set, the server accumulates events for up to N ms, or until a forced-flush
480
+ trigger fires (terminal events, suspensions, connection close), and emits a single SSE event with `event: batch`
481
+ and `data:` as a JSON array of `RunEventDoc`. Range 0..5000; `0` means no buffering. See `stream-modes.md` §Aggregation
482
+ hint.'
520
483
  - in: header
521
484
  name: Last-Event-ID
522
485
  schema:
@@ -569,8 +532,8 @@ paths:
569
532
  schema:
570
533
  type: integer
571
534
  minimum: 0
572
- description: RFC 0171 §E.2 — return events with `sequence > afterSequence`; omission means from the first event (sequence
573
- 0). `lastSequence` and `since` are gone.
535
+ description: Return events with `sequence > afterSequence`. Omitted, the poll starts from the first event (sequence
536
+ 0).
574
537
  - in: query
575
538
  name: timeout
576
539
  schema:
@@ -582,7 +545,7 @@ paths:
582
545
  - $ref: '#/components/parameters/OpenWOPVersion'
583
546
  responses:
584
547
  '200':
585
- description: Events since `lastSequence`.
548
+ description: Events after `afterSequence`.
586
549
  content:
587
550
  application/json:
588
551
  schema:
@@ -604,8 +567,7 @@ paths:
604
567
  lastSequence:
605
568
  type: integer
606
569
  minimum: -1
607
- description: The highest sequence in the log at the time of the response (one meaning); -1 when the log
608
- is empty.
570
+ description: The highest sequence in the log at the time of the response; -1 when the log is empty.
609
571
  status:
610
572
  type: string
611
573
  isTerminal:
@@ -672,7 +634,7 @@ paths:
672
634
  post:
673
635
  tags:
674
636
  - runs
675
- summary: Record a non-blocking quality annotation on a run (RFC 0056).
637
+ summary: Record a non-blocking quality annotation on a run.
676
638
  operationId: createAnnotation
677
639
  security:
678
640
  - ApiKeyAuth:
@@ -710,7 +672,7 @@ paths:
710
672
  '404':
711
673
  $ref: '#/components/responses/NotFound'
712
674
  '501':
713
- description: Host does not advertise capabilities.feedback.supported (RFC 0056).
675
+ description: Host does not advertise `capabilities.feedback.supported`.
714
676
  content:
715
677
  application/json:
716
678
  schema:
@@ -721,7 +683,7 @@ paths:
721
683
  get:
722
684
  tags:
723
685
  - runs
724
- summary: List the annotations recorded on a run (RFC 0056).
686
+ summary: List the annotations recorded on a run.
725
687
  operationId: listAnnotations
726
688
  security:
727
689
  - ApiKeyAuth:
@@ -758,7 +720,7 @@ paths:
758
720
  '404':
759
721
  $ref: '#/components/responses/NotFound'
760
722
  '501':
761
- description: Host does not advertise capabilities.feedback.supported (RFC 0056).
723
+ description: Host does not advertise `capabilities.feedback.supported`.
762
724
  content:
763
725
  application/json:
764
726
  schema:
@@ -770,20 +732,11 @@ paths:
770
732
  post:
771
733
  tags:
772
734
  - triggers
773
- summary: Register an external-event trigger subscription (RFC 0099).
774
- description: 'Creates an external-event (`webhook`/`email`/`form`) TriggerSubscription
775
-
776
- bound to a workflow, with a dedup config and a source-authenticity
777
-
778
- verification policy (RFC 0099 §F.2). The `workflowId` MUST resolve under
779
-
780
- the caller''s RFC 0048 owner triple. The response carries the created
781
-
782
- TriggerSubscription plus a source-specific `binding`; the binding
783
-
784
- secret/URL is returned ONCE and is not re-fetchable in cleartext.
785
-
786
- '
735
+ summary: Register an external-event trigger subscription.
736
+ description: Creates an external-event (`webhook`/`email`/`form`) TriggerSubscription bound to a workflow, with a dedup
737
+ config and a source-authenticity verification policy. The `workflowId` MUST resolve under the caller's owner triple.
738
+ The response carries the created TriggerSubscription plus a source-specific `binding`; the binding secret or URL is
739
+ returned once and cannot be re-fetched in cleartext.
787
740
  operationId: createTriggerSubscription
788
741
  security:
789
742
  - ApiKeyAuth:
@@ -817,15 +770,9 @@ paths:
817
770
  $ref: ../../schemas/v2/trigger-subscription.schema.json
818
771
  binding:
819
772
  type: object
820
- description: 'Source-specific binding the caller needs to wire the external
821
-
822
- source. For `webhook`: `{ ingestUrl, secretFingerprint }`; for
823
-
824
- `email`: `{ ingestAddress }`; for `form`: `{ ingestUrl }`. The
825
-
826
- secret is returned once at creation (SR-1).
827
-
828
- '
773
+ description: 'Source-specific binding the caller needs to wire the external source. For `webhook`: `{
774
+ ingestUrl, secretFingerprint }`; for `email`: `{ ingestAddress }`; for `form`: `{ ingestUrl }`. The
775
+ secret is returned once, at creation (SR-1).'
829
776
  additionalProperties: true
830
777
  properties:
831
778
  ingestUrl:
@@ -846,7 +793,7 @@ paths:
846
793
  '403':
847
794
  $ref: '#/components/responses/Forbidden'
848
795
  '501':
849
- description: Host does not advertise capabilities.triggerBridge.ingestion.registrationEndpoint (RFC 0099).
796
+ description: Host does not advertise `capabilities.triggerBridge.ingestion.registrationEndpoint`.
850
797
  content:
851
798
  application/json:
852
799
  schema:
@@ -859,32 +806,19 @@ paths:
859
806
  tags:
860
807
  - content
861
808
  security: []
862
- summary: Deliver a published content page resolved for the negotiated locale (RFC 0103 §D).
863
- description: 'Resolves the published page `slug` for the locale negotiated from
864
-
865
- `Accept-Language` (i18n.md fallback: q-value order → language family →
866
-
867
- `content.baseLocale`), applies the per-section field merge
868
-
869
- (`localized-content.md` §C), and returns the already-merged sections in
809
+ summary: Deliver a published content page resolved for the negotiated locale.
810
+ description: 'Returns the published page `slug` for the locale negotiated from `Accept-Language`, with its sections
811
+ already merged, in render order. Locale fallback follows i18n.md: q-value order, then language family, then `content.baseLocale`.
812
+ Sections are merged field by field (`localized-content.md` §C).
870
813
 
871
- render order. Sets `Content-Language` to the locale used,
872
814
 
873
- `Vary: Accept-Language, Accept-Encoding`, and
815
+ The response sets `Content-Language` to the locale used, `Vary: Accept-Language, Accept-Encoding`, and `Cache-Control:
816
+ public, max-age=300, stale-while-revalidate=3600`. Only `status: "published"` content is served.
874
817
 
875
- `Cache-Control: public, max-age=300, stale-while-revalidate=3600`.
876
818
 
877
- Serves `status: "published"` content only. Tenant is host-resolved
878
-
879
- (`localized-content.md` §F): credential-derived when authenticated,
880
-
881
- host-defined (e.g. domain) when anonymous. A `slug` absent for the
882
-
883
- resolved tenant returns the same `404` as a nonexistent slug (no
884
-
885
- cross-tenant enumeration).
886
-
887
- '
819
+ The tenant is host-resolved (`localized-content.md` §F): from the credential when authenticated, host-defined (for
820
+ example by domain) when anonymous. A `slug` absent for the resolved tenant returns the same `404` as a nonexistent
821
+ slug, so tenants cannot be enumerated.'
888
822
  operationId: getContentPage
889
823
  parameters:
890
824
  - name: slug
@@ -899,7 +833,8 @@ paths:
899
833
  required: false
900
834
  schema:
901
835
  type: string
902
- description: BCP-47 preference list; authoritative for locale selection (i18n.md). A malformed value MUST NOT 400.
836
+ description: BCP-47 preference list; authoritative for locale selection (i18n.md). A malformed value MUST NOT produce
837
+ a 400.
903
838
  - $ref: '#/components/parameters/OpenWOPVersion'
904
839
  responses:
905
840
  '200':
@@ -918,7 +853,7 @@ paths:
918
853
  '404':
919
854
  $ref: '#/components/responses/NotFound'
920
855
  '501':
921
- description: Host does not advertise capabilities.content.supported (RFC 0103).
856
+ description: Host does not advertise `capabilities.content.supported`.
922
857
  content:
923
858
  application/json:
924
859
  schema:
@@ -929,28 +864,15 @@ paths:
929
864
  delete:
930
865
  tags:
931
866
  - content
932
- summary: Delete a content page (RFC 0103 §D, admin).
933
- description: '`localized-content.md` §D lists `DELETE …/content/pages/{pageId}` among
934
-
935
- the admin CRUD operations: tenant-scoped, requires `content.write`, and
936
-
937
- removes the page with its sections and every locale overlay. The path
938
-
939
- segment is the page''s **`pageId`**, not its slug. It shares this path
867
+ summary: Delete a content page (admin).
868
+ description: 'Deletes a page with its sections and every locale overlay: the `DELETE …/content/pages/{pageId}` admin
869
+ operation of `localized-content.md` §D. Tenant-scoped; requires `content.write`.
940
870
 
941
- item with public delivery, which addresses the same segment by `slug`,
942
871
 
943
- because OpenAPI 3.1 treats two templates that differ only in the
944
-
945
- parameter name as identical and forbids them; the parameter keeps
946
-
947
- delivery''s name for that reason alone. A `pageId` absent for the
948
-
949
- caller''s tenant returns the same `404` as a nonexistent one
950
-
951
- (`localized-content.md` §F, no cross-tenant enumeration).
952
-
953
- '
872
+ The path segment is the page''s `pageId`, not its slug. The operation shares this path item with public delivery,
873
+ which addresses the same segment by `slug`, and OpenAPI 3.1 forbids two templates that differ only in parameter name,
874
+ so the parameter keeps delivery''s name. A `pageId` absent for the caller''s tenant returns the same `404` as a nonexistent
875
+ one (`localized-content.md` §F), so tenants cannot be enumerated.'
954
876
  operationId: deleteContentPage
955
877
  security:
956
878
  - ApiKeyAuth:
@@ -966,7 +888,8 @@ paths:
966
888
  schema:
967
889
  type: string
968
890
  minLength: 1
969
- description: For this operation, the page's `pageId` (§D). See the operation description for why the name is shared.
891
+ description: For this operation, the page's `pageId`, not its slug; the operation description explains the shared
892
+ name.
970
893
  - $ref: '#/components/parameters/OpenWOPVersion'
971
894
  responses:
972
895
  '204':
@@ -984,12 +907,8 @@ paths:
984
907
  get:
985
908
  tags:
986
909
  - content
987
- summary: List content pages for the caller's tenant (RFC 0103 §D, admin).
988
- description: 'Tenant-scoped admin listing of pages (draft + published). Requires a
989
-
990
- principal with `content.read` scope.
991
-
992
- '
910
+ summary: List content pages for the caller's tenant (admin).
911
+ description: Tenant-scoped admin listing of pages, draft and published. Requires a principal with `content.read` scope.
993
912
  operationId: listContentPages
994
913
  security:
995
914
  - ApiKeyAuth:
@@ -1015,7 +934,7 @@ paths:
1015
934
  '403':
1016
935
  $ref: '#/components/responses/Forbidden'
1017
936
  '501':
1018
- description: Host does not advertise capabilities.content.supported (RFC 0103).
937
+ description: Host does not advertise `capabilities.content.supported`.
1019
938
  content:
1020
939
  application/json:
1021
940
  schema:
@@ -1028,7 +947,7 @@ paths:
1028
947
  post:
1029
948
  tags:
1030
949
  - content
1031
- summary: Create a content page (RFC 0103 §D, admin).
950
+ summary: Create a content page (admin).
1032
951
  description: Tenant-scoped page creation. Requires `content.write` scope.
1033
952
  operationId: createContentPage
1034
953
  security:
@@ -1055,7 +974,7 @@ paths:
1055
974
  OpenWOP-Version:
1056
975
  $ref: '#/components/headers/OpenWOPVersion'
1057
976
  '400':
1058
- description: Invalid request (e.g. baseLocale in supportedLocales, or a malformed locale/slug).
977
+ description: Invalid request (for example `baseLocale` in `supportedLocales`, or a malformed locale or slug).
1059
978
  content:
1060
979
  application/json:
1061
980
  schema:
@@ -1073,14 +992,9 @@ paths:
1073
992
  put:
1074
993
  tags:
1075
994
  - content
1076
- summary: Upsert a section's base or per-locale fields (RFC 0103 §D, admin).
1077
- description: 'Locale-targeted write: `locale == content.baseLocale` upserts the
1078
-
1079
- section''s base `data`; any other (case-canonical BCP 47 subset, RFC 0206) locale upserts
1080
-
1081
- `localizations[locale]`. Tenant-scoped; requires `content.write`.
1082
-
1083
- '
995
+ summary: Upsert a section's base or per-locale fields (admin).
996
+ description: Locale-targeted write. `locale == content.baseLocale` upserts the section's base `data`; any other locale
997
+ (case-canonical BCP 47 subset) upserts `localizations[locale]`. Tenant-scoped; requires `content.write`.
1084
998
  operationId: putContentSection
1085
999
  security:
1086
1000
  - ApiKeyAuth:
@@ -1117,7 +1031,7 @@ paths:
1117
1031
  locale:
1118
1032
  type: string
1119
1033
  pattern: ^[a-z]{2,3}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$
1120
- description: Target locale; baseLocale upserts `data`, else `localizations[locale]`.
1034
+ description: Target locale. `baseLocale` upserts `data`; any other locale upserts `localizations[locale]`.
1121
1035
  data:
1122
1036
  type: object
1123
1037
  additionalProperties: true
@@ -1133,7 +1047,7 @@ paths:
1133
1047
  OpenWOP-Version:
1134
1048
  $ref: '#/components/headers/OpenWOPVersion'
1135
1049
  '400':
1136
- description: Invalid request (e.g. baseLocale in supportedLocales, or a malformed locale/slug).
1050
+ description: Invalid request (for example `baseLocale` in `supportedLocales`, or a malformed locale or slug).
1137
1051
  content:
1138
1052
  application/json:
1139
1053
  schema:
@@ -1151,7 +1065,7 @@ paths:
1151
1065
  get:
1152
1066
  tags:
1153
1067
  - content
1154
- summary: Read the tenant's content language settings (RFC 0103 §B, admin).
1068
+ summary: Read the tenant's content language settings (admin).
1155
1069
  description: Tenant-scoped read of `{ baseLocale, supportedLocales, autoTranslateOnPublish }`. Requires `content.read`.
1156
1070
  operationId: getContentSettings
1157
1071
  security:
@@ -1176,7 +1090,7 @@ paths:
1176
1090
  '403':
1177
1091
  $ref: '#/components/responses/Forbidden'
1178
1092
  '501':
1179
- description: Host does not advertise capabilities.content.supported (RFC 0103).
1093
+ description: Host does not advertise `capabilities.content.supported`.
1180
1094
  content:
1181
1095
  application/json:
1182
1096
  schema:
@@ -1189,12 +1103,9 @@ paths:
1189
1103
  put:
1190
1104
  tags:
1191
1105
  - content
1192
- summary: Update the tenant's content language settings (RFC 0103 §B, admin).
1193
- description: 'Tenant-scoped settings update. The invariant `baseLocale ∉
1194
-
1195
- supportedLocales` MUST hold (else `400`). Requires `content.write`.
1196
-
1197
- '
1106
+ summary: Update the tenant's content language settings (admin).
1107
+ description: Tenant-scoped settings update. The invariant `baseLocale ∉ supportedLocales` MUST hold, else `400`. Requires
1108
+ `content.write`.
1198
1109
  operationId: putContentSettings
1199
1110
  security:
1200
1111
  - ApiKeyAuth:
@@ -1220,7 +1131,7 @@ paths:
1220
1131
  OpenWOP-Version:
1221
1132
  $ref: '#/components/headers/OpenWOPVersion'
1222
1133
  '400':
1223
- description: Invalid request (e.g. baseLocale in supportedLocales, or a malformed locale/slug).
1134
+ description: Invalid request (for example `baseLocale` in `supportedLocales`, or a malformed locale or slug).
1224
1135
  content:
1225
1136
  application/json:
1226
1137
  schema:
@@ -1239,21 +1150,10 @@ paths:
1239
1150
  tags:
1240
1151
  - runs
1241
1152
  summary: Cancel a set of in-flight runs in a single request.
1242
- description: 'Per `spec/v1/rest-endpoints.md` §"POST /v1/runs:bulk-cancel". Accepts
1243
-
1244
- a non-empty array of runIds and processes each cancellation
1245
-
1246
- independently. Returns `200` with a per-id results array even when
1247
-
1248
- some individual cancellations fail; the top-level operation succeeds
1249
-
1250
- when the request reached the host, regardless of per-id outcomes.
1251
-
1252
- Hosts enforce a host-defined cap on the array length (RECOMMENDED
1253
-
1254
- 100); over-cap requests return `400 validation_error`.
1255
-
1256
- '
1153
+ description: 'Accepts a non-empty array of runIds and cancels each one independently. Returns `200` with a per-id results
1154
+ array even when some cancellations fail: the operation succeeds when the request reached the host, whatever the per-id
1155
+ outcomes. Hosts enforce a host-defined cap on the array length (RECOMMENDED 100); an over-cap request returns `400
1156
+ validation_error`.'
1257
1157
  operationId: bulkCancelRuns
1258
1158
  security:
1259
1159
  - ApiKeyAuth:
@@ -1357,15 +1257,9 @@ paths:
1357
1257
  fromSeq:
1358
1258
  type: integer
1359
1259
  minimum: 0
1360
- description: 'Inclusive — events `< fromSeq` are fixed history; `>= fromSeq` are re-executed.
1361
-
1362
- Required for `branch` (the branch point). Optional for `replay`; when omitted,
1363
-
1364
- defaults to `0` (full re-execution from source-run start) per `replay.md`
1365
-
1366
- §"Replay-mode defaults".
1367
-
1368
- '
1260
+ description: 'Inclusive: events `< fromSeq` are fixed history and events `>= fromSeq` are re-executed. Required
1261
+ for `branch` (the branch point). Optional for `replay`, where it defaults to `0`, full re-execution from
1262
+ the start of the source run (`replay.md` §"Replay-mode defaults").'
1369
1263
  mode:
1370
1264
  type: string
1371
1265
  enum:
@@ -1373,7 +1267,7 @@ paths:
1373
1267
  - branch
1374
1268
  runOptionsOverlay:
1375
1269
  type: object
1376
- description: For `branch` mode only — caller-supplied `RunOptions` to overlay.
1270
+ description: '`branch` mode only: caller-supplied `RunOptions` to overlay.'
1377
1271
  additionalProperties: false
1378
1272
  responses:
1379
1273
  '201':
@@ -1409,7 +1303,7 @@ paths:
1409
1303
  OpenWOP-Version:
1410
1304
  $ref: '#/components/headers/OpenWOPVersion'
1411
1305
  '400':
1412
- description: Invalid `fromSeq`, `replay` with non-empty `runOptionsOverlay`, etc.
1306
+ description: Invalid `fromSeq`, `replay` with a non-empty `runOptionsOverlay`, and similar.
1413
1307
  content:
1414
1308
  application/json:
1415
1309
  schema:
@@ -1424,7 +1318,7 @@ paths:
1424
1318
  '404':
1425
1319
  $ref: '#/components/responses/NotFound'
1426
1320
  '422':
1427
- description: '`fromSeq` references a sequence number that doesn''t exist in the source run''s event log.'
1321
+ description: '`fromSeq` names a sequence number that does not exist in the source run''s event log.'
1428
1322
  content:
1429
1323
  application/json:
1430
1324
  schema:
@@ -1436,19 +1330,10 @@ paths:
1436
1330
  get:
1437
1331
  tags:
1438
1332
  - runs
1439
- summary: 'RFC 0040 §C — return the run''s immediate parent in the cross-host
1440
-
1441
- composition chain. Capability-gated on
1442
-
1443
- `capabilities.multiAgent.executionModel.crossHostCausation.ancestryEndpointSupported: true`;
1444
-
1445
- hosts that don''t advertise return 404 not_found. Clients walk the full
1446
-
1447
- chain by following `parent.wellKnownUrl` per response, one hop at a
1448
-
1449
- time.
1450
-
1451
- '
1333
+ summary: Read a run's parent in the cross-host composition chain
1334
+ description: 'Returns the run''s immediate parent in the cross-host composition chain. Gated on `capabilities.multiAgent.executionModel.crossHostCausation.ancestryEndpointSupported:
1335
+ true`; a host that does not advertise it returns 404 not_found. Clients walk the full chain one hop at a time by following
1336
+ `parent.wellKnownUrl` in each response.'
1452
1337
  operationId: getRunAncestry
1453
1338
  security:
1454
1339
  - ApiKeyAuth:
@@ -1462,9 +1347,7 @@ paths:
1462
1347
  - $ref: '#/components/parameters/OpenWOPVersion'
1463
1348
  responses:
1464
1349
  '200':
1465
- description: 'Run''s immediate parent (or `parent: null` for top-level runs).
1466
-
1467
- '
1350
+ description: 'The run''s immediate parent (`parent: null` for a top-level run).'
1468
1351
  content:
1469
1352
  application/json:
1470
1353
  schema:
@@ -1477,15 +1360,8 @@ paths:
1477
1360
  '403':
1478
1361
  $ref: '#/components/responses/Forbidden'
1479
1362
  '404':
1480
- description: 'Either the run doesn''t exist, OR the host doesn''t advertise
1481
-
1482
- `crossHostCausation.ancestryEndpointSupported: true` and treats
1483
-
1484
- the endpoint as absent. Clients can disambiguate by inspecting
1485
-
1486
- the host''s discovery doc.
1487
-
1488
- '
1363
+ description: 'The run does not exist, or the host does not advertise `crossHostCausation.ancestryEndpointSupported:
1364
+ true` and treats the endpoint as absent. Clients can tell the two apart from the host''s discovery document.'
1489
1365
  content:
1490
1366
  application/json:
1491
1367
  schema:
@@ -1497,35 +1373,18 @@ paths:
1497
1373
  get:
1498
1374
  tags:
1499
1375
  - agents
1500
- summary: 'RFC 0072 §A — list the manifest agents this host has installed into its
1501
-
1502
- AgentRegistry (RFC 0070). Capability-gated on
1503
-
1504
- `capabilities.agents.manifestRuntime.supported: true`; hosts that don''t
1505
-
1506
- advertise it return 404. Read-only projection — never carries the
1507
-
1508
- system-prompt body, resolved handoff schemas, or credential material (SR-1).
1509
-
1510
- Dispatch is not a bespoke endpoint: a manifest agent is invoked as a run
1511
-
1512
- whose node pins it via `WorkflowNode.agent` + `POST /v1/runs` (RFC 0072 §B).
1513
-
1514
- RFC 0074 — the result is scoped to the authenticated principal''s owner
1515
-
1516
- triple (RFC 0048). When `capabilities.agents.manifestRuntime.installScope`
1517
-
1518
- is `''tenant''`, only the agents available to the caller''s tenant·workspace
1519
-
1520
- are returned (an agent another workspace installed is absent, never
1521
-
1522
- disclosed); when `''host''` (default) the inventory is host-global as in
1523
-
1524
- RFC 0072. A `''tenant''`-scoped host MUST reject unauthenticated/unscoped
1525
-
1526
- requests per its standard auth contract rather than fall back to a global list.
1527
-
1528
- '
1376
+ summary: List installed manifest agents
1377
+ description: 'Lists the manifest agents installed in this host''s AgentRegistry. Gated on `capabilities.agents.manifestRuntime.supported:
1378
+ true`; a host that does not advertise it returns 404. The projection is read-only and never carries the system-prompt
1379
+ body, resolved handoff schemas, or credential material (SR-1). There is no dispatch endpoint: a manifest agent is
1380
+ invoked as a run whose node pins it with `WorkflowNode.agent` + `POST /runs`.
1381
+
1382
+
1383
+ The result is scoped to the authenticated principal''s owner triple. When `capabilities.agents.manifestRuntime.installScope`
1384
+ is `''tenant''`, only the agents available to the caller''s tenant and workspace are returned; an agent another workspace
1385
+ installed is absent, never disclosed. When it is `''host''` (the default), the inventory is host-global. A `''tenant''`-scoped
1386
+ host MUST reject unauthenticated or unscoped requests under its standard auth contract rather than fall back to a
1387
+ global list.'
1529
1388
  operationId: listAgents
1530
1389
  security:
1531
1390
  - ApiKeyAuth:
@@ -1536,9 +1395,9 @@ paths:
1536
1395
  - runs:read
1537
1396
  responses:
1538
1397
  '200':
1539
- description: 'Installed manifest agents (agentId-sorted). RFC 0202: when the host advertises `a2a.agentCards`, an
1540
- entry the host routes a workflow to carries `a2aTenant`, the opaque A2A `tenant` value of that agent''s card (interop.md
1541
- §Per-agent cards).'
1398
+ description: Installed manifest agents, sorted by `agentId`. When the host advertises `a2a.agentCards`, an entry
1399
+ the host routes a workflow to carries `a2aTenant`, the opaque A2A `tenant` value of that agent's card (interop.md
1400
+ §Per-agent cards).
1542
1401
  content:
1543
1402
  application/json:
1544
1403
  schema:
@@ -1551,11 +1410,7 @@ paths:
1551
1410
  '403':
1552
1411
  $ref: '#/components/responses/Forbidden'
1553
1412
  '404':
1554
- description: 'Host does not advertise `capabilities.agents.manifestRuntime` and
1555
-
1556
- treats the endpoint as absent.
1557
-
1558
- '
1413
+ description: Host does not advertise `capabilities.agents.manifestRuntime` and treats the endpoint as absent.
1559
1414
  content:
1560
1415
  application/json:
1561
1416
  schema:
@@ -1569,21 +1424,11 @@ paths:
1569
1424
  get:
1570
1425
  tags:
1571
1426
  - agents
1572
- summary: 'RFC 0072 §A — return one installed manifest agent''s inventory entry, or
1573
-
1574
- 404 when no such agent is installed (or the host doesn''t advertise
1575
-
1576
- `capabilities.agents.manifestRuntime`). RFC 0074 — resolved within the
1577
-
1578
- authenticated principal''s owner triple (RFC 0048): on an
1579
-
1580
- `installScope: ''tenant''` host an agent the caller''s workspace has not
1581
-
1582
- approved 404s identically to "not installed", so the surface never
1583
-
1584
- discloses another tenant''s inventory.
1585
-
1586
- '
1427
+ summary: Read one installed manifest agent
1428
+ description: 'Returns one installed manifest agent''s inventory entry, or 404 when no such agent is installed or the
1429
+ host does not advertise `capabilities.agents.manifestRuntime`. The lookup is resolved within the authenticated principal''s
1430
+ owner triple: on an `installScope: ''tenant''` host, an agent the caller''s workspace has not approved returns the
1431
+ same 404 as "not installed", so another tenant''s inventory is never disclosed.'
1587
1432
  operationId: getAgent
1588
1433
  security:
1589
1434
  - ApiKeyAuth:
@@ -1599,21 +1444,13 @@ paths:
1599
1444
  schema:
1600
1445
  type: string
1601
1446
  pattern: ^(?!roster$|org-chart$).+$
1602
- description: 'The manifest agentId. MUST NOT be the reserved literals `roster` or
1603
-
1604
- `org-chart` — those name the sibling collection routes
1605
-
1606
- (`/v1/agents/roster`, `/v1/agents/org-chart`), so excluding them here
1607
-
1608
- keeps `/v1/agents/{agentId}` unambiguous against them.
1609
-
1610
- '
1447
+ description: The manifest agentId. MUST NOT be the reserved literals `roster` or `org-chart`, which name the sibling
1448
+ collection routes (`/agents/roster`, `/agents/org-chart`), so `/agents/{agentId}` stays unambiguous.
1611
1449
  - $ref: '#/components/parameters/OpenWOPVersion'
1612
1450
  responses:
1613
1451
  '200':
1614
- description: 'The agent''s inventory entry. RFC 0202: when the host advertises `a2a.agentCards`, an entry the host
1615
- routes a workflow to carries `a2aTenant`, the opaque A2A `tenant` value of that agent''s card (interop.md §Per-agent
1616
- cards).'
1452
+ description: The agent's inventory entry. When the host advertises `a2a.agentCards`, an entry the host routes a
1453
+ workflow to carries `a2aTenant`, the opaque A2A `tenant` value of that agent's card (interop.md §Per-agent cards).
1617
1454
  content:
1618
1455
  application/json:
1619
1456
  schema:
@@ -1638,21 +1475,11 @@ paths:
1638
1475
  get:
1639
1476
  tags:
1640
1477
  - agents
1641
- summary: 'RFC 0082 §C/§E — list the deployment records (per-(agentId, version)) for
1642
-
1643
- a manifest agent: the lifecycle `state`, the named `channels`, the canary
1644
-
1645
- share, the rollback pointer, and the last-transition provenance. Read-only,
1646
-
1647
- content-free of any manifest body or credential (SR-1). Capability-gated on
1648
-
1649
- `capabilities.agents.deployment.supported: true`; hosts that don''t advertise
1650
-
1651
- it return 404. Tenant-scoped to the caller''s owner triple (RFC 0048/0074)
1652
-
1653
- when `installScope: ''tenant''`.
1654
-
1655
- '
1478
+ summary: List an agent's deployment records
1479
+ description: 'Lists the deployment records, one per `(agentId, version)`, for a manifest agent: the lifecycle `state`,
1480
+ the named `channels`, the canary share, the rollback pointer, and the last-transition provenance. Read-only and content-free
1481
+ of any manifest body or credential (SR-1). Gated on `capabilities.agents.deployment.supported: true`; a host that
1482
+ does not advertise it returns 404. Tenant-scoped to the caller''s owner triple when `installScope: ''tenant''`.'
1656
1483
  operationId: listAgentDeployments
1657
1484
  security:
1658
1485
  - ApiKeyAuth:
@@ -1668,17 +1495,9 @@ paths:
1668
1495
  schema:
1669
1496
  type: string
1670
1497
  pattern: ^(?!roster$|org-chart$).+$
1671
- description: 'The manifest agentId. MUST NOT be the reserved literals `roster` or
1672
-
1673
- `org-chart` — those name the sibling collection routes
1674
-
1675
- (`/v1/agents/roster/{rosterId}`, `/v1/agents/org-chart/{departmentId}`),
1676
-
1677
- so excluding them here keeps `/v1/agents/{agentId}/deployments`
1678
-
1679
- unambiguous against them.
1680
-
1681
- '
1498
+ description: The manifest agentId. MUST NOT be the reserved literals `roster` or `org-chart`, which name the sibling
1499
+ collection routes (`/agents/roster/{rosterId}`, `/agents/org-chart/{departmentId}`), so `/agents/{agentId}/deployments`
1500
+ stays unambiguous.
1682
1501
  - $ref: '#/components/parameters/OpenWOPVersion'
1683
1502
  responses:
1684
1503
  '200':
@@ -1708,21 +1527,12 @@ paths:
1708
1527
  post:
1709
1528
  tags:
1710
1529
  - agents
1711
- summary: 'RFC 0082 §E — request a deployment state transition (promote / pause /
1712
-
1713
- deprecate / rollback / adjust-canary). The host MUST authorize fail-closed
1714
-
1715
- against the RFC 0049 `deploy:*` scope (absent/unseeded role denies), run any
1716
-
1717
- configured RFC 0051 approvalGate, and — when the gate carries `requiredEval`
1718
-
1719
- — verify the referenced RFC 0081 eval run is terminal and `EvalSummary.passed`
1720
-
1721
- BEFORE emitting `deployment.promoted`. On success returns the updated
1722
-
1723
- deployment record and emits the matching content-free `deployment.*` event.
1724
-
1725
- '
1530
+ summary: Request a deployment state transition
1531
+ description: 'Requests a transition: promote, pause, deprecate, rollback, or adjust-canary. The host MUST authorize
1532
+ fail-closed against the `deploy:*` scope (an absent or unseeded role denies), run any configured approvalGate, and,
1533
+ when the gate carries `requiredEval`, verify that the referenced eval run is terminal and `EvalSummary.passed` before
1534
+ emitting `deployment.promoted`. On success it returns the updated deployment record and emits the matching content-free
1535
+ `deployment.*` event.'
1726
1536
  operationId: transitionAgentDeployment
1727
1537
  security:
1728
1538
  - ApiKeyAuth:
@@ -1757,13 +1567,8 @@ paths:
1757
1567
  OpenWOP-Version:
1758
1568
  $ref: '#/components/headers/OpenWOPVersion'
1759
1569
  '400':
1760
- description: 'Validation error, or a transition that the host''s advertised
1761
-
1762
- `states`/`canary` cannot satisfy, or `no_active_deployment` when a
1763
-
1764
- referenced channel resolves to no active version.
1765
-
1766
- '
1570
+ description: A validation error; a transition the host's advertised `states`/`canary` cannot satisfy; or `no_active_deployment`
1571
+ when a referenced channel resolves to no active version.
1767
1572
  content:
1768
1573
  application/json:
1769
1574
  schema:
@@ -1774,13 +1579,8 @@ paths:
1774
1579
  '401':
1775
1580
  $ref: '#/components/responses/Unauthenticated'
1776
1581
  '403':
1777
- description: 'Fail-closed authorization denial (the principal lacks the required
1778
-
1779
- `deploy:*` scope — RFC 0049), or `eval_gate_unmet` when a `requiredEval`
1780
-
1781
- gate''s referenced eval run is not terminal-and-passed (RFC 0081).
1782
-
1783
- '
1582
+ description: Fail-closed authorization denial (the principal lacks the required `deploy:*` scope), or `eval_gate_unmet`
1583
+ when a `requiredEval` gate's referenced eval run is not terminal and passed.
1784
1584
  content:
1785
1585
  application/json:
1786
1586
  schema:
@@ -1801,19 +1601,11 @@ paths:
1801
1601
  get:
1802
1602
  tags:
1803
1603
  - agents
1804
- summary: 'RFC 0086 §B — list the standing agent roster (named "digital-twin
1805
-
1806
- employee" instances + their workflow portfolios) visible to the
1807
-
1808
- caller. Capability-gated on `capabilities.agents.roster.supported:
1809
-
1810
- true`; hosts that don''t advertise it return 404. Tenant-scoped per
1811
-
1812
- RFC 0074 — on an `installScope: ''tenant''` host only the caller''s
1813
-
1814
- owner-triple entries are returned. Read-only; content-free (SR-1).
1815
-
1816
- '
1604
+ summary: List the standing agent roster
1605
+ description: 'Lists the standing agent roster visible to the caller: named "digital-twin employee" instances and their
1606
+ workflow portfolios. Gated on `capabilities.agents.roster.supported: true`; a host that does not advertise it returns
1607
+ 404. Tenant-scoped: on an `installScope: ''tenant''` host only the caller''s owner-triple entries are returned. Read-only;
1608
+ content-free (SR-1).'
1817
1609
  operationId: listAgentRoster
1818
1610
  security:
1819
1611
  - ApiKeyAuth:
@@ -1851,17 +1643,10 @@ paths:
1851
1643
  get:
1852
1644
  tags:
1853
1645
  - agents
1854
- summary: 'RFC 0086 §B — return one standing roster entry, or 404 when no such
1855
-
1856
- entry exists, the host doesn''t advertise `capabilities.agents.roster`,
1857
-
1858
- or (on an `installScope: ''tenant''` host) the entry is outside the
1859
-
1860
- caller''s owner triple — a cross-tenant entry 404s identically to
1861
-
1862
- "not found", never disclosing another tenant''s roster.
1863
-
1864
- '
1646
+ summary: Read one standing roster entry
1647
+ description: 'Returns one standing roster entry, or 404 when no such entry exists, the host does not advertise `capabilities.agents.roster`,
1648
+ or (on an `installScope: ''tenant''` host) the entry is outside the caller''s owner triple. A cross-tenant entry returns
1649
+ the same 404 as "not found", so another tenant''s roster is never disclosed.'
1865
1650
  operationId: getAgentRosterEntry
1866
1651
  security:
1867
1652
  - ApiKeyAuth:
@@ -1905,17 +1690,10 @@ paths:
1905
1690
  get:
1906
1691
  tags:
1907
1692
  - agents
1908
- summary: 'RFC 0087 §C — return the caller''s agent org-chart (departments + roles
1909
-
1910
- + `reportsTo` edges over roster members). Capability-gated on
1911
-
1912
- `capabilities.agents.orgChart.supported: true`; hosts that don''t
1913
-
1914
- advertise it return 404. Tenant-scoped per RFC 0074. DESCRIPTIVE only:
1915
-
1916
- an org edge confers no authority (§B `org-position-no-authority-escalation`).
1917
-
1918
- '
1693
+ summary: Read the caller's agent org chart
1694
+ description: 'Returns the caller''s agent org chart: departments, roles, and `reportsTo` edges over roster members.
1695
+ Gated on `capabilities.agents.orgChart.supported: true`; a host that does not advertise it returns 404. Tenant-scoped.
1696
+ The chart is descriptive only: an org edge confers no authority (`org-position-no-authority-escalation`).'
1919
1697
  operationId: getAgentOrgChart
1920
1698
  security:
1921
1699
  - ApiKeyAuth:
@@ -1953,17 +1731,10 @@ paths:
1953
1731
  get:
1954
1732
  tags:
1955
1733
  - agents
1956
- summary: 'RFC 0087 §D — one department''s subtree + responsibility roll-up (the
1957
-
1958
- union of its members'' RFC 0086 portfolios). `?recursive=false` narrows
1959
-
1960
- the roll-up to direct members without changing the response shape.
1961
-
1962
- 404 when the department is unknown, cross-tenant, or the host doesn''t
1963
-
1964
- advertise `capabilities.agents.orgChart`. The roll-up grants nothing (§B).
1965
-
1966
- '
1734
+ summary: Read one department's subtree and responsibility roll-up
1735
+ description: Returns one department's subtree and responsibility roll-up (the union of its members' portfolios). `?recursive=false`
1736
+ narrows the roll-up to direct members without changing the response shape. Returns 404 when the department is unknown
1737
+ or cross-tenant, or the host does not advertise `capabilities.agents.orgChart`. The roll-up grants nothing.
1967
1738
  operationId: getAgentOrgChartDepartment
1968
1739
  security:
1969
1740
  - ApiKeyAuth:
@@ -1978,7 +1749,7 @@ paths:
1978
1749
  required: true
1979
1750
  schema:
1980
1751
  type: string
1981
- description: The department id to root the subtree + roll-up at.
1752
+ description: The department id to root the subtree and roll-up at.
1982
1753
  - in: query
1983
1754
  name: recursive
1984
1755
  required: false
@@ -2014,23 +1785,11 @@ paths:
2014
1785
  get:
2015
1786
  tags:
2016
1787
  - tools
2017
- summary: 'RFC 0078 §B — list the portable `ToolDescriptor`s visible to the caller
2018
-
2019
- across every tool source (node-pack / workflow / mcp / connector /
2020
-
2021
- host-extension). Capability-gated on
2022
-
2023
- `capabilities.toolCatalog.supported: true`; hosts that don''t advertise
2024
-
2025
- it return 404. §F-2 — the projection is authorization-scoped: a
2026
-
2027
- principal sees only the tools it may invoke, and a second principal MUST
2028
-
2029
- NOT see another principal''s tools (non-disclosure). Read-only; each
2030
-
2031
- descriptor is content-free of any credential material (SR-1).
2032
-
2033
- '
1788
+ summary: List the tools the caller may invoke
1789
+ description: 'Lists the portable `ToolDescriptor`s visible to the caller across every tool source (node-pack, workflow,
1790
+ mcp, connector, host-extension). Gated on `capabilities.toolCatalog.supported: true`; a host that does not advertise
1791
+ it returns 404. The projection is authorization-scoped: a principal sees only the tools it may invoke, and a second
1792
+ principal MUST NOT see another principal''s tools. Read-only; no descriptor carries credential material (SR-1).'
2034
1793
  operationId: listTools
2035
1794
  security:
2036
1795
  - ApiKeyAuth:
@@ -2049,12 +1808,10 @@ paths:
2049
1808
  - standard
2050
1809
  - compact
2051
1810
  default: standard
2052
- description: 'RFC 0112. `compact` returns the `{ tools: CompactToolDescriptor[] }` projection — heavy descriptor fields
2053
- omitted and `inputSchema` bounded to the compact structural subset — when the host advertises `capabilities.toolCatalog.compactView:
2054
- true`. Defaults to `standard`; a host that does not advertise `compactView` treats `view=compact` as any unknown
2055
- query param and returns the standard view.
2056
-
2057
- '
1811
+ description: '`compact` returns the `{ tools: CompactToolDescriptor[] }` projection (heavy descriptor fields omitted,
1812
+ `inputSchema` bounded to the compact structural subset) when the host advertises `capabilities.toolCatalog.compactView:
1813
+ true`. Defaults to `standard`. A host that does not advertise `compactView` treats `view=compact` like any unknown
1814
+ query parameter and returns the standard view.'
2058
1815
  - $ref: '#/components/parameters/OpenWOPVersion'
2059
1816
  responses:
2060
1817
  '200':
@@ -2095,15 +1852,10 @@ paths:
2095
1852
  get:
2096
1853
  tags:
2097
1854
  - tools
2098
- summary: 'RFC 0078 §B — return one `ToolDescriptor` by its stable `toolId`, or 404
2099
-
2100
- when no such tool exists, the caller isn''t authorized for it (§F-2
2101
-
2102
- non-disclosure — a cross-principal tool 404s identically to "not
2103
-
2104
- found"), or the host doesn''t advertise `capabilities.toolCatalog`.
2105
-
2106
- '
1855
+ summary: Read one tool descriptor
1856
+ description: Returns one `ToolDescriptor` by its stable `toolId`, or 404 when no such tool exists, the caller is not
1857
+ authorized for it, or the host does not advertise `capabilities.toolCatalog`. A tool the caller may not see returns
1858
+ the same 404 as "not found".
2107
1859
  operationId: getTool
2108
1860
  security:
2109
1861
  - ApiKeyAuth:
@@ -2128,11 +1880,9 @@ paths:
2128
1880
  - standard
2129
1881
  - compact
2130
1882
  default: standard
2131
- description: 'RFC 0112. `compact` returns one `CompactToolDescriptor` (heavy fields omitted; `inputSchema` bounded
2132
- to the compact structural subset) when the host advertises `capabilities.toolCatalog.compactView: true`. Defaults
2133
- to `standard`; a host that does not advertise `compactView` treats `view=compact` as any unknown query param.
2134
-
2135
- '
1883
+ description: '`compact` returns one `CompactToolDescriptor` (heavy fields omitted, `inputSchema` bounded to the compact
1884
+ structural subset) when the host advertises `capabilities.toolCatalog.compactView: true`. Defaults to `standard`.
1885
+ A host that does not advertise `compactView` treats `view=compact` like any unknown query parameter.'
2136
1886
  - $ref: '#/components/parameters/OpenWOPVersion'
2137
1887
  responses:
2138
1888
  '200':
@@ -2163,23 +1913,12 @@ paths:
2163
1913
  get:
2164
1914
  tags:
2165
1915
  - runs
2166
- summary: 'RFC 0081 §C — return the `EvalSummary` scorecard for a terminal eval run
2167
-
2168
- (a run started with `mode: "eval"`): aggregate + per-task scores, cost,
2169
-
2170
- latency, schema-validity, and redaction-safe safety findings, plus the
2171
-
2172
- suite provenance and (regression mode) the score delta vs a baseline.
2173
-
2174
- Content-free of task output / rubric prose / credentials (SR-1; the
2175
-
2176
- `eval-summary-no-content-leak` invariant). Capability-gated on
2177
-
2178
- `capabilities.agents.evalSuite.supported: true`; hosts that don''t advertise
2179
-
2180
- it return 404. 409 when the run is not yet terminal.
2181
-
2182
- '
1916
+ summary: Read the scorecard of a terminal eval run
1917
+ description: 'Returns the `EvalSummary` scorecard for a terminal eval run (one started with `mode: "eval"`): aggregate
1918
+ and per-task scores, cost, latency, schema validity, redaction-safe safety findings, the suite provenance, and, in
1919
+ regression mode, the score delta against a baseline. It carries no task output, rubric prose, or credentials (SR-1;
1920
+ `eval-summary-no-content-leak`). Gated on `capabilities.agents.evalSuite.supported: true`; a host that does not advertise
1921
+ it returns 404. Returns 409 while the run is not yet terminal.'
2183
1922
  operationId: getEvalSummary
2184
1923
  security:
2185
1924
  - ApiKeyAuth:
@@ -2206,11 +1945,7 @@ paths:
2206
1945
  '403':
2207
1946
  $ref: '#/components/responses/Forbidden'
2208
1947
  '404':
2209
- description: 'No such run, the run is not an eval run, or the host doesn''t advertise
2210
-
2211
- `capabilities.agents.evalSuite`.
2212
-
2213
- '
1948
+ description: No such run, the run is not an eval run, or the host does not advertise `capabilities.agents.evalSuite`.
2214
1949
  content:
2215
1950
  application/json:
2216
1951
  schema:
@@ -2231,17 +1966,10 @@ paths:
2231
1966
  get:
2232
1967
  tags:
2233
1968
  - runs
2234
- summary: 'RFC 0054 — return a deterministic, replay-aware structured diff of
2235
-
2236
- two runs (typically a run and its RFC 0011 fork): `divergedAtSeq` +
2237
-
2238
- ordered `eventDiffs[]` + `stateDiff`. The diff is a pure function of
2239
-
2240
- the two event logs (see `replay.md` determinism contract). Requires
2241
-
2242
- `runs:read` on BOTH runs. Hosts that don''t implement it return 404.
2243
-
2244
- '
1969
+ summary: Diff two runs
1970
+ description: 'Returns a deterministic, replay-aware structured diff of two runs, typically a run and its fork: `divergedAtSeq`,
1971
+ ordered `eventDiffs[]`, and `stateDiff`. The diff is a pure function of the two event logs (see the `replay.md` determinism
1972
+ contract). Requires `runs:read` on both runs. A host that does not implement it returns 404.'
2245
1973
  operationId: diffRun
2246
1974
  security:
2247
1975
  - ApiKeyAuth:
@@ -2261,11 +1989,8 @@ paths:
2261
1989
  - $ref: '#/components/parameters/OpenWOPVersion'
2262
1990
  responses:
2263
1991
  '200':
2264
- description: 'Structured diff of the two runs. `divergedAtSeq: null` + empty
2265
-
2266
- `eventDiffs` when the logs are identical.
2267
-
2268
- '
1992
+ description: 'Structured diff of the two runs. `divergedAtSeq: null` and an empty `eventDiffs` when the logs are
1993
+ identical.'
2269
1994
  content:
2270
1995
  application/json:
2271
1996
  schema:
@@ -2285,13 +2010,8 @@ paths:
2285
2010
  '401':
2286
2011
  $ref: '#/components/responses/Unauthenticated'
2287
2012
  '403':
2288
- description: 'Caller lacks `runs:read` on `{runId}` and/or on `against`
2289
-
2290
- (`forbidden`); composes with RFC 0048 cross-workspace
2291
-
2013
+ description: The caller lacks `runs:read` on `{runId}` or on `against` (`forbidden`); composes with cross-workspace
2292
2014
  isolation.
2293
-
2294
- '
2295
2015
  content:
2296
2016
  application/json:
2297
2017
  schema:
@@ -2300,11 +2020,8 @@ paths:
2300
2020
  OpenWOP-Version:
2301
2021
  $ref: '#/components/headers/OpenWOPVersion'
2302
2022
  '404':
2303
- description: 'Either run doesn''t exist, OR the host doesn''t implement the diff
2304
-
2305
- endpoint and treats the path as absent.
2306
-
2307
- '
2023
+ description: Either run does not exist, or the host does not implement the diff endpoint and treats the path as
2024
+ absent.
2308
2025
  content:
2309
2026
  application/json:
2310
2027
  schema:
@@ -2316,12 +2033,9 @@ paths:
2316
2033
  post:
2317
2034
  tags:
2318
2035
  - runs
2319
- summary: Administratively pause an in-flight run (RFC Track 13).
2320
- description: 'Operator-driven pause distinct from cancel (terminal) and HITL suspend (workflow-driven).
2321
-
2322
- Emits a `run.paused` event when the pause takes effect; exit only via `:resume` or `:cancel`.
2323
-
2324
- '
2036
+ summary: Administratively pause an in-flight run.
2037
+ description: An operator-driven pause, distinct from cancel (terminal) and from a HITL suspend (workflow-driven). Emits
2038
+ a `run.paused` event when the pause takes effect. The run leaves `paused` only through `:resume` or `:cancel`.
2325
2039
  operationId: pauseRun
2326
2040
  security:
2327
2041
  - ApiKeyAuth:
@@ -2349,15 +2063,12 @@ paths:
2349
2063
  - immediate
2350
2064
  - drain-current-node
2351
2065
  default: drain-current-node
2352
- description: '`immediate` snapshots between events; `drain-current-node` lets the running node
2353
-
2354
- reach a terminal before transitioning to `paused`.
2355
-
2356
- '
2066
+ description: '`immediate` snapshots between events; `drain-current-node` lets the running node reach a terminal
2067
+ state before the run transitions to `paused`.'
2357
2068
  additionalProperties: false
2358
2069
  responses:
2359
2070
  '202':
2360
- description: Pause requested; transition emits `run.paused` when complete.
2071
+ description: Pause requested; the transition emits `run.paused` when complete.
2361
2072
  content:
2362
2073
  application/json:
2363
2074
  schema:
@@ -2397,10 +2108,8 @@ paths:
2397
2108
  post:
2398
2109
  tags:
2399
2110
  - runs
2400
- summary: Resume a paused run (RFC Track 13).
2401
- description: 'Reverses a prior `:pause`. Run transitions from `paused` to `running` and emits `run.resumed`.
2402
-
2403
- '
2111
+ summary: Resume a paused run.
2112
+ description: 'Reverses a prior `:pause`: the run transitions from `paused` to `running` and emits `run.resumed`.'
2404
2113
  operationId: resumeRun
2405
2114
  security:
2406
2115
  - ApiKeyAuth:
@@ -2528,7 +2237,7 @@ paths:
2528
2237
  OpenWOP-Version:
2529
2238
  $ref: '#/components/headers/OpenWOPVersion'
2530
2239
  '409':
2531
- description: Concurrent resolve — only one wins.
2240
+ description: Concurrent resolve; only one wins.
2532
2241
  content:
2533
2242
  application/json:
2534
2243
  schema:
@@ -2537,7 +2246,7 @@ paths:
2537
2246
  OpenWOP-Version:
2538
2247
  $ref: '#/components/headers/OpenWOPVersion'
2539
2248
  '422':
2540
- description: Run was cancelled while interrupt was pending.
2249
+ description: The run was cancelled while the interrupt was pending.
2541
2250
  content:
2542
2251
  application/json:
2543
2252
  schema:
@@ -2644,9 +2353,9 @@ paths:
2644
2353
  - $ref: '#/components/parameters/OpenWOPVersion'
2645
2354
  responses:
2646
2355
  '200':
2647
- description: Artifact payload. Under `application/json` the shape is implementation-defined; under `application/a2a+json`
2648
- (RFC 0205 §A, negotiated by `Accept`; a host SHOULD offer it) it is an A2A `Artifact` whose `artifactId` equals
2649
- the path segment, and a `url` Part in it MUST NOT resolve beyond the caller's `artifacts:read` authorization.
2356
+ description: Artifact payload. Under `application/json` the shape is implementation-defined. Under `application/a2a+json`
2357
+ (negotiated by `Accept`; a host SHOULD offer it) it is an A2A `Artifact` whose `artifactId` equals the path segment,
2358
+ and a `url` Part in it MUST NOT resolve beyond the caller's `artifacts:read` authorization.
2650
2359
  content:
2651
2360
  application/json:
2652
2361
  schema:
@@ -2700,11 +2409,9 @@ paths:
2700
2409
  description: Event types to subscribe to (see `run-event.schema.json` enum).
2701
2410
  secret:
2702
2411
  type: string
2703
- description: 'Server signs payloads with this secret using HMAC-SHA256. REQUIRED in the Standard Webhooks
2704
- form `whsec_<base64>` (24–64 decoded bytes) when `signatureAlgorithms` lists `standard-webhooks-1` (RFC
2705
- 0201 §B.6); never echoed in any response.
2706
-
2707
- '
2412
+ description: The host signs payloads with this secret using HMAC-SHA256. REQUIRED in the Standard Webhooks
2413
+ form `whsec_<base64>` (24–64 decoded bytes) when `signatureAlgorithms` lists `standard-webhooks-1`. Never
2414
+ echoed in any response.
2708
2415
  tags:
2709
2416
  type: array
2710
2417
  items:
@@ -2721,13 +2428,14 @@ paths:
2721
2428
  enum:
2722
2429
  - v1
2723
2430
  - standard-webhooks-1
2724
- description: 'RFC 0201 §B — the per-subscription opt-in. Absent means `["v1"]`, today''s behaviour byte
2725
- for byte. When present it MUST contain `v1`, MUST NOT repeat a value, and every value MUST be listed in
2726
- the host''s `webhooks.signatureAlgorithms`; otherwise `400 validation_error`. Listing `standard-webhooks-1`
2727
- opts the subscription into the Standard Webhooks 1.0.0 companion scheme, which runs endpoint verification
2728
- before the `201` (`400 webhook_endpoint_unverified` when the endpoint does not echo the challenge).
2431
+ description: 'The per-subscription signature opt-in. Absent means `["v1"]`. When present it MUST contain
2432
+ `v1`, MUST NOT repeat a value, and every value MUST be listed in the host''s `webhooks.signatureAlgorithms`;
2433
+ otherwise `400 validation_error`.
2434
+
2729
2435
 
2730
- '
2436
+ Listing `standard-webhooks-1` opts the subscription into the Standard Webhooks 1.0.0 companion scheme,
2437
+ which runs endpoint verification before the `201` (`400 webhook_endpoint_unverified` when the endpoint
2438
+ does not echo the challenge).'
2731
2439
  additionalProperties: false
2732
2440
  responses:
2733
2441
  '201':
@@ -2745,17 +2453,14 @@ paths:
2745
2453
  type: array
2746
2454
  items:
2747
2455
  type: string
2748
- description: RFC 0201 §B.7 — the list the dispatcher will apply; present whenever the request carried
2749
- `signatureAlgorithms`.
2456
+ description: The list the dispatcher will apply; present whenever the request carried `signatureAlgorithms`.
2750
2457
  headers:
2751
2458
  OpenWOP-Version:
2752
2459
  $ref: '#/components/headers/OpenWOPVersion'
2753
2460
  '400':
2754
- description: '`validation_error` (malformed body, or an invalid `signatureAlgorithms` / `secret` opt-in, RFC 0201
2755
- §B), `webhook_url_rejected` (egress), or `webhook_endpoint_unverified` (RFC 0201 §D — an opted-in endpoint did
2756
- not echo the verification challenge; no subscription is persisted).
2757
-
2758
- '
2461
+ description: '`validation_error` (malformed body, or an invalid `signatureAlgorithms` or `secret` opt-in), `webhook_url_rejected`
2462
+ (egress), or `webhook_endpoint_unverified` (an opted-in endpoint did not echo the verification challenge; no subscription
2463
+ is persisted).'
2759
2464
  content:
2760
2465
  application/json:
2761
2466
  schema:
@@ -2786,11 +2491,8 @@ paths:
2786
2491
  required: true
2787
2492
  schema:
2788
2493
  $ref: ../../schemas/v2/ids.schema.json#/$defs/subscriptionId
2789
- description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5, RFC 0187 §A.1), one path
2790
-
2791
- segment: `~`-projected (RFC 0184) or percent-encoded.
2792
-
2793
- '
2494
+ description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5), carried as one path segment: `~`-projected or
2495
+ percent-encoded.'
2794
2496
  - $ref: '#/components/parameters/OpenWOPVersion'
2795
2497
  responses:
2796
2498
  '204':
@@ -2809,13 +2511,15 @@ paths:
2809
2511
  tags:
2810
2512
  - webhooks
2811
2513
  operationId: rotateWebhookSecret
2812
- summary: Rotate a Standard Webhooks subscription's secret with an overlap (RFC 0201 §E)
2813
- description: 'Gated on `webhooks.secretRotation`: a host that does not advertise it MUST answer `404 not_found`. Only
2814
- for a subscription that opted into `standard-webhooks-1`; any other subscription gets `400 validation_error` (its
2815
- single `v1` signature cannot overlap). Tenant checks are exactly those of `unregisterWebhook`: `403 id_tenant_mismatch`
2514
+ summary: Rotate a Standard Webhooks subscription's secret with an overlap
2515
+ description: 'Rotates the secret of a subscription that opted into `standard-webhooks-1`. Gated on `webhooks.secretRotation`:
2516
+ a host that does not advertise it MUST answer `404 not_found`. Any other subscription gets `400 validation_error`,
2517
+ because its single `v1` signature cannot overlap. Tenant checks are those of `unregisterWebhook`: `403 id_tenant_mismatch`
2816
2518
  when the id''s tenant segment is not the caller''s, checked before the lookup (`identity.md` §5); `404` when unknown.
2519
+
2520
+
2817
2521
  For `overlapSeconds` after `rotatedAt`, `webhook-signature` carries one entry under the new secret and one under the
2818
- previous one, and `OpenWOP-Signature` stays on the previous secret; at `previousSecretExpiresAt` only the new secret
2522
+ previous one, and `OpenWOP-Signature` stays on the previous secret. At `previousSecretExpiresAt` only the new secret
2819
2523
  signs. A second rotation inside an overlap retires the oldest secret immediately. Rotation does not re-verify the
2820
2524
  endpoint. The response carries no secret.'
2821
2525
  parameters:
@@ -2824,8 +2528,8 @@ paths:
2824
2528
  required: true
2825
2529
  schema:
2826
2530
  $ref: ../../schemas/v2/ids.schema.json#/$defs/subscriptionId
2827
- description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5, RFC 0187 §A.1), one path segment: `~`-projected
2828
- (RFC 0184) or percent-encoded.'
2531
+ description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5), carried as one path segment: `~`-projected or
2532
+ percent-encoded.'
2829
2533
  - $ref: '#/components/parameters/IdempotencyKey'
2830
2534
  - $ref: '#/components/parameters/OpenWOPVersion'
2831
2535
  requestBody:
@@ -2841,7 +2545,7 @@ paths:
2841
2545
  secret:
2842
2546
  type: string
2843
2547
  pattern: ^whsec_[A-Za-z0-9+/]+={0,2}$
2844
- description: The new secret, `whsec_<base64>` decoding to 24–64 bytes (RFC 0201 §B.6).
2548
+ description: 'The new secret: `whsec_<base64>`, decoding to 24–64 bytes.'
2845
2549
  responses:
2846
2550
  '200':
2847
2551
  description: Rotated. No secret is returned.
@@ -2884,25 +2588,11 @@ paths:
2884
2588
  tags:
2885
2589
  - audit
2886
2590
  summary: Verify the audit-log hash chain over [fromSeq, toSeq].
2887
- description: 'Per `spec/v1/auth-profiles.md` §`openwop-audit-log-integrity` §4. The
2888
-
2889
- verifier re-walks audit-log entries in the requested range,
2890
-
2891
- re-computes each entry''s `prevHash` from the canonical RFC 8785 JCS
2892
-
2893
- serialization of the prior entry, verifies signed checkpoints
2894
-
2895
- against the host''s advertised `auditLogIntegrity.checkpointPublicKey`,
2896
-
2897
- and returns `chainValid` + an enumeration of any anomalies.
2898
-
2899
- Hosts MUST require the `audit:read` scope. Hosts that do NOT
2900
-
2901
- advertise the `openwop-audit-log-integrity` profile MAY omit this
2902
-
2903
- endpoint entirely (clients SHOULD pre-flight via `/.well-known/openwop`).
2904
-
2905
- '
2591
+ description: Re-walks the audit-log entries in the requested range, recomputes each entry's `prevHash` from the canonical
2592
+ RFC 8785 JCS serialization of the prior entry, verifies signed checkpoints against the host's advertised `auditLogIntegrity.checkpointPublicKey`,
2593
+ and returns `chainValid` with any anomalies. Hosts MUST require the `audit:read` scope. Hosts that do not advertise
2594
+ the `openwop-audit-log-integrity` profile MAY omit this endpoint entirely; clients SHOULD check `/.well-known/openwop`
2595
+ first. See `spec/v1/auth-profiles.md` §`openwop-audit-log-integrity` §4.
2906
2596
  operationId: verifyAuditLog
2907
2597
  security:
2908
2598
  - ApiKeyAuth:
@@ -2980,13 +2670,8 @@ paths:
2980
2670
  name: tag
2981
2671
  schema:
2982
2672
  type: string
2983
- description: 'Filter to templates whose `tags[]` contains this exact tag.
2984
-
2985
- Hosts MAY accept the parameter multiple times; the semantic
2986
-
2987
- when repeated is AND (every named tag must be present).
2988
-
2989
- '
2673
+ description: Filter to templates whose `tags[]` contains this exact tag. Hosts MAY accept the parameter more than
2674
+ once; repeated values combine with AND (every named tag must be present).
2990
2675
  - in: query
2991
2676
  name: modelClass
2992
2677
  schema:
@@ -3040,8 +2725,8 @@ paths:
3040
2725
  '403':
3041
2726
  $ref: '#/components/responses/Forbidden'
3042
2727
  '501':
3043
- description: Host does not advertise capabilities.prompts.endpointsSupported. (RFC 0028 §A — supported gates Phase
3044
- A node-execution composition; endpointsSupported gates this REST surface independently.)
2728
+ description: Host does not advertise `capabilities.prompts.endpointsSupported`. (`supported` gates node-execution
2729
+ composition; `endpointsSupported` gates this REST surface independently.)
3045
2730
  content:
3046
2731
  application/json:
3047
2732
  schema:
@@ -3096,7 +2781,7 @@ paths:
3096
2781
  OpenWOP-Version:
3097
2782
  $ref: '#/components/headers/OpenWOPVersion'
3098
2783
  '501':
3099
- description: Host does not advertise capabilities.prompts.mutableLibrary.
2784
+ description: Host does not advertise `capabilities.prompts.mutableLibrary`.
3100
2785
  content:
3101
2786
  application/json:
3102
2787
  schema:
@@ -3112,7 +2797,7 @@ paths:
3112
2797
  schema:
3113
2798
  type: string
3114
2799
  pattern: ^[a-z0-9][a-z0-9._-]{0,127}$
3115
- description: PromptTemplate.templateId per RFC 0027.
2800
+ description: '`PromptTemplate.templateId`.'
3116
2801
  - in: query
3117
2802
  name: version
3118
2803
  schema:
@@ -3124,13 +2809,8 @@ paths:
3124
2809
  schema:
3125
2810
  type: string
3126
2811
  pattern: ^[a-z0-9][a-z0-9._-]{0,127}$
3127
- description: 'Disambiguate when multiple installed packs ship the same
3128
-
3129
- templateId. Hosts MUST return `prompt_ref_ambiguous` if
3130
-
3131
- ambiguous and libraryId is omitted.
3132
-
3133
- '
2812
+ description: Disambiguates when several installed packs ship the same templateId. Hosts MUST return `prompt_ref_ambiguous`
2813
+ when the reference is ambiguous and libraryId is omitted.
3134
2814
  get:
3135
2815
  tags:
3136
2816
  - prompts
@@ -3167,7 +2847,7 @@ paths:
3167
2847
  OpenWOP-Version:
3168
2848
  $ref: '#/components/headers/OpenWOPVersion'
3169
2849
  '400':
3170
- description: '`prompt_ref_ambiguous` when libraryId disambiguation is required.'
2850
+ description: '`prompt_ref_ambiguous` when `libraryId` disambiguation is required.'
3171
2851
  content:
3172
2852
  application/json:
3173
2853
  schema:
@@ -3189,8 +2869,8 @@ paths:
3189
2869
  OpenWOP-Version:
3190
2870
  $ref: '#/components/headers/OpenWOPVersion'
3191
2871
  '501':
3192
- description: Host does not advertise capabilities.prompts.endpointsSupported. (RFC 0028 §A — supported gates Phase
3193
- A node-execution composition; endpointsSupported gates this REST surface independently.)
2872
+ description: Host does not advertise `capabilities.prompts.endpointsSupported`. (`supported` gates node-execution
2873
+ composition; `endpointsSupported` gates this REST surface independently.)
3194
2874
  content:
3195
2875
  application/json:
3196
2876
  schema:
@@ -3263,7 +2943,7 @@ paths:
3263
2943
  OpenWOP-Version:
3264
2944
  $ref: '#/components/headers/OpenWOPVersion'
3265
2945
  '501':
3266
- description: Host does not advertise capabilities.prompts.mutableLibrary.
2946
+ description: Host does not advertise `capabilities.prompts.mutableLibrary`.
3267
2947
  content:
3268
2948
  application/json:
3269
2949
  schema:
@@ -3310,7 +2990,7 @@ paths:
3310
2990
  OpenWOP-Version:
3311
2991
  $ref: '#/components/headers/OpenWOPVersion'
3312
2992
  '501':
3313
- description: Host does not advertise capabilities.prompts.mutableLibrary.
2993
+ description: Host does not advertise `capabilities.prompts.mutableLibrary`.
3314
2994
  content:
3315
2995
  application/json:
3316
2996
  schema:
@@ -3325,25 +3005,11 @@ paths:
3325
3005
  tags:
3326
3006
  - prompts
3327
3007
  summary: Render a prompt template with supplied variable bindings.
3328
- description: 'Returns the composed body + sha256 hash + per-variable hashes.
3329
-
3330
- The response''s `hash` MUST equal the `hash` that a matching
3331
-
3332
- `prompt.composed` event would carry at dispatch time for the
3333
-
3334
- same `(ref, variables, contentTrust)` inputs (RFC 0028 §A
3335
-
3336
- deterministic-render invariant; RFC 0027 §F replay invariant).
3337
-
3338
- Does NOT dispatch an LLM call. Secret-source variable values
3339
-
3340
- MUST be supplied as `[REDACTED:<credentialRef>]` markers; the
3341
-
3342
- host resolves the plaintext internally and never echoes it in
3343
-
3344
- the `composed` response field per SR-1.
3345
-
3346
- '
3008
+ description: Returns the composed body, its sha256 hash, and per-variable hashes. Does not dispatch an LLM call. The
3009
+ response's `hash` MUST equal the `hash` a matching `prompt.composed` event would carry at dispatch time for the same
3010
+ `(ref, variables, contentTrust)` inputs, so rendering is deterministic and replay-safe. Secret-source variable values
3011
+ MUST be supplied as `[REDACTED:<credentialRef>]` markers; the host resolves the plaintext internally and never echoes
3012
+ it in the `composed` response field (SR-1).
3347
3013
  operationId: renderPromptTemplate
3348
3014
  security:
3349
3015
  - ApiKeyAuth:
@@ -3366,24 +3032,15 @@ paths:
3366
3032
  $ref: ../../schemas/v2/prompt-ref.schema.json
3367
3033
  variables:
3368
3034
  type: object
3369
- description: 'Variable bindings keyed by `PromptVariable.name`.
3370
-
3371
- Secret-source bindings carry `[REDACTED:<credentialRef>]`
3372
-
3035
+ description: Variable bindings keyed by `PromptVariable.name`. Secret-source bindings carry `[REDACTED:<credentialRef>]`
3373
3036
  markers; the host resolves the real value internally.
3374
-
3375
- '
3376
3037
  additionalProperties: true
3377
3038
  contentTrust:
3378
3039
  type: string
3379
3040
  enum:
3380
3041
  - trusted
3381
3042
  - untrusted
3382
- description: 'Aggregate trust marker for the supplied bindings,
3383
-
3384
- propagated through composition per RFC 0027 §E.
3385
-
3386
- '
3043
+ description: Aggregate trust marker for the supplied bindings, propagated through composition.
3387
3044
  responses:
3388
3045
  '200':
3389
3046
  description: Composed result.
@@ -3420,13 +3077,8 @@ paths:
3420
3077
  OpenWOP-Version:
3421
3078
  $ref: '#/components/headers/OpenWOPVersion'
3422
3079
  '400':
3423
- description: '`prompt_variable_unresolved` (required variable missing),
3424
-
3425
- `prompt_variable_type_mismatch` (bound type vs. declared type),
3426
-
3427
- or `prompt_ref_invalid` (malformed PromptRef).
3428
-
3429
- '
3080
+ description: '`prompt_variable_unresolved` (a required variable is missing), `prompt_variable_type_mismatch` (bound
3081
+ type differs from declared type), or `prompt_ref_invalid` (malformed PromptRef).'
3430
3082
  content:
3431
3083
  application/json:
3432
3084
  schema:
@@ -3448,8 +3100,8 @@ paths:
3448
3100
  OpenWOP-Version:
3449
3101
  $ref: '#/components/headers/OpenWOPVersion'
3450
3102
  '501':
3451
- description: Host does not advertise capabilities.prompts.endpointsSupported. (RFC 0028 §A — supported gates Phase
3452
- A node-execution composition; endpointsSupported gates this REST surface independently.)
3103
+ description: Host does not advertise `capabilities.prompts.endpointsSupported`. (`supported` gates node-execution
3104
+ composition; `endpointsSupported` gates this REST surface independently.)
3453
3105
  content:
3454
3106
  application/json:
3455
3107
  schema:
@@ -3464,9 +3116,9 @@ paths:
3464
3116
  tags:
3465
3117
  - host
3466
3118
  operationId: getEffectSeamManifest
3467
- summary: The host-declared effect-seam manifest (RFC 0173 §C)
3468
- description: Every outbound effect seam replay suppression covers. A seam omitted here is invisible to the suite; the
3469
- RFC 0140 R5 audit is the control.
3119
+ summary: Read the host's effect-seam manifest
3120
+ description: Lists every outbound effect seam that replay suppression covers. A seam omitted here is invisible to the
3121
+ conformance suite; an audit of the host's seams is the control.
3470
3122
  responses:
3471
3123
  '200':
3472
3124
  description: The manifest.
@@ -3495,9 +3147,8 @@ paths:
3495
3147
  tags:
3496
3148
  - runs
3497
3149
  operationId: getRunCompensation
3498
- summary: Compensation plan and attempts for a run (RFC 0173 §C.1)
3499
- description: The read projection that makes compensation a core obligation with a deployed-wire witness (RFC 0151 G9
3500
- / RFC 0173 §B).
3150
+ summary: Read a run's compensation plan and attempts
3151
+ description: The run's compensation plan and every attempt, as a read projection.
3501
3152
  responses:
3502
3153
  '200':
3503
3154
  description: The projection.
@@ -3526,8 +3177,8 @@ paths:
3526
3177
  tags:
3527
3178
  - runs
3528
3179
  operationId: getRunEffects
3529
- summary: The Layer-2 effect ledger for a run (RFC 0173 §C.2)
3530
- description: Business-identity keyed effect records; the witness for the Layer-2 effect-identity obligation.
3180
+ summary: Read a run's Layer-2 effect ledger
3181
+ description: Effect records keyed by business identity; the witness for the Layer-2 effect-identity obligation.
3531
3182
  responses:
3532
3183
  '200':
3533
3184
  description: The ledger projection.
@@ -3554,20 +3205,22 @@ paths:
3554
3205
  tags:
3555
3206
  - webhooks
3556
3207
  operationId: listWebhookDeadLetters
3557
- summary: A subscription's dead-lettered deliveries (RFC 0188 §A.1)
3558
- description: 'The read that makes `webhooks.md` §Durability observable. A delivery whose retries are exhausted, or a
3559
- `payload_unprojectable` delivery dead-lettered on its first attempt, appears here until `retentionDays` elapse. Gated
3560
- on the `webhooks.deadLetter` facet: a host that does not advertise it answers `404 not_found`. **Content-free (RFC
3561
- 0188 §B.1):** the record NAMES a delivery and never carries the delivered bytes, the request headers, or the subscription
3562
- secret — a dead-letter read is a diagnostic surface, not a payload-replay surface.'
3208
+ summary: List a subscription's dead-lettered deliveries
3209
+ description: 'Lists deliveries that were dead-lettered, making `webhooks.md` §Durability observable. A delivery whose
3210
+ retries are exhausted, or a `payload_unprojectable` delivery dead-lettered on its first attempt, appears here until
3211
+ `retentionDays` elapse. Gated on the `webhooks.deadLetter` facet: a host that does not advertise it answers `404 not_found`.
3212
+
3213
+
3214
+ The record is content-free: it names a delivery and never carries the delivered bytes, the request headers, or the
3215
+ subscription secret.'
3563
3216
  parameters:
3564
3217
  - name: webhookId
3565
3218
  in: path
3566
3219
  required: true
3567
3220
  schema:
3568
3221
  $ref: ../../schemas/v2/ids.schema.json#/$defs/subscriptionId
3569
- description: The subscription, tenant-bound (`identity.md` §5, RFC 0187 §A.1) and carried as ONE path segment — `~`-projected
3570
- per RFC 0184, or percent-encoded.
3222
+ description: 'The subscription, tenant-bound (`identity.md` §5) and carried as one path segment: `~`-projected or
3223
+ percent-encoded.'
3571
3224
  - name: limit
3572
3225
  in: query
3573
3226
  required: false
@@ -3615,12 +3268,12 @@ paths:
3615
3268
  tags:
3616
3269
  - host
3617
3270
  operationId: streamHostEvents
3618
- summary: Host-scoped events (heartbeat.*) as SSE (RFC 0171 §E.1)
3619
- description: The documented default hostEvents address; a host MAY declare another under `heartbeat.deliveryChannel`.
3620
- Content-free of run data.
3271
+ summary: Stream host-scoped events (`heartbeat.*`) as SSE
3272
+ description: The default `hostEvents` address; a host MAY declare another under `heartbeat.deliveryChannel`. Carries
3273
+ no run data.
3621
3274
  responses:
3622
3275
  '200':
3623
- description: text/event-stream of hostEvents messages.
3276
+ description: '`text/event-stream` of `hostEvents` messages.'
3624
3277
  content:
3625
3278
  text/event-stream:
3626
3279
  schema:
@@ -3645,28 +3298,13 @@ components:
3645
3298
  type: http
3646
3299
  scheme: bearer
3647
3300
  bearerFormat: API key
3648
- description: 'openwop API key. Format implementation-defined; reference impl uses `hk_`/`hk_test_` prefixes.
3649
-
3650
- Each key carries one or more scopes from the canonical vocabulary
3651
-
3652
- (`manifest:read`, `runs:create`, `runs:read`, `runs:cancel`,
3653
-
3654
- `artifacts:read`, `webhooks:manage`, `approvals:respond`, `audit:read`).
3655
-
3656
- See `auth.md`.
3657
-
3658
- '
3301
+ description: OpenWOP API key. The format is implementation-defined; the reference implementation uses `hk_`/`hk_test_`
3302
+ prefixes. Each key carries one or more scopes from the canonical vocabulary (`manifest:read`, `runs:create`, `runs:read`,
3303
+ `runs:cancel`, `artifacts:read`, `webhooks:manage`, `approvals:respond`, `audit:read`). See `auth.md`.
3659
3304
  OAuth2:
3660
3305
  type: oauth2
3661
- description: 'RFC 0200 §F. OAuth 2.0 lanes — v1 `openwop-auth-oauth2-client-credentials`,
3662
-
3663
- v2 `auth.lanes[].lane: "oauth2"`. Discovery is RFC 9728 Protected Resource
3664
-
3665
- Metadata at the path-inserted well-known URI (`identity.md` §2.5).
3666
-
3667
- Placeholder URLs.
3668
-
3669
- '
3306
+ description: 'The OAuth 2.0 lane (`auth.lanes[].lane: "oauth2"`). Discovery is RFC 9728 Protected Resource Metadata
3307
+ at the path-inserted well-known URI (`identity.md` §2.5). The URLs are placeholders.'
3670
3308
  flows:
3671
3309
  clientCredentials:
3672
3310
  tokenUrl: https://issuer.example/oauth2/token
@@ -3718,26 +3356,14 @@ components:
3718
3356
  OpenIdConnect:
3719
3357
  type: openIdConnect
3720
3358
  openIdConnectUrl: https://issuer.example/.well-known/openid-configuration
3721
- description: 'RFC 0200 §F. v1 `openwop-auth-oidc-user-bearer` / v2 `auth.lanes[].lane: "oidc"`.
3722
-
3723
- An ID token MAY be the bearer only when its `aud` equals the host''s configured
3724
-
3725
- audience (`identity.md` §2.1); any other `aud` is `audience_mismatch`.
3726
-
3727
- Placeholder URL.
3728
-
3729
- '
3359
+ description: 'The OpenID Connect lane (`auth.lanes[].lane: "oidc"`). An ID token MAY be the bearer only when its `aud`
3360
+ equals the host''s configured audience (`identity.md` §2.1); any other `aud` is `audience_mismatch`. The URL is a
3361
+ placeholder.'
3730
3362
  MutualTLS:
3731
3363
  type: mutualTLS
3732
- description: 'RFC 0200 §F. v1 `openwop-auth-mtls` / v2 `auth.lanes[].lane: "mtls"`. In OpenWOP
3733
-
3734
- mTLS is required *in addition to* a bearer, never instead of one, so it appears
3735
-
3736
- in no canonical requirement below: a host that requires it adds `MutualTLS: []`
3737
-
3738
- inside each requirement object (AND).
3739
-
3740
- '
3364
+ description: 'The mTLS lane (`auth.lanes[].lane: "mtls"`). mTLS is required *in addition to* a bearer, never instead
3365
+ of one, so it appears in no canonical requirement below. A host that requires it adds `MutualTLS: []` inside each
3366
+ requirement object (AND).'
3741
3367
  parameters:
3742
3368
  WorkflowId:
3743
3369
  in: path
@@ -3751,11 +3377,8 @@ components:
3751
3377
  required: true
3752
3378
  schema:
3753
3379
  $ref: ../../schemas/v2/ids.schema.json#/$defs/runId
3754
- description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5). The `/` is part of the
3755
-
3756
- identifier and MUST be percent-encoded as `%2F` in the path segment.
3757
-
3758
- '
3380
+ description: Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5). The `/` is part of the identifier and MUST be percent-encoded
3381
+ as `%2F` in the path segment.
3759
3382
  IdempotencyKey:
3760
3383
  in: header
3761
3384
  name: Idempotency-Key
@@ -3763,15 +3386,8 @@ components:
3763
3386
  schema:
3764
3387
  type: string
3765
3388
  maxLength: 255
3766
- description: 'Per-mutation idempotency token (see `idempotency.md` Layer 1).
3767
-
3768
- Server caches `(tenantId, endpoint, key)` → response for ≥24h.
3769
-
3770
- Duplicate requests return the cached response with header
3771
-
3772
- `OpenWOP-Idempotent-Replay: true`.
3773
-
3774
- '
3389
+ description: 'Per-mutation idempotency token (`idempotency.md` Layer 1). The server caches `(tenantId, endpoint, key)`
3390
+ → response for ≥24h. A duplicate request returns the cached response with `OpenWOP-Idempotent-Replay: true`.'
3775
3391
  OpenWOPVersion:
3776
3392
  name: OpenWOP-Version
3777
3393
  in: header
@@ -3779,14 +3395,15 @@ components:
3779
3395
  schema:
3780
3396
  type: string
3781
3397
  pattern: ^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$
3782
- description: RFC 0172 §A.3 — selects a listed major.minor; absent ⇒ the host's `preferredVersion`; unlisted ⇒ 406 protocol_version_unsupported.
3398
+ description: Selects one of the host's listed major.minor versions. Absent, the host uses its `preferredVersion`; an
3399
+ unlisted value is 406 protocol_version_unsupported.
3783
3400
  responses:
3784
3401
  Unauthenticated:
3785
3402
  description: Missing or invalid credential.
3786
3403
  headers:
3787
3404
  WWW-Authenticate:
3788
- description: RFC 0200 §B — `Bearer` challenge; `resource_metadata` and `error="invalid_token"` on a host with an
3789
- oauth2/oidc lane. Never on a non-disclosure 404.
3405
+ description: A `Bearer` challenge. On a host with an oauth2 or oidc lane it carries `resource_metadata` and `error="invalid_token"`.
3406
+ Never sent on a non-disclosure 404.
3790
3407
  schema:
3791
3408
  type: string
3792
3409
  content:
@@ -3797,8 +3414,8 @@ components:
3797
3414
  description: Credential valid but lacks required scope or fails resource binding.
3798
3415
  headers:
3799
3416
  WWW-Authenticate:
3800
- description: RFC 0200 §B — `error="insufficient_scope"` with every required `scope` on a scope refusal; absent on
3801
- a resource-binding 403.
3417
+ description: On a scope refusal, `error="insufficient_scope"` with every required `scope`. Absent on a resource-binding
3418
+ 403.
3802
3419
  schema:
3803
3420
  type: string
3804
3421
  content:
@@ -3836,15 +3453,13 @@ components:
3836
3453
  $ref: ../../schemas/v2/run-snapshot.schema.json
3837
3454
  RunClaimConflict:
3838
3455
  $ref: ../../schemas/v2/error-envelope.schema.json
3839
- description: RFC 0171 §B.1 — the former one-member enum `RunClaimConflict` is the generated error envelope (`error`
3840
- carries the code).
3456
+ description: '`RunClaimConflict` is the canonical error envelope; `error` carries the code.'
3841
3457
  UnsupportedStreamMode:
3842
3458
  $ref: ../../schemas/v2/error-envelope.schema.json
3843
- description: RFC 0171 §B.1 — the former one-member enum `UnsupportedStreamMode` is the generated error envelope (`error`
3844
- carries the code).
3459
+ description: '`UnsupportedStreamMode` is the canonical error envelope; `error` carries the code.'
3845
3460
  headers:
3846
3461
  OpenWOPVersion:
3847
3462
  schema:
3848
3463
  type: string
3849
- description: RFC 0172 §A.4 — the contract that produced this response; MUST equal the one used.
3464
+ description: The contract that produced this response. It MUST equal the one used.
3850
3465
  required: true