@whooshbang/contracts 2.2.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/contract-manifest.json +32 -32
- package/dist/generated/artifact-index.d.ts +33 -33
- package/dist/generated/artifact-index.js +32 -32
- package/dist/generated/interaction-v1.d.ts +72 -4
- package/dist/generated/validators-standalone.d.ts +492 -480
- package/dist/generated/validators-standalone.js +4191 -2276
- package/dist/generated/validators-standalone.js.map +1 -1
- package/dist/generated/validators.d.ts +2 -1
- package/dist/generated/validators.js +2 -1
- package/dist/generated/validators.js.map +1 -1
- package/dist/generated/whooshbang-v1.d.ts +94 -17
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/interaction-expiry.d.ts +17 -0
- package/dist/interaction-expiry.js +67 -0
- package/dist/interaction-expiry.js.map +1 -0
- package/fixtures/core-v1/fixture-index.json +1 -1
- package/fixtures/core-v1/scenarios/api-credential-invalid-indistinguishable.json +1 -1
- package/fixtures/core-v1/scenarios/api-credential-one-time-reveal.json +1 -1
- package/fixtures/core-v1/scenarios/api-credential-revocation-replay.json +1 -1
- package/fixtures/core-v1/scenarios/api-credential-rotation-overlap.json +1 -1
- package/fixtures/core-v1/scenarios/cancellation-too-late.json +1 -1
- package/fixtures/core-v1/scenarios/cross-organization-project.json +1 -1
- package/fixtures/core-v1/scenarios/cross-project-resource.json +1 -1
- package/fixtures/core-v1/scenarios/environment-mismatch.json +1 -1
- package/fixtures/core-v1/scenarios/idempotency-conflict.json +1 -1
- package/fixtures/core-v1/scenarios/idempotency-equivalent-replay.json +1 -1
- package/fixtures/core-v1/scenarios/malformed-bearer.json +1 -1
- package/fixtures/core-v1/scenarios/metadata-overrun.json +1 -1
- package/fixtures/core-v1/scenarios/missing-scope.json +1 -1
- package/fixtures/core-v1/scenarios/project-create-equivalent-replay.json +1 -1
- package/fixtures/core-v1/scenarios/project-slug-conflict.json +1 -1
- package/fixtures/core-v1/scenarios/provider-outcome-unknown.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-activation-replay.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-authorization-capability-opacity.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-cross-connection-callback-rejected.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-expired-replay.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-selected-connection-replay.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ack-conflict.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ack-cross-machine.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ack-out-of-order.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ack-replay.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ambiguous-free-text.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/callback-token-opacity.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/credential-registration-conflict.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/credential-registration-replay.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/credential-revocation-replay.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/credential-rotation.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/first-credential-activates.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-duplicate.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-expired.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-mismatch.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-retired.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-stale.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-admin-denied.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-bound-message-create.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-cancel-denied.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-crash-before-ack.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-notifier-mismatch.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-other-message-read.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-owned-message-read.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-subscriber-mismatch.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/poll-uncommitted-cursor-rejected.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/project-credential-machine-endpoint-denied.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/quarantine-integrity-rejected.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/quarantine-signature-rejected.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/quarantine-valid.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/revoked-machine-credential.json +1 -1
- package/fixtures/recipient-experience-v1/scenarios/membership-broadcast-snapshot.json +1 -1
- package/fixtures/recipient-experience-v1/scenarios/preferred-binding-resolution.json +1 -1
- package/fixtures/recipient-experience-v1/scenarios/recipient-session-security.json +1 -1
- package/fixtures/recipient-experience-v1/scenarios/subscriber-initial-groups-transaction.json +1 -1
- package/openapi/generated/whooshbang-v1.bundle.json +165 -28
- package/openapi/whooshbang-v1.yaml +33 -2
- package/package.json +1 -1
- package/schemas/core-scenario.schema.json +1 -1
- package/schemas/events/agent-binding-degraded-v1.schema.json +1 -1
- package/schemas/events/interaction-expired-v1.schema.json +1 -1
- package/schemas/events/interaction-received-v1.schema.json +1 -1
- package/schemas/events/message-delivered-v1.schema.json +1 -1
- package/schemas/events/message-expired-v1.schema.json +1 -1
- package/schemas/events/message-failed-v1.schema.json +1 -1
- package/schemas/events/message-provider-accepted-v1.schema.json +1 -1
- package/schemas/events/subscription-activated-v1.schema.json +1 -1
- package/schemas/events/subscription-revoked-v1.schema.json +1 -1
- package/schemas/events/whooshbang-event-v1.schema.json +1 -1
- package/schemas/fixture-index.schema.json +1 -1
- package/schemas/interaction-machine-scenario.schema.json +1 -1
- package/schemas/interaction-v1.schema.json +151 -19
- package/schemas/machine-v1.schema.json +1 -1
- package/schemas/provider-capabilities-v1.schema.json +1 -1
- package/schemas/webhooks/webhook-delivery-case-v1.schema.json +1 -1
- package/schemas/webhooks/webhook-signing-vector-v1.schema.json +1 -1
- package/schemas/whooshbang-v1.schema.json +56 -50
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"openapi": "3.1.1",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "WhooshBang API",
|
|
5
|
-
"version": "2.
|
|
5
|
+
"version": "2.4.0",
|
|
6
6
|
"description": "The V1 contract for human organization/project administration, project-scoped\nsubscription links, and asynchronous text messages. A Clerk session selects\none organization for administration. A project credential selects one organization,\nproject, and `test` or `live` environment for product operations; request\nbodies cannot override either authenticated scope.\n\nA person's OAuth grant selects one organization and carries scopes, but no\nproject. It names the project and environment it acts in through the URL\npath, on the environment-scoped form of each operation; the service checks\nthat path against the granting person's membership on every call. The flat\nforms remain credential-only and are unchanged.\n\nResource identifiers are opaque and are not authorization. Reads outside the\ncredential scope return the same `404` shape as absent resources. Provider\ncredentials, raw Telegram identity, and protected provider responses are\nnever part of this API.\n",
|
|
7
7
|
"termsOfService": "https://flowxo.com/terms",
|
|
8
8
|
"contact": {
|
|
@@ -97,6 +97,7 @@
|
|
|
97
97
|
"/v1/projects/{project_id}/environments/{environment_id}/whoami": {
|
|
98
98
|
"get": {
|
|
99
99
|
"operationId": "whoAmI",
|
|
100
|
+
"x-notification-scopes": ["notifications:self", "notifications:team"],
|
|
100
101
|
"summary": "Identify the authenticated caller",
|
|
101
102
|
"description": "Personal login identifies me without a recipient question. Shared or service credentials report their actual principal and require an explicit recipient. No account owner or credential creator is inferred.",
|
|
102
103
|
"tags": ["Operators"],
|
|
@@ -105,6 +106,8 @@
|
|
|
105
106
|
{ "bearerCredential": [] },
|
|
106
107
|
{ "bearerOrganizationCredential": [] },
|
|
107
108
|
{ "bearerGrant": ["messages:read"] },
|
|
109
|
+
{ "bearerGrant": ["notifications:self"] },
|
|
110
|
+
{ "bearerGrant": ["notifications:team"] },
|
|
108
111
|
{ "machineCredential": [] }
|
|
109
112
|
],
|
|
110
113
|
"x-required-scopes": ["messages:read"],
|
|
@@ -129,13 +132,15 @@
|
|
|
129
132
|
"/v1/projects/{project_id}/environments/{environment_id}/operators": {
|
|
130
133
|
"get": {
|
|
131
134
|
"operationId": "listOperators",
|
|
135
|
+
"x-notification-scopes": ["notifications:team"],
|
|
132
136
|
"summary": "listOperators",
|
|
133
137
|
"description": "Membership-derived operator messaging. Only the authenticated human can manage personal preferences.",
|
|
134
138
|
"tags": ["Operators"],
|
|
135
139
|
"security": [
|
|
136
140
|
{ "clerkSession": [] },
|
|
137
141
|
{ "bearerCredential": [] },
|
|
138
|
-
{ "bearerGrant": ["messages:read"] }
|
|
142
|
+
{ "bearerGrant": ["messages:read"] },
|
|
143
|
+
{ "bearerGrant": ["notifications:team"] }
|
|
139
144
|
],
|
|
140
145
|
"x-required-scopes": ["messages:read"],
|
|
141
146
|
"parameters": [
|
|
@@ -162,13 +167,15 @@
|
|
|
162
167
|
"/v1/projects/{project_id}/environments/{environment_id}/operators/resolve": {
|
|
163
168
|
"get": {
|
|
164
169
|
"operationId": "resolveOperator",
|
|
170
|
+
"x-notification-scopes": ["notifications:team"],
|
|
165
171
|
"summary": "resolveOperator",
|
|
166
172
|
"description": "Membership-derived operator messaging. Only the authenticated human can manage personal preferences.",
|
|
167
173
|
"tags": ["Operators"],
|
|
168
174
|
"security": [
|
|
169
175
|
{ "clerkSession": [] },
|
|
170
176
|
{ "bearerCredential": [] },
|
|
171
|
-
{ "bearerGrant": ["messages:read"] }
|
|
177
|
+
{ "bearerGrant": ["messages:read"] },
|
|
178
|
+
{ "bearerGrant": ["notifications:team"] }
|
|
172
179
|
],
|
|
173
180
|
"x-required-scopes": ["messages:read"],
|
|
174
181
|
"parameters": [
|
|
@@ -198,6 +205,7 @@
|
|
|
198
205
|
"/v1/projects/{project_id}/environments/{environment_id}/operator-messages": {
|
|
199
206
|
"post": {
|
|
200
207
|
"operationId": "sendOperatorMessage",
|
|
208
|
+
"x-notification-scopes": ["notifications:self", "notifications:team"],
|
|
201
209
|
"summary": "sendOperatorMessage",
|
|
202
210
|
"description": "Message a current teammate by name or operator ID. Personal callers may omit recipient or use me. Shared credentials must name a recipient. Runtime machine credentials report recipient_required for omitted or me; named operator sends are forbidden because runtime authority remains subscriber-bound.",
|
|
203
211
|
"tags": ["Operators"],
|
|
@@ -206,7 +214,9 @@
|
|
|
206
214
|
{ "bearerCredential": [] },
|
|
207
215
|
{ "bearerOrganizationCredential": [] },
|
|
208
216
|
{ "machineCredential": [] },
|
|
209
|
-
{ "bearerGrant": ["messages:write"] }
|
|
217
|
+
{ "bearerGrant": ["messages:write"] },
|
|
218
|
+
{ "bearerGrant": ["notifications:self"] },
|
|
219
|
+
{ "bearerGrant": ["notifications:team"] }
|
|
210
220
|
],
|
|
211
221
|
"x-required-scopes": ["messages:write"],
|
|
212
222
|
"parameters": [
|
|
@@ -243,13 +253,15 @@
|
|
|
243
253
|
"/v1/projects/{project_id}/environments/{environment_id}/operators/broadcasts": {
|
|
244
254
|
"post": {
|
|
245
255
|
"operationId": "broadcastOperators",
|
|
256
|
+
"x-notification-scopes": ["notifications:team"],
|
|
246
257
|
"summary": "broadcastOperators",
|
|
247
258
|
"description": "Membership-derived operator messaging. Only the authenticated human can manage personal preferences.",
|
|
248
259
|
"tags": ["Operators"],
|
|
249
260
|
"security": [
|
|
250
261
|
{ "clerkSession": [] },
|
|
251
262
|
{ "bearerCredential": [] },
|
|
252
|
-
{ "bearerGrant": ["messages:write"] }
|
|
263
|
+
{ "bearerGrant": ["messages:write"] },
|
|
264
|
+
{ "bearerGrant": ["notifications:team"] }
|
|
253
265
|
],
|
|
254
266
|
"x-required-scopes": ["messages:write"],
|
|
255
267
|
"parameters": [
|
|
@@ -284,13 +296,15 @@
|
|
|
284
296
|
"/v1/projects/{project_id}/environments/{environment_id}/operators/broadcasts/{broadcast_id}": {
|
|
285
297
|
"get": {
|
|
286
298
|
"operationId": "getOperatorBroadcast",
|
|
299
|
+
"x-notification-scopes": ["notifications:team"],
|
|
287
300
|
"summary": "getOperatorBroadcast",
|
|
288
301
|
"description": "Membership-derived operator messaging. Only the authenticated human can manage personal preferences.",
|
|
289
302
|
"tags": ["Operators"],
|
|
290
303
|
"security": [
|
|
291
304
|
{ "clerkSession": [] },
|
|
292
305
|
{ "bearerCredential": [] },
|
|
293
|
-
{ "bearerGrant": ["messages:read"] }
|
|
306
|
+
{ "bearerGrant": ["messages:read"] },
|
|
307
|
+
{ "bearerGrant": ["notifications:team"] }
|
|
294
308
|
],
|
|
295
309
|
"x-required-scopes": ["messages:read"],
|
|
296
310
|
"parameters": [
|
|
@@ -320,13 +334,16 @@
|
|
|
320
334
|
"/v1/projects/{project_id}/environments/{environment_id}/notification-preferences": {
|
|
321
335
|
"get": {
|
|
322
336
|
"operationId": "getOperatorPreferences",
|
|
337
|
+
"x-notification-scopes": ["notifications:self", "notifications:team"],
|
|
323
338
|
"summary": "getOperatorPreferences",
|
|
324
339
|
"description": "Membership-derived operator messaging. Only the authenticated human can manage personal preferences.",
|
|
325
340
|
"tags": ["Operators"],
|
|
326
341
|
"security": [
|
|
327
342
|
{ "clerkSession": [] },
|
|
328
343
|
{ "bearerCredential": [] },
|
|
329
|
-
{ "bearerGrant": ["messages:read"] }
|
|
344
|
+
{ "bearerGrant": ["messages:read"] },
|
|
345
|
+
{ "bearerGrant": ["notifications:self"] },
|
|
346
|
+
{ "bearerGrant": ["notifications:team"] }
|
|
330
347
|
],
|
|
331
348
|
"x-required-scopes": ["messages:read"],
|
|
332
349
|
"parameters": [
|
|
@@ -350,13 +367,16 @@
|
|
|
350
367
|
"/v1/projects/{project_id}/environments/{environment_id}/notification-preferences/preferred-binding": {
|
|
351
368
|
"put": {
|
|
352
369
|
"operationId": "setOperatorPreferredBinding",
|
|
370
|
+
"x-notification-scopes": ["notifications:self", "notifications:team"],
|
|
353
371
|
"summary": "setOperatorPreferredBinding",
|
|
354
372
|
"description": "Membership-derived operator messaging. Only the authenticated human can manage personal preferences.",
|
|
355
373
|
"tags": ["Operators"],
|
|
356
374
|
"security": [
|
|
357
375
|
{ "clerkSession": [] },
|
|
358
376
|
{ "bearerCredential": [] },
|
|
359
|
-
{ "bearerGrant": ["messages:write"] }
|
|
377
|
+
{ "bearerGrant": ["messages:write"] },
|
|
378
|
+
{ "bearerGrant": ["notifications:self"] },
|
|
379
|
+
{ "bearerGrant": ["notifications:team"] }
|
|
360
380
|
],
|
|
361
381
|
"x-required-scopes": ["messages:write"],
|
|
362
382
|
"parameters": [
|
|
@@ -390,13 +410,16 @@
|
|
|
390
410
|
"/v1/projects/{project_id}/environments/{environment_id}/notification-preferences/connect": {
|
|
391
411
|
"post": {
|
|
392
412
|
"operationId": "connectOperatorChannel",
|
|
413
|
+
"x-notification-scopes": ["notifications:self", "notifications:team"],
|
|
393
414
|
"summary": "connectOperatorChannel",
|
|
394
415
|
"description": "Membership-derived operator messaging. Only the authenticated human can manage personal preferences.",
|
|
395
416
|
"tags": ["Operators"],
|
|
396
417
|
"security": [
|
|
397
418
|
{ "clerkSession": [] },
|
|
398
419
|
{ "bearerCredential": [] },
|
|
399
|
-
{ "bearerGrant": ["messages:write"] }
|
|
420
|
+
{ "bearerGrant": ["messages:write"] },
|
|
421
|
+
{ "bearerGrant": ["notifications:self"] },
|
|
422
|
+
{ "bearerGrant": ["notifications:team"] }
|
|
400
423
|
],
|
|
401
424
|
"x-required-scopes": ["messages:write"],
|
|
402
425
|
"parameters": [
|
|
@@ -2190,12 +2213,15 @@
|
|
|
2190
2213
|
"/v1/projects": {
|
|
2191
2214
|
"get": {
|
|
2192
2215
|
"operationId": "listProjects",
|
|
2216
|
+
"x-notification-scopes": ["notifications:self", "notifications:team"],
|
|
2193
2217
|
"summary": "List projects in the current organization",
|
|
2194
2218
|
"description": "Returns only projects owned by the organization selected by the verified\nClerk organization session. Every project includes its complete test/live\nenvironment and default-notifier bootstrap.\n",
|
|
2195
2219
|
"tags": ["Projects"],
|
|
2196
2220
|
"security": [
|
|
2197
2221
|
{ "clerkSession": [] },
|
|
2198
2222
|
{ "bearerGrant": [] },
|
|
2223
|
+
{ "bearerGrant": ["notifications:self"] },
|
|
2224
|
+
{ "bearerGrant": ["notifications:team"] },
|
|
2199
2225
|
{ "bearerOrganizationCredential": [] }
|
|
2200
2226
|
],
|
|
2201
2227
|
"x-required-scopes": ["projects:read"],
|
|
@@ -2379,12 +2405,15 @@
|
|
|
2379
2405
|
"parameters": [{ "$ref": "#/components/parameters/ProjectId" }],
|
|
2380
2406
|
"get": {
|
|
2381
2407
|
"operationId": "getProject",
|
|
2408
|
+
"x-notification-scopes": ["notifications:self", "notifications:team"],
|
|
2382
2409
|
"summary": "Read one project in the current organization",
|
|
2383
2410
|
"description": "Returns the complete project bootstrap. An absent project and a project\noutside the authenticated organization use the same non-enumerating `404`.\n",
|
|
2384
2411
|
"tags": ["Projects"],
|
|
2385
2412
|
"security": [
|
|
2386
2413
|
{ "clerkSession": [] },
|
|
2387
2414
|
{ "bearerGrant": [] },
|
|
2415
|
+
{ "bearerGrant": ["notifications:self"] },
|
|
2416
|
+
{ "bearerGrant": ["notifications:team"] },
|
|
2388
2417
|
{ "bearerOrganizationCredential": [] }
|
|
2389
2418
|
],
|
|
2390
2419
|
"x-required-scopes": ["projects:read"],
|
|
@@ -11203,7 +11232,9 @@
|
|
|
11203
11232
|
"maxLength": 128
|
|
11204
11233
|
},
|
|
11205
11234
|
"metadata": { "$ref": "#/components/schemas/Metadata" },
|
|
11206
|
-
"interaction": {
|
|
11235
|
+
"interaction": {
|
|
11236
|
+
"$ref": "#/components/schemas/InteractionSendRequest"
|
|
11237
|
+
},
|
|
11207
11238
|
"purpose": {
|
|
11208
11239
|
"enum": ["service", "marketing"],
|
|
11209
11240
|
"default": "service",
|
|
@@ -12597,7 +12628,9 @@
|
|
|
12597
12628
|
"description": "The words a `subscriber_message` test sends, as plain text."
|
|
12598
12629
|
},
|
|
12599
12630
|
"content": { "$ref": "#/components/schemas/MessageContent" },
|
|
12600
|
-
"interaction": {
|
|
12631
|
+
"interaction": {
|
|
12632
|
+
"$ref": "#/components/schemas/InteractionSendRequest"
|
|
12633
|
+
}
|
|
12601
12634
|
},
|
|
12602
12635
|
"allOf": [
|
|
12603
12636
|
{
|
|
@@ -15502,7 +15535,9 @@
|
|
|
15502
15535
|
"maxLength": 128
|
|
15503
15536
|
},
|
|
15504
15537
|
"metadata": { "$ref": "#/components/schemas/Metadata" },
|
|
15505
|
-
"interaction": {
|
|
15538
|
+
"interaction": {
|
|
15539
|
+
"$ref": "#/components/schemas/InteractionSendRequest"
|
|
15540
|
+
},
|
|
15506
15541
|
"purpose": {
|
|
15507
15542
|
"enum": ["service", "marketing"],
|
|
15508
15543
|
"default": "service",
|
|
@@ -16363,6 +16398,14 @@
|
|
|
16363
16398
|
],
|
|
16364
16399
|
"additionalProperties": false
|
|
16365
16400
|
},
|
|
16401
|
+
"InteractionSendRequest": {
|
|
16402
|
+
"description": "Send-time interaction. Choose expires_in_seconds or expires_at; omit both for 24 hours from server acceptance. Idempotent replays retain the original resolved deadline.",
|
|
16403
|
+
"oneOf": [
|
|
16404
|
+
{ "$ref": "#/components/schemas/ConfirmInteractionSendRequest" },
|
|
16405
|
+
{ "$ref": "#/components/schemas/SelectInteractionSendRequest" },
|
|
16406
|
+
{ "$ref": "#/components/schemas/InputInteractionSendRequest" }
|
|
16407
|
+
]
|
|
16408
|
+
},
|
|
16366
16409
|
"InteractionRequest": {
|
|
16367
16410
|
"description": "A required-type tagged union. C0 supports confirm, single-select, and input only.",
|
|
16368
16411
|
"oneOf": [
|
|
@@ -18186,7 +18229,9 @@
|
|
|
18186
18229
|
"maxLength": 128
|
|
18187
18230
|
},
|
|
18188
18231
|
"metadata": { "$ref": "#/components/schemas/Metadata" },
|
|
18189
|
-
"interaction": {
|
|
18232
|
+
"interaction": {
|
|
18233
|
+
"$ref": "#/components/schemas/InteractionSendRequest"
|
|
18234
|
+
},
|
|
18190
18235
|
"purpose": {
|
|
18191
18236
|
"enum": ["service", "marketing"],
|
|
18192
18237
|
"default": "service",
|
|
@@ -18231,7 +18276,11 @@
|
|
|
18231
18276
|
"accepted_at": { "$ref": "#/components/schemas/Timestamp" },
|
|
18232
18277
|
"updated_at": { "$ref": "#/components/schemas/Timestamp" },
|
|
18233
18278
|
"expires_at": { "$ref": "#/components/schemas/Timestamp" },
|
|
18234
|
-
"diagnostic_id": { "$ref": "#/components/schemas/DiagnosticId" }
|
|
18279
|
+
"diagnostic_id": { "$ref": "#/components/schemas/DiagnosticId" },
|
|
18280
|
+
"interaction_expires_at": {
|
|
18281
|
+
"$ref": "#/components/schemas/Timestamp",
|
|
18282
|
+
"description": "Authoritatively resolved answer deadline shared by this broadcast’s interactions, independent of delivery expires_at."
|
|
18283
|
+
}
|
|
18235
18284
|
},
|
|
18236
18285
|
"additionalProperties": false
|
|
18237
18286
|
},
|
|
@@ -18671,9 +18720,9 @@
|
|
|
18671
18720
|
"pattern": "^[^\\u0000-\\u001F\\u007F]+$",
|
|
18672
18721
|
"description": "Caller-owned opaque correlation returned as data, never treated as execution authority."
|
|
18673
18722
|
},
|
|
18674
|
-
"
|
|
18723
|
+
"ConfirmInteractionSendRequest": {
|
|
18675
18724
|
"type": "object",
|
|
18676
|
-
"required": ["type", "prompt"
|
|
18725
|
+
"required": ["type", "prompt"],
|
|
18677
18726
|
"properties": {
|
|
18678
18727
|
"type": { "const": "confirm" },
|
|
18679
18728
|
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
@@ -18685,13 +18734,22 @@
|
|
|
18685
18734
|
"deny_label": { "type": "string", "minLength": 1, "maxLength": 40 },
|
|
18686
18735
|
"expires_at": {
|
|
18687
18736
|
"$ref": "#/components/schemas/Timestamp-2",
|
|
18688
|
-
"description": "
|
|
18737
|
+
"description": "Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds."
|
|
18689
18738
|
},
|
|
18690
18739
|
"correlation_id": {
|
|
18691
18740
|
"$ref": "#/components/schemas/InteractionCorrelationId"
|
|
18741
|
+
},
|
|
18742
|
+
"expires_in_seconds": {
|
|
18743
|
+
"type": "integer",
|
|
18744
|
+
"minimum": 30,
|
|
18745
|
+
"description": "Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours)."
|
|
18692
18746
|
}
|
|
18693
18747
|
},
|
|
18694
|
-
"additionalProperties": false
|
|
18748
|
+
"additionalProperties": false,
|
|
18749
|
+
"not": {
|
|
18750
|
+
"required": ["expires_at", "expires_in_seconds"],
|
|
18751
|
+
"properties": { "expires_at": {}, "expires_in_seconds": {} }
|
|
18752
|
+
}
|
|
18695
18753
|
},
|
|
18696
18754
|
"InteractionOption": {
|
|
18697
18755
|
"type": "object",
|
|
@@ -18714,9 +18772,9 @@
|
|
|
18714
18772
|
},
|
|
18715
18773
|
"additionalProperties": false
|
|
18716
18774
|
},
|
|
18717
|
-
"
|
|
18775
|
+
"SelectInteractionSendRequest": {
|
|
18718
18776
|
"type": "object",
|
|
18719
|
-
"required": ["type", "prompt", "options"
|
|
18777
|
+
"required": ["type", "prompt", "options"],
|
|
18720
18778
|
"properties": {
|
|
18721
18779
|
"type": { "const": "select" },
|
|
18722
18780
|
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
@@ -18729,29 +18787,47 @@
|
|
|
18729
18787
|
},
|
|
18730
18788
|
"expires_at": {
|
|
18731
18789
|
"$ref": "#/components/schemas/Timestamp-2",
|
|
18732
|
-
"description": "
|
|
18790
|
+
"description": "Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds."
|
|
18733
18791
|
},
|
|
18734
18792
|
"correlation_id": {
|
|
18735
18793
|
"$ref": "#/components/schemas/InteractionCorrelationId"
|
|
18794
|
+
},
|
|
18795
|
+
"expires_in_seconds": {
|
|
18796
|
+
"type": "integer",
|
|
18797
|
+
"minimum": 30,
|
|
18798
|
+
"description": "Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours)."
|
|
18736
18799
|
}
|
|
18737
18800
|
},
|
|
18738
|
-
"additionalProperties": false
|
|
18801
|
+
"additionalProperties": false,
|
|
18802
|
+
"not": {
|
|
18803
|
+
"required": ["expires_at", "expires_in_seconds"],
|
|
18804
|
+
"properties": { "expires_at": {}, "expires_in_seconds": {} }
|
|
18805
|
+
}
|
|
18739
18806
|
},
|
|
18740
|
-
"
|
|
18807
|
+
"InputInteractionSendRequest": {
|
|
18741
18808
|
"type": "object",
|
|
18742
|
-
"required": ["type", "prompt"
|
|
18809
|
+
"required": ["type", "prompt"],
|
|
18743
18810
|
"properties": {
|
|
18744
18811
|
"type": { "const": "input" },
|
|
18745
18812
|
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
18746
18813
|
"expires_at": {
|
|
18747
18814
|
"$ref": "#/components/schemas/Timestamp-2",
|
|
18748
|
-
"description": "
|
|
18815
|
+
"description": "Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds."
|
|
18749
18816
|
},
|
|
18750
18817
|
"correlation_id": {
|
|
18751
18818
|
"$ref": "#/components/schemas/InteractionCorrelationId"
|
|
18819
|
+
},
|
|
18820
|
+
"expires_in_seconds": {
|
|
18821
|
+
"type": "integer",
|
|
18822
|
+
"minimum": 30,
|
|
18823
|
+
"description": "Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours)."
|
|
18752
18824
|
}
|
|
18753
18825
|
},
|
|
18754
|
-
"additionalProperties": false
|
|
18826
|
+
"additionalProperties": false,
|
|
18827
|
+
"not": {
|
|
18828
|
+
"required": ["expires_at", "expires_in_seconds"],
|
|
18829
|
+
"properties": { "expires_at": {}, "expires_in_seconds": {} }
|
|
18830
|
+
}
|
|
18755
18831
|
},
|
|
18756
18832
|
"HighestProvenProviderState": {
|
|
18757
18833
|
"type": "string",
|
|
@@ -20340,7 +20416,7 @@
|
|
|
20340
20416
|
"provider-capabilities-v1.schema": {
|
|
20341
20417
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
20342
20418
|
"$id": "https://whooshbang.flowxo.com/schemas/provider-capabilities-v1.schema.json",
|
|
20343
|
-
"x-contract-version": "2.
|
|
20419
|
+
"x-contract-version": "2.4.0",
|
|
20344
20420
|
"title": "ProviderCapabilitiesV1",
|
|
20345
20421
|
"description": "Provider-neutral, renderer-facing delivery and interaction capabilities with explicit degradation.",
|
|
20346
20422
|
"type": "object",
|
|
@@ -20601,6 +20677,67 @@
|
|
|
20601
20677
|
},
|
|
20602
20678
|
"additionalProperties": false
|
|
20603
20679
|
},
|
|
20680
|
+
"ConfirmInteractionRequest": {
|
|
20681
|
+
"type": "object",
|
|
20682
|
+
"required": ["type", "prompt", "expires_at"],
|
|
20683
|
+
"properties": {
|
|
20684
|
+
"type": { "const": "confirm" },
|
|
20685
|
+
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
20686
|
+
"confirm_label": {
|
|
20687
|
+
"type": "string",
|
|
20688
|
+
"minLength": 1,
|
|
20689
|
+
"maxLength": 40
|
|
20690
|
+
},
|
|
20691
|
+
"deny_label": { "type": "string", "minLength": 1, "maxLength": 40 },
|
|
20692
|
+
"expires_at": {
|
|
20693
|
+
"$ref": "#/components/schemas/Timestamp-2",
|
|
20694
|
+
"description": "At least 30 seconds after server acceptance; no fixed maximum. A resolved RFC3339 deadline with millisecond precision, no later than 9999-12-31T23:59:59.999Z."
|
|
20695
|
+
},
|
|
20696
|
+
"correlation_id": {
|
|
20697
|
+
"$ref": "#/components/schemas/InteractionCorrelationId"
|
|
20698
|
+
}
|
|
20699
|
+
},
|
|
20700
|
+
"additionalProperties": false
|
|
20701
|
+
},
|
|
20702
|
+
"SelectInteractionRequest": {
|
|
20703
|
+
"type": "object",
|
|
20704
|
+
"required": ["type", "prompt", "options", "expires_at"],
|
|
20705
|
+
"properties": {
|
|
20706
|
+
"type": { "const": "select" },
|
|
20707
|
+
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
20708
|
+
"options": {
|
|
20709
|
+
"type": "array",
|
|
20710
|
+
"minItems": 2,
|
|
20711
|
+
"maxItems": 6,
|
|
20712
|
+
"items": { "$ref": "#/components/schemas/InteractionOption" },
|
|
20713
|
+
"x-unique-property": "value"
|
|
20714
|
+
},
|
|
20715
|
+
"expires_at": {
|
|
20716
|
+
"$ref": "#/components/schemas/Timestamp-2",
|
|
20717
|
+
"description": "At least 30 seconds after server acceptance; no fixed maximum. A resolved RFC3339 deadline with millisecond precision, no later than 9999-12-31T23:59:59.999Z."
|
|
20718
|
+
},
|
|
20719
|
+
"correlation_id": {
|
|
20720
|
+
"$ref": "#/components/schemas/InteractionCorrelationId"
|
|
20721
|
+
}
|
|
20722
|
+
},
|
|
20723
|
+
"additionalProperties": false
|
|
20724
|
+
},
|
|
20725
|
+
"InputInteractionRequest": {
|
|
20726
|
+
"type": "object",
|
|
20727
|
+
"required": ["type", "prompt", "expires_at"],
|
|
20728
|
+
"properties": {
|
|
20729
|
+
"type": { "const": "input" },
|
|
20730
|
+
"prompt": { "$ref": "#/components/schemas/InteractionPrompt" },
|
|
20731
|
+
"expires_at": {
|
|
20732
|
+
"$ref": "#/components/schemas/Timestamp-2",
|
|
20733
|
+
"description": "At least 30 seconds after server acceptance; no fixed maximum. A resolved RFC3339 deadline with millisecond precision, no later than 9999-12-31T23:59:59.999Z."
|
|
20734
|
+
},
|
|
20735
|
+
"correlation_id": {
|
|
20736
|
+
"$ref": "#/components/schemas/InteractionCorrelationId"
|
|
20737
|
+
}
|
|
20738
|
+
},
|
|
20739
|
+
"additionalProperties": false
|
|
20740
|
+
},
|
|
20604
20741
|
"EmailBindingImportRow": {
|
|
20605
20742
|
"type": "object",
|
|
20606
20743
|
"required": ["subscriber_id", "notifier_id", "address", "consent"],
|
|
@@ -21060,5 +21197,5 @@
|
|
|
21060
21197
|
}
|
|
21061
21198
|
}
|
|
21062
21199
|
},
|
|
21063
|
-
"x-contract-version": "2.
|
|
21200
|
+
"x-contract-version": "2.4.0"
|
|
21064
21201
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
openapi: 3.1.1
|
|
2
2
|
jsonSchemaDialect: https://json-schema.org/draft/2020-12/schema
|
|
3
3
|
# whooshbang:public-origin production api https://api.whooshbang.com
|
|
4
|
-
x-contract-version: 2.
|
|
4
|
+
x-contract-version: 2.4.0
|
|
5
5
|
info:
|
|
6
6
|
title: WhooshBang API
|
|
7
|
-
version: 2.
|
|
7
|
+
version: 2.4.0
|
|
8
8
|
description: |
|
|
9
9
|
The V1 contract for human organization/project administration, project-scoped
|
|
10
10
|
subscription links, and asynchronous text messages. A Clerk session selects
|
|
@@ -75,6 +75,7 @@ paths:
|
|
|
75
75
|
/v1/projects/{project_id}/environments/{environment_id}/whoami:
|
|
76
76
|
get:
|
|
77
77
|
operationId: whoAmI
|
|
78
|
+
x-notification-scopes: [notifications:self, notifications:team]
|
|
78
79
|
summary: Identify the authenticated caller
|
|
79
80
|
description: Personal login identifies me without a recipient question. Shared or service credentials report their actual principal and require an explicit recipient. No account owner or credential creator is inferred.
|
|
80
81
|
tags: [Operators]
|
|
@@ -83,6 +84,8 @@ paths:
|
|
|
83
84
|
- bearerCredential: []
|
|
84
85
|
- bearerOrganizationCredential: []
|
|
85
86
|
- bearerGrant: [messages:read]
|
|
87
|
+
- bearerGrant: [notifications:self]
|
|
88
|
+
- bearerGrant: [notifications:team]
|
|
86
89
|
- machineCredential: []
|
|
87
90
|
x-required-scopes: [messages:read]
|
|
88
91
|
parameters:
|
|
@@ -102,6 +105,7 @@ paths:
|
|
|
102
105
|
/v1/projects/{project_id}/environments/{environment_id}/operators:
|
|
103
106
|
get:
|
|
104
107
|
operationId: listOperators
|
|
108
|
+
x-notification-scopes: [notifications:team]
|
|
105
109
|
summary: listOperators
|
|
106
110
|
description: Membership-derived operator messaging. Only the authenticated human can manage personal preferences.
|
|
107
111
|
tags: [Operators]
|
|
@@ -109,6 +113,7 @@ paths:
|
|
|
109
113
|
- clerkSession: []
|
|
110
114
|
- bearerCredential: []
|
|
111
115
|
- bearerGrant: [messages:read]
|
|
116
|
+
- bearerGrant: [notifications:team]
|
|
112
117
|
x-required-scopes: [messages:read]
|
|
113
118
|
parameters:
|
|
114
119
|
- $ref: "#/components/parameters/ProjectId"
|
|
@@ -130,6 +135,7 @@ paths:
|
|
|
130
135
|
/v1/projects/{project_id}/environments/{environment_id}/operators/resolve:
|
|
131
136
|
get:
|
|
132
137
|
operationId: resolveOperator
|
|
138
|
+
x-notification-scopes: [notifications:team]
|
|
133
139
|
summary: resolveOperator
|
|
134
140
|
description: Membership-derived operator messaging. Only the authenticated human can manage personal preferences.
|
|
135
141
|
tags: [Operators]
|
|
@@ -137,6 +143,7 @@ paths:
|
|
|
137
143
|
- clerkSession: []
|
|
138
144
|
- bearerCredential: []
|
|
139
145
|
- bearerGrant: [messages:read]
|
|
146
|
+
- bearerGrant: [notifications:team]
|
|
140
147
|
x-required-scopes: [messages:read]
|
|
141
148
|
parameters:
|
|
142
149
|
- $ref: "#/components/parameters/ProjectId"
|
|
@@ -159,6 +166,7 @@ paths:
|
|
|
159
166
|
/v1/projects/{project_id}/environments/{environment_id}/operator-messages:
|
|
160
167
|
post:
|
|
161
168
|
operationId: sendOperatorMessage
|
|
169
|
+
x-notification-scopes: [notifications:self, notifications:team]
|
|
162
170
|
summary: sendOperatorMessage
|
|
163
171
|
description: Message a current teammate by name or operator ID. Personal callers may omit recipient or use me. Shared credentials must name a recipient. Runtime machine credentials report recipient_required for omitted or me; named operator sends are forbidden because runtime authority remains subscriber-bound.
|
|
164
172
|
tags: [Operators]
|
|
@@ -168,6 +176,8 @@ paths:
|
|
|
168
176
|
- bearerOrganizationCredential: []
|
|
169
177
|
- machineCredential: []
|
|
170
178
|
- bearerGrant: [messages:write]
|
|
179
|
+
- bearerGrant: [notifications:self]
|
|
180
|
+
- bearerGrant: [notifications:team]
|
|
171
181
|
x-required-scopes: [messages:write]
|
|
172
182
|
parameters:
|
|
173
183
|
- $ref: "#/components/parameters/ProjectId"
|
|
@@ -193,6 +203,7 @@ paths:
|
|
|
193
203
|
/v1/projects/{project_id}/environments/{environment_id}/operators/broadcasts:
|
|
194
204
|
post:
|
|
195
205
|
operationId: broadcastOperators
|
|
206
|
+
x-notification-scopes: [notifications:team]
|
|
196
207
|
summary: broadcastOperators
|
|
197
208
|
description: Membership-derived operator messaging. Only the authenticated human can manage personal preferences.
|
|
198
209
|
tags: [Operators]
|
|
@@ -200,6 +211,7 @@ paths:
|
|
|
200
211
|
- clerkSession: []
|
|
201
212
|
- bearerCredential: []
|
|
202
213
|
- bearerGrant: [messages:write]
|
|
214
|
+
- bearerGrant: [notifications:team]
|
|
203
215
|
x-required-scopes: [messages:write]
|
|
204
216
|
parameters:
|
|
205
217
|
- $ref: "#/components/parameters/ProjectId"
|
|
@@ -225,6 +237,7 @@ paths:
|
|
|
225
237
|
/v1/projects/{project_id}/environments/{environment_id}/operators/broadcasts/{broadcast_id}:
|
|
226
238
|
get:
|
|
227
239
|
operationId: getOperatorBroadcast
|
|
240
|
+
x-notification-scopes: [notifications:team]
|
|
228
241
|
summary: getOperatorBroadcast
|
|
229
242
|
description: Membership-derived operator messaging. Only the authenticated human can manage personal preferences.
|
|
230
243
|
tags: [Operators]
|
|
@@ -232,6 +245,7 @@ paths:
|
|
|
232
245
|
- clerkSession: []
|
|
233
246
|
- bearerCredential: []
|
|
234
247
|
- bearerGrant: [messages:read]
|
|
248
|
+
- bearerGrant: [notifications:team]
|
|
235
249
|
x-required-scopes: [messages:read]
|
|
236
250
|
parameters:
|
|
237
251
|
- $ref: "#/components/parameters/ProjectId"
|
|
@@ -254,6 +268,7 @@ paths:
|
|
|
254
268
|
/v1/projects/{project_id}/environments/{environment_id}/notification-preferences:
|
|
255
269
|
get:
|
|
256
270
|
operationId: getOperatorPreferences
|
|
271
|
+
x-notification-scopes: [notifications:self, notifications:team]
|
|
257
272
|
summary: getOperatorPreferences
|
|
258
273
|
description: Membership-derived operator messaging. Only the authenticated human can manage personal preferences.
|
|
259
274
|
tags: [Operators]
|
|
@@ -261,6 +276,8 @@ paths:
|
|
|
261
276
|
- clerkSession: []
|
|
262
277
|
- bearerCredential: []
|
|
263
278
|
- bearerGrant: [messages:read]
|
|
279
|
+
- bearerGrant: [notifications:self]
|
|
280
|
+
- bearerGrant: [notifications:team]
|
|
264
281
|
x-required-scopes: [messages:read]
|
|
265
282
|
parameters:
|
|
266
283
|
- $ref: "#/components/parameters/ProjectId"
|
|
@@ -279,6 +296,7 @@ paths:
|
|
|
279
296
|
/v1/projects/{project_id}/environments/{environment_id}/notification-preferences/preferred-binding:
|
|
280
297
|
put:
|
|
281
298
|
operationId: setOperatorPreferredBinding
|
|
299
|
+
x-notification-scopes: [notifications:self, notifications:team]
|
|
282
300
|
summary: setOperatorPreferredBinding
|
|
283
301
|
description: Membership-derived operator messaging. Only the authenticated human can manage personal preferences.
|
|
284
302
|
tags: [Operators]
|
|
@@ -286,6 +304,8 @@ paths:
|
|
|
286
304
|
- clerkSession: []
|
|
287
305
|
- bearerCredential: []
|
|
288
306
|
- bearerGrant: [messages:write]
|
|
307
|
+
- bearerGrant: [notifications:self]
|
|
308
|
+
- bearerGrant: [notifications:team]
|
|
289
309
|
x-required-scopes: [messages:write]
|
|
290
310
|
parameters:
|
|
291
311
|
- $ref: "#/components/parameters/ProjectId"
|
|
@@ -310,6 +330,7 @@ paths:
|
|
|
310
330
|
/v1/projects/{project_id}/environments/{environment_id}/notification-preferences/connect:
|
|
311
331
|
post:
|
|
312
332
|
operationId: connectOperatorChannel
|
|
333
|
+
x-notification-scopes: [notifications:self, notifications:team]
|
|
313
334
|
summary: connectOperatorChannel
|
|
314
335
|
description: Membership-derived operator messaging. Only the authenticated human can manage personal preferences.
|
|
315
336
|
tags: [Operators]
|
|
@@ -317,6 +338,8 @@ paths:
|
|
|
317
338
|
- clerkSession: []
|
|
318
339
|
- bearerCredential: []
|
|
319
340
|
- bearerGrant: [messages:write]
|
|
341
|
+
- bearerGrant: [notifications:self]
|
|
342
|
+
- bearerGrant: [notifications:team]
|
|
320
343
|
x-required-scopes: [messages:write]
|
|
321
344
|
parameters:
|
|
322
345
|
- $ref: "#/components/parameters/ProjectId"
|
|
@@ -1961,6 +1984,7 @@ paths:
|
|
|
1961
1984
|
/v1/projects:
|
|
1962
1985
|
get:
|
|
1963
1986
|
operationId: listProjects
|
|
1987
|
+
x-notification-scopes: [notifications:self, notifications:team]
|
|
1964
1988
|
summary: List projects in the current organization
|
|
1965
1989
|
description: |
|
|
1966
1990
|
Returns only projects owned by the organization selected by the verified
|
|
@@ -1971,6 +1995,8 @@ paths:
|
|
|
1971
1995
|
security:
|
|
1972
1996
|
- clerkSession: []
|
|
1973
1997
|
- bearerGrant: []
|
|
1998
|
+
- bearerGrant: [notifications:self]
|
|
1999
|
+
- bearerGrant: [notifications:team]
|
|
1974
2000
|
- bearerOrganizationCredential: []
|
|
1975
2001
|
x-required-scopes:
|
|
1976
2002
|
- projects:read
|
|
@@ -2064,6 +2090,7 @@ paths:
|
|
|
2064
2090
|
- $ref: "#/components/parameters/ProjectId"
|
|
2065
2091
|
get:
|
|
2066
2092
|
operationId: getProject
|
|
2093
|
+
x-notification-scopes: [notifications:self, notifications:team]
|
|
2067
2094
|
summary: Read one project in the current organization
|
|
2068
2095
|
description: |
|
|
2069
2096
|
Returns the complete project bootstrap. An absent project and a project
|
|
@@ -2073,6 +2100,8 @@ paths:
|
|
|
2073
2100
|
security:
|
|
2074
2101
|
- clerkSession: []
|
|
2075
2102
|
- bearerGrant: []
|
|
2103
|
+
- bearerGrant: [notifications:self]
|
|
2104
|
+
- bearerGrant: [notifications:team]
|
|
2076
2105
|
- bearerOrganizationCredential: []
|
|
2077
2106
|
x-required-scopes:
|
|
2078
2107
|
- projects:read
|
|
@@ -8849,6 +8878,8 @@ components:
|
|
|
8849
8878
|
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/Message
|
|
8850
8879
|
Problem:
|
|
8851
8880
|
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/Problem
|
|
8881
|
+
InteractionSendRequest:
|
|
8882
|
+
$ref: ../schemas/interaction-v1.schema.json#/$defs/InteractionSendRequest
|
|
8852
8883
|
InteractionRequest:
|
|
8853
8884
|
$ref: ../schemas/interaction-v1.schema.json#/$defs/InteractionRequest
|
|
8854
8885
|
InteractionSummary:
|