@rathnasgala2/schemas 3.5.0 → 3.7.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.
@@ -141,6 +141,224 @@ components:
141
141
  minLength: 32
142
142
  type: string
143
143
  responses:
144
+ AuthorizationDenied:
145
+ content:
146
+ application/problem+json:
147
+ examples:
148
+ AUTHORIZATION_DENIED:
149
+ summary: AUTHORIZATION_DENIED
150
+ value:
151
+ code: AUTHORIZATION_DENIED
152
+ correlationId: 018f0000-0000-7000-8000-000000000001
153
+ detail: See the operation contract.
154
+ errors: []
155
+ retryable: false
156
+ schemaId: urn:gala:schema:problem:2.0.0
157
+ schemaVersion: 2.0.0
158
+ status: 403
159
+ title: AUTHORIZATION_DENIED
160
+ type: urn:gala:problem:authorization-denied
161
+ schema:
162
+ $ref: "#/components/schemas/Problem"
163
+ description: AUTHORIZATION_DENIED
164
+ headers:
165
+ Cache-Control:
166
+ $ref: "#/components/headers/CacheControlNoStore"
167
+ X-Correlation-Id:
168
+ $ref: "#/components/headers/XCorrelationId"
169
+ x-gala-problem-codes:
170
+ - AUTHORIZATION_DENIED
171
+ CommandReplayConflict:
172
+ content:
173
+ application/problem+json:
174
+ examples:
175
+ COMMAND_REPLAY_CONFLICT:
176
+ summary: COMMAND_REPLAY_CONFLICT
177
+ value:
178
+ code: COMMAND_REPLAY_CONFLICT
179
+ correlationId: 018f0000-0000-7000-8000-000000000001
180
+ detail: See the operation contract.
181
+ errors: []
182
+ retryable: false
183
+ schemaId: urn:gala:schema:problem:2.0.0
184
+ schemaVersion: 2.0.0
185
+ status: 409
186
+ title: COMMAND_REPLAY_CONFLICT
187
+ type: urn:gala:problem:command-replay-conflict
188
+ schema:
189
+ $ref: "#/components/schemas/Problem"
190
+ description: COMMAND_REPLAY_CONFLICT
191
+ headers:
192
+ Cache-Control:
193
+ $ref: "#/components/headers/CacheControlNoStore"
194
+ X-Correlation-Id:
195
+ $ref: "#/components/headers/XCorrelationId"
196
+ x-gala-problem-codes:
197
+ - COMMAND_REPLAY_CONFLICT
198
+ InvalidDecisionCommandConflict:
199
+ content:
200
+ application/problem+json:
201
+ examples:
202
+ COMMAND_REPLAY_CONFLICT:
203
+ summary: COMMAND_REPLAY_CONFLICT
204
+ value:
205
+ code: COMMAND_REPLAY_CONFLICT
206
+ correlationId: 018f0000-0000-7000-8000-000000000001
207
+ detail: See the operation contract.
208
+ errors: []
209
+ retryable: false
210
+ schemaId: urn:gala:schema:problem:2.0.0
211
+ schemaVersion: 2.0.0
212
+ status: 409
213
+ title: COMMAND_REPLAY_CONFLICT
214
+ type: urn:gala:problem:command-replay-conflict
215
+ INVALID_DECISION:
216
+ summary: INVALID_DECISION
217
+ value:
218
+ code: INVALID_DECISION
219
+ correlationId: 018f0000-0000-7000-8000-000000000001
220
+ detail: See the operation contract.
221
+ errors: []
222
+ retryable: false
223
+ schemaId: urn:gala:schema:problem:2.0.0
224
+ schemaVersion: 2.0.0
225
+ status: 409
226
+ title: INVALID_DECISION
227
+ type: urn:gala:problem:invalid-decision
228
+ schema:
229
+ $ref: "#/components/schemas/Problem"
230
+ description: COMMAND_REPLAY_CONFLICT, INVALID_DECISION
231
+ headers:
232
+ Cache-Control:
233
+ $ref: "#/components/headers/CacheControlNoStore"
234
+ X-Correlation-Id:
235
+ $ref: "#/components/headers/XCorrelationId"
236
+ x-gala-problem-codes:
237
+ - COMMAND_REPLAY_CONFLICT
238
+ - INVALID_DECISION
239
+ InvalidSourceStateCommandConflict:
240
+ content:
241
+ application/problem+json:
242
+ examples:
243
+ COMMAND_REPLAY_CONFLICT:
244
+ summary: COMMAND_REPLAY_CONFLICT
245
+ value:
246
+ code: COMMAND_REPLAY_CONFLICT
247
+ correlationId: 018f0000-0000-7000-8000-000000000001
248
+ detail: See the operation contract.
249
+ errors: []
250
+ retryable: false
251
+ schemaId: urn:gala:schema:problem:2.0.0
252
+ schemaVersion: 2.0.0
253
+ status: 409
254
+ title: COMMAND_REPLAY_CONFLICT
255
+ type: urn:gala:problem:command-replay-conflict
256
+ INVALID_SOURCE_STATE:
257
+ summary: INVALID_SOURCE_STATE
258
+ value:
259
+ code: INVALID_SOURCE_STATE
260
+ correlationId: 018f0000-0000-7000-8000-000000000001
261
+ detail: See the operation contract.
262
+ errors: []
263
+ retryable: false
264
+ schemaId: urn:gala:schema:problem:2.0.0
265
+ schemaVersion: 2.0.0
266
+ status: 409
267
+ title: INVALID_SOURCE_STATE
268
+ type: urn:gala:problem:invalid-source-state
269
+ schema:
270
+ $ref: "#/components/schemas/Problem"
271
+ description: COMMAND_REPLAY_CONFLICT, INVALID_SOURCE_STATE
272
+ headers:
273
+ Cache-Control:
274
+ $ref: "#/components/headers/CacheControlNoStore"
275
+ X-Correlation-Id:
276
+ $ref: "#/components/headers/XCorrelationId"
277
+ x-gala-problem-codes:
278
+ - COMMAND_REPLAY_CONFLICT
279
+ - INVALID_SOURCE_STATE
280
+ PlatformAuthenticationRequired:
281
+ content:
282
+ application/problem+json:
283
+ examples:
284
+ AUTHENTICATION_REQUIRED:
285
+ summary: AUTHENTICATION_REQUIRED
286
+ value:
287
+ code: AUTHENTICATION_REQUIRED
288
+ correlationId: 018f0000-0000-7000-8000-000000000001
289
+ detail: See the operation contract.
290
+ errors: []
291
+ retryable: false
292
+ schemaId: urn:gala:schema:problem:2.0.0
293
+ schemaVersion: 2.0.0
294
+ status: 401
295
+ title: AUTHENTICATION_REQUIRED
296
+ type: urn:gala:problem:authentication-required
297
+ REAUTH_REQUIRED:
298
+ summary: REAUTH_REQUIRED
299
+ value:
300
+ code: REAUTH_REQUIRED
301
+ correlationId: 018f0000-0000-7000-8000-000000000001
302
+ detail: See the operation contract.
303
+ errors: []
304
+ retryable: false
305
+ schemaId: urn:gala:schema:problem:2.0.0
306
+ schemaVersion: 2.0.0
307
+ status: 401
308
+ title: REAUTH_REQUIRED
309
+ type: urn:gala:problem:reauth-required
310
+ schema:
311
+ $ref: "#/components/schemas/Problem"
312
+ description: AUTHENTICATION_REQUIRED, REAUTH_REQUIRED
313
+ headers:
314
+ Cache-Control:
315
+ $ref: "#/components/headers/CacheControlNoStore"
316
+ X-Correlation-Id:
317
+ $ref: "#/components/headers/XCorrelationId"
318
+ x-gala-problem-codes:
319
+ - AUTHENTICATION_REQUIRED
320
+ - REAUTH_REQUIRED
321
+ RequestInvalid:
322
+ content:
323
+ application/problem+json:
324
+ examples:
325
+ REQUEST_FIELD_UNKNOWN:
326
+ summary: REQUEST_FIELD_UNKNOWN
327
+ value:
328
+ code: REQUEST_FIELD_UNKNOWN
329
+ correlationId: 018f0000-0000-7000-8000-000000000001
330
+ detail: See the operation contract.
331
+ errors: []
332
+ retryable: false
333
+ schemaId: urn:gala:schema:problem:2.0.0
334
+ schemaVersion: 2.0.0
335
+ status: 400
336
+ title: REQUEST_FIELD_UNKNOWN
337
+ type: urn:gala:problem:request-field-unknown
338
+ VALIDATION_FAILED:
339
+ summary: VALIDATION_FAILED
340
+ value:
341
+ code: VALIDATION_FAILED
342
+ correlationId: 018f0000-0000-7000-8000-000000000001
343
+ detail: See the operation contract.
344
+ errors: []
345
+ retryable: false
346
+ schemaId: urn:gala:schema:problem:2.0.0
347
+ schemaVersion: 2.0.0
348
+ status: 400
349
+ title: VALIDATION_FAILED
350
+ type: urn:gala:problem:validation-failed
351
+ schema:
352
+ $ref: "#/components/schemas/Problem"
353
+ description: REQUEST_FIELD_UNKNOWN, VALIDATION_FAILED
354
+ headers:
355
+ Cache-Control:
356
+ $ref: "#/components/headers/CacheControlNoStore"
357
+ X-Correlation-Id:
358
+ $ref: "#/components/headers/XCorrelationId"
359
+ x-gala-problem-codes:
360
+ - REQUEST_FIELD_UNKNOWN
361
+ - VALIDATION_FAILED
144
362
  RequestTooLarge:
145
363
  content:
146
364
  application/problem+json:
@@ -168,6 +386,60 @@ components:
168
386
  $ref: "#/components/headers/XCorrelationId"
169
387
  x-gala-problem-codes:
170
388
  - VALIDATION_FAILED
389
+ ResourceNotFound:
390
+ content:
391
+ application/problem+json:
392
+ examples:
393
+ RESOURCE_NOT_FOUND:
394
+ summary: RESOURCE_NOT_FOUND
395
+ value:
396
+ code: RESOURCE_NOT_FOUND
397
+ correlationId: 018f0000-0000-7000-8000-000000000001
398
+ detail: See the operation contract.
399
+ errors: []
400
+ retryable: false
401
+ schemaId: urn:gala:schema:problem:2.0.0
402
+ schemaVersion: 2.0.0
403
+ status: 404
404
+ title: RESOURCE_NOT_FOUND
405
+ type: urn:gala:problem:resource-not-found
406
+ schema:
407
+ $ref: "#/components/schemas/Problem"
408
+ description: RESOURCE_NOT_FOUND
409
+ headers:
410
+ Cache-Control:
411
+ $ref: "#/components/headers/CacheControlNoStore"
412
+ X-Correlation-Id:
413
+ $ref: "#/components/headers/XCorrelationId"
414
+ x-gala-problem-codes:
415
+ - RESOURCE_NOT_FOUND
416
+ StaleAggregateVersion:
417
+ content:
418
+ application/problem+json:
419
+ examples:
420
+ STALE_AGGREGATE_VERSION:
421
+ summary: STALE_AGGREGATE_VERSION
422
+ value:
423
+ code: STALE_AGGREGATE_VERSION
424
+ correlationId: 018f0000-0000-7000-8000-000000000001
425
+ detail: See the operation contract.
426
+ errors: []
427
+ retryable: false
428
+ schemaId: urn:gala:schema:problem:2.0.0
429
+ schemaVersion: 2.0.0
430
+ status: 412
431
+ title: STALE_AGGREGATE_VERSION
432
+ type: urn:gala:problem:stale-aggregate-version
433
+ schema:
434
+ $ref: "#/components/schemas/Problem"
435
+ description: STALE_AGGREGATE_VERSION
436
+ headers:
437
+ Cache-Control:
438
+ $ref: "#/components/headers/CacheControlNoStore"
439
+ X-Correlation-Id:
440
+ $ref: "#/components/headers/XCorrelationId"
441
+ x-gala-problem-codes:
442
+ - STALE_AGGREGATE_VERSION
171
443
  UnsupportedMediaType:
172
444
  content:
173
445
  application/problem+json:
@@ -1358,18 +1630,20 @@ components:
1358
1630
  - EXPIRED
1359
1631
  type: string
1360
1632
  DnsIntent:
1361
- description: "`ADD` writes the domain's records at the provider; `REMOVE` deletes only the records whose values are Galascribe's targets, never anything else at that name."
1633
+ description: "`ADD` writes the domain's records at the provider; `REMOVE` deletes only the records whose values are Galascribe's targets, never anything else at that name; `PROXY` (SCHEMA-3.6.0) turns the provider's proxy on for exactly the records Galascribe wrote, and is offered only once the domain is live with an issued certificate."
1362
1634
  enum:
1363
1635
  - ADD
1364
1636
  - REMOVE
1637
+ - PROXY
1365
1638
  type: string
1366
1639
  DnsPlanAction:
1367
- description: "`CREATE` a record that is not there; `KEEP` one already identical; `REPLACE` one of the same type, or a CNAME where an A/AAAA must go (or the reverse), that differs; `DELETE` a record carrying a Galascribe target value (`REMOVE` only)."
1640
+ description: "`CREATE` a record that is not there; `KEEP` one already identical; `REPLACE` one of the same type, or a CNAME where an A/AAAA must go (or the reverse), that differs; `DELETE` a record carrying a Galascribe target value (`REMOVE` only); `PROXY_ON` (SCHEMA-3.6.0, `PROXY` only) the record exists DNS-only and will be set to proxied."
1368
1641
  enum:
1369
1642
  - CREATE
1370
1643
  - KEEP
1371
1644
  - REPLACE
1372
1645
  - DELETE
1646
+ - PROXY_ON
1373
1647
  type: string
1374
1648
  DnsPlanEntry:
1375
1649
  additionalProperties: false
@@ -1414,7 +1688,7 @@ components:
1414
1688
  intents:
1415
1689
  items:
1416
1690
  $ref: "#/components/schemas/DnsIntent"
1417
- maxItems: 2
1691
+ maxItems: 3
1418
1692
  minItems: 1
1419
1693
  type: array
1420
1694
  uniqueItems: true
@@ -1472,6 +1746,18 @@ components:
1472
1746
  $ref: "#/components/schemas/DomainKind"
1473
1747
  nextStep:
1474
1748
  $ref: "#/components/schemas/DomainNextStep"
1749
+ proxy:
1750
+ additionalProperties: false
1751
+ description: Present once Galascribe turned the provider's proxy on for this binding through a connection (SCHEMA-3.6.0). Absent while the records are DNS-only.
1752
+ properties:
1753
+ provider:
1754
+ $ref: "#/components/schemas/DnsProvider"
1755
+ since:
1756
+ $ref: "#/components/schemas/PortableProblemRfc3339"
1757
+ required:
1758
+ - provider
1759
+ - since
1760
+ type: object
1475
1761
  routing:
1476
1762
  $ref: "#/components/schemas/DomainRouting"
1477
1763
  state:
@@ -1547,11 +1833,13 @@ components:
1547
1833
  expiresAt:
1548
1834
  $ref: "#/components/schemas/PortableProblemRfc3339"
1549
1835
  state:
1836
+ description: "`PROXIED` (SCHEMA-3.6.0): the provider's edge terminates TLS; GitHub's own certificate is not renewed while proxied."
1550
1837
  enum:
1551
1838
  - NONE
1552
1839
  - PENDING
1553
1840
  - ISSUED
1554
1841
  - ERRORED
1842
+ - PROXIED
1555
1843
  type: string
1556
1844
  required:
1557
1845
  - state
@@ -1575,9 +1863,13 @@ components:
1575
1863
  minLength: 1
1576
1864
  type: string
1577
1865
  pointsToGithub:
1866
+ description: True when the hostname resolves to GitHub Pages. It stays false while the binding is proxied, because the name then resolves to the provider's proxy; `viaProxy` carries that case.
1578
1867
  type: boolean
1579
1868
  resolves:
1580
1869
  type: boolean
1870
+ viaProxy:
1871
+ description: True when the hostname resolves to the provider's proxy rather than to GitHub and the binding is proxied (`proxy` is present); the routing probe is then the proof of life (SCHEMA-3.6.0). Absent when the binding is not proxied.
1872
+ type: boolean
1581
1873
  required:
1582
1874
  - resolves
1583
1875
  - pointsToGithub
@@ -1614,7 +1906,7 @@ components:
1614
1906
  type: string
1615
1907
  DomainNextStep:
1616
1908
  additionalProperties: false
1617
- description: What is being waited on, or what the author should do next. Known codes include `ADD_DNS_RECORDS`, `WAIT_FOR_DNS`, `WAIT_FOR_CERTIFICATE`, `WAIT_FOR_ROUTING`, `PUBLISH_TO_SWITCH`, `FIX_DNS_RECORD`, `REMOVE_DNS_RECORDS` and `NONE`; a client shows `detail` for codes it does not know.
1909
+ description: What is being waited on, or what the author should do next. Known codes include `ADD_DNS_RECORDS`, `WAIT_FOR_DNS`, `WAIT_FOR_CERTIFICATE`, `WAIT_FOR_ROUTING`, `PUBLISH_TO_SWITCH`, `FIX_DNS_RECORD`, `REMOVE_DNS_RECORDS`, `TURN_ON_CLOUDFLARE_PROXY` (SCHEMA-3.6.0, the certificate is issued and the author may let Cloudflare proxy the site) and `NONE`; a client shows `detail` for codes it does not know.
1618
1910
  properties:
1619
1911
  code:
1620
1912
  maxLength: 80
@@ -3214,19 +3506,9 @@ components:
3214
3506
  - items
3215
3507
  - hasMore
3216
3508
  type: object
3217
- GetPlatformAdaptersResponse:
3218
- additionalProperties: false
3219
- properties:
3220
- items:
3221
- items:
3222
- $ref: "#/components/schemas/PlatformAdapter"
3223
- maxItems: 100
3224
- minItems: 0
3225
- type: array
3226
- required:
3227
- - items
3228
- type: object
3229
- GetPlatformAuditEventsResponse:
3509
+ GetPlatformAbuseCasesByCommentIdResponse:
3510
+ $ref: "#/components/schemas/PlatformAbuseCaseDetail"
3511
+ GetPlatformAbuseCasesResponse:
3230
3512
  additionalProperties: false
3231
3513
  allOf:
3232
3514
  - else:
@@ -3254,11 +3536,11 @@ components:
3254
3536
  type: boolean
3255
3537
  items:
3256
3538
  items:
3257
- $ref: "#/components/schemas/PlatformAuditEvent"
3539
+ $ref: "#/components/schemas/PlatformAbuseCaseSummary"
3258
3540
  maxItems: 100
3259
3541
  type: array
3260
3542
  nextCursor:
3261
- description: Opaque cursor for the next page. Present and non-null exactly when `hasMore` is true; absent or null when `hasMore` is false. The length bounds constrain the string branch only.
3543
+ description: Opaque cursor for the next page. Present and non-null exactly when `hasMore` is true; absent or null when `hasMore` is false.
3262
3544
  maxLength: 2048
3263
3545
  minLength: 1
3264
3546
  type:
@@ -3268,134 +3550,468 @@ components:
3268
3550
  - items
3269
3551
  - hasMore
3270
3552
  type: object
3271
- GetPlatformConfigurationResponse:
3553
+ GetPlatformAdaptersResponse:
3272
3554
  additionalProperties: false
3273
3555
  properties:
3274
- families:
3556
+ items:
3275
3557
  items:
3276
- additionalProperties: false
3277
- properties:
3278
- family:
3279
- maxLength: 80
3280
- minLength: 1
3281
- type: string
3282
- keys:
3283
- items:
3284
- $ref: "#/components/schemas/PlatformConfigurationKey"
3285
- maxItems: 200
3286
- minItems: 0
3287
- type: array
3288
- required:
3289
- - family
3290
- - keys
3291
- type: object
3558
+ $ref: "#/components/schemas/PlatformAdapter"
3292
3559
  maxItems: 100
3293
3560
  minItems: 0
3294
3561
  type: array
3295
- required:
3296
- - families
3297
- type: object
3298
- GetPublicPublicationsByPublicationIdContentsByContentIdCommentsResponse:
3299
- additionalProperties: false
3300
- properties:
3301
- count:
3302
- oneOf:
3303
- - $ref: "#/components/schemas/PublicCount"
3304
- - type: "null"
3305
- items:
3306
- items:
3307
- $ref: "#/components/schemas/CommentView"
3308
- maxItems: 50
3309
- type: array
3310
- nextCursor:
3311
- maxLength: 2048
3312
- minLength: 1
3313
- type:
3314
- - string
3315
- - "null"
3316
3562
  required:
3317
3563
  - items
3318
- - nextCursor
3319
- - count
3320
- type: object
3321
- GetPublicPublicationsByPublicationIdContentsByContentIdInteractionsResponse:
3322
- additionalProperties: false
3323
- properties:
3324
- asOf:
3325
- description: "Canonical Gala instant: the UTC millisecond subset of RFC 3339, exactly `YYYY-MM-DDThh:mm:ss.sssZ`. Stated here rather than as a `pattern` because a generated `OffsetDateTime` cannot carry one (LOCAL-56)."
3326
- format: date-time
3327
- type: string
3328
- comments:
3329
- additionalProperties: false
3330
- properties:
3331
- allowReplies:
3332
- type: boolean
3333
- enabled:
3334
- type: boolean
3335
- maxDepth:
3336
- maximum: 4
3337
- minimum: 1
3338
- type: integer
3339
- open:
3340
- type: boolean
3341
- required:
3342
- - enabled
3343
- - open
3344
- - allowReplies
3345
- - maxDepth
3346
- type: object
3347
- reactions:
3348
- additionalProperties: false
3349
- properties:
3350
- enabled:
3351
- type: boolean
3352
- items:
3353
- items:
3354
- $ref: "#/components/schemas/PublicReactionItem"
3355
- maxItems: 17
3356
- type: array
3357
- required:
3358
- - enabled
3359
- - items
3360
- type: object
3361
- viewer:
3362
- oneOf:
3363
- - $ref: "#/components/schemas/ReaderView"
3364
- - type: "null"
3365
- required:
3366
- - reactions
3367
- - comments
3368
- - viewer
3369
- - asOf
3370
- type: object
3371
- GetPublicPublicationsByPublicationIdResponse:
3372
- additionalProperties: false
3373
- properties:
3374
- name:
3375
- maxLength: 120
3376
- minLength: 1
3377
- type: string
3378
- origin:
3379
- maxLength: 255
3380
- minLength: 1
3381
- pattern: ^(?:https://[^\s]+|http://(?:localhost|127\.0\.0\.1)(?::[0-9]{1,5})?(?:/[^\s]*)?)$
3382
- type: string
3383
- publicBaseUrl:
3384
- maxLength: 2048
3385
- minLength: 1
3386
- pattern: ^(?:https://[^\s]+|http://(?:localhost|127\.0\.0\.1)(?::[0-9]{1,5})?(?:/[^\s]*)?)$
3387
- type: string
3388
- publicationId:
3389
- format: uuid
3390
- pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
3391
- type: string
3392
- required:
3393
- - publicationId
3394
- - name
3395
- - origin
3396
- - publicBaseUrl
3397
3564
  type: object
3398
- GetSelfAuthenticatorsResponse:
3565
+ GetPlatformAuditEventsResponse:
3566
+ additionalProperties: false
3567
+ allOf:
3568
+ - else:
3569
+ properties:
3570
+ nextCursor:
3571
+ type: "null"
3572
+ if:
3573
+ properties:
3574
+ hasMore:
3575
+ not:
3576
+ enum:
3577
+ - false
3578
+ type: boolean
3579
+ x-gala-const: true
3580
+ required:
3581
+ - hasMore
3582
+ then:
3583
+ properties:
3584
+ nextCursor:
3585
+ type: string
3586
+ required:
3587
+ - nextCursor
3588
+ properties:
3589
+ hasMore:
3590
+ type: boolean
3591
+ items:
3592
+ items:
3593
+ $ref: "#/components/schemas/PlatformAuditEvent"
3594
+ maxItems: 100
3595
+ type: array
3596
+ nextCursor:
3597
+ description: Opaque cursor for the next page. Present and non-null exactly when `hasMore` is true; absent or null when `hasMore` is false. The length bounds constrain the string branch only.
3598
+ maxLength: 2048
3599
+ minLength: 1
3600
+ type:
3601
+ - string
3602
+ - "null"
3603
+ required:
3604
+ - items
3605
+ - hasMore
3606
+ type: object
3607
+ GetPlatformCachesResponse:
3608
+ additionalProperties: false
3609
+ properties:
3610
+ items:
3611
+ items:
3612
+ $ref: "#/components/schemas/PlatformCache"
3613
+ maxItems: 100
3614
+ type: array
3615
+ required:
3616
+ - items
3617
+ type: object
3618
+ GetPlatformConfigurationResponse:
3619
+ additionalProperties: false
3620
+ properties:
3621
+ families:
3622
+ items:
3623
+ additionalProperties: false
3624
+ properties:
3625
+ family:
3626
+ maxLength: 80
3627
+ minLength: 1
3628
+ type: string
3629
+ keys:
3630
+ items:
3631
+ $ref: "#/components/schemas/PlatformConfigurationKey"
3632
+ maxItems: 200
3633
+ minItems: 0
3634
+ type: array
3635
+ required:
3636
+ - family
3637
+ - keys
3638
+ type: object
3639
+ maxItems: 100
3640
+ minItems: 0
3641
+ type: array
3642
+ required:
3643
+ - families
3644
+ type: object
3645
+ GetPlatformOauthClientsResponse:
3646
+ additionalProperties: false
3647
+ properties:
3648
+ items:
3649
+ items:
3650
+ $ref: "#/components/schemas/PlatformOauthClient"
3651
+ maxItems: 500
3652
+ type: array
3653
+ required:
3654
+ - items
3655
+ type: object
3656
+ GetPlatformOverviewResponse:
3657
+ additionalProperties: false
3658
+ properties:
3659
+ commentDeletedByAuthor:
3660
+ format: int64
3661
+ minimum: 0
3662
+ type: integer
3663
+ commentHeldReview:
3664
+ format: int64
3665
+ minimum: 0
3666
+ type: integer
3667
+ commentRemoved:
3668
+ format: int64
3669
+ minimum: 0
3670
+ type: integer
3671
+ commentVisible:
3672
+ format: int64
3673
+ minimum: 0
3674
+ type: integer
3675
+ commentVisibleFlagged:
3676
+ format: int64
3677
+ minimum: 0
3678
+ type: integer
3679
+ commentVisiblePendingScan:
3680
+ format: int64
3681
+ minimum: 0
3682
+ type: integer
3683
+ oauthClientDraft:
3684
+ format: int64
3685
+ minimum: 0
3686
+ type: integer
3687
+ oauthClientRevoked:
3688
+ format: int64
3689
+ minimum: 0
3690
+ type: integer
3691
+ openAbuseCases:
3692
+ format: int64
3693
+ minimum: 0
3694
+ type: integer
3695
+ organizationActive:
3696
+ format: int64
3697
+ minimum: 0
3698
+ type: integer
3699
+ organizationBusiness:
3700
+ format: int64
3701
+ minimum: 0
3702
+ type: integer
3703
+ organizationClosed:
3704
+ format: int64
3705
+ minimum: 0
3706
+ type: integer
3707
+ organizationClosing:
3708
+ format: int64
3709
+ minimum: 0
3710
+ type: integer
3711
+ organizationFree:
3712
+ format: int64
3713
+ minimum: 0
3714
+ type: integer
3715
+ organizationPro:
3716
+ format: int64
3717
+ minimum: 0
3718
+ type: integer
3719
+ organizationProvisioning:
3720
+ format: int64
3721
+ minimum: 0
3722
+ type: integer
3723
+ organizationSuspended:
3724
+ format: int64
3725
+ minimum: 0
3726
+ type: integer
3727
+ personActive:
3728
+ format: int64
3729
+ minimum: 0
3730
+ type: integer
3731
+ personClosed:
3732
+ format: int64
3733
+ minimum: 0
3734
+ type: integer
3735
+ personClosing:
3736
+ format: int64
3737
+ minimum: 0
3738
+ type: integer
3739
+ personRestricted:
3740
+ format: int64
3741
+ minimum: 0
3742
+ type: integer
3743
+ personSuspended:
3744
+ format: int64
3745
+ minimum: 0
3746
+ type: integer
3747
+ publicationActive:
3748
+ format: int64
3749
+ minimum: 0
3750
+ type: integer
3751
+ publicationPaused:
3752
+ format: int64
3753
+ minimum: 0
3754
+ type: integer
3755
+ publicationProvisioning:
3756
+ format: int64
3757
+ minimum: 0
3758
+ type: integer
3759
+ publicationRetired:
3760
+ format: int64
3761
+ minimum: 0
3762
+ type: integer
3763
+ publicationRetiring:
3764
+ format: int64
3765
+ minimum: 0
3766
+ type: integer
3767
+ reactionActive:
3768
+ format: int64
3769
+ minimum: 0
3770
+ type: integer
3771
+ reactionInactive:
3772
+ format: int64
3773
+ minimum: 0
3774
+ type: integer
3775
+ webhookProcessed7d:
3776
+ format: int64
3777
+ minimum: 0
3778
+ type: integer
3779
+ webhookProcessing7d:
3780
+ format: int64
3781
+ minimum: 0
3782
+ type: integer
3783
+ webhookQuarantined7d:
3784
+ format: int64
3785
+ minimum: 0
3786
+ type: integer
3787
+ webhookReceived7d:
3788
+ format: int64
3789
+ minimum: 0
3790
+ type: integer
3791
+ required:
3792
+ - personActive
3793
+ - personSuspended
3794
+ - personRestricted
3795
+ - personClosing
3796
+ - personClosed
3797
+ - organizationProvisioning
3798
+ - organizationActive
3799
+ - organizationSuspended
3800
+ - organizationClosing
3801
+ - organizationClosed
3802
+ - organizationFree
3803
+ - organizationPro
3804
+ - organizationBusiness
3805
+ - publicationProvisioning
3806
+ - publicationActive
3807
+ - publicationPaused
3808
+ - publicationRetiring
3809
+ - publicationRetired
3810
+ - commentVisiblePendingScan
3811
+ - commentVisible
3812
+ - commentVisibleFlagged
3813
+ - commentHeldReview
3814
+ - commentRemoved
3815
+ - commentDeletedByAuthor
3816
+ - reactionActive
3817
+ - reactionInactive
3818
+ - oauthClientDraft
3819
+ - oauthClientRevoked
3820
+ - openAbuseCases
3821
+ - webhookReceived7d
3822
+ - webhookProcessing7d
3823
+ - webhookProcessed7d
3824
+ - webhookQuarantined7d
3825
+ type: object
3826
+ GetPlatformPlansResponse:
3827
+ $ref: "#/components/schemas/PlatformPlanCapacityRelease"
3828
+ GetPlatformUsersResponse:
3829
+ additionalProperties: false
3830
+ allOf:
3831
+ - else:
3832
+ properties:
3833
+ nextCursor:
3834
+ type: "null"
3835
+ if:
3836
+ properties:
3837
+ hasMore:
3838
+ not:
3839
+ enum:
3840
+ - false
3841
+ type: boolean
3842
+ x-gala-const: true
3843
+ required:
3844
+ - hasMore
3845
+ then:
3846
+ properties:
3847
+ nextCursor:
3848
+ type: string
3849
+ required:
3850
+ - nextCursor
3851
+ properties:
3852
+ hasMore:
3853
+ type: boolean
3854
+ items:
3855
+ items:
3856
+ $ref: "#/components/schemas/PlatformUser"
3857
+ maxItems: 100
3858
+ type: array
3859
+ nextCursor:
3860
+ description: Opaque cursor for the next page. Present and non-null exactly when `hasMore` is true; absent or null when `hasMore` is false.
3861
+ maxLength: 2048
3862
+ minLength: 1
3863
+ type:
3864
+ - string
3865
+ - "null"
3866
+ required:
3867
+ - items
3868
+ - hasMore
3869
+ type: object
3870
+ GetPlatformWebhookEventsByEventIdResponse:
3871
+ $ref: "#/components/schemas/PlatformWebhookEvent"
3872
+ GetPlatformWebhookEventsResponse:
3873
+ additionalProperties: false
3874
+ allOf:
3875
+ - else:
3876
+ properties:
3877
+ nextCursor:
3878
+ type: "null"
3879
+ if:
3880
+ properties:
3881
+ hasMore:
3882
+ not:
3883
+ enum:
3884
+ - false
3885
+ type: boolean
3886
+ x-gala-const: true
3887
+ required:
3888
+ - hasMore
3889
+ then:
3890
+ properties:
3891
+ nextCursor:
3892
+ type: string
3893
+ required:
3894
+ - nextCursor
3895
+ properties:
3896
+ hasMore:
3897
+ type: boolean
3898
+ items:
3899
+ items:
3900
+ $ref: "#/components/schemas/PlatformWebhookEvent"
3901
+ maxItems: 100
3902
+ type: array
3903
+ nextCursor:
3904
+ description: Opaque cursor for the next page. Present and non-null exactly when `hasMore` is true; absent or null when `hasMore` is false.
3905
+ maxLength: 2048
3906
+ minLength: 1
3907
+ type:
3908
+ - string
3909
+ - "null"
3910
+ required:
3911
+ - items
3912
+ - hasMore
3913
+ type: object
3914
+ GetPublicPublicationsByPublicationIdContentsByContentIdCommentsResponse:
3915
+ additionalProperties: false
3916
+ properties:
3917
+ count:
3918
+ oneOf:
3919
+ - $ref: "#/components/schemas/PublicCount"
3920
+ - type: "null"
3921
+ items:
3922
+ items:
3923
+ $ref: "#/components/schemas/CommentView"
3924
+ maxItems: 50
3925
+ type: array
3926
+ nextCursor:
3927
+ maxLength: 2048
3928
+ minLength: 1
3929
+ type:
3930
+ - string
3931
+ - "null"
3932
+ required:
3933
+ - items
3934
+ - nextCursor
3935
+ - count
3936
+ type: object
3937
+ GetPublicPublicationsByPublicationIdContentsByContentIdInteractionsResponse:
3938
+ additionalProperties: false
3939
+ properties:
3940
+ asOf:
3941
+ description: "Canonical Gala instant: the UTC millisecond subset of RFC 3339, exactly `YYYY-MM-DDThh:mm:ss.sssZ`. Stated here rather than as a `pattern` because a generated `OffsetDateTime` cannot carry one (LOCAL-56)."
3942
+ format: date-time
3943
+ type: string
3944
+ comments:
3945
+ additionalProperties: false
3946
+ properties:
3947
+ allowReplies:
3948
+ type: boolean
3949
+ enabled:
3950
+ type: boolean
3951
+ maxDepth:
3952
+ maximum: 4
3953
+ minimum: 1
3954
+ type: integer
3955
+ open:
3956
+ type: boolean
3957
+ required:
3958
+ - enabled
3959
+ - open
3960
+ - allowReplies
3961
+ - maxDepth
3962
+ type: object
3963
+ reactions:
3964
+ additionalProperties: false
3965
+ properties:
3966
+ enabled:
3967
+ type: boolean
3968
+ items:
3969
+ items:
3970
+ $ref: "#/components/schemas/PublicReactionItem"
3971
+ maxItems: 17
3972
+ type: array
3973
+ required:
3974
+ - enabled
3975
+ - items
3976
+ type: object
3977
+ viewer:
3978
+ oneOf:
3979
+ - $ref: "#/components/schemas/ReaderView"
3980
+ - type: "null"
3981
+ required:
3982
+ - reactions
3983
+ - comments
3984
+ - viewer
3985
+ - asOf
3986
+ type: object
3987
+ GetPublicPublicationsByPublicationIdResponse:
3988
+ additionalProperties: false
3989
+ properties:
3990
+ name:
3991
+ maxLength: 120
3992
+ minLength: 1
3993
+ type: string
3994
+ origin:
3995
+ maxLength: 255
3996
+ minLength: 1
3997
+ pattern: ^(?:https://[^\s]+|http://(?:localhost|127\.0\.0\.1)(?::[0-9]{1,5})?(?:/[^\s]*)?)$
3998
+ type: string
3999
+ publicBaseUrl:
4000
+ maxLength: 2048
4001
+ minLength: 1
4002
+ pattern: ^(?:https://[^\s]+|http://(?:localhost|127\.0\.0\.1)(?::[0-9]{1,5})?(?:/[^\s]*)?)$
4003
+ type: string
4004
+ publicationId:
4005
+ format: uuid
4006
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
4007
+ type: string
4008
+ required:
4009
+ - publicationId
4010
+ - name
4011
+ - origin
4012
+ - publicBaseUrl
4013
+ type: object
4014
+ GetSelfAuthenticatorsResponse:
3399
4015
  additionalProperties: false
3400
4016
  allOf:
3401
4017
  - else:
@@ -5751,6 +6367,114 @@ components:
5751
6367
  - label
5752
6368
  - createdAt
5753
6369
  type: object
6370
+ PlatformAbuseCaseDetail:
6371
+ additionalProperties: false
6372
+ description: Review evidence for one abuse case. Report reasons include only open reports and are sorted and distinct; reporter identities and notes are never exposed.
6373
+ properties:
6374
+ body:
6375
+ maxLength: 20000
6376
+ type: string
6377
+ commentId:
6378
+ format: uuid
6379
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6380
+ type: string
6381
+ commentState:
6382
+ $ref: "#/components/schemas/CommentInternalState"
6383
+ contentId:
6384
+ format: uuid
6385
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6386
+ type: string
6387
+ firstReportedAt:
6388
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6389
+ lastReportedAt:
6390
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6391
+ openReportCount:
6392
+ format: int64
6393
+ minimum: 0
6394
+ type: integer
6395
+ organizationId:
6396
+ format: uuid
6397
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6398
+ type: string
6399
+ parentId:
6400
+ oneOf:
6401
+ - format: uuid
6402
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6403
+ type: string
6404
+ - type: "null"
6405
+ publicationId:
6406
+ format: uuid
6407
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6408
+ type: string
6409
+ reportReasons:
6410
+ items:
6411
+ $ref: "#/components/schemas/ReaderReportReason"
6412
+ maxItems: 8
6413
+ type: array
6414
+ uniqueItems: true
6415
+ totalReportCount:
6416
+ format: int64
6417
+ minimum: 0
6418
+ type: integer
6419
+ updatedAt:
6420
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6421
+ required:
6422
+ - commentId
6423
+ - organizationId
6424
+ - publicationId
6425
+ - commentState
6426
+ - openReportCount
6427
+ - totalReportCount
6428
+ - firstReportedAt
6429
+ - lastReportedAt
6430
+ - updatedAt
6431
+ - body
6432
+ - contentId
6433
+ - parentId
6434
+ - reportReasons
6435
+ type: object
6436
+ PlatformAbuseCaseSummary:
6437
+ additionalProperties: false
6438
+ properties:
6439
+ commentId:
6440
+ format: uuid
6441
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6442
+ type: string
6443
+ commentState:
6444
+ $ref: "#/components/schemas/CommentInternalState"
6445
+ firstReportedAt:
6446
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6447
+ lastReportedAt:
6448
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6449
+ openReportCount:
6450
+ format: int64
6451
+ minimum: 0
6452
+ type: integer
6453
+ organizationId:
6454
+ format: uuid
6455
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6456
+ type: string
6457
+ publicationId:
6458
+ format: uuid
6459
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6460
+ type: string
6461
+ totalReportCount:
6462
+ format: int64
6463
+ minimum: 0
6464
+ type: integer
6465
+ updatedAt:
6466
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6467
+ required:
6468
+ - commentId
6469
+ - organizationId
6470
+ - publicationId
6471
+ - commentState
6472
+ - openReportCount
6473
+ - totalReportCount
6474
+ - firstReportedAt
6475
+ - lastReportedAt
6476
+ - updatedAt
6477
+ type: object
5754
6478
  PlatformAdapter:
5755
6479
  additionalProperties: false
5756
6480
  description: One admitted adapter (publish toolchain release or provider adapter). Today every admitted row reads `ADMITTED`; `SUSPENDED` and `SUPERSEDED` are reserved for the suspend/restore and supersession flows.
@@ -5851,6 +6575,49 @@ components:
5851
6575
  - outcomeCode
5852
6576
  - correlationId
5853
6577
  type: object
6578
+ PlatformCache:
6579
+ additionalProperties: false
6580
+ properties:
6581
+ epoch:
6582
+ format: int64
6583
+ minimum: 0
6584
+ type: integer
6585
+ localEntryCount:
6586
+ format: int64
6587
+ minimum: 0
6588
+ type: integer
6589
+ name:
6590
+ enum:
6591
+ - GITHUB_INSTALLATION_TOKEN
6592
+ - GITHUB_REPOSITORY_METADATA
6593
+ - GITHUB_REPOSITORY_CONTENT
6594
+ type: string
6595
+ ttlSeconds:
6596
+ format: int64
6597
+ minimum: 1
6598
+ type: integer
6599
+ updatedAt:
6600
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6601
+ updatedByPersonId:
6602
+ description: The last evicting operator, or null before the cache's first eviction.
6603
+ oneOf:
6604
+ - format: uuid
6605
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6606
+ type: string
6607
+ - type: "null"
6608
+ version:
6609
+ format: int64
6610
+ minimum: 0
6611
+ type: integer
6612
+ required:
6613
+ - name
6614
+ - epoch
6615
+ - localEntryCount
6616
+ - ttlSeconds
6617
+ - updatedByPersonId
6618
+ - updatedAt
6619
+ - version
6620
+ type: object
5854
6621
  PlatformConfigurationKey:
5855
6622
  additionalProperties: false
5856
6623
  description: One configuration value as canonical text (`20`, `false`, `PT5M`); `source` says whether it is the compiled catalog default or an environment override.
@@ -5899,6 +6666,361 @@ components:
5899
6666
  - source
5900
6667
  - description
5901
6668
  type: object
6669
+ PlatformOauthClient:
6670
+ additionalProperties: false
6671
+ properties:
6672
+ accessTokenTtlSeconds:
6673
+ maximum: 86400
6674
+ minimum: 300
6675
+ type: integer
6676
+ clientId:
6677
+ maxLength: 160
6678
+ minLength: 24
6679
+ pattern: ^[A-Za-z0-9._~-]+$
6680
+ type: string
6681
+ clientType:
6682
+ $ref: "#/components/schemas/PlatformOauthClientType"
6683
+ createdAt:
6684
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6685
+ createdByPersonId:
6686
+ format: uuid
6687
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6688
+ type: string
6689
+ description:
6690
+ oneOf:
6691
+ - $ref: "#/components/schemas/PlatformOauthClientDescriptionText"
6692
+ - type: "null"
6693
+ grantTypes:
6694
+ items:
6695
+ $ref: "#/components/schemas/PlatformOauthGrantType"
6696
+ maxItems: 3
6697
+ minItems: 1
6698
+ type: array
6699
+ uniqueItems: true
6700
+ homepageUri:
6701
+ oneOf:
6702
+ - $ref: "#/components/schemas/PlatformOauthClientHttpsUri"
6703
+ - type: "null"
6704
+ id:
6705
+ format: uuid
6706
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6707
+ type: string
6708
+ logoUri:
6709
+ oneOf:
6710
+ - $ref: "#/components/schemas/PlatformOauthClientHttpsUri"
6711
+ - type: "null"
6712
+ name:
6713
+ maxLength: 120
6714
+ minLength: 1
6715
+ type: string
6716
+ redirectUris:
6717
+ items:
6718
+ format: uri
6719
+ maxLength: 2048
6720
+ minLength: 8
6721
+ pattern: ^(?:https://[^/\s#]+/|http://(?:localhost|127\.0\.0\.1|\[::1\])(?::[0-9]+)?/)[^\s#]*$
6722
+ type: string
6723
+ maxItems: 20
6724
+ type: array
6725
+ uniqueItems: true
6726
+ revokedAt:
6727
+ oneOf:
6728
+ - $ref: "#/components/schemas/PortableProblemRfc3339"
6729
+ - type: "null"
6730
+ scopes:
6731
+ items:
6732
+ $ref: "#/components/schemas/PlatformOauthScope"
6733
+ maxItems: 3
6734
+ minItems: 1
6735
+ type: array
6736
+ uniqueItems: true
6737
+ state:
6738
+ enum:
6739
+ - DRAFT
6740
+ - REVOKED
6741
+ type: string
6742
+ updatedAt:
6743
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6744
+ version:
6745
+ format: int64
6746
+ minimum: 0
6747
+ type: integer
6748
+ required:
6749
+ - id
6750
+ - clientId
6751
+ - name
6752
+ - description
6753
+ - clientType
6754
+ - grantTypes
6755
+ - redirectUris
6756
+ - scopes
6757
+ - accessTokenTtlSeconds
6758
+ - logoUri
6759
+ - homepageUri
6760
+ - state
6761
+ - createdByPersonId
6762
+ - createdAt
6763
+ - updatedAt
6764
+ - revokedAt
6765
+ - version
6766
+ type: object
6767
+ PlatformOauthClientDescriptionText:
6768
+ maxLength: 1000
6769
+ minLength: 1
6770
+ type: string
6771
+ PlatformOauthClientHttpsUri:
6772
+ format: uri
6773
+ maxLength: 2048
6774
+ minLength: 8
6775
+ pattern: ^https://[^\s#]+$
6776
+ type: string
6777
+ PlatformOauthClientType:
6778
+ enum:
6779
+ - PUBLIC
6780
+ - CONFIDENTIAL
6781
+ type: string
6782
+ PlatformOauthGrantType:
6783
+ enum:
6784
+ - AUTHORIZATION_CODE
6785
+ - REFRESH_TOKEN
6786
+ - CLIENT_CREDENTIALS
6787
+ type: string
6788
+ PlatformOauthScope:
6789
+ enum:
6790
+ - read
6791
+ - write
6792
+ - metrics:read
6793
+ type: string
6794
+ PlatformOperatorReasonCode:
6795
+ description: Non-sensitive operator reason code recorded in the audit event.
6796
+ maxLength: 80
6797
+ minLength: 1
6798
+ pattern: ^[A-Z][A-Z0-9_]{0,79}$
6799
+ type: string
6800
+ PlatformPersonState:
6801
+ enum:
6802
+ - ACTIVE
6803
+ - SUSPENDED
6804
+ - RESTRICTED
6805
+ - CLOSING
6806
+ - CLOSED
6807
+ type: string
6808
+ PlatformPlan:
6809
+ additionalProperties: false
6810
+ properties:
6811
+ planKey:
6812
+ $ref: "#/components/schemas/PlatformPlanKey"
6813
+ publicationLimit:
6814
+ format: int64
6815
+ minimum: 1
6816
+ type: integer
6817
+ required:
6818
+ - planKey
6819
+ - publicationLimit
6820
+ type: object
6821
+ PlatformPlanCapacityRelease:
6822
+ additionalProperties: false
6823
+ properties:
6824
+ effectiveAt:
6825
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6826
+ items:
6827
+ allOf:
6828
+ - contains:
6829
+ properties:
6830
+ planKey:
6831
+ pattern: ^FREE$
6832
+ type: string
6833
+ x-gala-const: FREE
6834
+ required:
6835
+ - planKey
6836
+ type: object
6837
+ maxContains: 1
6838
+ minContains: 1
6839
+ - contains:
6840
+ properties:
6841
+ planKey:
6842
+ pattern: ^PRO$
6843
+ type: string
6844
+ x-gala-const: PRO
6845
+ required:
6846
+ - planKey
6847
+ type: object
6848
+ maxContains: 1
6849
+ minContains: 1
6850
+ - contains:
6851
+ properties:
6852
+ planKey:
6853
+ pattern: ^BUSINESS$
6854
+ type: string
6855
+ x-gala-const: BUSINESS
6856
+ required:
6857
+ - planKey
6858
+ type: object
6859
+ maxContains: 1
6860
+ minContains: 1
6861
+ items:
6862
+ $ref: "#/components/schemas/PlatformPlan"
6863
+ maxItems: 3
6864
+ minItems: 3
6865
+ type: array
6866
+ releaseId:
6867
+ format: uuid
6868
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6869
+ type: string
6870
+ releaseVersion:
6871
+ format: int64
6872
+ minimum: 1
6873
+ type: integer
6874
+ state:
6875
+ pattern: ^ACTIVE$
6876
+ type: string
6877
+ x-gala-const: ACTIVE
6878
+ updatedAt:
6879
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6880
+ required:
6881
+ - releaseId
6882
+ - releaseVersion
6883
+ - state
6884
+ - effectiveAt
6885
+ - updatedAt
6886
+ - items
6887
+ type: object
6888
+ PlatformPlanKey:
6889
+ enum:
6890
+ - FREE
6891
+ - PRO
6892
+ - BUSINESS
6893
+ type: string
6894
+ PlatformUser:
6895
+ additionalProperties: false
6896
+ properties:
6897
+ createdAt:
6898
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6899
+ displayName:
6900
+ maxLength: 255
6901
+ type:
6902
+ - string
6903
+ - "null"
6904
+ lastSignInAt:
6905
+ oneOf:
6906
+ - $ref: "#/components/schemas/PortableProblemRfc3339"
6907
+ - type: "null"
6908
+ login:
6909
+ maxLength: 80
6910
+ minLength: 1
6911
+ type:
6912
+ - string
6913
+ - "null"
6914
+ personId:
6915
+ format: uuid
6916
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6917
+ type: string
6918
+ planTiers:
6919
+ items:
6920
+ $ref: "#/components/schemas/PlatformPlanKey"
6921
+ maxItems: 3
6922
+ type: array
6923
+ uniqueItems: true
6924
+ publicationCount:
6925
+ format: int64
6926
+ minimum: 0
6927
+ type: integer
6928
+ state:
6929
+ $ref: "#/components/schemas/PlatformPersonState"
6930
+ required:
6931
+ - personId
6932
+ - state
6933
+ - displayName
6934
+ - login
6935
+ - createdAt
6936
+ - lastSignInAt
6937
+ - publicationCount
6938
+ - planTiers
6939
+ type: object
6940
+ PlatformWebhookEvent:
6941
+ additionalProperties: false
6942
+ description: Redacted webhook inbox metadata and immutable routing coordinates. The request body and payload digest are deliberately never exposed.
6943
+ properties:
6944
+ attemptCount:
6945
+ minimum: 0
6946
+ type: integer
6947
+ attemptLimit:
6948
+ minimum: 1
6949
+ type: integer
6950
+ eventId:
6951
+ format: uuid
6952
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6953
+ type: string
6954
+ eventType:
6955
+ $ref: "#/components/schemas/PlatformWebhookEventType"
6956
+ firstSeenAt:
6957
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6958
+ organizationId:
6959
+ format: uuid
6960
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6961
+ type: string
6962
+ processedAt:
6963
+ oneOf:
6964
+ - $ref: "#/components/schemas/PortableProblemRfc3339"
6965
+ - type: "null"
6966
+ providerRepositoryId:
6967
+ format: int64
6968
+ minimum: 1
6969
+ type:
6970
+ - integer
6971
+ - "null"
6972
+ pullRequestNumber:
6973
+ format: int64
6974
+ minimum: 1
6975
+ type:
6976
+ - integer
6977
+ - "null"
6978
+ resultCode:
6979
+ maxLength: 120
6980
+ minLength: 1
6981
+ pattern: ^[A-Z][A-Z0-9]*(?:_[A-Z0-9]+)*$
6982
+ type:
6983
+ - string
6984
+ - "null"
6985
+ status:
6986
+ $ref: "#/components/schemas/PlatformWebhookProcessingStatus"
6987
+ updatedAt:
6988
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6989
+ workflowRunId:
6990
+ format: int64
6991
+ minimum: 1
6992
+ type:
6993
+ - integer
6994
+ - "null"
6995
+ required:
6996
+ - eventId
6997
+ - organizationId
6998
+ - eventType
6999
+ - status
7000
+ - providerRepositoryId
7001
+ - pullRequestNumber
7002
+ - workflowRunId
7003
+ - attemptCount
7004
+ - attemptLimit
7005
+ - resultCode
7006
+ - firstSeenAt
7007
+ - processedAt
7008
+ - updatedAt
7009
+ type: object
7010
+ PlatformWebhookEventType:
7011
+ enum:
7012
+ - PULL_REQUEST
7013
+ - PUSH
7014
+ - WORKFLOW_RUN
7015
+ - OTHER
7016
+ type: string
7017
+ PlatformWebhookProcessingStatus:
7018
+ enum:
7019
+ - RECEIVED
7020
+ - PROCESSING
7021
+ - PROCESSED
7022
+ - QUARANTINED
7023
+ type: string
5902
7024
  PortableAppearanceAttribution:
5903
7025
  additionalProperties: false
5904
7026
  description: 'Footer attribution. `showMadeWith: false` omits the "Made with Galascribe" mark; an absent `attribution` means it is shown.'
@@ -11747,6 +12869,10 @@ components:
11747
12869
  - REAUTH
11748
12870
  - RECOVERY
11749
12871
  type: string
12872
+ selectAccount:
12873
+ default: false
12874
+ description: Ask GitHub to show its account picker (`prompt=select_account`) instead of reusing the browser's GitHub session (SCHEMA-3.6.0).
12875
+ type: boolean
11750
12876
  required:
11751
12877
  - purpose
11752
12878
  type: object
@@ -13122,6 +14248,11 @@ components:
13122
14248
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdReviewsByReviewIdDecideRequest:
13123
14249
  additionalProperties: false
13124
14250
  properties:
14251
+ comment:
14252
+ description: Optional plain-text note from the reviewer, 1 to 4000 characters (SCHEMA-3.6.0). A longer or empty comment is `VALIDATION_FAILED` with pointer `/comment`.
14253
+ maxLength: 4000
14254
+ minLength: 1
14255
+ type: string
13125
14256
  decision:
13126
14257
  enum:
13127
14258
  - APPROVE
@@ -13138,9 +14269,22 @@ components:
13138
14269
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdReviewsByReviewIdDecideResponse:
13139
14270
  additionalProperties: false
13140
14271
  properties:
14272
+ comment:
14273
+ description: The newest decision's reviewer comment (SCHEMA-3.6.0). Absent when the decision carried none.
14274
+ maxLength: 4000
14275
+ minLength: 1
14276
+ type: string
14277
+ decidedAt:
14278
+ $ref: "#/components/schemas/PortableProblemRfc3339"
14279
+ decidedBy:
14280
+ $ref: "#/components/schemas/SiteActor"
13141
14281
  findingsDigest:
13142
14282
  pattern: ^sha256:[0-9a-f]{64}$
13143
14283
  type: string
14284
+ requestedAt:
14285
+ $ref: "#/components/schemas/PortableProblemRfc3339"
14286
+ requestedBy:
14287
+ $ref: "#/components/schemas/SiteActor"
13144
14288
  reviewId:
13145
14289
  format: uuid
13146
14290
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
@@ -13478,6 +14622,180 @@ components:
13478
14622
  - name
13479
14623
  - slug
13480
14624
  type: object
14625
+ PostPlatformAbuseCasesByCommentIdDecideRequest:
14626
+ additionalProperties: false
14627
+ properties:
14628
+ decision:
14629
+ $ref: "#/components/schemas/ModerationDecision"
14630
+ note:
14631
+ maxLength: 1000
14632
+ type:
14633
+ - string
14634
+ - "null"
14635
+ reason:
14636
+ $ref: "#/components/schemas/PlatformOperatorReasonCode"
14637
+ required:
14638
+ - decision
14639
+ - note
14640
+ - reason
14641
+ type: object
14642
+ PostPlatformAbuseCasesByCommentIdDecideResponse:
14643
+ $ref: "#/components/schemas/PlatformAbuseCaseDetail"
14644
+ PostPlatformCachesByCacheIdEvictRequest:
14645
+ additionalProperties: false
14646
+ properties:
14647
+ reason:
14648
+ $ref: "#/components/schemas/PlatformOperatorReasonCode"
14649
+ required:
14650
+ - reason
14651
+ type: object
14652
+ PostPlatformCachesByCacheIdEvictResponse:
14653
+ $ref: "#/components/schemas/PlatformCache"
14654
+ PostPlatformOauthClientsByOauthClientIdRevokeRequest:
14655
+ additionalProperties: false
14656
+ properties:
14657
+ reason:
14658
+ $ref: "#/components/schemas/PlatformOperatorReasonCode"
14659
+ required:
14660
+ - reason
14661
+ type: object
14662
+ PostPlatformOauthClientsByOauthClientIdRevokeResponse:
14663
+ $ref: "#/components/schemas/PlatformOauthClient"
14664
+ PostPlatformOauthClientsRequest:
14665
+ additionalProperties: false
14666
+ allOf:
14667
+ - else:
14668
+ properties:
14669
+ redirectUris:
14670
+ maxItems: 0
14671
+ if:
14672
+ properties:
14673
+ grantTypes:
14674
+ contains:
14675
+ pattern: ^AUTHORIZATION_CODE$
14676
+ type: string
14677
+ x-gala-const: AUTHORIZATION_CODE
14678
+ required:
14679
+ - grantTypes
14680
+ then:
14681
+ properties:
14682
+ redirectUris:
14683
+ minItems: 1
14684
+ - if:
14685
+ properties:
14686
+ grantTypes:
14687
+ contains:
14688
+ pattern: ^REFRESH_TOKEN$
14689
+ type: string
14690
+ x-gala-const: REFRESH_TOKEN
14691
+ required:
14692
+ - grantTypes
14693
+ then:
14694
+ properties:
14695
+ grantTypes:
14696
+ contains:
14697
+ pattern: ^AUTHORIZATION_CODE$
14698
+ type: string
14699
+ x-gala-const: AUTHORIZATION_CODE
14700
+ - if:
14701
+ properties:
14702
+ clientType:
14703
+ pattern: ^PUBLIC$
14704
+ type: string
14705
+ x-gala-const: PUBLIC
14706
+ required:
14707
+ - clientType
14708
+ then:
14709
+ properties:
14710
+ grantTypes:
14711
+ not:
14712
+ contains:
14713
+ pattern: ^CLIENT_CREDENTIALS$
14714
+ type: string
14715
+ x-gala-const: CLIENT_CREDENTIALS
14716
+ properties:
14717
+ accessTokenTtlSeconds:
14718
+ maximum: 86400
14719
+ minimum: 300
14720
+ type: integer
14721
+ clientType:
14722
+ $ref: "#/components/schemas/PlatformOauthClientType"
14723
+ description:
14724
+ maxLength: 1000
14725
+ minLength: 1
14726
+ type:
14727
+ - string
14728
+ - "null"
14729
+ grantTypes:
14730
+ items:
14731
+ $ref: "#/components/schemas/PlatformOauthGrantType"
14732
+ maxItems: 3
14733
+ minItems: 1
14734
+ type: array
14735
+ uniqueItems: true
14736
+ homepageUri:
14737
+ format: uri
14738
+ maxLength: 2048
14739
+ minLength: 8
14740
+ pattern: ^https://[^\s#]+$
14741
+ type:
14742
+ - string
14743
+ - "null"
14744
+ logoUri:
14745
+ format: uri
14746
+ maxLength: 2048
14747
+ minLength: 8
14748
+ pattern: ^https://[^\s#]+$
14749
+ type:
14750
+ - string
14751
+ - "null"
14752
+ name:
14753
+ maxLength: 120
14754
+ minLength: 1
14755
+ type: string
14756
+ reason:
14757
+ $ref: "#/components/schemas/PlatformOperatorReasonCode"
14758
+ redirectUris:
14759
+ items:
14760
+ format: uri
14761
+ maxLength: 2048
14762
+ minLength: 8
14763
+ pattern: ^(?:https://[^/\s#]+/|http://(?:localhost|127\.0\.0\.1|\[::1\])(?::[0-9]+)?/)[^\s#]*$
14764
+ type: string
14765
+ maxItems: 20
14766
+ type: array
14767
+ uniqueItems: true
14768
+ scopes:
14769
+ items:
14770
+ $ref: "#/components/schemas/PlatformOauthScope"
14771
+ maxItems: 3
14772
+ minItems: 1
14773
+ type: array
14774
+ uniqueItems: true
14775
+ required:
14776
+ - name
14777
+ - clientType
14778
+ - grantTypes
14779
+ - redirectUris
14780
+ - scopes
14781
+ - accessTokenTtlSeconds
14782
+ - reason
14783
+ type: object
14784
+ PostPlatformOauthClientsResponse:
14785
+ additionalProperties: false
14786
+ description: A CONFIDENTIAL client's secret is disclosed only by the first successful create response. PUBLIC clients and committed idempotent retries return `clientSecret` null or omitted because plaintext secrets are not stored. It is never returned by a later read.
14787
+ properties:
14788
+ client:
14789
+ $ref: "#/components/schemas/PlatformOauthClient"
14790
+ clientSecret:
14791
+ maxLength: 512
14792
+ minLength: 32
14793
+ type:
14794
+ - string
14795
+ - "null"
14796
+ required:
14797
+ - client
14798
+ type: object
13481
14799
  PostPublicCommentsByCommentIdAppealsRequest:
13482
14800
  additionalProperties: false
13483
14801
  properties:
@@ -14980,6 +16298,21 @@ components:
14980
16298
  required:
14981
16299
  - change
14982
16300
  type: object
16301
+ PutPlatformPlansByPlanKeyRequest:
16302
+ additionalProperties: false
16303
+ properties:
16304
+ publicationLimit:
16305
+ format: int64
16306
+ minimum: 1
16307
+ type: integer
16308
+ reason:
16309
+ $ref: "#/components/schemas/PlatformOperatorReasonCode"
16310
+ required:
16311
+ - publicationLimit
16312
+ - reason
16313
+ type: object
16314
+ PutPlatformPlansByPlanKeyResponse:
16315
+ $ref: "#/components/schemas/PlatformPlanCapacityRelease"
14983
16316
  PutPublicPublicationsByPublicationIdContentsByContentIdReactionsByReactionKeyResponse:
14984
16317
  additionalProperties: false
14985
16318
  properties:
@@ -15831,9 +17164,22 @@ components:
15831
17164
  review read returns, so a list row and a read of that row never
15832
17165
  disagree.
15833
17166
  properties:
17167
+ comment:
17168
+ description: The newest decision's reviewer comment (SCHEMA-3.6.0). Absent when the decision carried none.
17169
+ maxLength: 4000
17170
+ minLength: 1
17171
+ type: string
17172
+ decidedAt:
17173
+ $ref: "#/components/schemas/PortableProblemRfc3339"
17174
+ decidedBy:
17175
+ $ref: "#/components/schemas/SiteActor"
15834
17176
  findingsDigest:
15835
17177
  pattern: ^sha256:[0-9a-f]{64}$
15836
17178
  type: string
17179
+ requestedAt:
17180
+ $ref: "#/components/schemas/PortableProblemRfc3339"
17181
+ requestedBy:
17182
+ $ref: "#/components/schemas/SiteActor"
15837
17183
  reviewId:
15838
17184
  format: uuid
15839
17185
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
@@ -16152,14 +17498,29 @@ components:
16152
17498
  maxLength: 512
16153
17499
  minLength: 1
16154
17500
  type: string
17501
+ pullRequestUrl:
17502
+ description: The mirror of this change on GitHub (SCHEMA-3.6.0), the canonical GitHub pull-request URL, as `GithubPullRequestSummary.url`. Absent until a pull request is recorded.
17503
+ format: uri
17504
+ pattern: ^https://github[.]com/[A-Za-z0-9][A-Za-z0-9-]{0,38}/[A-Za-z0-9_.-]{1,100}/pull/[1-9][0-9]*$
17505
+ type: string
16155
17506
  review:
16156
- description: "`NOT_REQUIRED` when the publication does not require review; otherwise `WAITING`, `APPROVED` or `CHANGES_REQUESTED`."
17507
+ description: "`NOT_REQUIRED` when the publication does not require review; otherwise `WAITING`, `APPROVED` or `CHANGES_REQUESTED`. `NEEDS_RE_REVIEW` (SCHEMA-3.6.0): the reviewed revision was replaced by a newer one and the author requests review again."
16157
17508
  enum:
16158
17509
  - NOT_REQUIRED
16159
17510
  - WAITING
16160
17511
  - APPROVED
16161
17512
  - CHANGES_REQUESTED
17513
+ - NEEDS_RE_REVIEW
16162
17514
  type: string
17515
+ reviewComment:
17516
+ description: The newest decision's comment (SCHEMA-3.6.0), shown to the author next to the change. Absent when none.
17517
+ maxLength: 4000
17518
+ minLength: 1
17519
+ type: string
17520
+ reviewDecidedAt:
17521
+ $ref: "#/components/schemas/PortableProblemRfc3339"
17522
+ reviewDecidedBy:
17523
+ $ref: "#/components/schemas/SiteActor"
16163
17524
  reviewId:
16164
17525
  description: The review a reviewer decides through `POST .../reviews/{reviewId}:decide`. Present when a review exists.
16165
17526
  format: uuid
@@ -33642,6 +35003,82 @@ paths:
33642
35003
  state: CERTIFICATE_PENDING
33643
35004
  updatedAt: "2026-10-09T12:00:00.000Z"
33644
35005
  version: 3
35006
+ proxied:
35007
+ summary: Live behind Cloudflare's proxy
35008
+ value:
35009
+ canonicalBase:
35010
+ current: https://blog.maya.dev/
35011
+ published: true
35012
+ target: https://blog.maya.dev/
35013
+ certificate:
35014
+ state: PROXIED
35015
+ createdAt: "2026-10-09T12:00:00.000Z"
35016
+ dns:
35017
+ observed:
35018
+ addresses:
35019
+ - 104.21.0.1
35020
+ checkedAt: "2026-10-10T12:00:00.000Z"
35021
+ pointsToGithub: false
35022
+ resolves: true
35023
+ viaProxy: true
35024
+ records:
35025
+ - name: blog
35026
+ type: CNAME
35027
+ value: rathnastest.github.io
35028
+ domainId: 018f0000-0000-7000-8000-000000000001
35029
+ hostname: blog.maya.dev
35030
+ kind: SUBDOMAIN
35031
+ nextStep:
35032
+ code: NONE
35033
+ detail: Your site is live behind Cloudflare's proxy.
35034
+ proxy:
35035
+ provider: CLOUDFLARE
35036
+ since: "2026-10-10T12:00:00.000Z"
35037
+ routing:
35038
+ httpsEnforced: false
35039
+ probeOk: true
35040
+ servedByPages: true
35041
+ state: ACTIVE
35042
+ updatedAt: "2026-10-10T12:00:00.000Z"
35043
+ version: 9
35044
+ stage2Offer:
35045
+ summary: Certificate issued; the proxy can be turned on
35046
+ value:
35047
+ canonicalBase:
35048
+ current: https://blog.maya.dev/
35049
+ published: true
35050
+ target: https://blog.maya.dev/
35051
+ certificate:
35052
+ state: ISSUED
35053
+ createdAt: "2026-10-09T12:00:00.000Z"
35054
+ dns:
35055
+ observed:
35056
+ addresses: []
35057
+ checkedAt: "2026-10-10T12:00:00.000Z"
35058
+ cnameTarget: rathnastest.github.io
35059
+ pointsToGithub: true
35060
+ resolves: true
35061
+ providers:
35062
+ - intents:
35063
+ - PROXY
35064
+ provider: CLOUDFLARE
35065
+ records:
35066
+ - name: blog
35067
+ type: CNAME
35068
+ value: rathnastest.github.io
35069
+ domainId: 018f0000-0000-7000-8000-000000000001
35070
+ hostname: blog.maya.dev
35071
+ kind: SUBDOMAIN
35072
+ nextStep:
35073
+ code: TURN_ON_CLOUDFLARE_PROXY
35074
+ detail: Your certificate is issued. You can now let Cloudflare proxy the site.
35075
+ routing:
35076
+ httpsEnforced: true
35077
+ probeOk: true
35078
+ servedByPages: true
35079
+ state: ACTIVE
35080
+ updatedAt: "2026-10-10T12:00:00.000Z"
35081
+ version: 8
33645
35082
  schema:
33646
35083
  $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdDomainsByDomainIdCheckResponse"
33647
35084
  description: check a custom domain now succeeded
@@ -41870,6 +43307,8 @@ paths:
41870
43307
  Authenticated server-sent notification stream for review state changes.
41871
43308
  Events carry no authority or canonical state; a client re-reads the
41872
43309
  ordinary review and repository-change resources after each signal.
43310
+ SCHEMA-3.6.0: the comment, decision time and actor, request time and
43311
+ actor (`ReviewSummary`) arrive on that re-read, never in the event.
41873
43312
  operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdReviewsEvents
41874
43313
  parameters:
41875
43314
  - $ref: "#/components/parameters/XCorrelationId"
@@ -42221,7 +43660,8 @@ paths:
42221
43660
  nominal:
42222
43661
  summary: Nominal valid request
42223
43662
  value:
42224
- decision: APPROVE
43663
+ comment: Please soften the second paragraph.
43664
+ decision: REJECT
42225
43665
  reasonCode: example
42226
43666
  schema:
42227
43667
  $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdReviewsByReviewIdDecideRequest"
@@ -42234,10 +43674,17 @@ paths:
42234
43674
  nominal:
42235
43675
  summary: Nominal successful response
42236
43676
  value:
43677
+ comment: Please soften the second paragraph.
43678
+ decidedAt: "2026-10-10T12:00:00.000Z"
43679
+ decidedBy:
43680
+ displayName: Maya Rao
43681
+ requestedAt: "2026-10-10T11:00:00.000Z"
43682
+ requestedBy:
43683
+ displayName: Sam Lee
42237
43684
  reviewId: 018f0000-0000-7000-8000-000000000001
42238
43685
  sourceRevision: sha1:0000000000000000000000000000000000000000
42239
- state: REQUESTED
42240
- version: 0
43686
+ state: REJECTED
43687
+ version: 1
42241
43688
  schema:
42242
43689
  $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdReviewsByReviewIdDecideResponse"
42243
43690
  description: approve or reject exact reviewed revision succeeded
@@ -42585,7 +44032,12 @@ paths:
42585
44032
  changeId: 018f0000-0000-7000-8000-000000000002
42586
44033
  kind: POST
42587
44034
  path: content/articles/hello.md
42588
- review: NOT_REQUIRED
44035
+ pullRequestUrl: https://github.com/rathnastest/g11/pull/7
44036
+ review: NEEDS_RE_REVIEW
44037
+ reviewComment: Please soften the second paragraph.
44038
+ reviewDecidedAt: "2026-10-05T09:00:00Z"
44039
+ reviewDecidedBy:
44040
+ displayName: Maya Rao
42589
44041
  title: Hello, world
42590
44042
  updatedAt: "2026-10-05T09:30:00Z"
42591
44043
  - action: CHANGE
@@ -45557,6 +47009,258 @@ paths:
45557
47009
  - NONE
45558
47010
  x-gala-success-category: query
45559
47011
  x-gala-tenant-scope: ORGANIZATION_PATH
47012
+ /v2/platform/abuse-cases:
47013
+ get:
47014
+ description: |
47015
+ Operators only, with recent authentication. Keyset-paged moderation
47016
+ cases across every organization. Rows expose only identifiers, state,
47017
+ report counts, and ordering instants; comment bodies and report reasons
47018
+ are available only from the detail operation.
47019
+ operationId: getPlatformAbuseCases
47020
+ parameters:
47021
+ - $ref: "#/components/parameters/XCorrelationId"
47022
+ - $ref: "#/components/parameters/Cursor"
47023
+ - $ref: "#/components/parameters/Limit"
47024
+ responses:
47025
+ "200":
47026
+ content:
47027
+ application/json:
47028
+ examples:
47029
+ nominal:
47030
+ summary: Nominal successful response
47031
+ value:
47032
+ hasMore: false
47033
+ items:
47034
+ - commentId: 018f0000-0000-7000-8000-000000000003
47035
+ commentState: VISIBLE_PENDING_SCAN
47036
+ firstReportedAt: "2026-10-10T10:30:00.000Z"
47037
+ lastReportedAt: "2026-10-10T11:00:00.000Z"
47038
+ openReportCount: 1
47039
+ organizationId: 018f0000-0000-7000-8000-000000000001
47040
+ publicationId: 018f0000-0000-7000-8000-000000000002
47041
+ totalReportCount: 1
47042
+ updatedAt: "2026-10-10T11:00:00.000Z"
47043
+ nextCursor: null
47044
+ schema:
47045
+ $ref: "#/components/schemas/GetPlatformAbuseCasesResponse"
47046
+ description: list platform abuse cases succeeded
47047
+ headers:
47048
+ Cache-Control:
47049
+ $ref: "#/components/headers/CacheControlNoStore"
47050
+ X-Correlation-Id:
47051
+ $ref: "#/components/headers/XCorrelationId"
47052
+ "400":
47053
+ $ref: "#/components/responses/ValidationFailed"
47054
+ "401":
47055
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
47056
+ "403":
47057
+ $ref: "#/components/responses/AuthorizationDenied"
47058
+ security:
47059
+ - browserSession: []
47060
+ summary: list platform abuse cases
47061
+ tags:
47062
+ - platform
47063
+ x-gala-activation-gate: MVP
47064
+ x-gala-activation-guards:
47065
+ - NONE
47066
+ x-gala-capability-key: platform.abuse.view
47067
+ x-gala-concurrency: none
47068
+ x-gala-conditional-capabilities: []
47069
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
47070
+ x-gala-nullability: required-and-nullable-are-explicit
47071
+ x-gala-purpose: list platform abuse cases
47072
+ x-gala-reachable-problems:
47073
+ - AUTHENTICATION_REQUIRED
47074
+ - AUTHORIZATION_DENIED
47075
+ - REAUTH_REQUIRED
47076
+ - VALIDATION_FAILED
47077
+ x-gala-replay-identity: safe-query
47078
+ x-gala-state-guards:
47079
+ - NONE
47080
+ x-gala-success-category: query
47081
+ x-gala-tenant-scope: NONE
47082
+ /v2/platform/abuse-cases/{commentId}:
47083
+ get:
47084
+ description: |
47085
+ Operators only, with recent authentication. Reads one cross-platform
47086
+ moderation case by stable comment id, including the comment body,
47087
+ content and parent coordinates, and sorted distinct reasons from open
47088
+ reports. Reporter identities and report notes are never exposed.
47089
+ operationId: getPlatformAbuseCasesByCommentId
47090
+ parameters:
47091
+ - $ref: "#/components/parameters/XCorrelationId"
47092
+ - example: 018f0000-0000-7000-8000-000000000001
47093
+ in: path
47094
+ name: commentId
47095
+ required: true
47096
+ schema:
47097
+ format: uuid
47098
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
47099
+ type: string
47100
+ responses:
47101
+ "200":
47102
+ content:
47103
+ application/json:
47104
+ examples:
47105
+ nominal:
47106
+ summary: Nominal successful response
47107
+ value:
47108
+ body: Great article.
47109
+ commentId: 018f0000-0000-7000-8000-000000000003
47110
+ commentState: VISIBLE_PENDING_SCAN
47111
+ contentId: 018f0000-0000-7000-8000-000000000004
47112
+ firstReportedAt: "2026-10-10T10:30:00.000Z"
47113
+ lastReportedAt: "2026-10-10T11:00:00.000Z"
47114
+ openReportCount: 1
47115
+ organizationId: 018f0000-0000-7000-8000-000000000001
47116
+ parentId: null
47117
+ publicationId: 018f0000-0000-7000-8000-000000000002
47118
+ reportReasons:
47119
+ - OTHER
47120
+ totalReportCount: 1
47121
+ updatedAt: "2026-10-10T11:00:00.000Z"
47122
+ schema:
47123
+ $ref: "#/components/schemas/GetPlatformAbuseCasesByCommentIdResponse"
47124
+ description: read platform abuse case succeeded
47125
+ headers:
47126
+ Cache-Control:
47127
+ $ref: "#/components/headers/CacheControlNoStore"
47128
+ X-Correlation-Id:
47129
+ $ref: "#/components/headers/XCorrelationId"
47130
+ "400":
47131
+ $ref: "#/components/responses/ValidationFailed"
47132
+ "401":
47133
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
47134
+ "403":
47135
+ $ref: "#/components/responses/AuthorizationDenied"
47136
+ "404":
47137
+ $ref: "#/components/responses/ResourceNotFound"
47138
+ security:
47139
+ - browserSession: []
47140
+ summary: read platform abuse case
47141
+ tags:
47142
+ - platform
47143
+ x-gala-activation-gate: MVP
47144
+ x-gala-activation-guards:
47145
+ - NONE
47146
+ x-gala-capability-key: platform.abuse.view
47147
+ x-gala-concurrency: none
47148
+ x-gala-conditional-capabilities: []
47149
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
47150
+ x-gala-nullability: required-and-nullable-are-explicit
47151
+ x-gala-purpose: read platform abuse case
47152
+ x-gala-reachable-problems:
47153
+ - AUTHENTICATION_REQUIRED
47154
+ - AUTHORIZATION_DENIED
47155
+ - REAUTH_REQUIRED
47156
+ - RESOURCE_NOT_FOUND
47157
+ - VALIDATION_FAILED
47158
+ x-gala-replay-identity: safe-query
47159
+ x-gala-state-guards:
47160
+ - NONE
47161
+ x-gala-success-category: query
47162
+ x-gala-tenant-scope: NONE
47163
+ /v2/platform/abuse-cases/{commentId}:decide:
47164
+ post:
47165
+ description: |
47166
+ Operators only, with recent authentication. Applies one existing
47167
+ `ModerationDecision` after rechecking the comment and appeal state.
47168
+ Inapplicable decisions return `INVALID_DECISION`. `reason` is the
47169
+ non-sensitive operator reason code recorded in the audit event.
47170
+ operationId: postPlatformAbuseCasesByCommentIdDecide
47171
+ parameters:
47172
+ - $ref: "#/components/parameters/XCorrelationId"
47173
+ - example: 018f0000-0000-7000-8000-000000000001
47174
+ in: path
47175
+ name: commentId
47176
+ required: true
47177
+ schema:
47178
+ format: uuid
47179
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
47180
+ type: string
47181
+ - $ref: "#/components/parameters/IdempotencyKey"
47182
+ - $ref: "#/components/parameters/XCsrfToken"
47183
+ requestBody:
47184
+ content:
47185
+ application/json:
47186
+ examples:
47187
+ nominal:
47188
+ summary: Nominal valid request
47189
+ value:
47190
+ decision: HOLD
47191
+ note: Pending a second review.
47192
+ reason: REPORTED_CONTENT_REVIEW
47193
+ schema:
47194
+ $ref: "#/components/schemas/PostPlatformAbuseCasesByCommentIdDecideRequest"
47195
+ required: true
47196
+ responses:
47197
+ "200":
47198
+ content:
47199
+ application/json:
47200
+ examples:
47201
+ nominal:
47202
+ summary: Nominal successful response
47203
+ value:
47204
+ body: Great article.
47205
+ commentId: 018f0000-0000-7000-8000-000000000003
47206
+ commentState: HELD_REVIEW
47207
+ contentId: 018f0000-0000-7000-8000-000000000004
47208
+ firstReportedAt: "2026-10-10T10:30:00.000Z"
47209
+ lastReportedAt: "2026-10-10T11:00:00.000Z"
47210
+ openReportCount: 1
47211
+ organizationId: 018f0000-0000-7000-8000-000000000001
47212
+ parentId: null
47213
+ publicationId: 018f0000-0000-7000-8000-000000000002
47214
+ reportReasons:
47215
+ - OTHER
47216
+ totalReportCount: 1
47217
+ updatedAt: "2026-10-10T12:00:00.000Z"
47218
+ schema:
47219
+ $ref: "#/components/schemas/PostPlatformAbuseCasesByCommentIdDecideResponse"
47220
+ description: decide platform abuse case succeeded
47221
+ headers:
47222
+ Cache-Control:
47223
+ $ref: "#/components/headers/CacheControlNoStore"
47224
+ X-Correlation-Id:
47225
+ $ref: "#/components/headers/XCorrelationId"
47226
+ "400":
47227
+ $ref: "#/components/responses/RequestInvalid"
47228
+ "401":
47229
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
47230
+ "403":
47231
+ $ref: "#/components/responses/AuthorizationDenied"
47232
+ "404":
47233
+ $ref: "#/components/responses/ResourceNotFound"
47234
+ "409":
47235
+ $ref: "#/components/responses/InvalidDecisionCommandConflict"
47236
+ security:
47237
+ - browserSession: []
47238
+ summary: decide platform abuse case
47239
+ tags:
47240
+ - platform
47241
+ x-gala-activation-gate: MVP
47242
+ x-gala-activation-guards:
47243
+ - NONE
47244
+ x-gala-capability-key: platform.abuse.remediate
47245
+ x-gala-concurrency: none
47246
+ x-gala-conditional-capabilities: []
47247
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
47248
+ x-gala-nullability: required-and-nullable-are-explicit
47249
+ x-gala-purpose: decide platform abuse case
47250
+ x-gala-reachable-problems:
47251
+ - AUTHENTICATION_REQUIRED
47252
+ - AUTHORIZATION_DENIED
47253
+ - COMMAND_REPLAY_CONFLICT
47254
+ - INVALID_DECISION
47255
+ - REAUTH_REQUIRED
47256
+ - REQUEST_FIELD_UNKNOWN
47257
+ - RESOURCE_NOT_FOUND
47258
+ - VALIDATION_FAILED
47259
+ x-gala-replay-identity: idempotency-key
47260
+ x-gala-state-guards:
47261
+ - NONE
47262
+ x-gala-success-category: protocol
47263
+ x-gala-tenant-scope: NONE
45560
47264
  /v2/platform/adapters:
45561
47265
  get:
45562
47266
  description: |
@@ -45682,7 +47386,8 @@ paths:
45682
47386
  Operators only (a configured platform operator with recent
45683
47387
  authentication). Audit events across every organization, newest first,
45684
47388
  filtered by any combination of organization, publication, actor, action
45685
- and time window (`from` inclusive, `to` exclusive).
47389
+ and time window (`from` inclusive, `to` exclusive). The operator App
47390
+ supplies the trailing seven days when the URL has no explicit range.
45686
47391
  operationId: getPlatformAuditEvents
45687
47392
  parameters:
45688
47393
  - $ref: "#/components/parameters/XCorrelationId"
@@ -45889,6 +47594,167 @@ paths:
45889
47594
  - NONE
45890
47595
  x-gala-success-category: query
45891
47596
  x-gala-tenant-scope: NONE
47597
+ /v2/platform/caches:
47598
+ get:
47599
+ description: |
47600
+ Operators only, with recent authentication. Lists the bounded cache
47601
+ inventory, each durable all-instance eviction epoch, this serving
47602
+ instance's entry count, and update version. Cache keys and values are
47603
+ never exposed.
47604
+ operationId: getPlatformCaches
47605
+ parameters:
47606
+ - $ref: "#/components/parameters/XCorrelationId"
47607
+ responses:
47608
+ "200":
47609
+ content:
47610
+ application/json:
47611
+ examples:
47612
+ nominal:
47613
+ summary: Nominal successful response
47614
+ value:
47615
+ items:
47616
+ - epoch: 3
47617
+ localEntryCount: 7
47618
+ name: GITHUB_INSTALLATION_TOKEN
47619
+ ttlSeconds: 300
47620
+ updatedAt: "2026-10-10T12:00:00.000Z"
47621
+ updatedByPersonId: 018f0000-0000-7000-8000-000000000001
47622
+ version: 3
47623
+ schema:
47624
+ $ref: "#/components/schemas/GetPlatformCachesResponse"
47625
+ description: list platform caches succeeded
47626
+ headers:
47627
+ Cache-Control:
47628
+ $ref: "#/components/headers/CacheControlNoStore"
47629
+ X-Correlation-Id:
47630
+ $ref: "#/components/headers/XCorrelationId"
47631
+ "401":
47632
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
47633
+ "403":
47634
+ $ref: "#/components/responses/AuthorizationDenied"
47635
+ security:
47636
+ - browserSession: []
47637
+ summary: list platform caches
47638
+ tags:
47639
+ - platform
47640
+ x-gala-activation-gate: MVP
47641
+ x-gala-activation-guards:
47642
+ - NONE
47643
+ x-gala-capability-key: platform.caches.view
47644
+ x-gala-concurrency: none
47645
+ x-gala-conditional-capabilities: []
47646
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
47647
+ x-gala-nullability: required-and-nullable-are-explicit
47648
+ x-gala-purpose: list platform caches
47649
+ x-gala-reachable-problems:
47650
+ - AUTHENTICATION_REQUIRED
47651
+ - AUTHORIZATION_DENIED
47652
+ - REAUTH_REQUIRED
47653
+ x-gala-replay-identity: safe-query
47654
+ x-gala-state-guards:
47655
+ - NONE
47656
+ x-gala-success-category: query
47657
+ x-gala-tenant-scope: NONE
47658
+ /v2/platform/caches/{cacheId}:evict:
47659
+ post:
47660
+ description: |
47661
+ Operators only, with recent authentication. Advances the named cache's
47662
+ durable epoch at the exact version in `If-Match`; all serving instances
47663
+ converge on that epoch, while `localEntryCount` reports only the
47664
+ responding instance. `reason` is the non-sensitive reason code recorded
47665
+ in the audit event.
47666
+ operationId: postPlatformCachesByCacheIdEvict
47667
+ parameters:
47668
+ - $ref: "#/components/parameters/XCorrelationId"
47669
+ - example: GITHUB_INSTALLATION_TOKEN
47670
+ in: path
47671
+ name: cacheId
47672
+ required: true
47673
+ schema:
47674
+ enum:
47675
+ - GITHUB_INSTALLATION_TOKEN
47676
+ - GITHUB_REPOSITORY_METADATA
47677
+ - GITHUB_REPOSITORY_CONTENT
47678
+ type: string
47679
+ - $ref: "#/components/parameters/IdempotencyKey"
47680
+ - $ref: "#/components/parameters/IfMatch"
47681
+ - $ref: "#/components/parameters/XCsrfToken"
47682
+ requestBody:
47683
+ content:
47684
+ application/json:
47685
+ examples:
47686
+ nominal:
47687
+ summary: Nominal valid request
47688
+ value:
47689
+ reason: CREDENTIAL_ROTATION
47690
+ schema:
47691
+ $ref: "#/components/schemas/PostPlatformCachesByCacheIdEvictRequest"
47692
+ required: true
47693
+ responses:
47694
+ "200":
47695
+ content:
47696
+ application/json:
47697
+ examples:
47698
+ nominal:
47699
+ summary: Nominal successful response
47700
+ value:
47701
+ epoch: 4
47702
+ localEntryCount: 0
47703
+ name: GITHUB_INSTALLATION_TOKEN
47704
+ ttlSeconds: 300
47705
+ updatedAt: "2026-10-10T12:00:00.000Z"
47706
+ updatedByPersonId: 018f0000-0000-7000-8000-000000000001
47707
+ version: 4
47708
+ schema:
47709
+ $ref: "#/components/schemas/PostPlatformCachesByCacheIdEvictResponse"
47710
+ description: evict platform cache succeeded
47711
+ headers:
47712
+ Cache-Control:
47713
+ $ref: "#/components/headers/CacheControlNoStore"
47714
+ ETag:
47715
+ $ref: "#/components/headers/ETag"
47716
+ X-Correlation-Id:
47717
+ $ref: "#/components/headers/XCorrelationId"
47718
+ "400":
47719
+ $ref: "#/components/responses/RequestInvalid"
47720
+ "401":
47721
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
47722
+ "403":
47723
+ $ref: "#/components/responses/AuthorizationDenied"
47724
+ "404":
47725
+ $ref: "#/components/responses/ResourceNotFound"
47726
+ "409":
47727
+ $ref: "#/components/responses/CommandReplayConflict"
47728
+ "412":
47729
+ $ref: "#/components/responses/StaleAggregateVersion"
47730
+ security:
47731
+ - browserSession: []
47732
+ summary: evict platform cache
47733
+ tags:
47734
+ - platform
47735
+ x-gala-activation-gate: MVP
47736
+ x-gala-activation-guards:
47737
+ - NONE
47738
+ x-gala-capability-key: platform.caches.manage
47739
+ x-gala-concurrency: if-match-platform-cache-version
47740
+ x-gala-conditional-capabilities: []
47741
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
47742
+ x-gala-nullability: required-and-nullable-are-explicit
47743
+ x-gala-purpose: evict platform cache
47744
+ x-gala-reachable-problems:
47745
+ - AUTHENTICATION_REQUIRED
47746
+ - AUTHORIZATION_DENIED
47747
+ - COMMAND_REPLAY_CONFLICT
47748
+ - REAUTH_REQUIRED
47749
+ - REQUEST_FIELD_UNKNOWN
47750
+ - RESOURCE_NOT_FOUND
47751
+ - STALE_AGGREGATE_VERSION
47752
+ - VALIDATION_FAILED
47753
+ x-gala-replay-identity: idempotency-key
47754
+ x-gala-state-guards:
47755
+ - NONE
47756
+ x-gala-success-category: update
47757
+ x-gala-tenant-scope: NONE
45892
47758
  /v2/platform/configuration:
45893
47759
  get:
45894
47760
  description: |
@@ -46015,6 +47881,836 @@ paths:
46015
47881
  - NONE
46016
47882
  x-gala-success-category: query
46017
47883
  x-gala-tenant-scope: NONE
47884
+ /v2/platform/oauth-clients:
47885
+ get:
47886
+ description: |
47887
+ Operators only, with recent authentication. Lists OAuth client registry
47888
+ metadata. Client secrets are never returned by this or any later read.
47889
+ operationId: getPlatformOauthClients
47890
+ parameters:
47891
+ - $ref: "#/components/parameters/XCorrelationId"
47892
+ responses:
47893
+ "200":
47894
+ content:
47895
+ application/json:
47896
+ examples:
47897
+ nominal:
47898
+ summary: Nominal successful response
47899
+ value:
47900
+ items:
47901
+ - accessTokenTtlSeconds: 3600
47902
+ clientId: gala_0123456789abcdefghijklmnopqrstuv
47903
+ clientType: CONFIDENTIAL
47904
+ createdAt: "2026-10-10T12:00:00.000Z"
47905
+ createdByPersonId: 018f0000-0000-7000-8000-000000000002
47906
+ description: Connect automation and monitoring tools.
47907
+ grantTypes:
47908
+ - AUTHORIZATION_CODE
47909
+ - REFRESH_TOKEN
47910
+ - CLIENT_CREDENTIALS
47911
+ homepageUri: https://example.com/
47912
+ id: 018f0000-0000-7000-8000-000000000001
47913
+ logoUri: https://example.com/logo.png
47914
+ name: Automation client
47915
+ redirectUris:
47916
+ - https://example.com/oauth/callback
47917
+ revokedAt: null
47918
+ scopes:
47919
+ - read
47920
+ - write
47921
+ state: DRAFT
47922
+ updatedAt: "2026-10-10T12:00:00.000Z"
47923
+ version: 0
47924
+ schema:
47925
+ $ref: "#/components/schemas/GetPlatformOauthClientsResponse"
47926
+ description: list OAuth clients succeeded
47927
+ headers:
47928
+ Cache-Control:
47929
+ $ref: "#/components/headers/CacheControlNoStore"
47930
+ X-Correlation-Id:
47931
+ $ref: "#/components/headers/XCorrelationId"
47932
+ "401":
47933
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
47934
+ "403":
47935
+ $ref: "#/components/responses/AuthorizationDenied"
47936
+ security:
47937
+ - browserSession: []
47938
+ summary: list OAuth clients
47939
+ tags:
47940
+ - platform
47941
+ x-gala-activation-gate: MVP
47942
+ x-gala-activation-guards:
47943
+ - NONE
47944
+ x-gala-capability-key: platform.oauth.clients.manage
47945
+ x-gala-concurrency: none
47946
+ x-gala-conditional-capabilities: []
47947
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
47948
+ x-gala-nullability: required-and-nullable-are-explicit
47949
+ x-gala-purpose: list OAuth clients
47950
+ x-gala-reachable-problems:
47951
+ - AUTHENTICATION_REQUIRED
47952
+ - AUTHORIZATION_DENIED
47953
+ - REAUTH_REQUIRED
47954
+ x-gala-replay-identity: safe-query
47955
+ x-gala-state-guards:
47956
+ - NONE
47957
+ x-gala-success-category: query
47958
+ x-gala-tenant-scope: NONE
47959
+ post:
47960
+ description: |
47961
+ Operators only, with recent authentication. Registers one DRAFT OAuth
47962
+ client. `reason` is a non-sensitive operator reason code recorded in
47963
+ the audit event. `Idempotency-Key` is the registry-row identity. The
47964
+ generated CONFIDENTIAL-client secret is disclosed only by the first
47965
+ successful response and is never stored in plaintext; PUBLIC clients
47966
+ and committed retries return `clientSecret` null or omitted.
47967
+ operationId: postPlatformOauthClients
47968
+ parameters:
47969
+ - $ref: "#/components/parameters/XCorrelationId"
47970
+ - $ref: "#/components/parameters/IdempotencyKey"
47971
+ - $ref: "#/components/parameters/XCsrfToken"
47972
+ requestBody:
47973
+ content:
47974
+ application/json:
47975
+ examples:
47976
+ nominal:
47977
+ summary: Nominal valid request
47978
+ value:
47979
+ accessTokenTtlSeconds: 3600
47980
+ clientType: CONFIDENTIAL
47981
+ description: Connect automation and monitoring tools.
47982
+ grantTypes:
47983
+ - AUTHORIZATION_CODE
47984
+ - REFRESH_TOKEN
47985
+ - CLIENT_CREDENTIALS
47986
+ homepageUri: https://example.com/
47987
+ logoUri: https://example.com/logo.png
47988
+ name: Automation client
47989
+ reason: OPERATOR_REQUESTED
47990
+ redirectUris:
47991
+ - https://example.com/oauth/callback
47992
+ scopes:
47993
+ - read
47994
+ - write
47995
+ schema:
47996
+ $ref: "#/components/schemas/PostPlatformOauthClientsRequest"
47997
+ required: true
47998
+ responses:
47999
+ "201":
48000
+ content:
48001
+ application/json:
48002
+ examples:
48003
+ nominal:
48004
+ summary: Nominal successful response
48005
+ value:
48006
+ client:
48007
+ accessTokenTtlSeconds: 3600
48008
+ clientId: gala_0123456789abcdefghijklmnopqrstuv
48009
+ clientType: CONFIDENTIAL
48010
+ createdAt: "2026-10-10T12:00:00.000Z"
48011
+ createdByPersonId: 018f0000-0000-7000-8000-000000000002
48012
+ description: Connect automation and monitoring tools.
48013
+ grantTypes:
48014
+ - AUTHORIZATION_CODE
48015
+ - REFRESH_TOKEN
48016
+ - CLIENT_CREDENTIALS
48017
+ homepageUri: https://example.com/
48018
+ id: 018f0000-0000-7000-8000-000000000001
48019
+ logoUri: https://example.com/logo.png
48020
+ name: Automation client
48021
+ redirectUris:
48022
+ - https://example.com/oauth/callback
48023
+ revokedAt: null
48024
+ scopes:
48025
+ - read
48026
+ - write
48027
+ state: DRAFT
48028
+ updatedAt: "2026-10-10T12:00:00.000Z"
48029
+ version: 0
48030
+ clientSecret: gala_secret_0123456789abcdefghijklmnopqrstuv
48031
+ schema:
48032
+ $ref: "#/components/schemas/PostPlatformOauthClientsResponse"
48033
+ description: register OAuth client succeeded
48034
+ headers:
48035
+ Cache-Control:
48036
+ $ref: "#/components/headers/CacheControlNoStore"
48037
+ Location:
48038
+ $ref: "#/components/headers/Location"
48039
+ X-Correlation-Id:
48040
+ $ref: "#/components/headers/XCorrelationId"
48041
+ "400":
48042
+ $ref: "#/components/responses/RequestInvalid"
48043
+ "401":
48044
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
48045
+ "403":
48046
+ $ref: "#/components/responses/AuthorizationDenied"
48047
+ "409":
48048
+ $ref: "#/components/responses/CommandReplayConflict"
48049
+ security:
48050
+ - browserSession: []
48051
+ summary: register OAuth client
48052
+ tags:
48053
+ - platform
48054
+ x-gala-activation-gate: MVP
48055
+ x-gala-activation-guards:
48056
+ - NONE
48057
+ x-gala-capability-key: platform.oauth.clients.manage
48058
+ x-gala-concurrency: none
48059
+ x-gala-conditional-capabilities: []
48060
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
48061
+ x-gala-nullability: required-and-nullable-are-explicit
48062
+ x-gala-purpose: register OAuth client
48063
+ x-gala-reachable-problems:
48064
+ - AUTHENTICATION_REQUIRED
48065
+ - AUTHORIZATION_DENIED
48066
+ - COMMAND_REPLAY_CONFLICT
48067
+ - REAUTH_REQUIRED
48068
+ - REQUEST_FIELD_UNKNOWN
48069
+ - VALIDATION_FAILED
48070
+ x-gala-replay-identity: idempotency-key
48071
+ x-gala-state-guards:
48072
+ - NONE
48073
+ x-gala-success-category: create
48074
+ x-gala-tenant-scope: NONE
48075
+ /v2/platform/oauth-clients/{oauthClientId}:revoke:
48076
+ post:
48077
+ description: |
48078
+ Operators only, with recent authentication. Revokes exactly the DRAFT
48079
+ registry entry named by `oauthClientId` (the entry's `id`, a UUID) at the
48080
+ version in `If-Match`; the public OAuth `clientId` remains response
48081
+ metadata. A REVOKED client is
48082
+ rejected with `INVALID_SOURCE_STATE`. `reason` is the non-sensitive
48083
+ reason code recorded in the audit event.
48084
+ operationId: postPlatformOauthClientsByOauthClientIdRevoke
48085
+ parameters:
48086
+ - $ref: "#/components/parameters/XCorrelationId"
48087
+ - example: 018f0000-0000-7000-8000-000000000001
48088
+ in: path
48089
+ name: oauthClientId
48090
+ required: true
48091
+ schema:
48092
+ format: uuid
48093
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
48094
+ type: string
48095
+ - $ref: "#/components/parameters/IdempotencyKey"
48096
+ - $ref: "#/components/parameters/IfMatch"
48097
+ - $ref: "#/components/parameters/XCsrfToken"
48098
+ requestBody:
48099
+ content:
48100
+ application/json:
48101
+ examples:
48102
+ nominal:
48103
+ summary: Nominal valid request
48104
+ value:
48105
+ reason: INTEGRATION_RETIRED
48106
+ schema:
48107
+ $ref: "#/components/schemas/PostPlatformOauthClientsByOauthClientIdRevokeRequest"
48108
+ required: true
48109
+ responses:
48110
+ "200":
48111
+ content:
48112
+ application/json:
48113
+ examples:
48114
+ nominal:
48115
+ summary: Nominal successful response
48116
+ value:
48117
+ accessTokenTtlSeconds: 3600
48118
+ clientId: gala_0123456789abcdefghijklmnopqrstuv
48119
+ clientType: CONFIDENTIAL
48120
+ createdAt: "2026-10-10T12:00:00.000Z"
48121
+ createdByPersonId: 018f0000-0000-7000-8000-000000000002
48122
+ description: Connect automation and monitoring tools.
48123
+ grantTypes:
48124
+ - CLIENT_CREDENTIALS
48125
+ homepageUri: https://example.com/
48126
+ id: 018f0000-0000-7000-8000-000000000001
48127
+ logoUri: https://example.com/logo.png
48128
+ name: Automation client
48129
+ redirectUris: []
48130
+ revokedAt: "2026-10-10T13:00:00.000Z"
48131
+ scopes:
48132
+ - metrics:read
48133
+ state: REVOKED
48134
+ updatedAt: "2026-10-10T13:00:00.000Z"
48135
+ version: 1
48136
+ schema:
48137
+ $ref: "#/components/schemas/PostPlatformOauthClientsByOauthClientIdRevokeResponse"
48138
+ description: revoke OAuth client succeeded
48139
+ headers:
48140
+ Cache-Control:
48141
+ $ref: "#/components/headers/CacheControlNoStore"
48142
+ ETag:
48143
+ $ref: "#/components/headers/ETag"
48144
+ X-Correlation-Id:
48145
+ $ref: "#/components/headers/XCorrelationId"
48146
+ "400":
48147
+ $ref: "#/components/responses/RequestInvalid"
48148
+ "401":
48149
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
48150
+ "403":
48151
+ $ref: "#/components/responses/AuthorizationDenied"
48152
+ "404":
48153
+ $ref: "#/components/responses/ResourceNotFound"
48154
+ "409":
48155
+ $ref: "#/components/responses/InvalidSourceStateCommandConflict"
48156
+ "412":
48157
+ $ref: "#/components/responses/StaleAggregateVersion"
48158
+ security:
48159
+ - browserSession: []
48160
+ summary: revoke OAuth client
48161
+ tags:
48162
+ - platform
48163
+ x-gala-activation-gate: MVP
48164
+ x-gala-activation-guards:
48165
+ - NONE
48166
+ x-gala-capability-key: platform.oauth.clients.manage
48167
+ x-gala-concurrency: if-match-oauth-client-version
48168
+ x-gala-conditional-capabilities: []
48169
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
48170
+ x-gala-nullability: required-and-nullable-are-explicit
48171
+ x-gala-purpose: revoke OAuth client
48172
+ x-gala-reachable-problems:
48173
+ - AUTHENTICATION_REQUIRED
48174
+ - AUTHORIZATION_DENIED
48175
+ - COMMAND_REPLAY_CONFLICT
48176
+ - INVALID_SOURCE_STATE
48177
+ - REAUTH_REQUIRED
48178
+ - REQUEST_FIELD_UNKNOWN
48179
+ - RESOURCE_NOT_FOUND
48180
+ - STALE_AGGREGATE_VERSION
48181
+ - VALIDATION_FAILED
48182
+ x-gala-replay-identity: idempotency-key
48183
+ x-gala-state-guards:
48184
+ - OAuthClient:DRAFT -> REVOKED
48185
+ x-gala-success-category: update
48186
+ x-gala-tenant-scope: NONE
48187
+ /v2/platform/overview:
48188
+ get:
48189
+ description: |
48190
+ Operators only, with recent authentication. A bounded platform summary
48191
+ for the dashboard landing page. Counts use exact persisted person,
48192
+ organization, publication, comment, reaction, OAuth client, abuse, and
48193
+ webhook states. The webhook counters cover the trailing seven days;
48194
+ no traffic or subscription fact is inferred.
48195
+ operationId: getPlatformOverview
48196
+ parameters:
48197
+ - $ref: "#/components/parameters/XCorrelationId"
48198
+ responses:
48199
+ "200":
48200
+ content:
48201
+ application/json:
48202
+ examples:
48203
+ nominal:
48204
+ summary: Nominal successful response
48205
+ value:
48206
+ commentDeletedByAuthor: 1
48207
+ commentHeldReview: 2
48208
+ commentRemoved: 3
48209
+ commentVisible: 41
48210
+ commentVisibleFlagged: 4
48211
+ commentVisiblePendingScan: 2
48212
+ oauthClientDraft: 2
48213
+ oauthClientRevoked: 1
48214
+ openAbuseCases: 3
48215
+ organizationActive: 5
48216
+ organizationBusiness: 1
48217
+ organizationClosed: 0
48218
+ organizationClosing: 0
48219
+ organizationFree: 2
48220
+ organizationPro: 2
48221
+ organizationProvisioning: 1
48222
+ organizationSuspended: 0
48223
+ personActive: 8
48224
+ personClosed: 1
48225
+ personClosing: 0
48226
+ personRestricted: 1
48227
+ personSuspended: 1
48228
+ publicationActive: 12
48229
+ publicationPaused: 1
48230
+ publicationProvisioning: 1
48231
+ publicationRetired: 2
48232
+ publicationRetiring: 1
48233
+ reactionActive: 63
48234
+ reactionInactive: 4
48235
+ webhookProcessed7d: 25
48236
+ webhookProcessing7d: 1
48237
+ webhookQuarantined7d: 1
48238
+ webhookReceived7d: 2
48239
+ schema:
48240
+ $ref: "#/components/schemas/GetPlatformOverviewResponse"
48241
+ description: read the platform dashboard overview succeeded
48242
+ headers:
48243
+ Cache-Control:
48244
+ $ref: "#/components/headers/CacheControlNoStore"
48245
+ X-Correlation-Id:
48246
+ $ref: "#/components/headers/XCorrelationId"
48247
+ "401":
48248
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
48249
+ "403":
48250
+ $ref: "#/components/responses/AuthorizationDenied"
48251
+ security:
48252
+ - browserSession: []
48253
+ summary: read the platform dashboard overview
48254
+ tags:
48255
+ - platform
48256
+ x-gala-activation-gate: MVP
48257
+ x-gala-activation-guards:
48258
+ - NONE
48259
+ x-gala-capability-key: platform.users.view
48260
+ x-gala-concurrency: none
48261
+ x-gala-conditional-capabilities: []
48262
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
48263
+ x-gala-nullability: required-and-nullable-are-explicit
48264
+ x-gala-purpose: read the platform dashboard overview
48265
+ x-gala-reachable-problems:
48266
+ - AUTHENTICATION_REQUIRED
48267
+ - AUTHORIZATION_DENIED
48268
+ - REAUTH_REQUIRED
48269
+ x-gala-replay-identity: safe-query
48270
+ x-gala-state-guards:
48271
+ - NONE
48272
+ x-gala-success-category: query
48273
+ x-gala-tenant-scope: NONE
48274
+ /v2/platform/plans:
48275
+ get:
48276
+ description: |
48277
+ Operators only, with recent authentication. Returns the complete,
48278
+ active publication-capacity release with its single optimistic-lock
48279
+ version and the closed FREE, PRO, and BUSINESS plan catalog.
48280
+ operationId: getPlatformPlans
48281
+ parameters:
48282
+ - $ref: "#/components/parameters/XCorrelationId"
48283
+ responses:
48284
+ "200":
48285
+ content:
48286
+ application/json:
48287
+ examples:
48288
+ nominal:
48289
+ summary: Nominal successful response
48290
+ value:
48291
+ effectiveAt: "2026-10-10T00:00:04.000Z"
48292
+ items:
48293
+ - planKey: FREE
48294
+ publicationLimit: 1
48295
+ - planKey: PRO
48296
+ publicationLimit: 10
48297
+ - planKey: BUSINESS
48298
+ publicationLimit: 50
48299
+ releaseId: 019d0000-2000-7000-8000-000000000001
48300
+ releaseVersion: 2
48301
+ state: ACTIVE
48302
+ updatedAt: "2026-10-10T00:00:04.000Z"
48303
+ schema:
48304
+ $ref: "#/components/schemas/GetPlatformPlansResponse"
48305
+ description: list platform plans succeeded
48306
+ headers:
48307
+ Cache-Control:
48308
+ $ref: "#/components/headers/CacheControlNoStore"
48309
+ X-Correlation-Id:
48310
+ $ref: "#/components/headers/XCorrelationId"
48311
+ "401":
48312
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
48313
+ "403":
48314
+ $ref: "#/components/responses/AuthorizationDenied"
48315
+ security:
48316
+ - browserSession: []
48317
+ summary: list platform plans
48318
+ tags:
48319
+ - platform
48320
+ x-gala-activation-gate: MVP
48321
+ x-gala-activation-guards:
48322
+ - NONE
48323
+ x-gala-capability-key: platform.plans.view
48324
+ x-gala-concurrency: none
48325
+ x-gala-conditional-capabilities: []
48326
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
48327
+ x-gala-nullability: required-and-nullable-are-explicit
48328
+ x-gala-purpose: list platform plans
48329
+ x-gala-reachable-problems:
48330
+ - AUTHENTICATION_REQUIRED
48331
+ - AUTHORIZATION_DENIED
48332
+ - REAUTH_REQUIRED
48333
+ x-gala-replay-identity: safe-query
48334
+ x-gala-state-guards:
48335
+ - NONE
48336
+ x-gala-success-category: query
48337
+ x-gala-tenant-scope: NONE
48338
+ /v2/platform/plans/{planKey}:
48339
+ put:
48340
+ description: |
48341
+ Operators only, with recent authentication. Atomically replaces the
48342
+ complete publication-capacity release, changing the named plan's limit
48343
+ while retaining the other two, at the release version in `If-Match`.
48344
+ The invariant FREE <= PRO <= BUSINESS is enforced. `reason` is a
48345
+ non-sensitive operator reason code recorded in the audit event.
48346
+ operationId: putPlatformPlansByPlanKey
48347
+ parameters:
48348
+ - $ref: "#/components/parameters/XCorrelationId"
48349
+ - example: PRO
48350
+ in: path
48351
+ name: planKey
48352
+ required: true
48353
+ schema:
48354
+ $ref: "#/components/schemas/PlatformPlanKey"
48355
+ - $ref: "#/components/parameters/IdempotencyKey"
48356
+ - $ref: "#/components/parameters/IfMatch"
48357
+ - $ref: "#/components/parameters/XCsrfToken"
48358
+ requestBody:
48359
+ content:
48360
+ application/json:
48361
+ examples:
48362
+ nominal:
48363
+ summary: Nominal valid request
48364
+ value:
48365
+ publicationLimit: 12
48366
+ reason: PLAN_LIMIT_UPDATE
48367
+ schema:
48368
+ $ref: "#/components/schemas/PutPlatformPlansByPlanKeyRequest"
48369
+ required: true
48370
+ responses:
48371
+ "200":
48372
+ content:
48373
+ application/json:
48374
+ examples:
48375
+ nominal:
48376
+ summary: Nominal successful response
48377
+ value:
48378
+ effectiveAt: "2026-10-10T12:00:00.000Z"
48379
+ items:
48380
+ - planKey: FREE
48381
+ publicationLimit: 1
48382
+ - planKey: PRO
48383
+ publicationLimit: 12
48384
+ - planKey: BUSINESS
48385
+ publicationLimit: 50
48386
+ releaseId: 019d0000-2000-7000-8000-000000000002
48387
+ releaseVersion: 3
48388
+ state: ACTIVE
48389
+ updatedAt: "2026-10-10T12:00:00.000Z"
48390
+ schema:
48391
+ $ref: "#/components/schemas/PutPlatformPlansByPlanKeyResponse"
48392
+ description: update platform plan succeeded
48393
+ headers:
48394
+ Cache-Control:
48395
+ $ref: "#/components/headers/CacheControlNoStore"
48396
+ ETag:
48397
+ $ref: "#/components/headers/ETag"
48398
+ X-Correlation-Id:
48399
+ $ref: "#/components/headers/XCorrelationId"
48400
+ "400":
48401
+ $ref: "#/components/responses/RequestInvalid"
48402
+ "401":
48403
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
48404
+ "403":
48405
+ $ref: "#/components/responses/AuthorizationDenied"
48406
+ "404":
48407
+ $ref: "#/components/responses/ResourceNotFound"
48408
+ "409":
48409
+ $ref: "#/components/responses/CommandReplayConflict"
48410
+ "412":
48411
+ $ref: "#/components/responses/StaleAggregateVersion"
48412
+ security:
48413
+ - browserSession: []
48414
+ summary: update platform plan
48415
+ tags:
48416
+ - platform
48417
+ x-gala-activation-gate: MVP
48418
+ x-gala-activation-guards:
48419
+ - NONE
48420
+ x-gala-capability-key: platform.plans.manage
48421
+ x-gala-concurrency: if-match-platform-plan-release-version
48422
+ x-gala-conditional-capabilities: []
48423
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
48424
+ x-gala-nullability: required-and-nullable-are-explicit
48425
+ x-gala-purpose: update platform plan
48426
+ x-gala-reachable-problems:
48427
+ - AUTHENTICATION_REQUIRED
48428
+ - AUTHORIZATION_DENIED
48429
+ - COMMAND_REPLAY_CONFLICT
48430
+ - REAUTH_REQUIRED
48431
+ - REQUEST_FIELD_UNKNOWN
48432
+ - RESOURCE_NOT_FOUND
48433
+ - STALE_AGGREGATE_VERSION
48434
+ - VALIDATION_FAILED
48435
+ x-gala-replay-identity: idempotency-key
48436
+ x-gala-state-guards:
48437
+ - NONE
48438
+ x-gala-success-category: update
48439
+ x-gala-tenant-scope: NONE
48440
+ /v2/platform/users:
48441
+ get:
48442
+ description: |
48443
+ Operators only, with recent authentication. Keyset-paged principals
48444
+ across the platform with exact person state, provider display snapshots,
48445
+ creation and last-sign-in instants, accessible publication count, and
48446
+ the distinct organization plan tiers reached through current grants.
48447
+ Subscription and per-user traffic data are not inferred.
48448
+ operationId: getPlatformUsers
48449
+ parameters:
48450
+ - $ref: "#/components/parameters/XCorrelationId"
48451
+ - description: Only people in this exact persisted state.
48452
+ example: ACTIVE
48453
+ in: query
48454
+ name: state
48455
+ required: false
48456
+ schema:
48457
+ $ref: "#/components/schemas/PlatformPersonState"
48458
+ - description: Case-insensitive match against person id, display name, or login.
48459
+ example: ada
48460
+ in: query
48461
+ name: search
48462
+ required: false
48463
+ schema:
48464
+ maxLength: 200
48465
+ minLength: 1
48466
+ type: string
48467
+ - $ref: "#/components/parameters/Cursor"
48468
+ - $ref: "#/components/parameters/Limit"
48469
+ responses:
48470
+ "200":
48471
+ content:
48472
+ application/json:
48473
+ examples:
48474
+ nominal:
48475
+ summary: Nominal successful response
48476
+ value:
48477
+ hasMore: false
48478
+ items:
48479
+ - createdAt: "2026-09-01T12:00:00.000Z"
48480
+ displayName: Ada Reader
48481
+ lastSignInAt: "2026-10-10T11:30:00.000Z"
48482
+ login: ada-reader
48483
+ personId: 018f0000-0000-7000-8000-000000000001
48484
+ planTiers:
48485
+ - FREE
48486
+ - PRO
48487
+ publicationCount: 2
48488
+ state: ACTIVE
48489
+ nextCursor: null
48490
+ schema:
48491
+ $ref: "#/components/schemas/GetPlatformUsersResponse"
48492
+ description: list platform users succeeded
48493
+ headers:
48494
+ Cache-Control:
48495
+ $ref: "#/components/headers/CacheControlNoStore"
48496
+ X-Correlation-Id:
48497
+ $ref: "#/components/headers/XCorrelationId"
48498
+ "400":
48499
+ $ref: "#/components/responses/ValidationFailed"
48500
+ "401":
48501
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
48502
+ "403":
48503
+ $ref: "#/components/responses/AuthorizationDenied"
48504
+ security:
48505
+ - browserSession: []
48506
+ summary: list platform users
48507
+ tags:
48508
+ - platform
48509
+ x-gala-activation-gate: MVP
48510
+ x-gala-activation-guards:
48511
+ - NONE
48512
+ x-gala-capability-key: platform.users.view
48513
+ x-gala-concurrency: none
48514
+ x-gala-conditional-capabilities: []
48515
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
48516
+ x-gala-nullability: required-and-nullable-are-explicit
48517
+ x-gala-purpose: list platform users
48518
+ x-gala-reachable-problems:
48519
+ - AUTHENTICATION_REQUIRED
48520
+ - AUTHORIZATION_DENIED
48521
+ - REAUTH_REQUIRED
48522
+ - VALIDATION_FAILED
48523
+ x-gala-replay-identity: safe-query
48524
+ x-gala-state-guards:
48525
+ - NONE
48526
+ x-gala-success-category: query
48527
+ x-gala-tenant-scope: NONE
48528
+ /v2/platform/webhook-events:
48529
+ get:
48530
+ description: |
48531
+ Operators only, with recent authentication. Returns redacted GitHub
48532
+ webhook inbox metadata, newest first. Bodies and payload digests are
48533
+ never exposed. `from` is inclusive and `to` is exclusive; the operator
48534
+ App supplies the trailing seven days when the URL has no explicit
48535
+ range.
48536
+ operationId: getPlatformWebhookEvents
48537
+ parameters:
48538
+ - $ref: "#/components/parameters/XCorrelationId"
48539
+ - description: Only events with this GitHub event type.
48540
+ example: PUSH
48541
+ in: query
48542
+ name: eventType
48543
+ required: false
48544
+ schema:
48545
+ $ref: "#/components/schemas/PlatformWebhookEventType"
48546
+ - description: Only events in this processing state.
48547
+ example: PROCESSED
48548
+ in: query
48549
+ name: status
48550
+ required: false
48551
+ schema:
48552
+ $ref: "#/components/schemas/PlatformWebhookProcessingStatus"
48553
+ - description: Only events first seen at or after this instant.
48554
+ example: "2026-10-03T12:00:00.000Z"
48555
+ in: query
48556
+ name: from
48557
+ required: false
48558
+ schema:
48559
+ description: "Canonical Gala instant: the UTC millisecond subset of RFC 3339, exactly `YYYY-MM-DDThh:mm:ss.sssZ`. Stated here rather than as a `pattern` because a generated `OffsetDateTime` cannot carry one (LOCAL-56)."
48560
+ format: date-time
48561
+ type: string
48562
+ - description: Only events first seen before this instant.
48563
+ example: "2026-10-10T12:00:00.000Z"
48564
+ in: query
48565
+ name: to
48566
+ required: false
48567
+ schema:
48568
+ description: "Canonical Gala instant: the UTC millisecond subset of RFC 3339, exactly `YYYY-MM-DDThh:mm:ss.sssZ`. Stated here rather than as a `pattern` because a generated `OffsetDateTime` cannot carry one (LOCAL-56)."
48569
+ format: date-time
48570
+ type: string
48571
+ - $ref: "#/components/parameters/Cursor"
48572
+ - $ref: "#/components/parameters/Limit"
48573
+ responses:
48574
+ "200":
48575
+ content:
48576
+ application/json:
48577
+ examples:
48578
+ nominal:
48579
+ summary: Nominal successful response
48580
+ value:
48581
+ hasMore: false
48582
+ items:
48583
+ - attemptCount: 1
48584
+ attemptLimit: 12
48585
+ eventId: 018f0000-0000-7000-8000-000000000001
48586
+ eventType: PUSH
48587
+ firstSeenAt: "2026-10-10T11:59:58.000Z"
48588
+ organizationId: 018f0000-0000-7000-8000-000000000003
48589
+ processedAt: "2026-10-10T12:00:00.000Z"
48590
+ providerRepositoryId: 123456789
48591
+ pullRequestNumber: null
48592
+ resultCode: APPLIED
48593
+ status: PROCESSED
48594
+ updatedAt: "2026-10-10T12:00:00.000Z"
48595
+ workflowRunId: null
48596
+ nextCursor: null
48597
+ schema:
48598
+ $ref: "#/components/schemas/GetPlatformWebhookEventsResponse"
48599
+ description: list platform webhook events succeeded
48600
+ headers:
48601
+ Cache-Control:
48602
+ $ref: "#/components/headers/CacheControlNoStore"
48603
+ X-Correlation-Id:
48604
+ $ref: "#/components/headers/XCorrelationId"
48605
+ "400":
48606
+ $ref: "#/components/responses/ValidationFailed"
48607
+ "401":
48608
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
48609
+ "403":
48610
+ $ref: "#/components/responses/AuthorizationDenied"
48611
+ security:
48612
+ - browserSession: []
48613
+ summary: list platform webhook events
48614
+ tags:
48615
+ - platform
48616
+ x-gala-activation-gate: MVP
48617
+ x-gala-activation-guards:
48618
+ - NONE
48619
+ x-gala-capability-key: platform.webhooks.view
48620
+ x-gala-concurrency: none
48621
+ x-gala-conditional-capabilities: []
48622
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
48623
+ x-gala-nullability: required-and-nullable-are-explicit
48624
+ x-gala-purpose: list platform webhook events
48625
+ x-gala-reachable-problems:
48626
+ - AUTHENTICATION_REQUIRED
48627
+ - AUTHORIZATION_DENIED
48628
+ - REAUTH_REQUIRED
48629
+ - VALIDATION_FAILED
48630
+ x-gala-replay-identity: safe-query
48631
+ x-gala-state-guards:
48632
+ - NONE
48633
+ x-gala-success-category: query
48634
+ x-gala-tenant-scope: NONE
48635
+ /v2/platform/webhook-events/{eventId}:
48636
+ get:
48637
+ description: |
48638
+ Operators only, with recent authentication. Reads one redacted webhook
48639
+ inbox event by stable id. The request body and payload digest are never
48640
+ exposed.
48641
+ operationId: getPlatformWebhookEventsByEventId
48642
+ parameters:
48643
+ - $ref: "#/components/parameters/XCorrelationId"
48644
+ - example: 018f0000-0000-7000-8000-000000000001
48645
+ in: path
48646
+ name: eventId
48647
+ required: true
48648
+ schema:
48649
+ format: uuid
48650
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
48651
+ type: string
48652
+ responses:
48653
+ "200":
48654
+ content:
48655
+ application/json:
48656
+ examples:
48657
+ nominal:
48658
+ summary: Nominal successful response
48659
+ value:
48660
+ attemptCount: 1
48661
+ attemptLimit: 12
48662
+ eventId: 018f0000-0000-7000-8000-000000000001
48663
+ eventType: PUSH
48664
+ firstSeenAt: "2026-10-10T11:59:58.000Z"
48665
+ organizationId: 018f0000-0000-7000-8000-000000000003
48666
+ processedAt: "2026-10-10T12:00:00.000Z"
48667
+ providerRepositoryId: 123456789
48668
+ pullRequestNumber: null
48669
+ resultCode: APPLIED
48670
+ status: PROCESSED
48671
+ updatedAt: "2026-10-10T12:00:00.000Z"
48672
+ workflowRunId: null
48673
+ schema:
48674
+ $ref: "#/components/schemas/GetPlatformWebhookEventsByEventIdResponse"
48675
+ description: read platform webhook event succeeded
48676
+ headers:
48677
+ Cache-Control:
48678
+ $ref: "#/components/headers/CacheControlNoStore"
48679
+ X-Correlation-Id:
48680
+ $ref: "#/components/headers/XCorrelationId"
48681
+ "400":
48682
+ $ref: "#/components/responses/ValidationFailed"
48683
+ "401":
48684
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
48685
+ "403":
48686
+ $ref: "#/components/responses/AuthorizationDenied"
48687
+ "404":
48688
+ $ref: "#/components/responses/ResourceNotFound"
48689
+ security:
48690
+ - browserSession: []
48691
+ summary: read platform webhook event
48692
+ tags:
48693
+ - platform
48694
+ x-gala-activation-gate: MVP
48695
+ x-gala-activation-guards:
48696
+ - NONE
48697
+ x-gala-capability-key: platform.webhooks.view
48698
+ x-gala-concurrency: none
48699
+ x-gala-conditional-capabilities: []
48700
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
48701
+ x-gala-nullability: required-and-nullable-are-explicit
48702
+ x-gala-purpose: read platform webhook event
48703
+ x-gala-reachable-problems:
48704
+ - AUTHENTICATION_REQUIRED
48705
+ - AUTHORIZATION_DENIED
48706
+ - REAUTH_REQUIRED
48707
+ - RESOURCE_NOT_FOUND
48708
+ - VALIDATION_FAILED
48709
+ x-gala-replay-identity: safe-query
48710
+ x-gala-state-guards:
48711
+ - NONE
48712
+ x-gala-success-category: query
48713
+ x-gala-tenant-scope: NONE
46018
48714
  /v2/public/comments/{commentId}:
46019
48715
  delete:
46020
48716
  description: A comment that has replies stays as a tombstone.