@whooshbang/contracts 1.0.0-rc.21 → 1.0.0-rc.23
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 +32 -0
- package/README.md +9 -3
- package/contract-manifest.json +43 -41
- package/dist/generated/artifact-index.d.ts +35 -35
- package/dist/generated/artifact-index.js +43 -41
- package/dist/generated/artifact-index.js.map +1 -1
- package/dist/generated/validators-standalone.d.ts +340 -288
- package/dist/generated/validators-standalone.js +5560 -2925
- package/dist/generated/validators-standalone.js.map +1 -1
- package/dist/generated/validators.d.ts +12 -8
- package/dist/generated/validators.js +22 -18
- package/dist/generated/validators.js.map +1 -1
- package/dist/generated/whooshbang-event-v1.d.ts +1 -1
- package/dist/generated/whooshbang-v1.d.ts +211 -121
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/fixtures/core-v1/fixture-index.json +50 -34
- package/fixtures/core-v1/problems/credential-organization-mismatch.json +9 -0
- package/fixtures/core-v1/problems/live-simulator-refused.json +16 -0
- package/fixtures/core-v1/problems/project-slug-conflict.json +1 -1
- package/fixtures/core-v1/requests/create-organization-credential.json +4 -0
- package/fixtures/core-v1/requests/update-project.json +3 -0
- 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 +14 -0
- 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 +2 -2
- package/fixtures/core-v1/scenarios/project-slug-conflict.json +2 -2
- 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/core-v1/success/{account-credential-collection.json → organization-credential-collection.json} +3 -3
- package/fixtures/core-v1/success/organization-credential-created.json +12 -0
- package/fixtures/core-v1/success/{account-credential-revoked.json → organization-credential-revoked.json} +3 -3
- package/fixtures/core-v1/success/{account-credential-rotated.json → organization-credential-rotated.json} +7 -7
- package/fixtures/core-v1/success/{account-projection.json → organization-projection.json} +2 -2
- package/fixtures/core-v1/success/project-collection.json +3 -2
- package/fixtures/core-v1/success/project-created.json +3 -2
- 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/requests/create-recipient-group.json +1 -1
- package/fixtures/recipient-experience-v1/requests/create-subscriber-with-groups.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 +2 -2
- package/fixtures/recipient-experience-v1/success/recipient-group.json +1 -1
- package/fixtures/whooshbang-events-v1/events/agent-binding-degraded.json +1 -1
- package/fixtures/whooshbang-events-v1/events/interaction-expired.json +1 -1
- package/fixtures/whooshbang-events-v1/events/interaction-received.json +1 -1
- package/fixtures/whooshbang-events-v1/events/message-delivered.json +1 -1
- package/fixtures/whooshbang-events-v1/events/message-expired.json +1 -1
- package/fixtures/whooshbang-events-v1/events/message-failed.json +1 -1
- package/fixtures/whooshbang-events-v1/events/message-provider-accepted.json +1 -1
- package/fixtures/whooshbang-events-v1/events/subscription-activated.json +1 -1
- package/fixtures/whooshbang-events-v1/events/subscription-revoked.json +1 -1
- package/fixtures/whooshbang-events-v1/signing/vectors.json +29 -29
- package/openapi/generated/whooshbang-v1.bundle.json +641 -248
- package/openapi/whooshbang-v1.yaml +403 -189
- 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 +3 -3
- package/schemas/fixture-index.schema.json +1 -1
- package/schemas/interaction-machine-scenario.schema.json +1 -1
- package/schemas/interaction-v1.schema.json +1 -1
- 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 +289 -67
- package/fixtures/core-v1/problems/credential-account-mismatch.json +0 -9
- package/fixtures/core-v1/requests/create-account-credential.json +0 -4
- package/fixtures/core-v1/scenarios/cross-account-project.json +0 -14
- package/fixtures/core-v1/success/account-credential-created.json +0 -12
- /package/fixtures/core-v1/requests/{rotate-account-credential.json → rotate-organization-credential.json} +0 -0
|
@@ -1,18 +1,18 @@
|
|
|
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: 1.0.0-rc.
|
|
4
|
+
x-contract-version: 1.0.0-rc.23
|
|
5
5
|
info:
|
|
6
6
|
title: WhooshBang API
|
|
7
|
-
version: 1.0.0-rc.
|
|
7
|
+
version: 1.0.0-rc.23
|
|
8
8
|
description: |
|
|
9
|
-
The V1 contract for human
|
|
9
|
+
The V1 contract for human organization/project administration, project-scoped
|
|
10
10
|
subscription links, and asynchronous text messages. A Clerk session selects
|
|
11
|
-
one
|
|
11
|
+
one organization for administration. A project credential selects one organization,
|
|
12
12
|
project, and `test` or `live` environment for product operations; request
|
|
13
13
|
bodies cannot override either authenticated scope.
|
|
14
14
|
|
|
15
|
-
A person's OAuth grant selects one
|
|
15
|
+
A person's OAuth grant selects one organization and carries scopes, but no
|
|
16
16
|
project. It names the project and environment it acts in through the URL
|
|
17
17
|
path, on the environment-scoped form of each operation; the service checks
|
|
18
18
|
that path against the granting person's membership on every call. The flat
|
|
@@ -35,14 +35,14 @@ servers:
|
|
|
35
35
|
security:
|
|
36
36
|
- bearerCredential: []
|
|
37
37
|
tags:
|
|
38
|
-
- name:
|
|
39
|
-
description: The current Clerk organization projected as a WhooshBang
|
|
38
|
+
- name: Organization
|
|
39
|
+
description: The current Clerk organization projected as a WhooshBang organization.
|
|
40
40
|
- name: Projects
|
|
41
|
-
description:
|
|
41
|
+
description: Organization-scoped applications with transactionally bootstrapped test/live environments.
|
|
42
42
|
- name: API credentials
|
|
43
43
|
description: Human-administered, environment-scoped bearer credentials with one-time secret reveal.
|
|
44
|
-
- name:
|
|
45
|
-
description: Human-administered,
|
|
44
|
+
- name: Organization credentials
|
|
45
|
+
description: Human-administered, organization-scoped bearer credentials that name their project and environment per call.
|
|
46
46
|
- name: Subscription links
|
|
47
47
|
description: Single-use, expiring Telegram authorization links.
|
|
48
48
|
- name: Messages
|
|
@@ -66,69 +66,119 @@ tags:
|
|
|
66
66
|
- name: Group broadcasts
|
|
67
67
|
description: Durable group acceptance and aggregate projection over ordinary child messages.
|
|
68
68
|
paths:
|
|
69
|
-
/v1/
|
|
69
|
+
/v1/organization:
|
|
70
70
|
get:
|
|
71
|
-
operationId:
|
|
72
|
-
summary: Read the current
|
|
71
|
+
operationId: getOrganization
|
|
72
|
+
summary: Read the current organization projection
|
|
73
73
|
description: |
|
|
74
|
-
Returns the WhooshBang
|
|
74
|
+
Returns the WhooshBang organization selected by the verified Clerk
|
|
75
75
|
organization session and the caller's projected role. Clerk organization
|
|
76
76
|
and user identifiers are never public response fields.
|
|
77
77
|
tags:
|
|
78
|
-
-
|
|
78
|
+
- Organization
|
|
79
79
|
security:
|
|
80
80
|
- clerkSession: []
|
|
81
81
|
- bearerGrant: []
|
|
82
|
-
x-
|
|
82
|
+
x-organization-membership: required
|
|
83
83
|
responses:
|
|
84
84
|
"200":
|
|
85
|
-
description: The current
|
|
85
|
+
description: The current organization projection.
|
|
86
86
|
headers:
|
|
87
87
|
WhooshBang-Diagnostic-Id:
|
|
88
88
|
$ref: "#/components/headers/DiagnosticId"
|
|
89
89
|
content:
|
|
90
90
|
application/json:
|
|
91
91
|
schema:
|
|
92
|
-
$ref: "#/components/schemas/
|
|
92
|
+
$ref: "#/components/schemas/OrganizationProjection"
|
|
93
93
|
examples:
|
|
94
|
-
|
|
95
|
-
externalValue: ../fixtures/core-v1/success/
|
|
94
|
+
projectedOrganization:
|
|
95
|
+
externalValue: ../fixtures/core-v1/success/organization-projection.json
|
|
96
96
|
"401":
|
|
97
97
|
$ref: "#/components/responses/Unauthorized"
|
|
98
98
|
"403":
|
|
99
99
|
$ref: "#/components/responses/Forbidden"
|
|
100
100
|
"429":
|
|
101
101
|
$ref: "#/components/responses/RateLimited"
|
|
102
|
-
/v1/
|
|
102
|
+
/v1/organization/close:
|
|
103
|
+
post:
|
|
104
|
+
operationId: closeOrganization
|
|
105
|
+
summary: Close the current customer organization
|
|
106
|
+
description: |
|
|
107
|
+
Terminally closes the organization selected by the verified Clerk
|
|
108
|
+
organization session. Only an administrator may close it. OAuth grants
|
|
109
|
+
and API credentials are deliberately excluded: delegated authority must
|
|
110
|
+
not be able to erase the organization that granted it.
|
|
111
|
+
|
|
112
|
+
The request requires the exact confirmation `close-organization`. Repeating a
|
|
113
|
+
completed closure is safe and returns the original `closed_at`. The
|
|
114
|
+
result names provider-owned resources the administrator must still retire
|
|
115
|
+
outside WhooshBang, such as revoking a customer-managed Telegram bot token
|
|
116
|
+
in BotFather; no provider credential is returned.
|
|
117
|
+
tags:
|
|
118
|
+
- Organization
|
|
119
|
+
security:
|
|
120
|
+
- clerkSession: []
|
|
121
|
+
x-organization-membership: required
|
|
122
|
+
x-required-membership-role: admin
|
|
123
|
+
x-repeat-semantics:
|
|
124
|
+
same_target: idempotent
|
|
125
|
+
secret_returned: false
|
|
126
|
+
requestBody:
|
|
127
|
+
required: true
|
|
128
|
+
content:
|
|
129
|
+
application/json:
|
|
130
|
+
schema:
|
|
131
|
+
$ref: "#/components/schemas/CloseOrganizationRequest"
|
|
132
|
+
responses:
|
|
133
|
+
"200":
|
|
134
|
+
description: The organization is closed, with any manual provider retirement still required.
|
|
135
|
+
headers:
|
|
136
|
+
WhooshBang-Diagnostic-Id:
|
|
137
|
+
$ref: "#/components/headers/DiagnosticId"
|
|
138
|
+
content:
|
|
139
|
+
application/json:
|
|
140
|
+
schema:
|
|
141
|
+
$ref: "#/components/schemas/OrganizationClosureResult"
|
|
142
|
+
"400":
|
|
143
|
+
$ref: "#/components/responses/BadRequest"
|
|
144
|
+
"401":
|
|
145
|
+
$ref: "#/components/responses/Unauthorized"
|
|
146
|
+
"403":
|
|
147
|
+
$ref: "#/components/responses/Forbidden"
|
|
148
|
+
"409":
|
|
149
|
+
$ref: "#/components/responses/Conflict"
|
|
150
|
+
"429":
|
|
151
|
+
$ref: "#/components/responses/RateLimited"
|
|
152
|
+
/v1/organization/credentials:
|
|
103
153
|
get:
|
|
104
|
-
operationId:
|
|
105
|
-
summary: List safe
|
|
154
|
+
operationId: listOrganizationCredentials
|
|
155
|
+
summary: List safe organization credential metadata
|
|
106
156
|
description: |
|
|
107
|
-
Returns only credentials owned by the
|
|
157
|
+
Returns only credentials owned by the organization selected by the verified
|
|
108
158
|
Clerk organization session. Secrets and digest material are never
|
|
109
159
|
returned.
|
|
110
160
|
tags:
|
|
111
|
-
-
|
|
161
|
+
- Organization credentials
|
|
112
162
|
security:
|
|
113
163
|
- clerkSession: []
|
|
114
|
-
x-
|
|
164
|
+
x-organization-membership: required
|
|
115
165
|
parameters:
|
|
116
166
|
- $ref: "#/components/parameters/ApiCredentialAfterCursor"
|
|
117
167
|
- $ref: "#/components/parameters/ApiCredentialPageLimit"
|
|
118
168
|
- $ref: "#/components/parameters/PageNumber"
|
|
119
169
|
responses:
|
|
120
170
|
"200":
|
|
121
|
-
description: A stable page of safe
|
|
171
|
+
description: A stable page of safe organization credential metadata.
|
|
122
172
|
headers:
|
|
123
173
|
WhooshBang-Diagnostic-Id:
|
|
124
174
|
$ref: "#/components/headers/DiagnosticId"
|
|
125
175
|
content:
|
|
126
176
|
application/json:
|
|
127
177
|
schema:
|
|
128
|
-
$ref: "#/components/schemas/
|
|
178
|
+
$ref: "#/components/schemas/OrganizationCredentialCollection"
|
|
129
179
|
examples:
|
|
130
|
-
|
|
131
|
-
externalValue: ../fixtures/core-v1/success/
|
|
180
|
+
organizationCredentials:
|
|
181
|
+
externalValue: ../fixtures/core-v1/success/organization-credential-collection.json
|
|
132
182
|
"400":
|
|
133
183
|
$ref: "#/components/responses/BadRequest"
|
|
134
184
|
"401":
|
|
@@ -140,10 +190,10 @@ paths:
|
|
|
140
190
|
"429":
|
|
141
191
|
$ref: "#/components/responses/RateLimited"
|
|
142
192
|
post:
|
|
143
|
-
operationId:
|
|
144
|
-
summary: Create an
|
|
193
|
+
operationId: createOrganizationCredential
|
|
194
|
+
summary: Create an organization-scoped API credential
|
|
145
195
|
description: |
|
|
146
|
-
Creates one credential against the whole
|
|
196
|
+
Creates one credential against the whole organization. It names no project
|
|
147
197
|
and no environment: a request names them in its path, and the
|
|
148
198
|
credential's authority on that path is the intersection of its scopes
|
|
149
199
|
with the project-credential vocabulary, so it is never wider than a
|
|
@@ -151,10 +201,10 @@ paths:
|
|
|
151
201
|
The complete bearer secret appears only in this creation response. It
|
|
152
202
|
cannot be read later and is never replayed from an idempotency cache.
|
|
153
203
|
tags:
|
|
154
|
-
-
|
|
204
|
+
- Organization credentials
|
|
155
205
|
security:
|
|
156
206
|
- clerkSession: []
|
|
157
|
-
x-
|
|
207
|
+
x-organization-membership: required
|
|
158
208
|
x-secret-reveal:
|
|
159
209
|
responses: 1
|
|
160
210
|
replayable: false
|
|
@@ -164,10 +214,10 @@ paths:
|
|
|
164
214
|
content:
|
|
165
215
|
application/json:
|
|
166
216
|
schema:
|
|
167
|
-
$ref: "#/components/schemas/
|
|
217
|
+
$ref: "#/components/schemas/CreateOrganizationCredentialRequest"
|
|
168
218
|
examples:
|
|
169
|
-
|
|
170
|
-
externalValue: ../fixtures/core-v1/requests/create-
|
|
219
|
+
createOrganizationCredential:
|
|
220
|
+
externalValue: ../fixtures/core-v1/requests/create-organization-credential.json
|
|
171
221
|
responses:
|
|
172
222
|
"201":
|
|
173
223
|
description: Creation-only secret reveal and safe credential metadata.
|
|
@@ -177,10 +227,10 @@ paths:
|
|
|
177
227
|
content:
|
|
178
228
|
application/json:
|
|
179
229
|
schema:
|
|
180
|
-
$ref: "#/components/schemas/
|
|
230
|
+
$ref: "#/components/schemas/OrganizationCredentialSecretReveal"
|
|
181
231
|
examples:
|
|
182
|
-
|
|
183
|
-
externalValue: ../fixtures/core-v1/success/
|
|
232
|
+
createdOrganizationCredential:
|
|
233
|
+
externalValue: ../fixtures/core-v1/success/organization-credential-created.json
|
|
184
234
|
"400":
|
|
185
235
|
$ref: "#/components/responses/BadRequest"
|
|
186
236
|
"401":
|
|
@@ -191,24 +241,24 @@ paths:
|
|
|
191
241
|
$ref: "#/components/responses/NotFound"
|
|
192
242
|
"429":
|
|
193
243
|
$ref: "#/components/responses/RateLimited"
|
|
194
|
-
/v1/
|
|
244
|
+
/v1/organization/credentials/{organization_credential_id}/rotate:
|
|
195
245
|
parameters:
|
|
196
|
-
- $ref: "#/components/parameters/
|
|
246
|
+
- $ref: "#/components/parameters/OrganizationCredentialId"
|
|
197
247
|
post:
|
|
198
|
-
operationId:
|
|
199
|
-
summary: Rotate an
|
|
248
|
+
operationId: rotateOrganizationCredential
|
|
249
|
+
summary: Rotate an organization-scoped API credential
|
|
200
250
|
description: |
|
|
201
251
|
Creates one replacement with the same label and scopes. The complete new
|
|
202
252
|
bearer secret appears only in this response. The replaced credential
|
|
203
253
|
remains active for the explicitly declared overlap, from zero through
|
|
204
254
|
86400 seconds, then becomes terminally revoked. A revoked credential
|
|
205
|
-
cannot be rotated. Missing and out-of-
|
|
255
|
+
cannot be rotated. Missing and out-of-organization credentials use the same
|
|
206
256
|
non-enumerating `404`.
|
|
207
257
|
tags:
|
|
208
|
-
-
|
|
258
|
+
- Organization credentials
|
|
209
259
|
security:
|
|
210
260
|
- clerkSession: []
|
|
211
|
-
x-
|
|
261
|
+
x-organization-membership: required
|
|
212
262
|
x-secret-reveal:
|
|
213
263
|
responses: 1
|
|
214
264
|
replayable: false
|
|
@@ -218,10 +268,10 @@ paths:
|
|
|
218
268
|
content:
|
|
219
269
|
application/json:
|
|
220
270
|
schema:
|
|
221
|
-
$ref: "#/components/schemas/
|
|
271
|
+
$ref: "#/components/schemas/RotateOrganizationCredentialRequest"
|
|
222
272
|
examples:
|
|
223
|
-
|
|
224
|
-
externalValue: ../fixtures/core-v1/requests/rotate-
|
|
273
|
+
rotateOrganizationCredential:
|
|
274
|
+
externalValue: ../fixtures/core-v1/requests/rotate-organization-credential.json
|
|
225
275
|
responses:
|
|
226
276
|
"201":
|
|
227
277
|
description: Creation-only replacement secret and safe metadata for both credentials.
|
|
@@ -231,10 +281,10 @@ paths:
|
|
|
231
281
|
content:
|
|
232
282
|
application/json:
|
|
233
283
|
schema:
|
|
234
|
-
$ref: "#/components/schemas/
|
|
284
|
+
$ref: "#/components/schemas/OrganizationCredentialRotation"
|
|
235
285
|
examples:
|
|
236
|
-
|
|
237
|
-
externalValue: ../fixtures/core-v1/success/
|
|
286
|
+
rotatedOrganizationCredential:
|
|
287
|
+
externalValue: ../fixtures/core-v1/success/organization-credential-rotated.json
|
|
238
288
|
"400":
|
|
239
289
|
$ref: "#/components/responses/BadRequest"
|
|
240
290
|
"401":
|
|
@@ -245,23 +295,23 @@ paths:
|
|
|
245
295
|
$ref: "#/components/responses/NotFound"
|
|
246
296
|
"429":
|
|
247
297
|
$ref: "#/components/responses/RateLimited"
|
|
248
|
-
/v1/
|
|
298
|
+
/v1/organization/credentials/{organization_credential_id}/revoke:
|
|
249
299
|
parameters:
|
|
250
|
-
- $ref: "#/components/parameters/
|
|
300
|
+
- $ref: "#/components/parameters/OrganizationCredentialId"
|
|
251
301
|
post:
|
|
252
|
-
operationId:
|
|
253
|
-
summary: Revoke an
|
|
302
|
+
operationId: revokeOrganizationCredential
|
|
303
|
+
summary: Revoke an organization-scoped API credential
|
|
254
304
|
description: |
|
|
255
305
|
Immediately and terminally revokes the selected credential. Repeating
|
|
256
306
|
the request for the same visible credential is safe and returns the
|
|
257
307
|
same revoked metadata without revealing secret or digest material.
|
|
258
|
-
Missing and out-of-
|
|
308
|
+
Missing and out-of-organization credentials use the same non-enumerating
|
|
259
309
|
`404`.
|
|
260
310
|
tags:
|
|
261
|
-
-
|
|
311
|
+
- Organization credentials
|
|
262
312
|
security:
|
|
263
313
|
- clerkSession: []
|
|
264
|
-
x-
|
|
314
|
+
x-organization-membership: required
|
|
265
315
|
x-repeat-semantics:
|
|
266
316
|
same_target: idempotent
|
|
267
317
|
secret_returned: false
|
|
@@ -274,10 +324,10 @@ paths:
|
|
|
274
324
|
content:
|
|
275
325
|
application/json:
|
|
276
326
|
schema:
|
|
277
|
-
$ref: "#/components/schemas/
|
|
327
|
+
$ref: "#/components/schemas/OrganizationCredential"
|
|
278
328
|
examples:
|
|
279
|
-
|
|
280
|
-
externalValue: ../fixtures/core-v1/success/
|
|
329
|
+
revokedOrganizationCredential:
|
|
330
|
+
externalValue: ../fixtures/core-v1/success/organization-credential-revoked.json
|
|
281
331
|
"401":
|
|
282
332
|
$ref: "#/components/responses/Unauthorized"
|
|
283
333
|
"403":
|
|
@@ -289,9 +339,9 @@ paths:
|
|
|
289
339
|
/v1/projects:
|
|
290
340
|
get:
|
|
291
341
|
operationId: listProjects
|
|
292
|
-
summary: List projects in the current
|
|
342
|
+
summary: List projects in the current organization
|
|
293
343
|
description: |
|
|
294
|
-
Returns only projects owned by the
|
|
344
|
+
Returns only projects owned by the organization selected by the verified
|
|
295
345
|
Clerk organization session. Every project includes its complete test/live
|
|
296
346
|
environment and default-notifier bootstrap.
|
|
297
347
|
tags:
|
|
@@ -299,17 +349,17 @@ paths:
|
|
|
299
349
|
security:
|
|
300
350
|
- clerkSession: []
|
|
301
351
|
- bearerGrant: []
|
|
302
|
-
-
|
|
352
|
+
- bearerOrganizationCredential: []
|
|
303
353
|
x-required-scopes:
|
|
304
354
|
- projects:read
|
|
305
|
-
x-
|
|
355
|
+
x-organization-membership: required
|
|
306
356
|
parameters:
|
|
307
357
|
- $ref: "#/components/parameters/ProjectAfterCursor"
|
|
308
358
|
- $ref: "#/components/parameters/ProjectPageLimit"
|
|
309
359
|
- $ref: "#/components/parameters/PageNumber"
|
|
310
360
|
responses:
|
|
311
361
|
"200":
|
|
312
|
-
description: A stable page of projects in the current
|
|
362
|
+
description: A stable page of projects in the current organization.
|
|
313
363
|
headers:
|
|
314
364
|
WhooshBang-Diagnostic-Id:
|
|
315
365
|
$ref: "#/components/headers/DiagnosticId"
|
|
@@ -332,7 +382,7 @@ paths:
|
|
|
332
382
|
operationId: createProject
|
|
333
383
|
summary: Create a project and its default environments
|
|
334
384
|
description: |
|
|
335
|
-
Creates one project inside the authenticated
|
|
385
|
+
Creates one project inside the authenticated organization. The project, its
|
|
336
386
|
`test` and `live` environments, and one `Default` notifier per
|
|
337
387
|
environment are one atomic logical resource. Equivalent replay returns
|
|
338
388
|
the original `201` response without extending idempotency retention.
|
|
@@ -343,12 +393,12 @@ paths:
|
|
|
343
393
|
- bearerGrant: []
|
|
344
394
|
x-required-scopes:
|
|
345
395
|
- projects:write
|
|
346
|
-
x-
|
|
396
|
+
x-organization-membership: required
|
|
347
397
|
x-idempotency:
|
|
348
398
|
required: true
|
|
349
399
|
retention_seconds: 604800
|
|
350
400
|
scope:
|
|
351
|
-
-
|
|
401
|
+
- authenticated_organization
|
|
352
402
|
- operation_id
|
|
353
403
|
- key
|
|
354
404
|
equivalence: validated_request
|
|
@@ -392,19 +442,19 @@ paths:
|
|
|
392
442
|
- $ref: "#/components/parameters/ProjectId"
|
|
393
443
|
get:
|
|
394
444
|
operationId: getProject
|
|
395
|
-
summary: Read one project in the current
|
|
445
|
+
summary: Read one project in the current organization
|
|
396
446
|
description: |
|
|
397
447
|
Returns the complete project bootstrap. An absent project and a project
|
|
398
|
-
outside the authenticated
|
|
448
|
+
outside the authenticated organization use the same non-enumerating `404`.
|
|
399
449
|
tags:
|
|
400
450
|
- Projects
|
|
401
451
|
security:
|
|
402
452
|
- clerkSession: []
|
|
403
453
|
- bearerGrant: []
|
|
404
|
-
-
|
|
454
|
+
- bearerOrganizationCredential: []
|
|
405
455
|
x-required-scopes:
|
|
406
456
|
- projects:read
|
|
407
|
-
x-
|
|
457
|
+
x-organization-membership: required
|
|
408
458
|
responses:
|
|
409
459
|
"200":
|
|
410
460
|
description: The current project and its two environments.
|
|
@@ -426,6 +476,57 @@ paths:
|
|
|
426
476
|
$ref: "#/components/responses/NotFound"
|
|
427
477
|
"429":
|
|
428
478
|
$ref: "#/components/responses/RateLimited"
|
|
479
|
+
patch:
|
|
480
|
+
operationId: updateProject
|
|
481
|
+
summary: Set a project's privacy policy
|
|
482
|
+
description: |
|
|
483
|
+
Changes profile collection for both project environments. minimal is the
|
|
484
|
+
default for new and existing projects. standard permits messenger profiles;
|
|
485
|
+
minimal keeps recipient language only; private keeps delivery routing and
|
|
486
|
+
the customer-supplied subscriber identifier, with no profile data.
|
|
487
|
+
Moving standard to minimal erases existing identifying profile fields.
|
|
488
|
+
Moving to private also erases recipient language. Increasing collection
|
|
489
|
+
does not restore erased data. The operation is naturally idempotent.
|
|
490
|
+
An absent project and one outside the organization return the same 404.
|
|
491
|
+
tags:
|
|
492
|
+
- Projects
|
|
493
|
+
security:
|
|
494
|
+
- clerkSession: []
|
|
495
|
+
- bearerGrant: []
|
|
496
|
+
- bearerCredential: []
|
|
497
|
+
- bearerOrganizationCredential: []
|
|
498
|
+
x-required-scopes:
|
|
499
|
+
- projects:write
|
|
500
|
+
x-organization-membership: required
|
|
501
|
+
requestBody:
|
|
502
|
+
required: true
|
|
503
|
+
content:
|
|
504
|
+
application/json:
|
|
505
|
+
schema:
|
|
506
|
+
$ref: "#/components/schemas/UpdateProjectRequest"
|
|
507
|
+
examples:
|
|
508
|
+
updateProject:
|
|
509
|
+
externalValue: ../fixtures/core-v1/requests/update-project.json
|
|
510
|
+
responses:
|
|
511
|
+
"200":
|
|
512
|
+
description: The project after changing its privacy policy and clearing disallowed profile fields.
|
|
513
|
+
headers:
|
|
514
|
+
WhooshBang-Diagnostic-Id:
|
|
515
|
+
$ref: "#/components/headers/DiagnosticId"
|
|
516
|
+
content:
|
|
517
|
+
application/json:
|
|
518
|
+
schema:
|
|
519
|
+
$ref: "#/components/schemas/Project"
|
|
520
|
+
"400":
|
|
521
|
+
$ref: "#/components/responses/BadRequest"
|
|
522
|
+
"401":
|
|
523
|
+
$ref: "#/components/responses/Unauthorized"
|
|
524
|
+
"403":
|
|
525
|
+
$ref: "#/components/responses/Forbidden"
|
|
526
|
+
"404":
|
|
527
|
+
$ref: "#/components/responses/NotFound"
|
|
528
|
+
"429":
|
|
529
|
+
$ref: "#/components/responses/RateLimited"
|
|
429
530
|
/v1/projects/{project_id}/recipient-copy-overrides:
|
|
430
531
|
parameters:
|
|
431
532
|
- $ref: "#/components/parameters/ProjectId"
|
|
@@ -434,7 +535,7 @@ paths:
|
|
|
434
535
|
summary: List sparse recipient-copy overrides for one project
|
|
435
536
|
description: |
|
|
436
537
|
Returns only customer-authored overrides for the project in the
|
|
437
|
-
authenticated
|
|
538
|
+
authenticated organization. Missing values are intentionally absent and use
|
|
438
539
|
WhooshBang's complete shipped catalog at render time. An optional
|
|
439
540
|
canonical language filter preserves the project + language + string
|
|
440
541
|
address without applying locale negotiation.
|
|
@@ -446,7 +547,7 @@ paths:
|
|
|
446
547
|
- bearerCredential: []
|
|
447
548
|
x-required-scopes:
|
|
448
549
|
- projects:read
|
|
449
|
-
x-
|
|
550
|
+
x-organization-membership: required
|
|
450
551
|
parameters:
|
|
451
552
|
- name: language
|
|
452
553
|
in: query
|
|
@@ -504,7 +605,7 @@ paths:
|
|
|
504
605
|
- bearerCredential: []
|
|
505
606
|
x-required-scopes:
|
|
506
607
|
- projects:write
|
|
507
|
-
x-
|
|
608
|
+
x-organization-membership: required
|
|
508
609
|
requestBody:
|
|
509
610
|
required: true
|
|
510
611
|
content:
|
|
@@ -546,7 +647,7 @@ paths:
|
|
|
546
647
|
- bearerCredential: []
|
|
547
648
|
x-required-scopes:
|
|
548
649
|
- projects:write
|
|
549
|
-
x-
|
|
650
|
+
x-organization-membership: required
|
|
550
651
|
responses:
|
|
551
652
|
"204":
|
|
552
653
|
description: The shipped catalog value is effective at this address.
|
|
@@ -569,15 +670,15 @@ paths:
|
|
|
569
670
|
summary: List safe API credential metadata
|
|
570
671
|
description: |
|
|
571
672
|
Returns only credentials in the selected project environment owned by
|
|
572
|
-
the
|
|
673
|
+
the organization selected by the verified Clerk organization session.
|
|
573
674
|
Secrets and digest material are never returned. An absent or
|
|
574
|
-
out-of-
|
|
675
|
+
out-of-organization project or environment uses the same non-enumerating
|
|
575
676
|
`404`.
|
|
576
677
|
tags:
|
|
577
678
|
- API credentials
|
|
578
679
|
security:
|
|
579
680
|
- clerkSession: []
|
|
580
|
-
x-
|
|
681
|
+
x-organization-membership: required
|
|
581
682
|
parameters:
|
|
582
683
|
- $ref: "#/components/parameters/ApiCredentialAfterCursor"
|
|
583
684
|
- $ref: "#/components/parameters/ApiCredentialPageLimit"
|
|
@@ -618,7 +719,7 @@ paths:
|
|
|
618
719
|
- API credentials
|
|
619
720
|
security:
|
|
620
721
|
- clerkSession: []
|
|
621
|
-
x-
|
|
722
|
+
x-organization-membership: required
|
|
622
723
|
x-secret-reveal:
|
|
623
724
|
responses: 1
|
|
624
725
|
replayable: false
|
|
@@ -674,7 +775,7 @@ paths:
|
|
|
674
775
|
- API credentials
|
|
675
776
|
security:
|
|
676
777
|
- clerkSession: []
|
|
677
|
-
x-
|
|
778
|
+
x-organization-membership: required
|
|
678
779
|
x-secret-reveal:
|
|
679
780
|
responses: 1
|
|
680
781
|
replayable: false
|
|
@@ -728,7 +829,7 @@ paths:
|
|
|
728
829
|
- API credentials
|
|
729
830
|
security:
|
|
730
831
|
- clerkSession: []
|
|
731
|
-
x-
|
|
832
|
+
x-organization-membership: required
|
|
732
833
|
x-repeat-semantics:
|
|
733
834
|
same_target: idempotent
|
|
734
835
|
secret_returned: false
|
|
@@ -922,7 +1023,7 @@ paths:
|
|
|
922
1023
|
security:
|
|
923
1024
|
- bearerCredential: []
|
|
924
1025
|
- bearerGrant: []
|
|
925
|
-
-
|
|
1026
|
+
- bearerOrganizationCredential: []
|
|
926
1027
|
x-required-scopes:
|
|
927
1028
|
- messages:write
|
|
928
1029
|
x-idempotency:
|
|
@@ -996,7 +1097,7 @@ paths:
|
|
|
996
1097
|
security:
|
|
997
1098
|
- bearerCredential: []
|
|
998
1099
|
- bearerGrant: []
|
|
999
|
-
-
|
|
1100
|
+
- bearerOrganizationCredential: []
|
|
1000
1101
|
x-required-scopes:
|
|
1001
1102
|
- messages:write
|
|
1002
1103
|
x-repeat-semantics:
|
|
@@ -1021,6 +1122,10 @@ paths:
|
|
|
1021
1122
|
Durably accepts one logical text message for one subscriber and one
|
|
1022
1123
|
resolved channel binding. `202` proves API acceptance only; it does not
|
|
1023
1124
|
claim provider acceptance or end-device delivery.
|
|
1125
|
+
The reserved `test:` subscriber prefix and `delivery_target: simulator`
|
|
1126
|
+
are test-environment-only. Live sends are refused before acceptance or
|
|
1127
|
+
idempotent replay with `400 request_invalid`; reserved subscriber IDs
|
|
1128
|
+
carry a field error at `/to/subscriber_id`.
|
|
1024
1129
|
tags:
|
|
1025
1130
|
- Messages
|
|
1026
1131
|
security:
|
|
@@ -1276,6 +1381,8 @@ paths:
|
|
|
1276
1381
|
project credential. The notifier, subscriber, and active binding become
|
|
1277
1382
|
immutable authorization bounds. The response never contains a readable
|
|
1278
1383
|
secret or digest.
|
|
1384
|
+
Live environments reject the reserved `test:` subscriber prefix with
|
|
1385
|
+
`400 request_invalid` and a field error at `/subscriber_id` before creation.
|
|
1279
1386
|
tags:
|
|
1280
1387
|
- Machine clients
|
|
1281
1388
|
security:
|
|
@@ -1669,7 +1776,7 @@ paths:
|
|
|
1669
1776
|
- clerkSession: []
|
|
1670
1777
|
- bearerCredential: []
|
|
1671
1778
|
- bearerGrant: []
|
|
1672
|
-
-
|
|
1779
|
+
- bearerOrganizationCredential: []
|
|
1673
1780
|
x-required-scopes:
|
|
1674
1781
|
- messages:read
|
|
1675
1782
|
parameters:
|
|
@@ -1709,7 +1816,7 @@ paths:
|
|
|
1709
1816
|
- clerkSession: []
|
|
1710
1817
|
- bearerCredential: []
|
|
1711
1818
|
- bearerGrant: []
|
|
1712
|
-
-
|
|
1819
|
+
- bearerOrganizationCredential: []
|
|
1713
1820
|
x-required-scopes:
|
|
1714
1821
|
- messages:write
|
|
1715
1822
|
x-idempotency:
|
|
@@ -1784,7 +1891,7 @@ paths:
|
|
|
1784
1891
|
- clerkSession: []
|
|
1785
1892
|
- bearerCredential: []
|
|
1786
1893
|
- bearerGrant: []
|
|
1787
|
-
-
|
|
1894
|
+
- bearerOrganizationCredential: []
|
|
1788
1895
|
x-required-scopes:
|
|
1789
1896
|
- messages:read
|
|
1790
1897
|
responses:
|
|
@@ -1814,7 +1921,7 @@ paths:
|
|
|
1814
1921
|
- clerkSession: []
|
|
1815
1922
|
- bearerCredential: []
|
|
1816
1923
|
- bearerGrant: []
|
|
1817
|
-
-
|
|
1924
|
+
- bearerOrganizationCredential: []
|
|
1818
1925
|
x-required-scopes:
|
|
1819
1926
|
- messages:write
|
|
1820
1927
|
responses:
|
|
@@ -1848,7 +1955,7 @@ paths:
|
|
|
1848
1955
|
- clerkSession: []
|
|
1849
1956
|
- bearerCredential: []
|
|
1850
1957
|
- bearerGrant: []
|
|
1851
|
-
-
|
|
1958
|
+
- bearerOrganizationCredential: []
|
|
1852
1959
|
x-required-scopes:
|
|
1853
1960
|
- messages:write
|
|
1854
1961
|
x-idempotency:
|
|
@@ -1921,7 +2028,7 @@ paths:
|
|
|
1921
2028
|
- clerkSession: []
|
|
1922
2029
|
- bearerCredential: []
|
|
1923
2030
|
- bearerGrant: []
|
|
1924
|
-
-
|
|
2031
|
+
- bearerOrganizationCredential: []
|
|
1925
2032
|
x-required-scopes:
|
|
1926
2033
|
- messages:write
|
|
1927
2034
|
x-repeat-semantics:
|
|
@@ -1956,7 +2063,7 @@ paths:
|
|
|
1956
2063
|
- clerkSession: []
|
|
1957
2064
|
- bearerCredential: []
|
|
1958
2065
|
- bearerGrant: []
|
|
1959
|
-
-
|
|
2066
|
+
- bearerOrganizationCredential: []
|
|
1960
2067
|
x-required-scopes:
|
|
1961
2068
|
- messages:read
|
|
1962
2069
|
parameters:
|
|
@@ -1997,7 +2104,7 @@ paths:
|
|
|
1997
2104
|
- clerkSession: []
|
|
1998
2105
|
- bearerCredential: []
|
|
1999
2106
|
- bearerGrant: []
|
|
2000
|
-
-
|
|
2107
|
+
- bearerOrganizationCredential: []
|
|
2001
2108
|
x-required-scopes:
|
|
2002
2109
|
- connections:read
|
|
2003
2110
|
responses:
|
|
@@ -2034,7 +2141,7 @@ paths:
|
|
|
2034
2141
|
- clerkSession: []
|
|
2035
2142
|
- bearerCredential: []
|
|
2036
2143
|
- bearerGrant: []
|
|
2037
|
-
-
|
|
2144
|
+
- bearerOrganizationCredential: []
|
|
2038
2145
|
x-required-scopes:
|
|
2039
2146
|
- connections:read
|
|
2040
2147
|
parameters:
|
|
@@ -2043,7 +2150,7 @@ paths:
|
|
|
2043
2150
|
- $ref: "#/components/parameters/PageNumber"
|
|
2044
2151
|
responses:
|
|
2045
2152
|
"200":
|
|
2046
|
-
description: Connections owned by exactly this
|
|
2153
|
+
description: Connections owned by exactly this organization, project, and environment.
|
|
2047
2154
|
headers:
|
|
2048
2155
|
WhooshBang-Diagnostic-Id:
|
|
2049
2156
|
$ref: "#/components/headers/DiagnosticId"
|
|
@@ -2078,7 +2185,7 @@ paths:
|
|
|
2078
2185
|
on the submitted credential instead.
|
|
2079
2186
|
|
|
2080
2187
|
`customer_managed` supplies no credential at all. Telegram creates a
|
|
2081
|
-
brand new bot on the administrator's own account and hands WhooshBang
|
|
2188
|
+
brand new bot on the administrator's own Telegram account and hands WhooshBang
|
|
2082
2189
|
its token server to server, so the token never reaches a browser, a
|
|
2083
2190
|
clipboard, this request, or any response. The connection is returned
|
|
2084
2191
|
`pending` with a `setup` carrying the link the administrator opens and
|
|
@@ -2112,7 +2219,7 @@ paths:
|
|
|
2112
2219
|
consequence is separate: confirming this one **disables** the other
|
|
2113
2220
|
connection, which would otherwise go on reporting itself healthy while
|
|
2114
2221
|
receiving nothing;
|
|
2115
|
-
- the identity is already connected, by this
|
|
2222
|
+
- the identity is already connected, by this organization or any other —
|
|
2116
2223
|
`idempotency_conflict` 409, `provider_identity_claimed` at `/`, which
|
|
2117
2224
|
reports only that the identity the submitted credential proves is in
|
|
2118
2225
|
use and never that some other identity is;
|
|
@@ -2126,7 +2233,7 @@ paths:
|
|
|
2126
2233
|
- clerkSession: []
|
|
2127
2234
|
- bearerCredential: []
|
|
2128
2235
|
- bearerGrant: []
|
|
2129
|
-
-
|
|
2236
|
+
- bearerOrganizationCredential: []
|
|
2130
2237
|
x-required-scopes:
|
|
2131
2238
|
- connections:write
|
|
2132
2239
|
x-idempotency:
|
|
@@ -2207,7 +2314,7 @@ paths:
|
|
|
2207
2314
|
- clerkSession: []
|
|
2208
2315
|
- bearerCredential: []
|
|
2209
2316
|
- bearerGrant: []
|
|
2210
|
-
-
|
|
2317
|
+
- bearerOrganizationCredential: []
|
|
2211
2318
|
x-required-scopes:
|
|
2212
2319
|
- connections:read
|
|
2213
2320
|
responses:
|
|
@@ -2240,7 +2347,7 @@ paths:
|
|
|
2240
2347
|
- clerkSession: []
|
|
2241
2348
|
- bearerCredential: []
|
|
2242
2349
|
- bearerGrant: []
|
|
2243
|
-
-
|
|
2350
|
+
- bearerOrganizationCredential: []
|
|
2244
2351
|
x-required-scopes:
|
|
2245
2352
|
- connections:write
|
|
2246
2353
|
requestBody:
|
|
@@ -2288,7 +2395,7 @@ paths:
|
|
|
2288
2395
|
- clerkSession: []
|
|
2289
2396
|
- bearerCredential: []
|
|
2290
2397
|
- bearerGrant: []
|
|
2291
|
-
-
|
|
2398
|
+
- bearerOrganizationCredential: []
|
|
2292
2399
|
x-required-scopes:
|
|
2293
2400
|
- connections:write
|
|
2294
2401
|
responses:
|
|
@@ -2348,7 +2455,7 @@ paths:
|
|
|
2348
2455
|
- clerkSession: []
|
|
2349
2456
|
- bearerCredential: []
|
|
2350
2457
|
- bearerGrant: []
|
|
2351
|
-
-
|
|
2458
|
+
- bearerOrganizationCredential: []
|
|
2352
2459
|
x-required-scopes:
|
|
2353
2460
|
- connections:write
|
|
2354
2461
|
responses:
|
|
@@ -2402,7 +2509,7 @@ paths:
|
|
|
2402
2509
|
- clerkSession: []
|
|
2403
2510
|
- bearerCredential: []
|
|
2404
2511
|
- bearerGrant: []
|
|
2405
|
-
-
|
|
2512
|
+
- bearerOrganizationCredential: []
|
|
2406
2513
|
x-required-scopes:
|
|
2407
2514
|
- connections:write
|
|
2408
2515
|
x-idempotency:
|
|
@@ -2482,7 +2589,7 @@ paths:
|
|
|
2482
2589
|
|
|
2483
2590
|
A bot the previous attempt already created is not withdrawn and cannot
|
|
2484
2591
|
be: Telegram exposes no way to delete a bot. The administrator keeps it
|
|
2485
|
-
in their own account until they retire it in BotFather, and a restart
|
|
2592
|
+
in their own Telegram account until they retire it in BotFather, and a restart
|
|
2486
2593
|
walks them through creating another rather than pretending the first
|
|
2487
2594
|
never happened.
|
|
2488
2595
|
|
|
@@ -2506,7 +2613,7 @@ paths:
|
|
|
2506
2613
|
- clerkSession: []
|
|
2507
2614
|
- bearerCredential: []
|
|
2508
2615
|
- bearerGrant: []
|
|
2509
|
-
-
|
|
2616
|
+
- bearerOrganizationCredential: []
|
|
2510
2617
|
x-required-scopes:
|
|
2511
2618
|
- connections:write
|
|
2512
2619
|
x-repeat-semantics:
|
|
@@ -2621,7 +2728,7 @@ paths:
|
|
|
2621
2728
|
- clerkSession: []
|
|
2622
2729
|
- bearerCredential: []
|
|
2623
2730
|
- bearerGrant: []
|
|
2624
|
-
-
|
|
2731
|
+
- bearerOrganizationCredential: []
|
|
2625
2732
|
x-required-scopes:
|
|
2626
2733
|
- connections:write
|
|
2627
2734
|
requestBody:
|
|
@@ -2700,7 +2807,7 @@ paths:
|
|
|
2700
2807
|
- clerkSession: []
|
|
2701
2808
|
- bearerCredential: []
|
|
2702
2809
|
- bearerGrant: []
|
|
2703
|
-
-
|
|
2810
|
+
- bearerOrganizationCredential: []
|
|
2704
2811
|
x-required-scopes:
|
|
2705
2812
|
- connections:write
|
|
2706
2813
|
responses:
|
|
@@ -2764,7 +2871,7 @@ paths:
|
|
|
2764
2871
|
- clerkSession: []
|
|
2765
2872
|
- bearerCredential: []
|
|
2766
2873
|
- bearerGrant: []
|
|
2767
|
-
-
|
|
2874
|
+
- bearerOrganizationCredential: []
|
|
2768
2875
|
x-required-scopes:
|
|
2769
2876
|
- connections:write
|
|
2770
2877
|
responses:
|
|
@@ -2806,7 +2913,7 @@ paths:
|
|
|
2806
2913
|
|
|
2807
2914
|
It exists so the owner can read what they are about to approve, and a
|
|
2808
2915
|
reviewer can check it, without opening Slack or decoding a URL. It
|
|
2809
|
-
carries configuration only: no
|
|
2916
|
+
carries configuration only: no organization, project, or environment, no
|
|
2810
2917
|
credential, and no provider-native identifier.
|
|
2811
2918
|
|
|
2812
2919
|
Only a `customer_managed` Slack connection has one. Every other
|
|
@@ -2818,7 +2925,7 @@ paths:
|
|
|
2818
2925
|
- clerkSession: []
|
|
2819
2926
|
- bearerCredential: []
|
|
2820
2927
|
- bearerGrant: []
|
|
2821
|
-
-
|
|
2928
|
+
- bearerOrganizationCredential: []
|
|
2822
2929
|
x-required-scopes:
|
|
2823
2930
|
- connections:read
|
|
2824
2931
|
responses:
|
|
@@ -2858,7 +2965,7 @@ paths:
|
|
|
2858
2965
|
- clerkSession: []
|
|
2859
2966
|
- bearerCredential: []
|
|
2860
2967
|
- bearerGrant: []
|
|
2861
|
-
-
|
|
2968
|
+
- bearerOrganizationCredential: []
|
|
2862
2969
|
x-required-scopes:
|
|
2863
2970
|
- connections:read
|
|
2864
2971
|
parameters:
|
|
@@ -2951,7 +3058,7 @@ paths:
|
|
|
2951
3058
|
- clerkSession: []
|
|
2952
3059
|
- bearerCredential: []
|
|
2953
3060
|
- bearerGrant: []
|
|
2954
|
-
-
|
|
3061
|
+
- bearerOrganizationCredential: []
|
|
2955
3062
|
x-required-scopes:
|
|
2956
3063
|
- connections:write
|
|
2957
3064
|
x-idempotency:
|
|
@@ -3024,7 +3131,7 @@ paths:
|
|
|
3024
3131
|
- clerkSession: []
|
|
3025
3132
|
- bearerCredential: []
|
|
3026
3133
|
- bearerGrant: []
|
|
3027
|
-
-
|
|
3134
|
+
- bearerOrganizationCredential: []
|
|
3028
3135
|
x-required-scopes:
|
|
3029
3136
|
- connections:read
|
|
3030
3137
|
responses:
|
|
@@ -3068,7 +3175,7 @@ paths:
|
|
|
3068
3175
|
- clerkSession: []
|
|
3069
3176
|
- bearerCredential: []
|
|
3070
3177
|
- bearerGrant: []
|
|
3071
|
-
-
|
|
3178
|
+
- bearerOrganizationCredential: []
|
|
3072
3179
|
x-required-scopes:
|
|
3073
3180
|
- connections:read
|
|
3074
3181
|
parameters:
|
|
@@ -3077,7 +3184,7 @@ paths:
|
|
|
3077
3184
|
- $ref: "#/components/parameters/PageNumber"
|
|
3078
3185
|
responses:
|
|
3079
3186
|
"200":
|
|
3080
|
-
description: Routes owned by exactly this
|
|
3187
|
+
description: Routes owned by exactly this organization, project, and environment.
|
|
3081
3188
|
headers:
|
|
3082
3189
|
WhooshBang-Diagnostic-Id:
|
|
3083
3190
|
$ref: "#/components/headers/DiagnosticId"
|
|
@@ -3133,7 +3240,7 @@ paths:
|
|
|
3133
3240
|
- clerkSession: []
|
|
3134
3241
|
- bearerCredential: []
|
|
3135
3242
|
- bearerGrant: []
|
|
3136
|
-
-
|
|
3243
|
+
- bearerOrganizationCredential: []
|
|
3137
3244
|
x-required-scopes:
|
|
3138
3245
|
- connections:write
|
|
3139
3246
|
requestBody:
|
|
@@ -3196,7 +3303,7 @@ paths:
|
|
|
3196
3303
|
- clerkSession: []
|
|
3197
3304
|
- bearerCredential: []
|
|
3198
3305
|
- bearerGrant: []
|
|
3199
|
-
-
|
|
3306
|
+
- bearerOrganizationCredential: []
|
|
3200
3307
|
x-required-scopes:
|
|
3201
3308
|
- connections:write
|
|
3202
3309
|
responses:
|
|
@@ -3232,7 +3339,7 @@ paths:
|
|
|
3232
3339
|
- bearerCredential: []
|
|
3233
3340
|
x-required-scopes:
|
|
3234
3341
|
- projects:read
|
|
3235
|
-
x-
|
|
3342
|
+
x-organization-membership: required
|
|
3236
3343
|
responses:
|
|
3237
3344
|
"200":
|
|
3238
3345
|
description: Current constrained project recipient experience.
|
|
@@ -3260,7 +3367,7 @@ paths:
|
|
|
3260
3367
|
- bearerCredential: []
|
|
3261
3368
|
x-required-scopes:
|
|
3262
3369
|
- projects:write
|
|
3263
|
-
x-
|
|
3370
|
+
x-organization-membership: required
|
|
3264
3371
|
requestBody:
|
|
3265
3372
|
required: true
|
|
3266
3373
|
content:
|
|
@@ -3305,7 +3412,7 @@ paths:
|
|
|
3305
3412
|
- bearerCredential: []
|
|
3306
3413
|
x-required-scopes:
|
|
3307
3414
|
- projects:write
|
|
3308
|
-
x-
|
|
3415
|
+
x-organization-membership: required
|
|
3309
3416
|
parameters:
|
|
3310
3417
|
- name: WhooshBang-Recipient-Experience-Version
|
|
3311
3418
|
in: header
|
|
@@ -3352,10 +3459,10 @@ paths:
|
|
|
3352
3459
|
- clerkSession: []
|
|
3353
3460
|
- bearerGrant: []
|
|
3354
3461
|
- bearerCredential: []
|
|
3355
|
-
-
|
|
3462
|
+
- bearerOrganizationCredential: []
|
|
3356
3463
|
x-required-scopes:
|
|
3357
3464
|
- projects:read
|
|
3358
|
-
x-
|
|
3465
|
+
x-organization-membership: required
|
|
3359
3466
|
responses:
|
|
3360
3467
|
"200":
|
|
3361
3468
|
description: Current revisioned environment recipient experience.
|
|
@@ -3388,10 +3495,10 @@ paths:
|
|
|
3388
3495
|
- clerkSession: []
|
|
3389
3496
|
- bearerGrant: []
|
|
3390
3497
|
- bearerCredential: []
|
|
3391
|
-
-
|
|
3498
|
+
- bearerOrganizationCredential: []
|
|
3392
3499
|
x-required-scopes:
|
|
3393
3500
|
- projects:write
|
|
3394
|
-
x-
|
|
3501
|
+
x-organization-membership: required
|
|
3395
3502
|
requestBody:
|
|
3396
3503
|
required: true
|
|
3397
3504
|
content:
|
|
@@ -3423,7 +3530,7 @@ paths:
|
|
|
3423
3530
|
operationId: createRecipientSession
|
|
3424
3531
|
summary: Create one attenuated recipient browser session
|
|
3425
3532
|
description: |
|
|
3426
|
-
The authenticated project credential supplies
|
|
3533
|
+
The authenticated project credential supplies organization, project, and
|
|
3427
3534
|
environment. The request supplies only one subscriber, optional locale,
|
|
3428
3535
|
optional registered return key, and bounded expiry. The response is the
|
|
3429
3536
|
only reveal of the browser capability and contains no resolved return
|
|
@@ -3494,7 +3601,7 @@ paths:
|
|
|
3494
3601
|
Repeating the request is safe. An already revoked, absent, or
|
|
3495
3602
|
out-of-scope session produces the same empty response, so this route
|
|
3496
3603
|
cannot be used to enumerate session identifiers across environments or
|
|
3497
|
-
|
|
3604
|
+
organizations.
|
|
3498
3605
|
tags:
|
|
3499
3606
|
- Recipient experience
|
|
3500
3607
|
security:
|
|
@@ -4231,7 +4338,7 @@ paths:
|
|
|
4231
4338
|
summary: Create a subscription link in a named project environment
|
|
4232
4339
|
description: |
|
|
4233
4340
|
The environment-scoped form of `createSubscriptionLink`, for a caller
|
|
4234
|
-
whose authority selects an
|
|
4341
|
+
whose authority selects an organization rather than a project. Behavior,
|
|
4235
4342
|
request, and response are identical; the path names the scope the
|
|
4236
4343
|
credential form takes from its bearer, and the service checks it
|
|
4237
4344
|
against the granting person's membership before acting.
|
|
@@ -4239,14 +4346,14 @@ paths:
|
|
|
4239
4346
|
- Subscription links
|
|
4240
4347
|
security:
|
|
4241
4348
|
- bearerGrant: []
|
|
4242
|
-
-
|
|
4349
|
+
- bearerOrganizationCredential: []
|
|
4243
4350
|
x-required-scopes:
|
|
4244
4351
|
- subscriptions:write
|
|
4245
4352
|
x-idempotency:
|
|
4246
4353
|
required: true
|
|
4247
4354
|
retention_seconds: 604800
|
|
4248
4355
|
scope:
|
|
4249
|
-
-
|
|
4356
|
+
- authenticated_organization
|
|
4250
4357
|
- operation_id
|
|
4251
4358
|
- key
|
|
4252
4359
|
equivalence: validated_request
|
|
@@ -4299,7 +4406,7 @@ paths:
|
|
|
4299
4406
|
- Subscription links
|
|
4300
4407
|
security:
|
|
4301
4408
|
- bearerGrant: []
|
|
4302
|
-
-
|
|
4409
|
+
- bearerOrganizationCredential: []
|
|
4303
4410
|
x-required-scopes:
|
|
4304
4411
|
- subscriptions:read
|
|
4305
4412
|
responses:
|
|
@@ -4332,21 +4439,21 @@ paths:
|
|
|
4332
4439
|
summary: Create an asynchronous message in a named project environment
|
|
4333
4440
|
description: |
|
|
4334
4441
|
The environment-scoped form of `createMessage`. The path names the
|
|
4335
|
-
|
|
4442
|
+
organization, project, and environment the credential form takes from its
|
|
4336
4443
|
bearer; test and live remain a property of the named environment and are
|
|
4337
4444
|
never selected by the request body.
|
|
4338
4445
|
tags:
|
|
4339
4446
|
- Messages
|
|
4340
4447
|
security:
|
|
4341
4448
|
- bearerGrant: []
|
|
4342
|
-
-
|
|
4449
|
+
- bearerOrganizationCredential: []
|
|
4343
4450
|
x-required-scopes:
|
|
4344
4451
|
- messages:write
|
|
4345
4452
|
x-idempotency:
|
|
4346
4453
|
required: true
|
|
4347
4454
|
retention_seconds: 604800
|
|
4348
4455
|
scope:
|
|
4349
|
-
-
|
|
4456
|
+
- authenticated_organization
|
|
4350
4457
|
- operation_id
|
|
4351
4458
|
- key
|
|
4352
4459
|
equivalence: validated_request
|
|
@@ -4404,7 +4511,7 @@ paths:
|
|
|
4404
4511
|
- Messages
|
|
4405
4512
|
security:
|
|
4406
4513
|
- bearerGrant: []
|
|
4407
|
-
-
|
|
4514
|
+
- bearerOrganizationCredential: []
|
|
4408
4515
|
x-required-scopes:
|
|
4409
4516
|
- messages:read
|
|
4410
4517
|
responses:
|
|
@@ -4447,7 +4554,7 @@ paths:
|
|
|
4447
4554
|
- Messages
|
|
4448
4555
|
security:
|
|
4449
4556
|
- bearerGrant: []
|
|
4450
|
-
-
|
|
4557
|
+
- bearerOrganizationCredential: []
|
|
4451
4558
|
x-required-scopes:
|
|
4452
4559
|
- messages:read
|
|
4453
4560
|
responses:
|
|
@@ -4487,14 +4594,14 @@ paths:
|
|
|
4487
4594
|
- Machine clients
|
|
4488
4595
|
security:
|
|
4489
4596
|
- bearerGrant: []
|
|
4490
|
-
-
|
|
4597
|
+
- bearerOrganizationCredential: []
|
|
4491
4598
|
x-required-scopes:
|
|
4492
4599
|
- machine-clients:write
|
|
4493
4600
|
x-idempotency:
|
|
4494
4601
|
required: true
|
|
4495
4602
|
retention_seconds: 604800
|
|
4496
4603
|
scope:
|
|
4497
|
-
-
|
|
4604
|
+
- authenticated_organization
|
|
4498
4605
|
- operation_id
|
|
4499
4606
|
- key
|
|
4500
4607
|
equivalence: validated_request
|
|
@@ -4551,7 +4658,7 @@ paths:
|
|
|
4551
4658
|
- Machine clients
|
|
4552
4659
|
security:
|
|
4553
4660
|
- bearerGrant: []
|
|
4554
|
-
-
|
|
4661
|
+
- bearerOrganizationCredential: []
|
|
4555
4662
|
x-required-scopes:
|
|
4556
4663
|
- machine-clients:write
|
|
4557
4664
|
x-idempotency:
|
|
@@ -4617,7 +4724,7 @@ paths:
|
|
|
4617
4724
|
- Capabilities
|
|
4618
4725
|
security:
|
|
4619
4726
|
- bearerGrant: []
|
|
4620
|
-
-
|
|
4727
|
+
- bearerOrganizationCredential: []
|
|
4621
4728
|
x-required-scopes:
|
|
4622
4729
|
- capabilities:read
|
|
4623
4730
|
responses:
|
|
@@ -4650,7 +4757,7 @@ paths:
|
|
|
4650
4757
|
summary: Create a subscriber and initial memberships in a named project environment
|
|
4651
4758
|
description: |
|
|
4652
4759
|
The environment-scoped form of `createSubscriber`, for a caller whose
|
|
4653
|
-
authority selects an
|
|
4760
|
+
authority selects an organization rather than a project. Behavior, request,
|
|
4654
4761
|
and response are identical; the path names the scope the credential
|
|
4655
4762
|
form takes from its bearer, and the service checks it against the
|
|
4656
4763
|
presenting session or grant before acting.
|
|
@@ -4660,7 +4767,7 @@ paths:
|
|
|
4660
4767
|
- clerkSession: []
|
|
4661
4768
|
- bearerCredential: []
|
|
4662
4769
|
- bearerGrant: []
|
|
4663
|
-
-
|
|
4770
|
+
- bearerOrganizationCredential: []
|
|
4664
4771
|
x-required-scopes:
|
|
4665
4772
|
- subscriptions:write
|
|
4666
4773
|
x-idempotency:
|
|
@@ -4724,7 +4831,7 @@ paths:
|
|
|
4724
4831
|
- clerkSession: []
|
|
4725
4832
|
- bearerCredential: []
|
|
4726
4833
|
- bearerGrant: []
|
|
4727
|
-
-
|
|
4834
|
+
- bearerOrganizationCredential: []
|
|
4728
4835
|
x-required-scopes:
|
|
4729
4836
|
- subscriptions:read
|
|
4730
4837
|
responses:
|
|
@@ -4740,6 +4847,103 @@ paths:
|
|
|
4740
4847
|
$ref: "#/components/responses/Forbidden"
|
|
4741
4848
|
"404":
|
|
4742
4849
|
$ref: "#/components/responses/NotFound"
|
|
4850
|
+
/v1/projects/{project_id}/subscribers/{subscriber_id}:
|
|
4851
|
+
parameters:
|
|
4852
|
+
- $ref: "#/components/parameters/ProjectId"
|
|
4853
|
+
- name: subscriber_id
|
|
4854
|
+
in: path
|
|
4855
|
+
required: true
|
|
4856
|
+
schema:
|
|
4857
|
+
$ref: "#/components/schemas/OpaqueIdentifier"
|
|
4858
|
+
delete:
|
|
4859
|
+
operationId: eraseSubscriber
|
|
4860
|
+
summary: Erase one subscriber across the project
|
|
4861
|
+
description: |
|
|
4862
|
+
Erases the person represented by this customer-supplied subscriber id
|
|
4863
|
+
across both project environments. Personal content, answers, identities,
|
|
4864
|
+
and identifiers are removed while non-identifying delivery and usage
|
|
4865
|
+
shells remain. Pending work and old capabilities cannot restore or send
|
|
4866
|
+
data for the erased person.
|
|
4867
|
+
|
|
4868
|
+
Repeating the operation is safe, including when the subscriber is already
|
|
4869
|
+
absent. Project-environment credentials cannot call this project-wide
|
|
4870
|
+
operation. A provider action that has already begun returns
|
|
4871
|
+
`privacy_operation_in_progress` rather than claiming erasure won the race;
|
|
4872
|
+
retry after that operation finishes.
|
|
4873
|
+
tags:
|
|
4874
|
+
- Subscribers
|
|
4875
|
+
security:
|
|
4876
|
+
- clerkSession: []
|
|
4877
|
+
- bearerGrant: []
|
|
4878
|
+
- bearerOrganizationCredential: []
|
|
4879
|
+
x-required-scopes:
|
|
4880
|
+
- subscriptions:write
|
|
4881
|
+
- messages:write
|
|
4882
|
+
- machine-clients:write
|
|
4883
|
+
x-organization-membership: required
|
|
4884
|
+
x-repeat-semantics:
|
|
4885
|
+
same_target: idempotent
|
|
4886
|
+
secret_returned: false
|
|
4887
|
+
responses:
|
|
4888
|
+
"204":
|
|
4889
|
+
description: The subscriber's personal data is erased or was already absent.
|
|
4890
|
+
"401":
|
|
4891
|
+
$ref: "#/components/responses/Unauthorized"
|
|
4892
|
+
"403":
|
|
4893
|
+
$ref: "#/components/responses/Forbidden"
|
|
4894
|
+
"404":
|
|
4895
|
+
$ref: "#/components/responses/NotFound"
|
|
4896
|
+
"409":
|
|
4897
|
+
$ref: "#/components/responses/Conflict"
|
|
4898
|
+
"429":
|
|
4899
|
+
$ref: "#/components/responses/RateLimited"
|
|
4900
|
+
/v1/projects/{project_id}/subscribers/{subscriber_id}/data-export:
|
|
4901
|
+
parameters:
|
|
4902
|
+
- $ref: "#/components/parameters/ProjectId"
|
|
4903
|
+
- name: subscriber_id
|
|
4904
|
+
in: path
|
|
4905
|
+
required: true
|
|
4906
|
+
schema:
|
|
4907
|
+
$ref: "#/components/schemas/OpaqueIdentifier"
|
|
4908
|
+
get:
|
|
4909
|
+
operationId: getSubscriberDataExport
|
|
4910
|
+
summary: Export all customer-controlled data held for one subscriber
|
|
4911
|
+
description: |
|
|
4912
|
+
Returns one complete, machine-readable artifact across every environment
|
|
4913
|
+
in the project. `provided_by_subscriber` is the Article 20 portable subset;
|
|
4914
|
+
the three provenance sections together provide the Article 15 access copy.
|
|
4915
|
+
WhooshBang-controller audit and service log data is identified as excluded
|
|
4916
|
+
and requires a separate recipient request. Project-environment credentials
|
|
4917
|
+
cannot call this project-wide operation.
|
|
4918
|
+
tags:
|
|
4919
|
+
- Subscribers
|
|
4920
|
+
security:
|
|
4921
|
+
- clerkSession: []
|
|
4922
|
+
- bearerGrant: []
|
|
4923
|
+
- bearerOrganizationCredential: []
|
|
4924
|
+
x-required-scopes:
|
|
4925
|
+
- subscriptions:read
|
|
4926
|
+
- messages:read
|
|
4927
|
+
- machine-clients:read
|
|
4928
|
+
x-organization-membership: required
|
|
4929
|
+
responses:
|
|
4930
|
+
"200":
|
|
4931
|
+
description: Complete project-wide customer-controller subscriber data export.
|
|
4932
|
+
headers:
|
|
4933
|
+
Content-Disposition:
|
|
4934
|
+
schema:
|
|
4935
|
+
type: string
|
|
4936
|
+
description: Fixed safe attachment filename.
|
|
4937
|
+
content:
|
|
4938
|
+
application/json:
|
|
4939
|
+
schema:
|
|
4940
|
+
$ref: "#/components/schemas/SubscriberDataExport"
|
|
4941
|
+
"401":
|
|
4942
|
+
$ref: "#/components/responses/Unauthorized"
|
|
4943
|
+
"403":
|
|
4944
|
+
$ref: "#/components/responses/Forbidden"
|
|
4945
|
+
"404":
|
|
4946
|
+
$ref: "#/components/responses/NotFound"
|
|
4743
4947
|
/v1/projects/{project_id}/environments/{environment_id}/recipient-groups:
|
|
4744
4948
|
parameters:
|
|
4745
4949
|
- $ref: "#/components/parameters/ProjectId"
|
|
@@ -4757,7 +4961,7 @@ paths:
|
|
|
4757
4961
|
- clerkSession: []
|
|
4758
4962
|
- bearerCredential: []
|
|
4759
4963
|
- bearerGrant: []
|
|
4760
|
-
-
|
|
4964
|
+
- bearerOrganizationCredential: []
|
|
4761
4965
|
x-required-scopes:
|
|
4762
4966
|
- subscriptions:read
|
|
4763
4967
|
parameters:
|
|
@@ -4803,7 +5007,7 @@ paths:
|
|
|
4803
5007
|
- clerkSession: []
|
|
4804
5008
|
- bearerCredential: []
|
|
4805
5009
|
- bearerGrant: []
|
|
4806
|
-
-
|
|
5010
|
+
- bearerOrganizationCredential: []
|
|
4807
5011
|
x-required-scopes:
|
|
4808
5012
|
- subscriptions:write
|
|
4809
5013
|
x-idempotency:
|
|
@@ -4868,7 +5072,7 @@ paths:
|
|
|
4868
5072
|
- clerkSession: []
|
|
4869
5073
|
- bearerCredential: []
|
|
4870
5074
|
- bearerGrant: []
|
|
4871
|
-
-
|
|
5075
|
+
- bearerOrganizationCredential: []
|
|
4872
5076
|
x-required-scopes:
|
|
4873
5077
|
- subscriptions:read
|
|
4874
5078
|
responses:
|
|
@@ -4896,7 +5100,7 @@ paths:
|
|
|
4896
5100
|
- clerkSession: []
|
|
4897
5101
|
- bearerCredential: []
|
|
4898
5102
|
- bearerGrant: []
|
|
4899
|
-
-
|
|
5103
|
+
- bearerOrganizationCredential: []
|
|
4900
5104
|
x-required-scopes:
|
|
4901
5105
|
- subscriptions:write
|
|
4902
5106
|
requestBody:
|
|
@@ -4935,7 +5139,7 @@ paths:
|
|
|
4935
5139
|
- clerkSession: []
|
|
4936
5140
|
- bearerCredential: []
|
|
4937
5141
|
- bearerGrant: []
|
|
4938
|
-
-
|
|
5142
|
+
- bearerOrganizationCredential: []
|
|
4939
5143
|
x-required-scopes:
|
|
4940
5144
|
- subscriptions:write
|
|
4941
5145
|
responses:
|
|
@@ -4976,7 +5180,7 @@ paths:
|
|
|
4976
5180
|
- clerkSession: []
|
|
4977
5181
|
- bearerCredential: []
|
|
4978
5182
|
- bearerGrant: []
|
|
4979
|
-
-
|
|
5183
|
+
- bearerOrganizationCredential: []
|
|
4980
5184
|
x-required-scopes:
|
|
4981
5185
|
- subscriptions:read
|
|
4982
5186
|
parameters:
|
|
@@ -5044,7 +5248,7 @@ paths:
|
|
|
5044
5248
|
- clerkSession: []
|
|
5045
5249
|
- bearerCredential: []
|
|
5046
5250
|
- bearerGrant: []
|
|
5047
|
-
-
|
|
5251
|
+
- bearerOrganizationCredential: []
|
|
5048
5252
|
x-required-scopes:
|
|
5049
5253
|
- subscriptions:write
|
|
5050
5254
|
responses:
|
|
@@ -5078,7 +5282,7 @@ paths:
|
|
|
5078
5282
|
- clerkSession: []
|
|
5079
5283
|
- bearerCredential: []
|
|
5080
5284
|
- bearerGrant: []
|
|
5081
|
-
-
|
|
5285
|
+
- bearerOrganizationCredential: []
|
|
5082
5286
|
x-required-scopes:
|
|
5083
5287
|
- subscriptions:write
|
|
5084
5288
|
responses:
|
|
@@ -5118,7 +5322,7 @@ paths:
|
|
|
5118
5322
|
- clerkSession: []
|
|
5119
5323
|
- bearerCredential: []
|
|
5120
5324
|
- bearerGrant: []
|
|
5121
|
-
-
|
|
5325
|
+
- bearerOrganizationCredential: []
|
|
5122
5326
|
x-required-scopes:
|
|
5123
5327
|
- messages:write
|
|
5124
5328
|
x-idempotency:
|
|
@@ -5183,7 +5387,7 @@ paths:
|
|
|
5183
5387
|
- clerkSession: []
|
|
5184
5388
|
- bearerCredential: []
|
|
5185
5389
|
- bearerGrant: []
|
|
5186
|
-
-
|
|
5390
|
+
- bearerOrganizationCredential: []
|
|
5187
5391
|
x-required-scopes:
|
|
5188
5392
|
- messages:read
|
|
5189
5393
|
responses:
|
|
@@ -5210,8 +5414,8 @@ components:
|
|
|
5210
5414
|
bearerFormat: Clerk session JWT
|
|
5211
5415
|
description: |
|
|
5212
5416
|
A verified human session whose active Clerk organization selects exactly
|
|
5213
|
-
one WhooshBang
|
|
5214
|
-
projected
|
|
5417
|
+
one WhooshBang organization. Every administration operation rechecks the
|
|
5418
|
+
projected organization membership; session identity never selects a project
|
|
5215
5419
|
or environment from request data.
|
|
5216
5420
|
bearerGrant:
|
|
5217
5421
|
type: http
|
|
@@ -5219,27 +5423,27 @@ components:
|
|
|
5219
5423
|
bearerFormat: OAuth 2.0 access token
|
|
5220
5424
|
description: |
|
|
5221
5425
|
An access token issued by the WhooshBang authorization server for one
|
|
5222
|
-
consenting
|
|
5426
|
+
consenting organization member. It selects exactly one organization and carries
|
|
5223
5427
|
the scopes that member consented to, and never a project: an operation
|
|
5224
5428
|
names its project and environment in the path, and the service checks
|
|
5225
5429
|
both against the granting person's membership before acting. A project
|
|
5226
|
-
credential can name no project but its own; an
|
|
5430
|
+
credential can name no project but its own; an organization credential names
|
|
5227
5431
|
one per call the same way this does.
|
|
5228
|
-
|
|
5432
|
+
bearerOrganizationCredential:
|
|
5229
5433
|
type: http
|
|
5230
5434
|
scheme: bearer
|
|
5231
|
-
bearerFormat:
|
|
5435
|
+
bearerFormat: wb_oc1.ocred_<16-byte-base64url>.<32-byte-base64url-secret>
|
|
5232
5436
|
description: |
|
|
5233
|
-
Selects exactly one
|
|
5437
|
+
Selects exactly one organization and nothing below it. It names no project
|
|
5234
5438
|
and no environment, so it authenticates only operations whose path does,
|
|
5235
5439
|
and its authority there is the intersection of its scopes with the
|
|
5236
5440
|
project-credential vocabulary — never wider than a project credential
|
|
5237
5441
|
would have been for the same project environment. A path naming a
|
|
5238
|
-
project outside its
|
|
5239
|
-
rather than a bare scope failure. `
|
|
5442
|
+
project outside its organization is refused with `credential_organization_mismatch`
|
|
5443
|
+
rather than a bare scope failure. `organization:read` is the one scope it can
|
|
5240
5444
|
hold that a project credential cannot, and it authorizes only the
|
|
5241
|
-
|
|
5242
|
-
one, which is the
|
|
5445
|
+
organization's project directory: listing the organization's projects and reading
|
|
5446
|
+
one, which is the organization-wide question a project credential cannot ask
|
|
5243
5447
|
and the reason a `--project <slug>` selector can work at all. It is
|
|
5244
5448
|
required *in addition to* each of those operations' own
|
|
5245
5449
|
`x-required-scopes`, never instead of them.
|
|
@@ -5249,7 +5453,7 @@ components:
|
|
|
5249
5453
|
scheme: bearer
|
|
5250
5454
|
bearerFormat: wb_pc1.pcred_<16-byte-base64url>.<32-byte-base64url-secret>
|
|
5251
5455
|
description: |
|
|
5252
|
-
Selects exactly one
|
|
5456
|
+
Selects exactly one organization, project, and `test` or `live` environment.
|
|
5253
5457
|
Credentials cannot be read after creation. Except for explicitly
|
|
5254
5458
|
synthetic creation/rotation reveal fixtures, complete bearer values
|
|
5255
5459
|
must never appear in fixtures, errors, logs, metrics, or inspection
|
|
@@ -5269,7 +5473,7 @@ components:
|
|
|
5269
5473
|
name: WhooshBang-Recipient-Capability
|
|
5270
5474
|
description: |
|
|
5271
5475
|
A creation-only, short-lived capability bound server-side to one exact
|
|
5272
|
-
|
|
5476
|
+
organization, project, environment, subscriber, configuration revision,
|
|
5273
5477
|
presenting origin, and registered return destination. It is accepted
|
|
5274
5478
|
only on the `/v1/recipient-session` browser surface and never as bearer
|
|
5275
5479
|
authority on an ordinary application route.
|
|
@@ -5312,13 +5516,13 @@ components:
|
|
|
5312
5516
|
description: Canonical opaque project credential identity; never a readable secret.
|
|
5313
5517
|
schema:
|
|
5314
5518
|
$ref: "#/components/schemas/ApiCredentialId"
|
|
5315
|
-
|
|
5316
|
-
name:
|
|
5519
|
+
OrganizationCredentialId:
|
|
5520
|
+
name: organization_credential_id
|
|
5317
5521
|
in: path
|
|
5318
5522
|
required: true
|
|
5319
|
-
description: Canonical opaque
|
|
5523
|
+
description: Canonical opaque organization credential identity; never a readable secret.
|
|
5320
5524
|
schema:
|
|
5321
|
-
$ref: "#/components/schemas/
|
|
5525
|
+
$ref: "#/components/schemas/OrganizationCredentialId"
|
|
5322
5526
|
ApiCredentialAfterCursor:
|
|
5323
5527
|
name: after
|
|
5324
5528
|
in: query
|
|
@@ -5575,8 +5779,12 @@ components:
|
|
|
5575
5779
|
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/DiagnosticId
|
|
5576
5780
|
IdempotencyKey:
|
|
5577
5781
|
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/IdempotencyKey
|
|
5578
|
-
|
|
5579
|
-
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/
|
|
5782
|
+
OrganizationProjection:
|
|
5783
|
+
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/OrganizationProjection
|
|
5784
|
+
UpdateProjectRequest:
|
|
5785
|
+
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/UpdateProjectRequest
|
|
5786
|
+
PrivacyMode:
|
|
5787
|
+
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/PrivacyMode
|
|
5580
5788
|
CreateProjectRequest:
|
|
5581
5789
|
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/CreateProjectRequest
|
|
5582
5790
|
DefaultNotifierSummary:
|
|
@@ -5599,20 +5807,20 @@ components:
|
|
|
5599
5807
|
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/UpdateRecipientCopyOverrideRequest
|
|
5600
5808
|
CreateApiCredentialRequest:
|
|
5601
5809
|
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/CreateApiCredentialRequest
|
|
5602
|
-
|
|
5603
|
-
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/
|
|
5604
|
-
|
|
5605
|
-
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/
|
|
5606
|
-
|
|
5607
|
-
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/
|
|
5608
|
-
|
|
5609
|
-
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/
|
|
5610
|
-
|
|
5611
|
-
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/
|
|
5612
|
-
|
|
5613
|
-
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/
|
|
5614
|
-
|
|
5615
|
-
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/
|
|
5810
|
+
CreateOrganizationCredentialRequest:
|
|
5811
|
+
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/CreateOrganizationCredentialRequest
|
|
5812
|
+
RotateOrganizationCredentialRequest:
|
|
5813
|
+
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/RotateOrganizationCredentialRequest
|
|
5814
|
+
OrganizationCredentialId:
|
|
5815
|
+
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/OrganizationCredentialId
|
|
5816
|
+
OrganizationCredential:
|
|
5817
|
+
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/OrganizationCredential
|
|
5818
|
+
OrganizationCredentialCollection:
|
|
5819
|
+
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/OrganizationCredentialCollection
|
|
5820
|
+
OrganizationCredentialSecretReveal:
|
|
5821
|
+
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/OrganizationCredentialSecretReveal
|
|
5822
|
+
OrganizationCredentialRotation:
|
|
5823
|
+
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/OrganizationCredentialRotation
|
|
5616
5824
|
RotateApiCredentialRequest:
|
|
5617
5825
|
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/RotateApiCredentialRequest
|
|
5618
5826
|
ApiCredentialId:
|
|
@@ -5725,6 +5933,12 @@ components:
|
|
|
5725
5933
|
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/CreateSubscriberRequest
|
|
5726
5934
|
Subscriber:
|
|
5727
5935
|
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/Subscriber
|
|
5936
|
+
SubscriberDataExport:
|
|
5937
|
+
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/SubscriberDataExport
|
|
5938
|
+
CloseOrganizationRequest:
|
|
5939
|
+
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/CloseOrganizationRequest
|
|
5940
|
+
OrganizationClosureResult:
|
|
5941
|
+
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/OrganizationClosureResult
|
|
5728
5942
|
CreateRecipientGroupRequest:
|
|
5729
5943
|
$ref: ../schemas/whooshbang-v1.schema.json#/$defs/CreateRecipientGroupRequest
|
|
5730
5944
|
UpdateRecipientGroupRequest:
|
|
@@ -5804,7 +6018,7 @@ components:
|
|
|
5804
6018
|
description: |
|
|
5805
6019
|
An idempotency key, project slug, credential identity, existing
|
|
5806
6020
|
acknowledgement, or resource state conflicts with the authorized
|
|
5807
|
-
|
|
6021
|
+
organization or request.
|
|
5808
6022
|
headers:
|
|
5809
6023
|
WhooshBang-Diagnostic-Id:
|
|
5810
6024
|
$ref: "#/components/headers/DiagnosticId"
|