@greatwait/contracts 0.1.0-alpha.6 → 0.1.0-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +1 -1
  2. package/dist/attempt-diagnostics.d.ts +8 -0
  3. package/dist/attempt-diagnostics.js +68 -0
  4. package/dist/billing.d.ts +12 -10
  5. package/dist/billing.js +14 -4
  6. package/dist/delivery.d.ts +17 -40
  7. package/dist/delivery.js +12 -37
  8. package/dist/effective-limits.d.ts +4 -4
  9. package/dist/endpoints.d.ts +6 -6
  10. package/dist/first-value-journey.js +4 -4
  11. package/dist/identity.d.ts +3 -3
  12. package/dist/index.d.ts +3 -1
  13. package/dist/index.js +3 -1
  14. package/dist/mcp.d.ts +1 -1
  15. package/dist/members.d.ts +4 -4
  16. package/dist/operations.d.ts +338 -103
  17. package/dist/operations.js +3 -1
  18. package/dist/policy.d.ts +5 -4
  19. package/dist/policy.js +5 -4
  20. package/dist/project-notifications.d.ts +238 -0
  21. package/dist/project-notifications.js +236 -0
  22. package/dist/scheduling-records.d.ts +112 -8
  23. package/dist/scheduling.d.ts +253 -22
  24. package/dist/scheduling.js +51 -9
  25. package/dist/signatures.d.ts +1 -1
  26. package/dist/test-sink.d.ts +27 -41
  27. package/dist/test-sink.js +12 -31
  28. package/dist/workspace.d.ts +4 -4
  29. package/generated/v1/callback-receiver.json +4 -4
  30. package/generated/v1/examples/projectnotifications.read.response.json +12 -0
  31. package/generated/v1/examples/projectnotifications.rotateSigningKey.request.json +3 -0
  32. package/generated/v1/examples/projectnotifications.rotateSigningKey.response.json +25 -0
  33. package/generated/v1/examples/projectnotifications.update.request.json +10 -0
  34. package/generated/v1/examples/projectnotifications.update.response.json +12 -0
  35. package/generated/v1/examples/statusdeliveries.list.response.json +3 -0
  36. package/generated/v1/first-value-journey.json +4 -4
  37. package/generated/v1/manifest.json +110 -1
  38. package/generated/v1/openapi.json +3655 -333
  39. package/generated/v1/policy-matrix.json +28 -0
  40. package/generated/v1/schemas/attempts.list.response.json +105 -0
  41. package/generated/v1/schemas/attempts.read.response.json +105 -0
  42. package/generated/v1/schemas/billing.notices.response.json +17 -6
  43. package/generated/v1/schemas/billing.purchase.request.json +4 -0
  44. package/generated/v1/schemas/occurrences.redeliver.response.json +105 -0
  45. package/generated/v1/schemas/projectnotifications.read.response.json +101 -0
  46. package/generated/v1/schemas/projectnotifications.rotateSigningKey.request.json +13 -0
  47. package/generated/v1/schemas/projectnotifications.rotateSigningKey.response.json +119 -0
  48. package/generated/v1/schemas/projectnotifications.update.request-headers.json +13 -0
  49. package/generated/v1/schemas/projectnotifications.update.request.json +90 -0
  50. package/generated/v1/schemas/projectnotifications.update.response.json +101 -0
  51. package/generated/v1/schemas/schedules.archive.response.json +50 -0
  52. package/generated/v1/schemas/schedules.cancel.response.json +50 -0
  53. package/generated/v1/schemas/schedules.create.request.json +14 -0
  54. package/generated/v1/schemas/schedules.create.response.json +50 -0
  55. package/generated/v1/schemas/schedules.list.response.json +50 -0
  56. package/generated/v1/schemas/schedules.pause.response.json +50 -0
  57. package/generated/v1/schemas/schedules.read.response.json +50 -0
  58. package/generated/v1/schemas/schedules.replace.request.json +14 -0
  59. package/generated/v1/schemas/schedules.replace.response.json +50 -0
  60. package/generated/v1/schemas/schedules.resume.response.json +50 -0
  61. package/generated/v1/schemas/statusdeliveries.list.query.json +16 -0
  62. package/generated/v1/schemas/statusdeliveries.list.response.json +82 -0
  63. package/generated/v1/snippets/projectnotifications.read.json +6 -0
  64. package/generated/v1/snippets/projectnotifications.rotateSigningKey.json +6 -0
  65. package/generated/v1/snippets/projectnotifications.update.json +6 -0
  66. package/generated/v1/snippets/statusdeliveries.list.json +6 -0
  67. package/package.json +1 -1
@@ -8083,103 +8083,206 @@
8083
8083
  }
8084
8084
  }
8085
8085
  },
8086
- "/v1/organization/lifecycle": {
8086
+ "/v1/projects/{projectId}/notification-settings": {
8087
8087
  "get": {
8088
- "description": "Reads the signed-in administrator's organization closure generation and progress, including the reversible window. It remains available during closure so the administrator can request recovery.",
8089
- "operationId": "organizations.lifecycle",
8090
- "parameters": [],
8088
+ "description": "Read the verified project and environment's email failure alerts and failure webhook preferences. Defaults are email on to current organization admins and both one-shot and recurring schedules. Every terminal failed occurrence creates a separate email for each eligible recipient. Signing secrets are absent. Manual redelivery does not repeat occurrence lifecycle events.",
8089
+ "operationId": "projectnotifications.read",
8090
+ "parameters": [
8091
+ {
8092
+ "in": "path",
8093
+ "name": "projectId",
8094
+ "required": true,
8095
+ "schema": {
8096
+ "type": "string"
8097
+ }
8098
+ }
8099
+ ],
8091
8100
  "responses": {
8092
8101
  "200": {
8093
8102
  "content": {
8094
8103
  "application/json": {
8095
8104
  "example": {
8096
- "organizationId": "org_01h8xyz9k2m4n6p8r0t2v4w6y8",
8097
- "generation": 1,
8098
- "phase": "closed",
8099
- "requestedAt": "2026-09-12T12:00:00.000Z",
8100
- "reversibleUntil": "2026-09-19T12:00:00.000Z",
8101
- "purgeDeadline": "2026-10-12T12:00:00.000Z",
8102
- "immediate": false,
8103
- "converged": true
8105
+ "project": "proj_01h8xyz9k2m4n6p8r0t2v4w6y8",
8106
+ "environmentKind": "live",
8107
+ "revision": 1,
8108
+ "email": {
8109
+ "enabled": true,
8110
+ "recipients": {
8111
+ "kind": "admins"
8112
+ },
8113
+ "scheduleKinds": "both"
8114
+ }
8104
8115
  },
8105
8116
  "schema": {
8106
8117
  "$schema": "https://json-schema.org/draft/2020-12/schema",
8107
8118
  "type": "object",
8108
8119
  "properties": {
8109
- "organizationId": {
8120
+ "project": {
8110
8121
  "type": "string",
8111
- "pattern": "^org_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
8122
+ "pattern": "^proj_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
8112
8123
  },
8113
- "generation": {
8124
+ "environmentKind": {
8125
+ "type": "string",
8126
+ "enum": ["test", "live"]
8127
+ },
8128
+ "revision": {
8114
8129
  "type": "integer",
8115
- "minimum": 0,
8130
+ "exclusiveMinimum": 0,
8116
8131
  "maximum": 9007199254740991
8117
8132
  },
8118
- "phase": {
8119
- "type": "string",
8120
- "enum": [
8121
- "active",
8122
- "closing",
8123
- "closed",
8124
- "restoring",
8125
- "purging",
8126
- "erased"
8127
- ]
8128
- },
8129
- "requestedAt": {
8130
- "anyOf": [
8131
- {
8132
- "type": "string",
8133
- "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
8133
+ "email": {
8134
+ "type": "object",
8135
+ "properties": {
8136
+ "enabled": {
8137
+ "type": "boolean"
8134
8138
  },
8135
- {
8136
- "type": "null"
8139
+ "recipients": {
8140
+ "oneOf": [
8141
+ {
8142
+ "type": "object",
8143
+ "properties": {
8144
+ "kind": {
8145
+ "type": "string",
8146
+ "const": "admins"
8147
+ }
8148
+ },
8149
+ "required": ["kind"]
8150
+ },
8151
+ {
8152
+ "type": "object",
8153
+ "properties": {
8154
+ "kind": {
8155
+ "type": "string",
8156
+ "const": "members"
8157
+ },
8158
+ "memberIds": {
8159
+ "minItems": 1,
8160
+ "maxItems": 100,
8161
+ "type": "array",
8162
+ "items": {
8163
+ "type": "string",
8164
+ "pattern": "^mem_[0-9a-f]{26}$"
8165
+ }
8166
+ }
8167
+ },
8168
+ "required": ["kind", "memberIds"]
8169
+ }
8170
+ ]
8171
+ },
8172
+ "scheduleKinds": {
8173
+ "type": "string",
8174
+ "enum": ["both", "one-shot", "recurring"]
8137
8175
  }
8138
- ]
8176
+ },
8177
+ "required": ["enabled", "recipients", "scheduleKinds"]
8139
8178
  },
8140
- "reversibleUntil": {
8141
- "anyOf": [
8142
- {
8179
+ "statusWebhook": {
8180
+ "type": "object",
8181
+ "properties": {
8182
+ "url": {
8143
8183
  "type": "string",
8144
- "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
8184
+ "maxLength": 2048,
8185
+ "format": "uri"
8145
8186
  },
8146
- {
8147
- "type": "null"
8187
+ "events": {
8188
+ "minItems": 1,
8189
+ "maxItems": 1,
8190
+ "type": "array",
8191
+ "items": {
8192
+ "type": "string",
8193
+ "enum": ["failed"]
8194
+ }
8195
+ },
8196
+ "signingKey": {
8197
+ "type": "object",
8198
+ "properties": {
8199
+ "id": {
8200
+ "type": "string",
8201
+ "pattern": "^csk_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
8202
+ }
8203
+ },
8204
+ "required": ["id"]
8205
+ },
8206
+ "revision": {
8207
+ "type": "integer",
8208
+ "exclusiveMinimum": 0,
8209
+ "maximum": 9007199254740991
8148
8210
  }
8149
- ]
8211
+ },
8212
+ "required": ["url", "events", "revision"]
8213
+ }
8214
+ },
8215
+ "required": [
8216
+ "project",
8217
+ "environmentKind",
8218
+ "revision",
8219
+ "email"
8220
+ ]
8221
+ }
8222
+ }
8223
+ },
8224
+ "description": "Read delivery notification settings"
8225
+ },
8226
+ "400": {
8227
+ "content": {
8228
+ "application/problem+json": {
8229
+ "schema": {
8230
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
8231
+ "type": "object",
8232
+ "properties": {
8233
+ "code": {
8234
+ "type": "string",
8235
+ "x-problem-codes": ["invalid_request"]
8150
8236
  },
8151
- "purgeDeadline": {
8152
- "anyOf": [
8153
- {
8154
- "type": "string",
8155
- "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
8237
+ "detail": {
8238
+ "type": "string",
8239
+ "minLength": 1
8240
+ },
8241
+ "errors": {
8242
+ "type": "array",
8243
+ "items": {
8244
+ "type": "object",
8245
+ "properties": {
8246
+ "pointer": {
8247
+ "type": "string",
8248
+ "pattern": "^\\/.*"
8249
+ },
8250
+ "reason": {
8251
+ "type": "string",
8252
+ "minLength": 1
8253
+ }
8156
8254
  },
8157
- {
8158
- "type": "null"
8159
- }
8160
- ]
8255
+ "required": ["pointer", "reason"]
8256
+ }
8161
8257
  },
8162
- "immediate": {
8163
- "type": "boolean"
8258
+ "retryAfterSeconds": {
8259
+ "type": "integer",
8260
+ "exclusiveMinimum": 0,
8261
+ "maximum": 9007199254740991
8164
8262
  },
8165
- "converged": {
8166
- "type": "boolean"
8263
+ "status": {
8264
+ "type": "integer",
8265
+ "minimum": 400,
8266
+ "maximum": 599
8267
+ },
8268
+ "title": {
8269
+ "type": "string",
8270
+ "minLength": 1
8271
+ },
8272
+ "traceId": {
8273
+ "type": "string",
8274
+ "minLength": 1
8275
+ },
8276
+ "type": {
8277
+ "type": "string",
8278
+ "const": "about:blank"
8167
8279
  }
8168
8280
  },
8169
- "required": [
8170
- "organizationId",
8171
- "generation",
8172
- "phase",
8173
- "requestedAt",
8174
- "reversibleUntil",
8175
- "purgeDeadline",
8176
- "immediate",
8177
- "converged"
8178
- ]
8281
+ "required": ["code", "status", "title", "type"]
8179
8282
  }
8180
8283
  }
8181
8284
  },
8182
- "description": "Read organization closure progress"
8285
+ "description": "Problem document. Possible codes at this status: invalid_request."
8183
8286
  },
8184
8287
  "401": {
8185
8288
  "content": {
@@ -8368,6 +8471,67 @@
8368
8471
  },
8369
8472
  "description": "Problem document. Possible codes at this status: not_found."
8370
8473
  },
8474
+ "409": {
8475
+ "content": {
8476
+ "application/problem+json": {
8477
+ "schema": {
8478
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
8479
+ "type": "object",
8480
+ "properties": {
8481
+ "code": {
8482
+ "type": "string",
8483
+ "x-problem-codes": ["project_archived"]
8484
+ },
8485
+ "detail": {
8486
+ "type": "string",
8487
+ "minLength": 1
8488
+ },
8489
+ "errors": {
8490
+ "type": "array",
8491
+ "items": {
8492
+ "type": "object",
8493
+ "properties": {
8494
+ "pointer": {
8495
+ "type": "string",
8496
+ "pattern": "^\\/.*"
8497
+ },
8498
+ "reason": {
8499
+ "type": "string",
8500
+ "minLength": 1
8501
+ }
8502
+ },
8503
+ "required": ["pointer", "reason"]
8504
+ }
8505
+ },
8506
+ "retryAfterSeconds": {
8507
+ "type": "integer",
8508
+ "exclusiveMinimum": 0,
8509
+ "maximum": 9007199254740991
8510
+ },
8511
+ "status": {
8512
+ "type": "integer",
8513
+ "minimum": 400,
8514
+ "maximum": 599
8515
+ },
8516
+ "title": {
8517
+ "type": "string",
8518
+ "minLength": 1
8519
+ },
8520
+ "traceId": {
8521
+ "type": "string",
8522
+ "minLength": 1
8523
+ },
8524
+ "type": {
8525
+ "type": "string",
8526
+ "const": "about:blank"
8527
+ }
8528
+ },
8529
+ "required": ["code", "status", "title", "type"]
8530
+ }
8531
+ }
8532
+ },
8533
+ "description": "Problem document. Possible codes at this status: project_archived."
8534
+ },
8371
8535
  "429": {
8372
8536
  "content": {
8373
8537
  "application/problem+json": {
@@ -8494,111 +8658,167 @@
8494
8658
  "description": "Problem document. Possible codes at this status: capability_not_configured, service_unavailable."
8495
8659
  }
8496
8660
  },
8497
- "summary": "Read organization closure progress",
8661
+ "summary": "Read delivery notification settings",
8498
8662
  "security": [
8499
8663
  {
8500
- "memberSession": ["projects:administer"]
8664
+ "apiCredential": ["projects:read"]
8665
+ },
8666
+ {
8667
+ "memberSession": ["projects:read"],
8668
+ "memberSessionEnvironment": [],
8669
+ "memberSessionProject": []
8501
8670
  }
8502
8671
  ]
8503
- }
8504
- },
8505
- "/v1/organization/close": {
8506
- "post": {
8507
- "description": "Stops customer access, execution and new purchases across the organization. Ordinary closure can be reversed for seven days; immediate erasure skips that window. Non-financial erasure completes within thirty days unless suspended by an operator legal hold. Financial records remain under the configured retention policy. An interrupted request resumes under the same generation; closure is acknowledged only after every configured scheduling shard is fenced.",
8508
- "operationId": "organizations.close",
8509
- "parameters": [],
8672
+ },
8673
+ "patch": {
8674
+ "description": "An admin updates this project's environment preferences at an expected revision. Selected recipients must be current organization members; arbitrary email addresses are not accepted. Null disables the status webhook. Changing URL or filters never reveals a signing secret. Mint the first key through the secure signing-key operation before webhook delivery starts. Failed means final unsuccessful settlement. Redelivery never repeats it. Failed-event webhook calls and their retries are free. Every failed occurrence is emailed separately; no summary window suppresses failures.",
8675
+ "operationId": "projectnotifications.update",
8676
+ "parameters": [
8677
+ {
8678
+ "in": "path",
8679
+ "name": "projectId",
8680
+ "required": true,
8681
+ "schema": {
8682
+ "type": "string"
8683
+ }
8684
+ },
8685
+ {
8686
+ "in": "header",
8687
+ "name": "Idempotency-Key",
8688
+ "required": true,
8689
+ "schema": {
8690
+ "type": "string",
8691
+ "minLength": 16,
8692
+ "maxLength": 255,
8693
+ "pattern": "^[\\x20-\\x7e]+$"
8694
+ }
8695
+ }
8696
+ ],
8510
8697
  "responses": {
8511
8698
  "200": {
8512
8699
  "content": {
8513
8700
  "application/json": {
8514
8701
  "example": {
8515
- "organizationId": "org_01h8xyz9k2m4n6p8r0t2v4w6y8",
8516
- "generation": 1,
8517
- "phase": "closed",
8518
- "requestedAt": "2026-09-12T12:00:00.000Z",
8519
- "reversibleUntil": "2026-09-19T12:00:00.000Z",
8520
- "purgeDeadline": "2026-10-12T12:00:00.000Z",
8521
- "immediate": false,
8522
- "converged": true
8702
+ "project": "proj_01h8xyz9k2m4n6p8r0t2v4w6y8",
8703
+ "environmentKind": "live",
8704
+ "revision": 2,
8705
+ "email": {
8706
+ "enabled": true,
8707
+ "recipients": {
8708
+ "kind": "admins"
8709
+ },
8710
+ "scheduleKinds": "both"
8711
+ }
8523
8712
  },
8524
8713
  "schema": {
8525
8714
  "$schema": "https://json-schema.org/draft/2020-12/schema",
8526
8715
  "type": "object",
8527
8716
  "properties": {
8528
- "organizationId": {
8717
+ "project": {
8529
8718
  "type": "string",
8530
- "pattern": "^org_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
8719
+ "pattern": "^proj_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
8531
8720
  },
8532
- "generation": {
8721
+ "environmentKind": {
8722
+ "type": "string",
8723
+ "enum": ["test", "live"]
8724
+ },
8725
+ "revision": {
8533
8726
  "type": "integer",
8534
- "minimum": 0,
8727
+ "exclusiveMinimum": 0,
8535
8728
  "maximum": 9007199254740991
8536
8729
  },
8537
- "phase": {
8538
- "type": "string",
8539
- "enum": [
8540
- "active",
8541
- "closing",
8542
- "closed",
8543
- "restoring",
8544
- "purging",
8545
- "erased"
8546
- ]
8547
- },
8548
- "requestedAt": {
8549
- "anyOf": [
8550
- {
8551
- "type": "string",
8552
- "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
8730
+ "email": {
8731
+ "type": "object",
8732
+ "properties": {
8733
+ "enabled": {
8734
+ "type": "boolean"
8553
8735
  },
8554
- {
8555
- "type": "null"
8556
- }
8557
- ]
8558
- },
8559
- "reversibleUntil": {
8560
- "anyOf": [
8561
- {
8562
- "type": "string",
8563
- "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
8736
+ "recipients": {
8737
+ "oneOf": [
8738
+ {
8739
+ "type": "object",
8740
+ "properties": {
8741
+ "kind": {
8742
+ "type": "string",
8743
+ "const": "admins"
8744
+ }
8745
+ },
8746
+ "required": ["kind"]
8747
+ },
8748
+ {
8749
+ "type": "object",
8750
+ "properties": {
8751
+ "kind": {
8752
+ "type": "string",
8753
+ "const": "members"
8754
+ },
8755
+ "memberIds": {
8756
+ "minItems": 1,
8757
+ "maxItems": 100,
8758
+ "type": "array",
8759
+ "items": {
8760
+ "type": "string",
8761
+ "pattern": "^mem_[0-9a-f]{26}$"
8762
+ }
8763
+ }
8764
+ },
8765
+ "required": ["kind", "memberIds"]
8766
+ }
8767
+ ]
8564
8768
  },
8565
- {
8566
- "type": "null"
8769
+ "scheduleKinds": {
8770
+ "type": "string",
8771
+ "enum": ["both", "one-shot", "recurring"]
8567
8772
  }
8568
- ]
8773
+ },
8774
+ "required": ["enabled", "recipients", "scheduleKinds"]
8569
8775
  },
8570
- "purgeDeadline": {
8571
- "anyOf": [
8572
- {
8776
+ "statusWebhook": {
8777
+ "type": "object",
8778
+ "properties": {
8779
+ "url": {
8573
8780
  "type": "string",
8574
- "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
8781
+ "maxLength": 2048,
8782
+ "format": "uri"
8575
8783
  },
8576
- {
8577
- "type": "null"
8784
+ "events": {
8785
+ "minItems": 1,
8786
+ "maxItems": 1,
8787
+ "type": "array",
8788
+ "items": {
8789
+ "type": "string",
8790
+ "enum": ["failed"]
8791
+ }
8792
+ },
8793
+ "signingKey": {
8794
+ "type": "object",
8795
+ "properties": {
8796
+ "id": {
8797
+ "type": "string",
8798
+ "pattern": "^csk_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
8799
+ }
8800
+ },
8801
+ "required": ["id"]
8802
+ },
8803
+ "revision": {
8804
+ "type": "integer",
8805
+ "exclusiveMinimum": 0,
8806
+ "maximum": 9007199254740991
8578
8807
  }
8579
- ]
8580
- },
8581
- "immediate": {
8582
- "type": "boolean"
8583
- },
8584
- "converged": {
8585
- "type": "boolean"
8808
+ },
8809
+ "required": ["url", "events", "revision"]
8586
8810
  }
8587
8811
  },
8588
8812
  "required": [
8589
- "organizationId",
8590
- "generation",
8591
- "phase",
8592
- "requestedAt",
8593
- "reversibleUntil",
8594
- "purgeDeadline",
8595
- "immediate",
8596
- "converged"
8813
+ "project",
8814
+ "environmentKind",
8815
+ "revision",
8816
+ "email"
8597
8817
  ]
8598
8818
  }
8599
8819
  }
8600
8820
  },
8601
- "description": "Close the organization and request erasure"
8821
+ "description": "Update delivery notification settings"
8602
8822
  },
8603
8823
  "400": {
8604
8824
  "content": {
@@ -8857,7 +9077,11 @@
8857
9077
  "properties": {
8858
9078
  "code": {
8859
9079
  "type": "string",
8860
- "x-problem-codes": ["state_conflict", "version_conflict"]
9080
+ "x-problem-codes": [
9081
+ "idempotency_key_reused",
9082
+ "project_archived",
9083
+ "revision_conflict"
9084
+ ]
8861
9085
  },
8862
9086
  "detail": {
8863
9087
  "type": "string",
@@ -8907,7 +9131,7 @@
8907
9131
  }
8908
9132
  }
8909
9133
  },
8910
- "description": "Problem document. Possible codes at this status: state_conflict, version_conflict."
9134
+ "description": "Problem document. Possible codes at this status: idempotency_key_reused, project_archived, revision_conflict."
8911
9135
  },
8912
9136
  "429": {
8913
9137
  "content": {
@@ -9035,38 +9259,118 @@
9035
9259
  "description": "Problem document. Possible codes at this status: capability_not_configured, service_unavailable."
9036
9260
  }
9037
9261
  },
9038
- "summary": "Close the organization and request erasure",
9262
+ "summary": "Update delivery notification settings",
9039
9263
  "security": [
9040
9264
  {
9041
- "memberSession": ["projects:administer"]
9265
+ "apiCredential": ["projects:administer"]
9266
+ },
9267
+ {
9268
+ "memberSession": ["projects:administer"],
9269
+ "memberSessionEnvironment": [],
9270
+ "memberSessionProject": []
9042
9271
  }
9043
9272
  ],
9044
9273
  "requestBody": {
9045
9274
  "content": {
9046
9275
  "application/json": {
9047
9276
  "example": {
9048
- "expectedGeneration": 0,
9049
- "immediate": false,
9050
- "confirmation": "delete organization"
9277
+ "expectedRevision": 1,
9278
+ "email": {
9279
+ "enabled": true,
9280
+ "recipients": {
9281
+ "kind": "admins"
9282
+ },
9283
+ "scheduleKinds": "both"
9284
+ }
9051
9285
  },
9052
9286
  "schema": {
9053
9287
  "$schema": "https://json-schema.org/draft/2020-12/schema",
9054
9288
  "type": "object",
9055
9289
  "properties": {
9056
- "expectedGeneration": {
9290
+ "expectedRevision": {
9057
9291
  "type": "integer",
9058
- "minimum": 0,
9292
+ "exclusiveMinimum": 0,
9059
9293
  "maximum": 9007199254740991
9060
9294
  },
9061
- "immediate": {
9062
- "type": "boolean"
9295
+ "email": {
9296
+ "type": "object",
9297
+ "properties": {
9298
+ "enabled": {
9299
+ "type": "boolean"
9300
+ },
9301
+ "recipients": {
9302
+ "oneOf": [
9303
+ {
9304
+ "type": "object",
9305
+ "properties": {
9306
+ "kind": {
9307
+ "type": "string",
9308
+ "const": "admins"
9309
+ }
9310
+ },
9311
+ "required": ["kind"],
9312
+ "additionalProperties": false
9313
+ },
9314
+ {
9315
+ "type": "object",
9316
+ "properties": {
9317
+ "kind": {
9318
+ "type": "string",
9319
+ "const": "members"
9320
+ },
9321
+ "memberIds": {
9322
+ "minItems": 1,
9323
+ "maxItems": 100,
9324
+ "type": "array",
9325
+ "items": {
9326
+ "type": "string",
9327
+ "pattern": "^mem_[0-9a-f]{26}$"
9328
+ }
9329
+ }
9330
+ },
9331
+ "required": ["kind", "memberIds"],
9332
+ "additionalProperties": false
9333
+ }
9334
+ ]
9335
+ },
9336
+ "scheduleKinds": {
9337
+ "type": "string",
9338
+ "enum": ["both", "one-shot", "recurring"]
9339
+ }
9340
+ },
9341
+ "required": ["enabled", "recipients", "scheduleKinds"],
9342
+ "additionalProperties": false
9063
9343
  },
9064
- "confirmation": {
9065
- "type": "string",
9066
- "const": "delete organization"
9344
+ "statusWebhook": {
9345
+ "anyOf": [
9346
+ {
9347
+ "type": "object",
9348
+ "properties": {
9349
+ "url": {
9350
+ "type": "string",
9351
+ "maxLength": 2048,
9352
+ "format": "uri"
9353
+ },
9354
+ "events": {
9355
+ "minItems": 1,
9356
+ "maxItems": 1,
9357
+ "type": "array",
9358
+ "items": {
9359
+ "type": "string",
9360
+ "enum": ["failed"]
9361
+ }
9362
+ }
9363
+ },
9364
+ "required": ["url", "events"],
9365
+ "additionalProperties": false
9366
+ },
9367
+ {
9368
+ "type": "null"
9369
+ }
9370
+ ]
9067
9371
  }
9068
9372
  },
9069
- "required": ["expectedGeneration", "immediate", "confirmation"],
9373
+ "required": ["expectedRevision"],
9070
9374
  "additionalProperties": false
9071
9375
  }
9072
9376
  }
@@ -9075,103 +9379,176 @@
9075
9379
  }
9076
9380
  }
9077
9381
  },
9078
- "/v1/organization/restore": {
9382
+ "/v1/projects/{projectId}/notification-settings/status-signing-key": {
9079
9383
  "post": {
9080
- "description": "Restores access after every configured scheduling shard acknowledges the new generation. Immediate erasure and expired reversible windows cannot be restored. Recovery preserves each schedule's pause and lateness policy and does not reauthorize automatic top-up.",
9081
- "operationId": "organizations.restore",
9082
- "parameters": [],
9384
+ "description": "An admin mints the first key or replaces the current key for an already configured status webhook at an expected revision. The secret appears only in this successful response and cannot be read back. A lost response requires a fresh revision read and another rotation. Queued deliveries using the replaced signing key are suppressed. The request is not automatically replayable; stale retries are refused. The signature covers the exact emitted body bytes.",
9385
+ "operationId": "projectnotifications.rotateSigningKey",
9386
+ "parameters": [
9387
+ {
9388
+ "in": "path",
9389
+ "name": "projectId",
9390
+ "required": true,
9391
+ "schema": {
9392
+ "type": "string"
9393
+ }
9394
+ }
9395
+ ],
9083
9396
  "responses": {
9084
9397
  "200": {
9085
9398
  "content": {
9086
9399
  "application/json": {
9087
9400
  "example": {
9088
- "organizationId": "org_01h8xyz9k2m4n6p8r0t2v4w6y8",
9089
- "generation": 2,
9090
- "phase": "active",
9091
- "requestedAt": "2026-09-12T12:00:00.000Z",
9092
- "reversibleUntil": "2026-09-19T12:00:00.000Z",
9093
- "purgeDeadline": "2026-10-12T12:00:00.000Z",
9094
- "immediate": false,
9095
- "converged": true
9401
+ "settings": {
9402
+ "project": "proj_01h8xyz9k2m4n6p8r0t2v4w6y8",
9403
+ "environmentKind": "live",
9404
+ "revision": 2,
9405
+ "email": {
9406
+ "enabled": true,
9407
+ "recipients": {
9408
+ "kind": "admins"
9409
+ },
9410
+ "scheduleKinds": "both"
9411
+ },
9412
+ "statusWebhook": {
9413
+ "url": "https://hooks.example.com/status",
9414
+ "events": ["failed"],
9415
+ "signingKey": {
9416
+ "id": "csk_01h8xyz9k2m4n6p8r0t2v4w6y8"
9417
+ },
9418
+ "revision": 2
9419
+ }
9420
+ },
9421
+ "keyId": "csk_01h8xyz9k2m4n6p8r0t2v4w6y8",
9422
+ "secret": "ptsk_live_<the-one-time-status-secret>",
9423
+ "shownOnce": true
9096
9424
  },
9097
9425
  "schema": {
9098
9426
  "$schema": "https://json-schema.org/draft/2020-12/schema",
9099
9427
  "type": "object",
9100
9428
  "properties": {
9101
- "organizationId": {
9102
- "type": "string",
9103
- "pattern": "^org_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
9104
- },
9105
- "generation": {
9106
- "type": "integer",
9107
- "minimum": 0,
9108
- "maximum": 9007199254740991
9109
- },
9110
- "phase": {
9111
- "type": "string",
9112
- "enum": [
9113
- "active",
9114
- "closing",
9115
- "closed",
9116
- "restoring",
9117
- "purging",
9118
- "erased"
9119
- ]
9120
- },
9121
- "requestedAt": {
9122
- "anyOf": [
9123
- {
9429
+ "settings": {
9430
+ "type": "object",
9431
+ "properties": {
9432
+ "project": {
9124
9433
  "type": "string",
9125
- "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
9434
+ "pattern": "^proj_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
9126
9435
  },
9127
- {
9128
- "type": "null"
9129
- }
9130
- ]
9131
- },
9132
- "reversibleUntil": {
9133
- "anyOf": [
9134
- {
9436
+ "environmentKind": {
9135
9437
  "type": "string",
9136
- "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
9438
+ "enum": ["test", "live"]
9137
9439
  },
9138
- {
9139
- "type": "null"
9140
- }
9141
- ]
9142
- },
9143
- "purgeDeadline": {
9144
- "anyOf": [
9145
- {
9146
- "type": "string",
9147
- "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
9440
+ "revision": {
9441
+ "type": "integer",
9442
+ "exclusiveMinimum": 0,
9443
+ "maximum": 9007199254740991
9148
9444
  },
9149
- {
9150
- "type": "null"
9445
+ "email": {
9446
+ "type": "object",
9447
+ "properties": {
9448
+ "enabled": {
9449
+ "type": "boolean"
9450
+ },
9451
+ "recipients": {
9452
+ "oneOf": [
9453
+ {
9454
+ "type": "object",
9455
+ "properties": {
9456
+ "kind": {
9457
+ "type": "string",
9458
+ "const": "admins"
9459
+ }
9460
+ },
9461
+ "required": ["kind"]
9462
+ },
9463
+ {
9464
+ "type": "object",
9465
+ "properties": {
9466
+ "kind": {
9467
+ "type": "string",
9468
+ "const": "members"
9469
+ },
9470
+ "memberIds": {
9471
+ "minItems": 1,
9472
+ "maxItems": 100,
9473
+ "type": "array",
9474
+ "items": {
9475
+ "type": "string",
9476
+ "pattern": "^mem_[0-9a-f]{26}$"
9477
+ }
9478
+ }
9479
+ },
9480
+ "required": ["kind", "memberIds"]
9481
+ }
9482
+ ]
9483
+ },
9484
+ "scheduleKinds": {
9485
+ "type": "string",
9486
+ "enum": ["both", "one-shot", "recurring"]
9487
+ }
9488
+ },
9489
+ "required": ["enabled", "recipients", "scheduleKinds"]
9490
+ },
9491
+ "statusWebhook": {
9492
+ "type": "object",
9493
+ "properties": {
9494
+ "url": {
9495
+ "type": "string",
9496
+ "maxLength": 2048,
9497
+ "format": "uri"
9498
+ },
9499
+ "events": {
9500
+ "minItems": 1,
9501
+ "maxItems": 1,
9502
+ "type": "array",
9503
+ "items": {
9504
+ "type": "string",
9505
+ "enum": ["failed"]
9506
+ }
9507
+ },
9508
+ "signingKey": {
9509
+ "type": "object",
9510
+ "properties": {
9511
+ "id": {
9512
+ "type": "string",
9513
+ "pattern": "^csk_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
9514
+ }
9515
+ },
9516
+ "required": ["id"]
9517
+ },
9518
+ "revision": {
9519
+ "type": "integer",
9520
+ "exclusiveMinimum": 0,
9521
+ "maximum": 9007199254740991
9522
+ }
9523
+ },
9524
+ "required": ["url", "events", "revision"]
9151
9525
  }
9526
+ },
9527
+ "required": [
9528
+ "project",
9529
+ "environmentKind",
9530
+ "revision",
9531
+ "email"
9152
9532
  ]
9153
9533
  },
9154
- "immediate": {
9155
- "type": "boolean"
9534
+ "keyId": {
9535
+ "type": "string",
9536
+ "pattern": "^csk_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
9156
9537
  },
9157
- "converged": {
9158
- "type": "boolean"
9538
+ "secret": {
9539
+ "type": "string",
9540
+ "minLength": 1
9541
+ },
9542
+ "shownOnce": {
9543
+ "type": "boolean",
9544
+ "const": true
9159
9545
  }
9160
9546
  },
9161
- "required": [
9162
- "organizationId",
9163
- "generation",
9164
- "phase",
9165
- "requestedAt",
9166
- "reversibleUntil",
9167
- "purgeDeadline",
9168
- "immediate",
9169
- "converged"
9170
- ]
9547
+ "required": ["settings", "keyId", "secret", "shownOnce"]
9171
9548
  }
9172
9549
  }
9173
9550
  },
9174
- "description": "Cancel organization erasure during its reversible window"
9551
+ "description": "Mint or rotate the status webhook signing key"
9175
9552
  },
9176
9553
  "400": {
9177
9554
  "content": {
@@ -9430,7 +9807,11 @@
9430
9807
  "properties": {
9431
9808
  "code": {
9432
9809
  "type": "string",
9433
- "x-problem-codes": ["state_conflict", "version_conflict"]
9810
+ "x-problem-codes": [
9811
+ "project_archived",
9812
+ "revision_conflict",
9813
+ "state_conflict"
9814
+ ]
9434
9815
  },
9435
9816
  "detail": {
9436
9817
  "type": "string",
@@ -9480,7 +9861,7 @@
9480
9861
  }
9481
9862
  }
9482
9863
  },
9483
- "description": "Problem document. Possible codes at this status: state_conflict, version_conflict."
9864
+ "description": "Problem document. Possible codes at this status: project_archived, revision_conflict, state_conflict."
9484
9865
  },
9485
9866
  "429": {
9486
9867
  "content": {
@@ -9608,29 +9989,34 @@
9608
9989
  "description": "Problem document. Possible codes at this status: capability_not_configured, service_unavailable."
9609
9990
  }
9610
9991
  },
9611
- "summary": "Cancel organization erasure during its reversible window",
9992
+ "summary": "Mint or rotate the status webhook signing key",
9612
9993
  "security": [
9613
9994
  {
9614
- "memberSession": ["projects:administer"]
9995
+ "apiCredential": ["projects:administer"]
9996
+ },
9997
+ {
9998
+ "memberSession": ["projects:administer"],
9999
+ "memberSessionEnvironment": [],
10000
+ "memberSessionProject": []
9615
10001
  }
9616
10002
  ],
9617
10003
  "requestBody": {
9618
10004
  "content": {
9619
10005
  "application/json": {
9620
10006
  "example": {
9621
- "expectedGeneration": 1
10007
+ "expectedRevision": 1
9622
10008
  },
9623
10009
  "schema": {
9624
10010
  "$schema": "https://json-schema.org/draft/2020-12/schema",
9625
10011
  "type": "object",
9626
10012
  "properties": {
9627
- "expectedGeneration": {
10013
+ "expectedRevision": {
9628
10014
  "type": "integer",
9629
10015
  "exclusiveMinimum": 0,
9630
10016
  "maximum": 9007199254740991
9631
10017
  }
9632
10018
  },
9633
- "required": ["expectedGeneration"],
10019
+ "required": ["expectedRevision"],
9634
10020
  "additionalProperties": false
9635
10021
  }
9636
10022
  }
@@ -9639,44 +10025,134 @@
9639
10025
  }
9640
10026
  }
9641
10027
  },
9642
- "/__greatwait/version": {
10028
+ "/v1/projects/{projectId}/status-deliveries": {
9643
10029
  "get": {
9644
- "description": "Reports the service, environment, and build the request reached. Unauthenticated: it carries no customer data and is used by canaries and deployment smoke checks.",
9645
- "operationId": "meta.version",
9646
- "parameters": [],
10030
+ "description": "Read the verified project and environment's failure delivery trail, including retry state and actual outbound calls. Failed events and every retry are free. Status delivery failures never create another notification or change the customer's schedule outcome. Customer callback contents and signing secrets are absent.",
10031
+ "operationId": "statusdeliveries.list",
10032
+ "parameters": [
10033
+ {
10034
+ "in": "path",
10035
+ "name": "projectId",
10036
+ "required": true,
10037
+ "schema": {
10038
+ "type": "string"
10039
+ }
10040
+ },
10041
+ {
10042
+ "in": "query",
10043
+ "name": "cursor",
10044
+ "required": false,
10045
+ "schema": {
10046
+ "type": "string",
10047
+ "minLength": 1
10048
+ }
10049
+ },
10050
+ {
10051
+ "in": "query",
10052
+ "name": "limit",
10053
+ "required": false,
10054
+ "schema": {
10055
+ "default": 25,
10056
+ "type": "integer",
10057
+ "minimum": 1,
10058
+ "maximum": 100
10059
+ }
10060
+ }
10061
+ ],
9647
10062
  "responses": {
9648
10063
  "200": {
9649
10064
  "content": {
9650
10065
  "application/json": {
9651
10066
  "example": {
9652
- "buildSha": "9f2c1ab",
9653
- "environment": "development",
9654
- "service": "@greatwait/api"
10067
+ "data": []
9655
10068
  },
9656
10069
  "schema": {
9657
10070
  "$schema": "https://json-schema.org/draft/2020-12/schema",
9658
10071
  "type": "object",
9659
10072
  "properties": {
9660
- "buildSha": {
9661
- "type": "string",
9662
- "minLength": 1
9663
- },
9664
- "environment": {
9665
- "type": "string",
9666
- "minLength": 1
10073
+ "data": {
10074
+ "type": "array",
10075
+ "items": {
10076
+ "type": "object",
10077
+ "properties": {
10078
+ "id": {
10079
+ "type": "string",
10080
+ "minLength": 1,
10081
+ "maxLength": 255
10082
+ },
10083
+ "event": {
10084
+ "type": "string",
10085
+ "enum": ["failed"]
10086
+ },
10087
+ "schedule": {
10088
+ "type": "string",
10089
+ "pattern": "^sch_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
10090
+ },
10091
+ "occurrence": {
10092
+ "type": "string",
10093
+ "pattern": "^occ_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
10094
+ },
10095
+ "occurredAt": {
10096
+ "type": "string",
10097
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
10098
+ },
10099
+ "url": {
10100
+ "type": "string",
10101
+ "format": "uri"
10102
+ },
10103
+ "state": {
10104
+ "type": "string",
10105
+ "enum": [
10106
+ "pending",
10107
+ "delivering",
10108
+ "delivered",
10109
+ "failed",
10110
+ "suppressed"
10111
+ ]
10112
+ },
10113
+ "attempts": {
10114
+ "type": "integer",
10115
+ "minimum": 0,
10116
+ "maximum": 9007199254740991
10117
+ },
10118
+ "nextAttemptAt": {
10119
+ "type": "string",
10120
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
10121
+ },
10122
+ "lastStatus": {
10123
+ "type": "integer",
10124
+ "minimum": 100,
10125
+ "maximum": 599
10126
+ },
10127
+ "lastError": {
10128
+ "type": "string",
10129
+ "maxLength": 128
10130
+ }
10131
+ },
10132
+ "required": [
10133
+ "id",
10134
+ "event",
10135
+ "schedule",
10136
+ "occurrence",
10137
+ "occurredAt",
10138
+ "url",
10139
+ "state",
10140
+ "attempts"
10141
+ ]
10142
+ }
9667
10143
  },
9668
- "service": {
10144
+ "nextCursor": {
9669
10145
  "type": "string",
9670
10146
  "minLength": 1
9671
10147
  }
9672
10148
  },
9673
- "required": ["buildSha", "environment", "service"]
10149
+ "required": ["data"]
9674
10150
  }
9675
10151
  }
9676
10152
  },
9677
- "description": "Read the deployed version"
10153
+ "description": "List failure webhook deliveries"
9678
10154
  },
9679
- "429": {
10155
+ "400": {
9680
10156
  "content": {
9681
10157
  "application/problem+json": {
9682
10158
  "schema": {
@@ -9685,7 +10161,7 @@
9685
10161
  "properties": {
9686
10162
  "code": {
9687
10163
  "type": "string",
9688
- "x-problem-codes": ["rate_limited"]
10164
+ "x-problem-codes": ["invalid_request"]
9689
10165
  },
9690
10166
  "detail": {
9691
10167
  "type": "string",
@@ -9735,9 +10211,9 @@
9735
10211
  }
9736
10212
  }
9737
10213
  },
9738
- "description": "Problem document. Possible codes at this status: rate_limited."
10214
+ "description": "Problem document. Possible codes at this status: invalid_request."
9739
10215
  },
9740
- "503": {
10216
+ "401": {
9741
10217
  "content": {
9742
10218
  "application/problem+json": {
9743
10219
  "schema": {
@@ -9747,8 +10223,9 @@
9747
10223
  "code": {
9748
10224
  "type": "string",
9749
10225
  "x-problem-codes": [
9750
- "capability_not_configured",
9751
- "service_unavailable"
10226
+ "authentication_required",
10227
+ "credential_expired",
10228
+ "credential_revoked"
9752
10229
  ]
9753
10230
  },
9754
10231
  "detail": {
@@ -9799,67 +10276,9 @@
9799
10276
  }
9800
10277
  }
9801
10278
  },
9802
- "description": "Problem document. Possible codes at this status: capability_not_configured, service_unavailable."
9803
- }
9804
- },
9805
- "summary": "Read the deployed version"
9806
- }
9807
- },
9808
- "/_scaffold": {
9809
- "get": {
9810
- "description": "Reports the workspace layer this service occupies and the layers it may depend on. Exists so the architecture boundary is observable at runtime, not only at build time.",
9811
- "operationId": "meta.scaffold",
9812
- "parameters": [],
9813
- "responses": {
9814
- "200": {
9815
- "content": {
9816
- "application/json": {
9817
- "example": {
9818
- "dependsOn": ["application", "contract", "platform"],
9819
- "layer": "adapter",
9820
- "service": "@greatwait/api"
9821
- },
9822
- "schema": {
9823
- "$schema": "https://json-schema.org/draft/2020-12/schema",
9824
- "type": "object",
9825
- "properties": {
9826
- "dependsOn": {
9827
- "type": "array",
9828
- "items": {
9829
- "type": "string",
9830
- "enum": [
9831
- "contract",
9832
- "platform",
9833
- "domain",
9834
- "application",
9835
- "adapter",
9836
- "test-support"
9837
- ]
9838
- }
9839
- },
9840
- "layer": {
9841
- "type": "string",
9842
- "enum": [
9843
- "contract",
9844
- "platform",
9845
- "domain",
9846
- "application",
9847
- "adapter",
9848
- "test-support"
9849
- ]
9850
- },
9851
- "service": {
9852
- "type": "string",
9853
- "minLength": 1
9854
- }
9855
- },
9856
- "required": ["dependsOn", "layer", "service"]
9857
- }
9858
- }
9859
- },
9860
- "description": "Read the workspace scaffold"
10279
+ "description": "Problem document. Possible codes at this status: authentication_required, credential_expired, credential_revoked."
9861
10280
  },
9862
- "429": {
10281
+ "403": {
9863
10282
  "content": {
9864
10283
  "application/problem+json": {
9865
10284
  "schema": {
@@ -9868,7 +10287,7 @@
9868
10287
  "properties": {
9869
10288
  "code": {
9870
10289
  "type": "string",
9871
- "x-problem-codes": ["rate_limited"]
10290
+ "x-problem-codes": ["scope_missing"]
9872
10291
  },
9873
10292
  "detail": {
9874
10293
  "type": "string",
@@ -9918,9 +10337,9 @@
9918
10337
  }
9919
10338
  }
9920
10339
  },
9921
- "description": "Problem document. Possible codes at this status: rate_limited."
10340
+ "description": "Problem document. Possible codes at this status: scope_missing."
9922
10341
  },
9923
- "503": {
10342
+ "404": {
9924
10343
  "content": {
9925
10344
  "application/problem+json": {
9926
10345
  "schema": {
@@ -9929,10 +10348,2108 @@
9929
10348
  "properties": {
9930
10349
  "code": {
9931
10350
  "type": "string",
9932
- "x-problem-codes": [
9933
- "capability_not_configured",
9934
- "service_unavailable"
9935
- ]
10351
+ "x-problem-codes": ["not_found"]
10352
+ },
10353
+ "detail": {
10354
+ "type": "string",
10355
+ "minLength": 1
10356
+ },
10357
+ "errors": {
10358
+ "type": "array",
10359
+ "items": {
10360
+ "type": "object",
10361
+ "properties": {
10362
+ "pointer": {
10363
+ "type": "string",
10364
+ "pattern": "^\\/.*"
10365
+ },
10366
+ "reason": {
10367
+ "type": "string",
10368
+ "minLength": 1
10369
+ }
10370
+ },
10371
+ "required": ["pointer", "reason"]
10372
+ }
10373
+ },
10374
+ "retryAfterSeconds": {
10375
+ "type": "integer",
10376
+ "exclusiveMinimum": 0,
10377
+ "maximum": 9007199254740991
10378
+ },
10379
+ "status": {
10380
+ "type": "integer",
10381
+ "minimum": 400,
10382
+ "maximum": 599
10383
+ },
10384
+ "title": {
10385
+ "type": "string",
10386
+ "minLength": 1
10387
+ },
10388
+ "traceId": {
10389
+ "type": "string",
10390
+ "minLength": 1
10391
+ },
10392
+ "type": {
10393
+ "type": "string",
10394
+ "const": "about:blank"
10395
+ }
10396
+ },
10397
+ "required": ["code", "status", "title", "type"]
10398
+ }
10399
+ }
10400
+ },
10401
+ "description": "Problem document. Possible codes at this status: not_found."
10402
+ },
10403
+ "409": {
10404
+ "content": {
10405
+ "application/problem+json": {
10406
+ "schema": {
10407
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
10408
+ "type": "object",
10409
+ "properties": {
10410
+ "code": {
10411
+ "type": "string",
10412
+ "x-problem-codes": ["project_archived"]
10413
+ },
10414
+ "detail": {
10415
+ "type": "string",
10416
+ "minLength": 1
10417
+ },
10418
+ "errors": {
10419
+ "type": "array",
10420
+ "items": {
10421
+ "type": "object",
10422
+ "properties": {
10423
+ "pointer": {
10424
+ "type": "string",
10425
+ "pattern": "^\\/.*"
10426
+ },
10427
+ "reason": {
10428
+ "type": "string",
10429
+ "minLength": 1
10430
+ }
10431
+ },
10432
+ "required": ["pointer", "reason"]
10433
+ }
10434
+ },
10435
+ "retryAfterSeconds": {
10436
+ "type": "integer",
10437
+ "exclusiveMinimum": 0,
10438
+ "maximum": 9007199254740991
10439
+ },
10440
+ "status": {
10441
+ "type": "integer",
10442
+ "minimum": 400,
10443
+ "maximum": 599
10444
+ },
10445
+ "title": {
10446
+ "type": "string",
10447
+ "minLength": 1
10448
+ },
10449
+ "traceId": {
10450
+ "type": "string",
10451
+ "minLength": 1
10452
+ },
10453
+ "type": {
10454
+ "type": "string",
10455
+ "const": "about:blank"
10456
+ }
10457
+ },
10458
+ "required": ["code", "status", "title", "type"]
10459
+ }
10460
+ }
10461
+ },
10462
+ "description": "Problem document. Possible codes at this status: project_archived."
10463
+ },
10464
+ "429": {
10465
+ "content": {
10466
+ "application/problem+json": {
10467
+ "schema": {
10468
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
10469
+ "type": "object",
10470
+ "properties": {
10471
+ "code": {
10472
+ "type": "string",
10473
+ "x-problem-codes": ["rate_limited"]
10474
+ },
10475
+ "detail": {
10476
+ "type": "string",
10477
+ "minLength": 1
10478
+ },
10479
+ "errors": {
10480
+ "type": "array",
10481
+ "items": {
10482
+ "type": "object",
10483
+ "properties": {
10484
+ "pointer": {
10485
+ "type": "string",
10486
+ "pattern": "^\\/.*"
10487
+ },
10488
+ "reason": {
10489
+ "type": "string",
10490
+ "minLength": 1
10491
+ }
10492
+ },
10493
+ "required": ["pointer", "reason"]
10494
+ }
10495
+ },
10496
+ "retryAfterSeconds": {
10497
+ "type": "integer",
10498
+ "exclusiveMinimum": 0,
10499
+ "maximum": 9007199254740991
10500
+ },
10501
+ "status": {
10502
+ "type": "integer",
10503
+ "minimum": 400,
10504
+ "maximum": 599
10505
+ },
10506
+ "title": {
10507
+ "type": "string",
10508
+ "minLength": 1
10509
+ },
10510
+ "traceId": {
10511
+ "type": "string",
10512
+ "minLength": 1
10513
+ },
10514
+ "type": {
10515
+ "type": "string",
10516
+ "const": "about:blank"
10517
+ }
10518
+ },
10519
+ "required": ["code", "status", "title", "type"]
10520
+ }
10521
+ }
10522
+ },
10523
+ "description": "Problem document. Possible codes at this status: rate_limited."
10524
+ },
10525
+ "503": {
10526
+ "content": {
10527
+ "application/problem+json": {
10528
+ "schema": {
10529
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
10530
+ "type": "object",
10531
+ "properties": {
10532
+ "code": {
10533
+ "type": "string",
10534
+ "x-problem-codes": [
10535
+ "capability_not_configured",
10536
+ "service_unavailable"
10537
+ ]
10538
+ },
10539
+ "detail": {
10540
+ "type": "string",
10541
+ "minLength": 1
10542
+ },
10543
+ "errors": {
10544
+ "type": "array",
10545
+ "items": {
10546
+ "type": "object",
10547
+ "properties": {
10548
+ "pointer": {
10549
+ "type": "string",
10550
+ "pattern": "^\\/.*"
10551
+ },
10552
+ "reason": {
10553
+ "type": "string",
10554
+ "minLength": 1
10555
+ }
10556
+ },
10557
+ "required": ["pointer", "reason"]
10558
+ }
10559
+ },
10560
+ "retryAfterSeconds": {
10561
+ "type": "integer",
10562
+ "exclusiveMinimum": 0,
10563
+ "maximum": 9007199254740991
10564
+ },
10565
+ "status": {
10566
+ "type": "integer",
10567
+ "minimum": 400,
10568
+ "maximum": 599
10569
+ },
10570
+ "title": {
10571
+ "type": "string",
10572
+ "minLength": 1
10573
+ },
10574
+ "traceId": {
10575
+ "type": "string",
10576
+ "minLength": 1
10577
+ },
10578
+ "type": {
10579
+ "type": "string",
10580
+ "const": "about:blank"
10581
+ }
10582
+ },
10583
+ "required": ["code", "status", "title", "type"]
10584
+ }
10585
+ }
10586
+ },
10587
+ "description": "Problem document. Possible codes at this status: capability_not_configured, service_unavailable."
10588
+ }
10589
+ },
10590
+ "summary": "List failure webhook deliveries",
10591
+ "security": [
10592
+ {
10593
+ "apiCredential": ["occurrences:read"]
10594
+ },
10595
+ {
10596
+ "memberSession": ["occurrences:read"],
10597
+ "memberSessionEnvironment": [],
10598
+ "memberSessionProject": []
10599
+ }
10600
+ ]
10601
+ }
10602
+ },
10603
+ "/v1/organization/lifecycle": {
10604
+ "get": {
10605
+ "description": "Reads the signed-in administrator's organization closure generation and progress, including the reversible window. It remains available during closure so the administrator can request recovery.",
10606
+ "operationId": "organizations.lifecycle",
10607
+ "parameters": [],
10608
+ "responses": {
10609
+ "200": {
10610
+ "content": {
10611
+ "application/json": {
10612
+ "example": {
10613
+ "organizationId": "org_01h8xyz9k2m4n6p8r0t2v4w6y8",
10614
+ "generation": 1,
10615
+ "phase": "closed",
10616
+ "requestedAt": "2026-09-12T12:00:00.000Z",
10617
+ "reversibleUntil": "2026-09-19T12:00:00.000Z",
10618
+ "purgeDeadline": "2026-10-12T12:00:00.000Z",
10619
+ "immediate": false,
10620
+ "converged": true
10621
+ },
10622
+ "schema": {
10623
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
10624
+ "type": "object",
10625
+ "properties": {
10626
+ "organizationId": {
10627
+ "type": "string",
10628
+ "pattern": "^org_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
10629
+ },
10630
+ "generation": {
10631
+ "type": "integer",
10632
+ "minimum": 0,
10633
+ "maximum": 9007199254740991
10634
+ },
10635
+ "phase": {
10636
+ "type": "string",
10637
+ "enum": [
10638
+ "active",
10639
+ "closing",
10640
+ "closed",
10641
+ "restoring",
10642
+ "purging",
10643
+ "erased"
10644
+ ]
10645
+ },
10646
+ "requestedAt": {
10647
+ "anyOf": [
10648
+ {
10649
+ "type": "string",
10650
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
10651
+ },
10652
+ {
10653
+ "type": "null"
10654
+ }
10655
+ ]
10656
+ },
10657
+ "reversibleUntil": {
10658
+ "anyOf": [
10659
+ {
10660
+ "type": "string",
10661
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
10662
+ },
10663
+ {
10664
+ "type": "null"
10665
+ }
10666
+ ]
10667
+ },
10668
+ "purgeDeadline": {
10669
+ "anyOf": [
10670
+ {
10671
+ "type": "string",
10672
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
10673
+ },
10674
+ {
10675
+ "type": "null"
10676
+ }
10677
+ ]
10678
+ },
10679
+ "immediate": {
10680
+ "type": "boolean"
10681
+ },
10682
+ "converged": {
10683
+ "type": "boolean"
10684
+ }
10685
+ },
10686
+ "required": [
10687
+ "organizationId",
10688
+ "generation",
10689
+ "phase",
10690
+ "requestedAt",
10691
+ "reversibleUntil",
10692
+ "purgeDeadline",
10693
+ "immediate",
10694
+ "converged"
10695
+ ]
10696
+ }
10697
+ }
10698
+ },
10699
+ "description": "Read organization closure progress"
10700
+ },
10701
+ "401": {
10702
+ "content": {
10703
+ "application/problem+json": {
10704
+ "schema": {
10705
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
10706
+ "type": "object",
10707
+ "properties": {
10708
+ "code": {
10709
+ "type": "string",
10710
+ "x-problem-codes": [
10711
+ "authentication_required",
10712
+ "credential_expired",
10713
+ "credential_revoked"
10714
+ ]
10715
+ },
10716
+ "detail": {
10717
+ "type": "string",
10718
+ "minLength": 1
10719
+ },
10720
+ "errors": {
10721
+ "type": "array",
10722
+ "items": {
10723
+ "type": "object",
10724
+ "properties": {
10725
+ "pointer": {
10726
+ "type": "string",
10727
+ "pattern": "^\\/.*"
10728
+ },
10729
+ "reason": {
10730
+ "type": "string",
10731
+ "minLength": 1
10732
+ }
10733
+ },
10734
+ "required": ["pointer", "reason"]
10735
+ }
10736
+ },
10737
+ "retryAfterSeconds": {
10738
+ "type": "integer",
10739
+ "exclusiveMinimum": 0,
10740
+ "maximum": 9007199254740991
10741
+ },
10742
+ "status": {
10743
+ "type": "integer",
10744
+ "minimum": 400,
10745
+ "maximum": 599
10746
+ },
10747
+ "title": {
10748
+ "type": "string",
10749
+ "minLength": 1
10750
+ },
10751
+ "traceId": {
10752
+ "type": "string",
10753
+ "minLength": 1
10754
+ },
10755
+ "type": {
10756
+ "type": "string",
10757
+ "const": "about:blank"
10758
+ }
10759
+ },
10760
+ "required": ["code", "status", "title", "type"]
10761
+ }
10762
+ }
10763
+ },
10764
+ "description": "Problem document. Possible codes at this status: authentication_required, credential_expired, credential_revoked."
10765
+ },
10766
+ "403": {
10767
+ "content": {
10768
+ "application/problem+json": {
10769
+ "schema": {
10770
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
10771
+ "type": "object",
10772
+ "properties": {
10773
+ "code": {
10774
+ "type": "string",
10775
+ "x-problem-codes": ["scope_missing"]
10776
+ },
10777
+ "detail": {
10778
+ "type": "string",
10779
+ "minLength": 1
10780
+ },
10781
+ "errors": {
10782
+ "type": "array",
10783
+ "items": {
10784
+ "type": "object",
10785
+ "properties": {
10786
+ "pointer": {
10787
+ "type": "string",
10788
+ "pattern": "^\\/.*"
10789
+ },
10790
+ "reason": {
10791
+ "type": "string",
10792
+ "minLength": 1
10793
+ }
10794
+ },
10795
+ "required": ["pointer", "reason"]
10796
+ }
10797
+ },
10798
+ "retryAfterSeconds": {
10799
+ "type": "integer",
10800
+ "exclusiveMinimum": 0,
10801
+ "maximum": 9007199254740991
10802
+ },
10803
+ "status": {
10804
+ "type": "integer",
10805
+ "minimum": 400,
10806
+ "maximum": 599
10807
+ },
10808
+ "title": {
10809
+ "type": "string",
10810
+ "minLength": 1
10811
+ },
10812
+ "traceId": {
10813
+ "type": "string",
10814
+ "minLength": 1
10815
+ },
10816
+ "type": {
10817
+ "type": "string",
10818
+ "const": "about:blank"
10819
+ }
10820
+ },
10821
+ "required": ["code", "status", "title", "type"]
10822
+ }
10823
+ }
10824
+ },
10825
+ "description": "Problem document. Possible codes at this status: scope_missing."
10826
+ },
10827
+ "404": {
10828
+ "content": {
10829
+ "application/problem+json": {
10830
+ "schema": {
10831
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
10832
+ "type": "object",
10833
+ "properties": {
10834
+ "code": {
10835
+ "type": "string",
10836
+ "x-problem-codes": ["not_found"]
10837
+ },
10838
+ "detail": {
10839
+ "type": "string",
10840
+ "minLength": 1
10841
+ },
10842
+ "errors": {
10843
+ "type": "array",
10844
+ "items": {
10845
+ "type": "object",
10846
+ "properties": {
10847
+ "pointer": {
10848
+ "type": "string",
10849
+ "pattern": "^\\/.*"
10850
+ },
10851
+ "reason": {
10852
+ "type": "string",
10853
+ "minLength": 1
10854
+ }
10855
+ },
10856
+ "required": ["pointer", "reason"]
10857
+ }
10858
+ },
10859
+ "retryAfterSeconds": {
10860
+ "type": "integer",
10861
+ "exclusiveMinimum": 0,
10862
+ "maximum": 9007199254740991
10863
+ },
10864
+ "status": {
10865
+ "type": "integer",
10866
+ "minimum": 400,
10867
+ "maximum": 599
10868
+ },
10869
+ "title": {
10870
+ "type": "string",
10871
+ "minLength": 1
10872
+ },
10873
+ "traceId": {
10874
+ "type": "string",
10875
+ "minLength": 1
10876
+ },
10877
+ "type": {
10878
+ "type": "string",
10879
+ "const": "about:blank"
10880
+ }
10881
+ },
10882
+ "required": ["code", "status", "title", "type"]
10883
+ }
10884
+ }
10885
+ },
10886
+ "description": "Problem document. Possible codes at this status: not_found."
10887
+ },
10888
+ "429": {
10889
+ "content": {
10890
+ "application/problem+json": {
10891
+ "schema": {
10892
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
10893
+ "type": "object",
10894
+ "properties": {
10895
+ "code": {
10896
+ "type": "string",
10897
+ "x-problem-codes": ["rate_limited"]
10898
+ },
10899
+ "detail": {
10900
+ "type": "string",
10901
+ "minLength": 1
10902
+ },
10903
+ "errors": {
10904
+ "type": "array",
10905
+ "items": {
10906
+ "type": "object",
10907
+ "properties": {
10908
+ "pointer": {
10909
+ "type": "string",
10910
+ "pattern": "^\\/.*"
10911
+ },
10912
+ "reason": {
10913
+ "type": "string",
10914
+ "minLength": 1
10915
+ }
10916
+ },
10917
+ "required": ["pointer", "reason"]
10918
+ }
10919
+ },
10920
+ "retryAfterSeconds": {
10921
+ "type": "integer",
10922
+ "exclusiveMinimum": 0,
10923
+ "maximum": 9007199254740991
10924
+ },
10925
+ "status": {
10926
+ "type": "integer",
10927
+ "minimum": 400,
10928
+ "maximum": 599
10929
+ },
10930
+ "title": {
10931
+ "type": "string",
10932
+ "minLength": 1
10933
+ },
10934
+ "traceId": {
10935
+ "type": "string",
10936
+ "minLength": 1
10937
+ },
10938
+ "type": {
10939
+ "type": "string",
10940
+ "const": "about:blank"
10941
+ }
10942
+ },
10943
+ "required": ["code", "status", "title", "type"]
10944
+ }
10945
+ }
10946
+ },
10947
+ "description": "Problem document. Possible codes at this status: rate_limited."
10948
+ },
10949
+ "503": {
10950
+ "content": {
10951
+ "application/problem+json": {
10952
+ "schema": {
10953
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
10954
+ "type": "object",
10955
+ "properties": {
10956
+ "code": {
10957
+ "type": "string",
10958
+ "x-problem-codes": [
10959
+ "capability_not_configured",
10960
+ "service_unavailable"
10961
+ ]
10962
+ },
10963
+ "detail": {
10964
+ "type": "string",
10965
+ "minLength": 1
10966
+ },
10967
+ "errors": {
10968
+ "type": "array",
10969
+ "items": {
10970
+ "type": "object",
10971
+ "properties": {
10972
+ "pointer": {
10973
+ "type": "string",
10974
+ "pattern": "^\\/.*"
10975
+ },
10976
+ "reason": {
10977
+ "type": "string",
10978
+ "minLength": 1
10979
+ }
10980
+ },
10981
+ "required": ["pointer", "reason"]
10982
+ }
10983
+ },
10984
+ "retryAfterSeconds": {
10985
+ "type": "integer",
10986
+ "exclusiveMinimum": 0,
10987
+ "maximum": 9007199254740991
10988
+ },
10989
+ "status": {
10990
+ "type": "integer",
10991
+ "minimum": 400,
10992
+ "maximum": 599
10993
+ },
10994
+ "title": {
10995
+ "type": "string",
10996
+ "minLength": 1
10997
+ },
10998
+ "traceId": {
10999
+ "type": "string",
11000
+ "minLength": 1
11001
+ },
11002
+ "type": {
11003
+ "type": "string",
11004
+ "const": "about:blank"
11005
+ }
11006
+ },
11007
+ "required": ["code", "status", "title", "type"]
11008
+ }
11009
+ }
11010
+ },
11011
+ "description": "Problem document. Possible codes at this status: capability_not_configured, service_unavailable."
11012
+ }
11013
+ },
11014
+ "summary": "Read organization closure progress",
11015
+ "security": [
11016
+ {
11017
+ "memberSession": ["projects:administer"]
11018
+ }
11019
+ ]
11020
+ }
11021
+ },
11022
+ "/v1/organization/close": {
11023
+ "post": {
11024
+ "description": "Stops customer access, execution and new purchases across the organization. Ordinary closure can be reversed for seven days; immediate erasure skips that window. Non-financial erasure completes within thirty days unless suspended by an operator legal hold. Financial records remain under the configured retention policy. An interrupted request resumes under the same generation; closure is acknowledged only after every configured scheduling shard is fenced.",
11025
+ "operationId": "organizations.close",
11026
+ "parameters": [],
11027
+ "responses": {
11028
+ "200": {
11029
+ "content": {
11030
+ "application/json": {
11031
+ "example": {
11032
+ "organizationId": "org_01h8xyz9k2m4n6p8r0t2v4w6y8",
11033
+ "generation": 1,
11034
+ "phase": "closed",
11035
+ "requestedAt": "2026-09-12T12:00:00.000Z",
11036
+ "reversibleUntil": "2026-09-19T12:00:00.000Z",
11037
+ "purgeDeadline": "2026-10-12T12:00:00.000Z",
11038
+ "immediate": false,
11039
+ "converged": true
11040
+ },
11041
+ "schema": {
11042
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11043
+ "type": "object",
11044
+ "properties": {
11045
+ "organizationId": {
11046
+ "type": "string",
11047
+ "pattern": "^org_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
11048
+ },
11049
+ "generation": {
11050
+ "type": "integer",
11051
+ "minimum": 0,
11052
+ "maximum": 9007199254740991
11053
+ },
11054
+ "phase": {
11055
+ "type": "string",
11056
+ "enum": [
11057
+ "active",
11058
+ "closing",
11059
+ "closed",
11060
+ "restoring",
11061
+ "purging",
11062
+ "erased"
11063
+ ]
11064
+ },
11065
+ "requestedAt": {
11066
+ "anyOf": [
11067
+ {
11068
+ "type": "string",
11069
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
11070
+ },
11071
+ {
11072
+ "type": "null"
11073
+ }
11074
+ ]
11075
+ },
11076
+ "reversibleUntil": {
11077
+ "anyOf": [
11078
+ {
11079
+ "type": "string",
11080
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
11081
+ },
11082
+ {
11083
+ "type": "null"
11084
+ }
11085
+ ]
11086
+ },
11087
+ "purgeDeadline": {
11088
+ "anyOf": [
11089
+ {
11090
+ "type": "string",
11091
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
11092
+ },
11093
+ {
11094
+ "type": "null"
11095
+ }
11096
+ ]
11097
+ },
11098
+ "immediate": {
11099
+ "type": "boolean"
11100
+ },
11101
+ "converged": {
11102
+ "type": "boolean"
11103
+ }
11104
+ },
11105
+ "required": [
11106
+ "organizationId",
11107
+ "generation",
11108
+ "phase",
11109
+ "requestedAt",
11110
+ "reversibleUntil",
11111
+ "purgeDeadline",
11112
+ "immediate",
11113
+ "converged"
11114
+ ]
11115
+ }
11116
+ }
11117
+ },
11118
+ "description": "Close the organization and request erasure"
11119
+ },
11120
+ "400": {
11121
+ "content": {
11122
+ "application/problem+json": {
11123
+ "schema": {
11124
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11125
+ "type": "object",
11126
+ "properties": {
11127
+ "code": {
11128
+ "type": "string",
11129
+ "x-problem-codes": ["invalid_request"]
11130
+ },
11131
+ "detail": {
11132
+ "type": "string",
11133
+ "minLength": 1
11134
+ },
11135
+ "errors": {
11136
+ "type": "array",
11137
+ "items": {
11138
+ "type": "object",
11139
+ "properties": {
11140
+ "pointer": {
11141
+ "type": "string",
11142
+ "pattern": "^\\/.*"
11143
+ },
11144
+ "reason": {
11145
+ "type": "string",
11146
+ "minLength": 1
11147
+ }
11148
+ },
11149
+ "required": ["pointer", "reason"]
11150
+ }
11151
+ },
11152
+ "retryAfterSeconds": {
11153
+ "type": "integer",
11154
+ "exclusiveMinimum": 0,
11155
+ "maximum": 9007199254740991
11156
+ },
11157
+ "status": {
11158
+ "type": "integer",
11159
+ "minimum": 400,
11160
+ "maximum": 599
11161
+ },
11162
+ "title": {
11163
+ "type": "string",
11164
+ "minLength": 1
11165
+ },
11166
+ "traceId": {
11167
+ "type": "string",
11168
+ "minLength": 1
11169
+ },
11170
+ "type": {
11171
+ "type": "string",
11172
+ "const": "about:blank"
11173
+ }
11174
+ },
11175
+ "required": ["code", "status", "title", "type"]
11176
+ }
11177
+ }
11178
+ },
11179
+ "description": "Problem document. Possible codes at this status: invalid_request."
11180
+ },
11181
+ "401": {
11182
+ "content": {
11183
+ "application/problem+json": {
11184
+ "schema": {
11185
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11186
+ "type": "object",
11187
+ "properties": {
11188
+ "code": {
11189
+ "type": "string",
11190
+ "x-problem-codes": [
11191
+ "authentication_required",
11192
+ "credential_expired",
11193
+ "credential_revoked"
11194
+ ]
11195
+ },
11196
+ "detail": {
11197
+ "type": "string",
11198
+ "minLength": 1
11199
+ },
11200
+ "errors": {
11201
+ "type": "array",
11202
+ "items": {
11203
+ "type": "object",
11204
+ "properties": {
11205
+ "pointer": {
11206
+ "type": "string",
11207
+ "pattern": "^\\/.*"
11208
+ },
11209
+ "reason": {
11210
+ "type": "string",
11211
+ "minLength": 1
11212
+ }
11213
+ },
11214
+ "required": ["pointer", "reason"]
11215
+ }
11216
+ },
11217
+ "retryAfterSeconds": {
11218
+ "type": "integer",
11219
+ "exclusiveMinimum": 0,
11220
+ "maximum": 9007199254740991
11221
+ },
11222
+ "status": {
11223
+ "type": "integer",
11224
+ "minimum": 400,
11225
+ "maximum": 599
11226
+ },
11227
+ "title": {
11228
+ "type": "string",
11229
+ "minLength": 1
11230
+ },
11231
+ "traceId": {
11232
+ "type": "string",
11233
+ "minLength": 1
11234
+ },
11235
+ "type": {
11236
+ "type": "string",
11237
+ "const": "about:blank"
11238
+ }
11239
+ },
11240
+ "required": ["code", "status", "title", "type"]
11241
+ }
11242
+ }
11243
+ },
11244
+ "description": "Problem document. Possible codes at this status: authentication_required, credential_expired, credential_revoked."
11245
+ },
11246
+ "403": {
11247
+ "content": {
11248
+ "application/problem+json": {
11249
+ "schema": {
11250
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11251
+ "type": "object",
11252
+ "properties": {
11253
+ "code": {
11254
+ "type": "string",
11255
+ "x-problem-codes": ["scope_missing"]
11256
+ },
11257
+ "detail": {
11258
+ "type": "string",
11259
+ "minLength": 1
11260
+ },
11261
+ "errors": {
11262
+ "type": "array",
11263
+ "items": {
11264
+ "type": "object",
11265
+ "properties": {
11266
+ "pointer": {
11267
+ "type": "string",
11268
+ "pattern": "^\\/.*"
11269
+ },
11270
+ "reason": {
11271
+ "type": "string",
11272
+ "minLength": 1
11273
+ }
11274
+ },
11275
+ "required": ["pointer", "reason"]
11276
+ }
11277
+ },
11278
+ "retryAfterSeconds": {
11279
+ "type": "integer",
11280
+ "exclusiveMinimum": 0,
11281
+ "maximum": 9007199254740991
11282
+ },
11283
+ "status": {
11284
+ "type": "integer",
11285
+ "minimum": 400,
11286
+ "maximum": 599
11287
+ },
11288
+ "title": {
11289
+ "type": "string",
11290
+ "minLength": 1
11291
+ },
11292
+ "traceId": {
11293
+ "type": "string",
11294
+ "minLength": 1
11295
+ },
11296
+ "type": {
11297
+ "type": "string",
11298
+ "const": "about:blank"
11299
+ }
11300
+ },
11301
+ "required": ["code", "status", "title", "type"]
11302
+ }
11303
+ }
11304
+ },
11305
+ "description": "Problem document. Possible codes at this status: scope_missing."
11306
+ },
11307
+ "404": {
11308
+ "content": {
11309
+ "application/problem+json": {
11310
+ "schema": {
11311
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11312
+ "type": "object",
11313
+ "properties": {
11314
+ "code": {
11315
+ "type": "string",
11316
+ "x-problem-codes": ["not_found"]
11317
+ },
11318
+ "detail": {
11319
+ "type": "string",
11320
+ "minLength": 1
11321
+ },
11322
+ "errors": {
11323
+ "type": "array",
11324
+ "items": {
11325
+ "type": "object",
11326
+ "properties": {
11327
+ "pointer": {
11328
+ "type": "string",
11329
+ "pattern": "^\\/.*"
11330
+ },
11331
+ "reason": {
11332
+ "type": "string",
11333
+ "minLength": 1
11334
+ }
11335
+ },
11336
+ "required": ["pointer", "reason"]
11337
+ }
11338
+ },
11339
+ "retryAfterSeconds": {
11340
+ "type": "integer",
11341
+ "exclusiveMinimum": 0,
11342
+ "maximum": 9007199254740991
11343
+ },
11344
+ "status": {
11345
+ "type": "integer",
11346
+ "minimum": 400,
11347
+ "maximum": 599
11348
+ },
11349
+ "title": {
11350
+ "type": "string",
11351
+ "minLength": 1
11352
+ },
11353
+ "traceId": {
11354
+ "type": "string",
11355
+ "minLength": 1
11356
+ },
11357
+ "type": {
11358
+ "type": "string",
11359
+ "const": "about:blank"
11360
+ }
11361
+ },
11362
+ "required": ["code", "status", "title", "type"]
11363
+ }
11364
+ }
11365
+ },
11366
+ "description": "Problem document. Possible codes at this status: not_found."
11367
+ },
11368
+ "409": {
11369
+ "content": {
11370
+ "application/problem+json": {
11371
+ "schema": {
11372
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11373
+ "type": "object",
11374
+ "properties": {
11375
+ "code": {
11376
+ "type": "string",
11377
+ "x-problem-codes": ["state_conflict", "version_conflict"]
11378
+ },
11379
+ "detail": {
11380
+ "type": "string",
11381
+ "minLength": 1
11382
+ },
11383
+ "errors": {
11384
+ "type": "array",
11385
+ "items": {
11386
+ "type": "object",
11387
+ "properties": {
11388
+ "pointer": {
11389
+ "type": "string",
11390
+ "pattern": "^\\/.*"
11391
+ },
11392
+ "reason": {
11393
+ "type": "string",
11394
+ "minLength": 1
11395
+ }
11396
+ },
11397
+ "required": ["pointer", "reason"]
11398
+ }
11399
+ },
11400
+ "retryAfterSeconds": {
11401
+ "type": "integer",
11402
+ "exclusiveMinimum": 0,
11403
+ "maximum": 9007199254740991
11404
+ },
11405
+ "status": {
11406
+ "type": "integer",
11407
+ "minimum": 400,
11408
+ "maximum": 599
11409
+ },
11410
+ "title": {
11411
+ "type": "string",
11412
+ "minLength": 1
11413
+ },
11414
+ "traceId": {
11415
+ "type": "string",
11416
+ "minLength": 1
11417
+ },
11418
+ "type": {
11419
+ "type": "string",
11420
+ "const": "about:blank"
11421
+ }
11422
+ },
11423
+ "required": ["code", "status", "title", "type"]
11424
+ }
11425
+ }
11426
+ },
11427
+ "description": "Problem document. Possible codes at this status: state_conflict, version_conflict."
11428
+ },
11429
+ "429": {
11430
+ "content": {
11431
+ "application/problem+json": {
11432
+ "schema": {
11433
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11434
+ "type": "object",
11435
+ "properties": {
11436
+ "code": {
11437
+ "type": "string",
11438
+ "x-problem-codes": ["rate_limited"]
11439
+ },
11440
+ "detail": {
11441
+ "type": "string",
11442
+ "minLength": 1
11443
+ },
11444
+ "errors": {
11445
+ "type": "array",
11446
+ "items": {
11447
+ "type": "object",
11448
+ "properties": {
11449
+ "pointer": {
11450
+ "type": "string",
11451
+ "pattern": "^\\/.*"
11452
+ },
11453
+ "reason": {
11454
+ "type": "string",
11455
+ "minLength": 1
11456
+ }
11457
+ },
11458
+ "required": ["pointer", "reason"]
11459
+ }
11460
+ },
11461
+ "retryAfterSeconds": {
11462
+ "type": "integer",
11463
+ "exclusiveMinimum": 0,
11464
+ "maximum": 9007199254740991
11465
+ },
11466
+ "status": {
11467
+ "type": "integer",
11468
+ "minimum": 400,
11469
+ "maximum": 599
11470
+ },
11471
+ "title": {
11472
+ "type": "string",
11473
+ "minLength": 1
11474
+ },
11475
+ "traceId": {
11476
+ "type": "string",
11477
+ "minLength": 1
11478
+ },
11479
+ "type": {
11480
+ "type": "string",
11481
+ "const": "about:blank"
11482
+ }
11483
+ },
11484
+ "required": ["code", "status", "title", "type"]
11485
+ }
11486
+ }
11487
+ },
11488
+ "description": "Problem document. Possible codes at this status: rate_limited."
11489
+ },
11490
+ "503": {
11491
+ "content": {
11492
+ "application/problem+json": {
11493
+ "schema": {
11494
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11495
+ "type": "object",
11496
+ "properties": {
11497
+ "code": {
11498
+ "type": "string",
11499
+ "x-problem-codes": [
11500
+ "capability_not_configured",
11501
+ "service_unavailable"
11502
+ ]
11503
+ },
11504
+ "detail": {
11505
+ "type": "string",
11506
+ "minLength": 1
11507
+ },
11508
+ "errors": {
11509
+ "type": "array",
11510
+ "items": {
11511
+ "type": "object",
11512
+ "properties": {
11513
+ "pointer": {
11514
+ "type": "string",
11515
+ "pattern": "^\\/.*"
11516
+ },
11517
+ "reason": {
11518
+ "type": "string",
11519
+ "minLength": 1
11520
+ }
11521
+ },
11522
+ "required": ["pointer", "reason"]
11523
+ }
11524
+ },
11525
+ "retryAfterSeconds": {
11526
+ "type": "integer",
11527
+ "exclusiveMinimum": 0,
11528
+ "maximum": 9007199254740991
11529
+ },
11530
+ "status": {
11531
+ "type": "integer",
11532
+ "minimum": 400,
11533
+ "maximum": 599
11534
+ },
11535
+ "title": {
11536
+ "type": "string",
11537
+ "minLength": 1
11538
+ },
11539
+ "traceId": {
11540
+ "type": "string",
11541
+ "minLength": 1
11542
+ },
11543
+ "type": {
11544
+ "type": "string",
11545
+ "const": "about:blank"
11546
+ }
11547
+ },
11548
+ "required": ["code", "status", "title", "type"]
11549
+ }
11550
+ }
11551
+ },
11552
+ "description": "Problem document. Possible codes at this status: capability_not_configured, service_unavailable."
11553
+ }
11554
+ },
11555
+ "summary": "Close the organization and request erasure",
11556
+ "security": [
11557
+ {
11558
+ "memberSession": ["projects:administer"]
11559
+ }
11560
+ ],
11561
+ "requestBody": {
11562
+ "content": {
11563
+ "application/json": {
11564
+ "example": {
11565
+ "expectedGeneration": 0,
11566
+ "immediate": false,
11567
+ "confirmation": "delete organization"
11568
+ },
11569
+ "schema": {
11570
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11571
+ "type": "object",
11572
+ "properties": {
11573
+ "expectedGeneration": {
11574
+ "type": "integer",
11575
+ "minimum": 0,
11576
+ "maximum": 9007199254740991
11577
+ },
11578
+ "immediate": {
11579
+ "type": "boolean"
11580
+ },
11581
+ "confirmation": {
11582
+ "type": "string",
11583
+ "const": "delete organization"
11584
+ }
11585
+ },
11586
+ "required": ["expectedGeneration", "immediate", "confirmation"],
11587
+ "additionalProperties": false
11588
+ }
11589
+ }
11590
+ },
11591
+ "required": true
11592
+ }
11593
+ }
11594
+ },
11595
+ "/v1/organization/restore": {
11596
+ "post": {
11597
+ "description": "Restores access after every configured scheduling shard acknowledges the new generation. Immediate erasure and expired reversible windows cannot be restored. Recovery preserves each schedule's pause and lateness policy and does not reauthorize automatic top-up.",
11598
+ "operationId": "organizations.restore",
11599
+ "parameters": [],
11600
+ "responses": {
11601
+ "200": {
11602
+ "content": {
11603
+ "application/json": {
11604
+ "example": {
11605
+ "organizationId": "org_01h8xyz9k2m4n6p8r0t2v4w6y8",
11606
+ "generation": 2,
11607
+ "phase": "active",
11608
+ "requestedAt": "2026-09-12T12:00:00.000Z",
11609
+ "reversibleUntil": "2026-09-19T12:00:00.000Z",
11610
+ "purgeDeadline": "2026-10-12T12:00:00.000Z",
11611
+ "immediate": false,
11612
+ "converged": true
11613
+ },
11614
+ "schema": {
11615
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11616
+ "type": "object",
11617
+ "properties": {
11618
+ "organizationId": {
11619
+ "type": "string",
11620
+ "pattern": "^org_[0-9abcdefghjkmnpqrstvwxyz]{26}$"
11621
+ },
11622
+ "generation": {
11623
+ "type": "integer",
11624
+ "minimum": 0,
11625
+ "maximum": 9007199254740991
11626
+ },
11627
+ "phase": {
11628
+ "type": "string",
11629
+ "enum": [
11630
+ "active",
11631
+ "closing",
11632
+ "closed",
11633
+ "restoring",
11634
+ "purging",
11635
+ "erased"
11636
+ ]
11637
+ },
11638
+ "requestedAt": {
11639
+ "anyOf": [
11640
+ {
11641
+ "type": "string",
11642
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
11643
+ },
11644
+ {
11645
+ "type": "null"
11646
+ }
11647
+ ]
11648
+ },
11649
+ "reversibleUntil": {
11650
+ "anyOf": [
11651
+ {
11652
+ "type": "string",
11653
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
11654
+ },
11655
+ {
11656
+ "type": "null"
11657
+ }
11658
+ ]
11659
+ },
11660
+ "purgeDeadline": {
11661
+ "anyOf": [
11662
+ {
11663
+ "type": "string",
11664
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
11665
+ },
11666
+ {
11667
+ "type": "null"
11668
+ }
11669
+ ]
11670
+ },
11671
+ "immediate": {
11672
+ "type": "boolean"
11673
+ },
11674
+ "converged": {
11675
+ "type": "boolean"
11676
+ }
11677
+ },
11678
+ "required": [
11679
+ "organizationId",
11680
+ "generation",
11681
+ "phase",
11682
+ "requestedAt",
11683
+ "reversibleUntil",
11684
+ "purgeDeadline",
11685
+ "immediate",
11686
+ "converged"
11687
+ ]
11688
+ }
11689
+ }
11690
+ },
11691
+ "description": "Cancel organization erasure during its reversible window"
11692
+ },
11693
+ "400": {
11694
+ "content": {
11695
+ "application/problem+json": {
11696
+ "schema": {
11697
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11698
+ "type": "object",
11699
+ "properties": {
11700
+ "code": {
11701
+ "type": "string",
11702
+ "x-problem-codes": ["invalid_request"]
11703
+ },
11704
+ "detail": {
11705
+ "type": "string",
11706
+ "minLength": 1
11707
+ },
11708
+ "errors": {
11709
+ "type": "array",
11710
+ "items": {
11711
+ "type": "object",
11712
+ "properties": {
11713
+ "pointer": {
11714
+ "type": "string",
11715
+ "pattern": "^\\/.*"
11716
+ },
11717
+ "reason": {
11718
+ "type": "string",
11719
+ "minLength": 1
11720
+ }
11721
+ },
11722
+ "required": ["pointer", "reason"]
11723
+ }
11724
+ },
11725
+ "retryAfterSeconds": {
11726
+ "type": "integer",
11727
+ "exclusiveMinimum": 0,
11728
+ "maximum": 9007199254740991
11729
+ },
11730
+ "status": {
11731
+ "type": "integer",
11732
+ "minimum": 400,
11733
+ "maximum": 599
11734
+ },
11735
+ "title": {
11736
+ "type": "string",
11737
+ "minLength": 1
11738
+ },
11739
+ "traceId": {
11740
+ "type": "string",
11741
+ "minLength": 1
11742
+ },
11743
+ "type": {
11744
+ "type": "string",
11745
+ "const": "about:blank"
11746
+ }
11747
+ },
11748
+ "required": ["code", "status", "title", "type"]
11749
+ }
11750
+ }
11751
+ },
11752
+ "description": "Problem document. Possible codes at this status: invalid_request."
11753
+ },
11754
+ "401": {
11755
+ "content": {
11756
+ "application/problem+json": {
11757
+ "schema": {
11758
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11759
+ "type": "object",
11760
+ "properties": {
11761
+ "code": {
11762
+ "type": "string",
11763
+ "x-problem-codes": [
11764
+ "authentication_required",
11765
+ "credential_expired",
11766
+ "credential_revoked"
11767
+ ]
11768
+ },
11769
+ "detail": {
11770
+ "type": "string",
11771
+ "minLength": 1
11772
+ },
11773
+ "errors": {
11774
+ "type": "array",
11775
+ "items": {
11776
+ "type": "object",
11777
+ "properties": {
11778
+ "pointer": {
11779
+ "type": "string",
11780
+ "pattern": "^\\/.*"
11781
+ },
11782
+ "reason": {
11783
+ "type": "string",
11784
+ "minLength": 1
11785
+ }
11786
+ },
11787
+ "required": ["pointer", "reason"]
11788
+ }
11789
+ },
11790
+ "retryAfterSeconds": {
11791
+ "type": "integer",
11792
+ "exclusiveMinimum": 0,
11793
+ "maximum": 9007199254740991
11794
+ },
11795
+ "status": {
11796
+ "type": "integer",
11797
+ "minimum": 400,
11798
+ "maximum": 599
11799
+ },
11800
+ "title": {
11801
+ "type": "string",
11802
+ "minLength": 1
11803
+ },
11804
+ "traceId": {
11805
+ "type": "string",
11806
+ "minLength": 1
11807
+ },
11808
+ "type": {
11809
+ "type": "string",
11810
+ "const": "about:blank"
11811
+ }
11812
+ },
11813
+ "required": ["code", "status", "title", "type"]
11814
+ }
11815
+ }
11816
+ },
11817
+ "description": "Problem document. Possible codes at this status: authentication_required, credential_expired, credential_revoked."
11818
+ },
11819
+ "403": {
11820
+ "content": {
11821
+ "application/problem+json": {
11822
+ "schema": {
11823
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11824
+ "type": "object",
11825
+ "properties": {
11826
+ "code": {
11827
+ "type": "string",
11828
+ "x-problem-codes": ["scope_missing"]
11829
+ },
11830
+ "detail": {
11831
+ "type": "string",
11832
+ "minLength": 1
11833
+ },
11834
+ "errors": {
11835
+ "type": "array",
11836
+ "items": {
11837
+ "type": "object",
11838
+ "properties": {
11839
+ "pointer": {
11840
+ "type": "string",
11841
+ "pattern": "^\\/.*"
11842
+ },
11843
+ "reason": {
11844
+ "type": "string",
11845
+ "minLength": 1
11846
+ }
11847
+ },
11848
+ "required": ["pointer", "reason"]
11849
+ }
11850
+ },
11851
+ "retryAfterSeconds": {
11852
+ "type": "integer",
11853
+ "exclusiveMinimum": 0,
11854
+ "maximum": 9007199254740991
11855
+ },
11856
+ "status": {
11857
+ "type": "integer",
11858
+ "minimum": 400,
11859
+ "maximum": 599
11860
+ },
11861
+ "title": {
11862
+ "type": "string",
11863
+ "minLength": 1
11864
+ },
11865
+ "traceId": {
11866
+ "type": "string",
11867
+ "minLength": 1
11868
+ },
11869
+ "type": {
11870
+ "type": "string",
11871
+ "const": "about:blank"
11872
+ }
11873
+ },
11874
+ "required": ["code", "status", "title", "type"]
11875
+ }
11876
+ }
11877
+ },
11878
+ "description": "Problem document. Possible codes at this status: scope_missing."
11879
+ },
11880
+ "404": {
11881
+ "content": {
11882
+ "application/problem+json": {
11883
+ "schema": {
11884
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11885
+ "type": "object",
11886
+ "properties": {
11887
+ "code": {
11888
+ "type": "string",
11889
+ "x-problem-codes": ["not_found"]
11890
+ },
11891
+ "detail": {
11892
+ "type": "string",
11893
+ "minLength": 1
11894
+ },
11895
+ "errors": {
11896
+ "type": "array",
11897
+ "items": {
11898
+ "type": "object",
11899
+ "properties": {
11900
+ "pointer": {
11901
+ "type": "string",
11902
+ "pattern": "^\\/.*"
11903
+ },
11904
+ "reason": {
11905
+ "type": "string",
11906
+ "minLength": 1
11907
+ }
11908
+ },
11909
+ "required": ["pointer", "reason"]
11910
+ }
11911
+ },
11912
+ "retryAfterSeconds": {
11913
+ "type": "integer",
11914
+ "exclusiveMinimum": 0,
11915
+ "maximum": 9007199254740991
11916
+ },
11917
+ "status": {
11918
+ "type": "integer",
11919
+ "minimum": 400,
11920
+ "maximum": 599
11921
+ },
11922
+ "title": {
11923
+ "type": "string",
11924
+ "minLength": 1
11925
+ },
11926
+ "traceId": {
11927
+ "type": "string",
11928
+ "minLength": 1
11929
+ },
11930
+ "type": {
11931
+ "type": "string",
11932
+ "const": "about:blank"
11933
+ }
11934
+ },
11935
+ "required": ["code", "status", "title", "type"]
11936
+ }
11937
+ }
11938
+ },
11939
+ "description": "Problem document. Possible codes at this status: not_found."
11940
+ },
11941
+ "409": {
11942
+ "content": {
11943
+ "application/problem+json": {
11944
+ "schema": {
11945
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
11946
+ "type": "object",
11947
+ "properties": {
11948
+ "code": {
11949
+ "type": "string",
11950
+ "x-problem-codes": ["state_conflict", "version_conflict"]
11951
+ },
11952
+ "detail": {
11953
+ "type": "string",
11954
+ "minLength": 1
11955
+ },
11956
+ "errors": {
11957
+ "type": "array",
11958
+ "items": {
11959
+ "type": "object",
11960
+ "properties": {
11961
+ "pointer": {
11962
+ "type": "string",
11963
+ "pattern": "^\\/.*"
11964
+ },
11965
+ "reason": {
11966
+ "type": "string",
11967
+ "minLength": 1
11968
+ }
11969
+ },
11970
+ "required": ["pointer", "reason"]
11971
+ }
11972
+ },
11973
+ "retryAfterSeconds": {
11974
+ "type": "integer",
11975
+ "exclusiveMinimum": 0,
11976
+ "maximum": 9007199254740991
11977
+ },
11978
+ "status": {
11979
+ "type": "integer",
11980
+ "minimum": 400,
11981
+ "maximum": 599
11982
+ },
11983
+ "title": {
11984
+ "type": "string",
11985
+ "minLength": 1
11986
+ },
11987
+ "traceId": {
11988
+ "type": "string",
11989
+ "minLength": 1
11990
+ },
11991
+ "type": {
11992
+ "type": "string",
11993
+ "const": "about:blank"
11994
+ }
11995
+ },
11996
+ "required": ["code", "status", "title", "type"]
11997
+ }
11998
+ }
11999
+ },
12000
+ "description": "Problem document. Possible codes at this status: state_conflict, version_conflict."
12001
+ },
12002
+ "429": {
12003
+ "content": {
12004
+ "application/problem+json": {
12005
+ "schema": {
12006
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
12007
+ "type": "object",
12008
+ "properties": {
12009
+ "code": {
12010
+ "type": "string",
12011
+ "x-problem-codes": ["rate_limited"]
12012
+ },
12013
+ "detail": {
12014
+ "type": "string",
12015
+ "minLength": 1
12016
+ },
12017
+ "errors": {
12018
+ "type": "array",
12019
+ "items": {
12020
+ "type": "object",
12021
+ "properties": {
12022
+ "pointer": {
12023
+ "type": "string",
12024
+ "pattern": "^\\/.*"
12025
+ },
12026
+ "reason": {
12027
+ "type": "string",
12028
+ "minLength": 1
12029
+ }
12030
+ },
12031
+ "required": ["pointer", "reason"]
12032
+ }
12033
+ },
12034
+ "retryAfterSeconds": {
12035
+ "type": "integer",
12036
+ "exclusiveMinimum": 0,
12037
+ "maximum": 9007199254740991
12038
+ },
12039
+ "status": {
12040
+ "type": "integer",
12041
+ "minimum": 400,
12042
+ "maximum": 599
12043
+ },
12044
+ "title": {
12045
+ "type": "string",
12046
+ "minLength": 1
12047
+ },
12048
+ "traceId": {
12049
+ "type": "string",
12050
+ "minLength": 1
12051
+ },
12052
+ "type": {
12053
+ "type": "string",
12054
+ "const": "about:blank"
12055
+ }
12056
+ },
12057
+ "required": ["code", "status", "title", "type"]
12058
+ }
12059
+ }
12060
+ },
12061
+ "description": "Problem document. Possible codes at this status: rate_limited."
12062
+ },
12063
+ "503": {
12064
+ "content": {
12065
+ "application/problem+json": {
12066
+ "schema": {
12067
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
12068
+ "type": "object",
12069
+ "properties": {
12070
+ "code": {
12071
+ "type": "string",
12072
+ "x-problem-codes": [
12073
+ "capability_not_configured",
12074
+ "service_unavailable"
12075
+ ]
12076
+ },
12077
+ "detail": {
12078
+ "type": "string",
12079
+ "minLength": 1
12080
+ },
12081
+ "errors": {
12082
+ "type": "array",
12083
+ "items": {
12084
+ "type": "object",
12085
+ "properties": {
12086
+ "pointer": {
12087
+ "type": "string",
12088
+ "pattern": "^\\/.*"
12089
+ },
12090
+ "reason": {
12091
+ "type": "string",
12092
+ "minLength": 1
12093
+ }
12094
+ },
12095
+ "required": ["pointer", "reason"]
12096
+ }
12097
+ },
12098
+ "retryAfterSeconds": {
12099
+ "type": "integer",
12100
+ "exclusiveMinimum": 0,
12101
+ "maximum": 9007199254740991
12102
+ },
12103
+ "status": {
12104
+ "type": "integer",
12105
+ "minimum": 400,
12106
+ "maximum": 599
12107
+ },
12108
+ "title": {
12109
+ "type": "string",
12110
+ "minLength": 1
12111
+ },
12112
+ "traceId": {
12113
+ "type": "string",
12114
+ "minLength": 1
12115
+ },
12116
+ "type": {
12117
+ "type": "string",
12118
+ "const": "about:blank"
12119
+ }
12120
+ },
12121
+ "required": ["code", "status", "title", "type"]
12122
+ }
12123
+ }
12124
+ },
12125
+ "description": "Problem document. Possible codes at this status: capability_not_configured, service_unavailable."
12126
+ }
12127
+ },
12128
+ "summary": "Cancel organization erasure during its reversible window",
12129
+ "security": [
12130
+ {
12131
+ "memberSession": ["projects:administer"]
12132
+ }
12133
+ ],
12134
+ "requestBody": {
12135
+ "content": {
12136
+ "application/json": {
12137
+ "example": {
12138
+ "expectedGeneration": 1
12139
+ },
12140
+ "schema": {
12141
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
12142
+ "type": "object",
12143
+ "properties": {
12144
+ "expectedGeneration": {
12145
+ "type": "integer",
12146
+ "exclusiveMinimum": 0,
12147
+ "maximum": 9007199254740991
12148
+ }
12149
+ },
12150
+ "required": ["expectedGeneration"],
12151
+ "additionalProperties": false
12152
+ }
12153
+ }
12154
+ },
12155
+ "required": true
12156
+ }
12157
+ }
12158
+ },
12159
+ "/__greatwait/version": {
12160
+ "get": {
12161
+ "description": "Reports the service, environment, and build the request reached. Unauthenticated: it carries no customer data and is used by canaries and deployment smoke checks.",
12162
+ "operationId": "meta.version",
12163
+ "parameters": [],
12164
+ "responses": {
12165
+ "200": {
12166
+ "content": {
12167
+ "application/json": {
12168
+ "example": {
12169
+ "buildSha": "9f2c1ab",
12170
+ "environment": "development",
12171
+ "service": "@greatwait/api"
12172
+ },
12173
+ "schema": {
12174
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
12175
+ "type": "object",
12176
+ "properties": {
12177
+ "buildSha": {
12178
+ "type": "string",
12179
+ "minLength": 1
12180
+ },
12181
+ "environment": {
12182
+ "type": "string",
12183
+ "minLength": 1
12184
+ },
12185
+ "service": {
12186
+ "type": "string",
12187
+ "minLength": 1
12188
+ }
12189
+ },
12190
+ "required": ["buildSha", "environment", "service"]
12191
+ }
12192
+ }
12193
+ },
12194
+ "description": "Read the deployed version"
12195
+ },
12196
+ "429": {
12197
+ "content": {
12198
+ "application/problem+json": {
12199
+ "schema": {
12200
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
12201
+ "type": "object",
12202
+ "properties": {
12203
+ "code": {
12204
+ "type": "string",
12205
+ "x-problem-codes": ["rate_limited"]
12206
+ },
12207
+ "detail": {
12208
+ "type": "string",
12209
+ "minLength": 1
12210
+ },
12211
+ "errors": {
12212
+ "type": "array",
12213
+ "items": {
12214
+ "type": "object",
12215
+ "properties": {
12216
+ "pointer": {
12217
+ "type": "string",
12218
+ "pattern": "^\\/.*"
12219
+ },
12220
+ "reason": {
12221
+ "type": "string",
12222
+ "minLength": 1
12223
+ }
12224
+ },
12225
+ "required": ["pointer", "reason"]
12226
+ }
12227
+ },
12228
+ "retryAfterSeconds": {
12229
+ "type": "integer",
12230
+ "exclusiveMinimum": 0,
12231
+ "maximum": 9007199254740991
12232
+ },
12233
+ "status": {
12234
+ "type": "integer",
12235
+ "minimum": 400,
12236
+ "maximum": 599
12237
+ },
12238
+ "title": {
12239
+ "type": "string",
12240
+ "minLength": 1
12241
+ },
12242
+ "traceId": {
12243
+ "type": "string",
12244
+ "minLength": 1
12245
+ },
12246
+ "type": {
12247
+ "type": "string",
12248
+ "const": "about:blank"
12249
+ }
12250
+ },
12251
+ "required": ["code", "status", "title", "type"]
12252
+ }
12253
+ }
12254
+ },
12255
+ "description": "Problem document. Possible codes at this status: rate_limited."
12256
+ },
12257
+ "503": {
12258
+ "content": {
12259
+ "application/problem+json": {
12260
+ "schema": {
12261
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
12262
+ "type": "object",
12263
+ "properties": {
12264
+ "code": {
12265
+ "type": "string",
12266
+ "x-problem-codes": [
12267
+ "capability_not_configured",
12268
+ "service_unavailable"
12269
+ ]
12270
+ },
12271
+ "detail": {
12272
+ "type": "string",
12273
+ "minLength": 1
12274
+ },
12275
+ "errors": {
12276
+ "type": "array",
12277
+ "items": {
12278
+ "type": "object",
12279
+ "properties": {
12280
+ "pointer": {
12281
+ "type": "string",
12282
+ "pattern": "^\\/.*"
12283
+ },
12284
+ "reason": {
12285
+ "type": "string",
12286
+ "minLength": 1
12287
+ }
12288
+ },
12289
+ "required": ["pointer", "reason"]
12290
+ }
12291
+ },
12292
+ "retryAfterSeconds": {
12293
+ "type": "integer",
12294
+ "exclusiveMinimum": 0,
12295
+ "maximum": 9007199254740991
12296
+ },
12297
+ "status": {
12298
+ "type": "integer",
12299
+ "minimum": 400,
12300
+ "maximum": 599
12301
+ },
12302
+ "title": {
12303
+ "type": "string",
12304
+ "minLength": 1
12305
+ },
12306
+ "traceId": {
12307
+ "type": "string",
12308
+ "minLength": 1
12309
+ },
12310
+ "type": {
12311
+ "type": "string",
12312
+ "const": "about:blank"
12313
+ }
12314
+ },
12315
+ "required": ["code", "status", "title", "type"]
12316
+ }
12317
+ }
12318
+ },
12319
+ "description": "Problem document. Possible codes at this status: capability_not_configured, service_unavailable."
12320
+ }
12321
+ },
12322
+ "summary": "Read the deployed version"
12323
+ }
12324
+ },
12325
+ "/_scaffold": {
12326
+ "get": {
12327
+ "description": "Reports the workspace layer this service occupies and the layers it may depend on. Exists so the architecture boundary is observable at runtime, not only at build time.",
12328
+ "operationId": "meta.scaffold",
12329
+ "parameters": [],
12330
+ "responses": {
12331
+ "200": {
12332
+ "content": {
12333
+ "application/json": {
12334
+ "example": {
12335
+ "dependsOn": ["application", "contract", "platform"],
12336
+ "layer": "adapter",
12337
+ "service": "@greatwait/api"
12338
+ },
12339
+ "schema": {
12340
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
12341
+ "type": "object",
12342
+ "properties": {
12343
+ "dependsOn": {
12344
+ "type": "array",
12345
+ "items": {
12346
+ "type": "string",
12347
+ "enum": [
12348
+ "contract",
12349
+ "platform",
12350
+ "domain",
12351
+ "application",
12352
+ "adapter",
12353
+ "test-support"
12354
+ ]
12355
+ }
12356
+ },
12357
+ "layer": {
12358
+ "type": "string",
12359
+ "enum": [
12360
+ "contract",
12361
+ "platform",
12362
+ "domain",
12363
+ "application",
12364
+ "adapter",
12365
+ "test-support"
12366
+ ]
12367
+ },
12368
+ "service": {
12369
+ "type": "string",
12370
+ "minLength": 1
12371
+ }
12372
+ },
12373
+ "required": ["dependsOn", "layer", "service"]
12374
+ }
12375
+ }
12376
+ },
12377
+ "description": "Read the workspace scaffold"
12378
+ },
12379
+ "429": {
12380
+ "content": {
12381
+ "application/problem+json": {
12382
+ "schema": {
12383
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
12384
+ "type": "object",
12385
+ "properties": {
12386
+ "code": {
12387
+ "type": "string",
12388
+ "x-problem-codes": ["rate_limited"]
12389
+ },
12390
+ "detail": {
12391
+ "type": "string",
12392
+ "minLength": 1
12393
+ },
12394
+ "errors": {
12395
+ "type": "array",
12396
+ "items": {
12397
+ "type": "object",
12398
+ "properties": {
12399
+ "pointer": {
12400
+ "type": "string",
12401
+ "pattern": "^\\/.*"
12402
+ },
12403
+ "reason": {
12404
+ "type": "string",
12405
+ "minLength": 1
12406
+ }
12407
+ },
12408
+ "required": ["pointer", "reason"]
12409
+ }
12410
+ },
12411
+ "retryAfterSeconds": {
12412
+ "type": "integer",
12413
+ "exclusiveMinimum": 0,
12414
+ "maximum": 9007199254740991
12415
+ },
12416
+ "status": {
12417
+ "type": "integer",
12418
+ "minimum": 400,
12419
+ "maximum": 599
12420
+ },
12421
+ "title": {
12422
+ "type": "string",
12423
+ "minLength": 1
12424
+ },
12425
+ "traceId": {
12426
+ "type": "string",
12427
+ "minLength": 1
12428
+ },
12429
+ "type": {
12430
+ "type": "string",
12431
+ "const": "about:blank"
12432
+ }
12433
+ },
12434
+ "required": ["code", "status", "title", "type"]
12435
+ }
12436
+ }
12437
+ },
12438
+ "description": "Problem document. Possible codes at this status: rate_limited."
12439
+ },
12440
+ "503": {
12441
+ "content": {
12442
+ "application/problem+json": {
12443
+ "schema": {
12444
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
12445
+ "type": "object",
12446
+ "properties": {
12447
+ "code": {
12448
+ "type": "string",
12449
+ "x-problem-codes": [
12450
+ "capability_not_configured",
12451
+ "service_unavailable"
12452
+ ]
9936
12453
  },
9937
12454
  "detail": {
9938
12455
  "type": "string",
@@ -27725,6 +30242,60 @@
27725
30242
  "schedule": {
27726
30243
  "type": "object",
27727
30244
  "properties": {
30245
+ "autoPauseAfterFailures": {
30246
+ "anyOf": [
30247
+ {
30248
+ "type": "integer",
30249
+ "minimum": 1,
30250
+ "maximum": 100
30251
+ },
30252
+ {
30253
+ "type": "string",
30254
+ "const": "never"
30255
+ }
30256
+ ],
30257
+ "description": "Consecutive failed runs before automatic pause: 1–100 or \"never\". Defaults to 5 on create; omission on replace preserves the setting. One-shot schedules are unaffected."
30258
+ },
30259
+ "consecutiveFailedRuns": {
30260
+ "type": "integer",
30261
+ "minimum": 0,
30262
+ "maximum": 9007199254740991
30263
+ },
30264
+ "autoPauseReason": {
30265
+ "anyOf": [
30266
+ {
30267
+ "type": "object",
30268
+ "properties": {
30269
+ "failedRuns": {
30270
+ "type": "integer",
30271
+ "exclusiveMinimum": 0,
30272
+ "maximum": 9007199254740991
30273
+ },
30274
+ "status": {
30275
+ "type": "integer",
30276
+ "minimum": 100,
30277
+ "maximum": 599
30278
+ },
30279
+ "diagnostic": {
30280
+ "type": "string",
30281
+ "maxLength": 500
30282
+ },
30283
+ "pausedAt": {
30284
+ "type": "string",
30285
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
30286
+ }
30287
+ },
30288
+ "required": [
30289
+ "failedRuns",
30290
+ "diagnostic",
30291
+ "pausedAt"
30292
+ ]
30293
+ },
30294
+ {
30295
+ "type": "null"
30296
+ }
30297
+ ]
30298
+ },
27728
30299
  "http": {
27729
30300
  "type": "object",
27730
30301
  "properties": {
@@ -28563,6 +31134,20 @@
28563
31134
  "$schema": "https://json-schema.org/draft/2020-12/schema",
28564
31135
  "type": "object",
28565
31136
  "properties": {
31137
+ "autoPauseAfterFailures": {
31138
+ "anyOf": [
31139
+ {
31140
+ "type": "integer",
31141
+ "minimum": 1,
31142
+ "maximum": 100
31143
+ },
31144
+ {
31145
+ "type": "string",
31146
+ "const": "never"
31147
+ }
31148
+ ],
31149
+ "description": "Consecutive failed runs before automatic pause: 1–100 or \"never\". Defaults to 5 on create; omission on replace preserves the setting. One-shot schedules are unaffected."
31150
+ },
28566
31151
  "http": {
28567
31152
  "type": "object",
28568
31153
  "properties": {
@@ -28925,6 +31510,60 @@
28925
31510
  "items": {
28926
31511
  "type": "object",
28927
31512
  "properties": {
31513
+ "autoPauseAfterFailures": {
31514
+ "anyOf": [
31515
+ {
31516
+ "type": "integer",
31517
+ "minimum": 1,
31518
+ "maximum": 100
31519
+ },
31520
+ {
31521
+ "type": "string",
31522
+ "const": "never"
31523
+ }
31524
+ ],
31525
+ "description": "Consecutive failed runs before automatic pause: 1–100 or \"never\". Defaults to 5 on create; omission on replace preserves the setting. One-shot schedules are unaffected."
31526
+ },
31527
+ "consecutiveFailedRuns": {
31528
+ "type": "integer",
31529
+ "minimum": 0,
31530
+ "maximum": 9007199254740991
31531
+ },
31532
+ "autoPauseReason": {
31533
+ "anyOf": [
31534
+ {
31535
+ "type": "object",
31536
+ "properties": {
31537
+ "failedRuns": {
31538
+ "type": "integer",
31539
+ "exclusiveMinimum": 0,
31540
+ "maximum": 9007199254740991
31541
+ },
31542
+ "status": {
31543
+ "type": "integer",
31544
+ "minimum": 100,
31545
+ "maximum": 599
31546
+ },
31547
+ "diagnostic": {
31548
+ "type": "string",
31549
+ "maxLength": 500
31550
+ },
31551
+ "pausedAt": {
31552
+ "type": "string",
31553
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
31554
+ }
31555
+ },
31556
+ "required": [
31557
+ "failedRuns",
31558
+ "diagnostic",
31559
+ "pausedAt"
31560
+ ]
31561
+ },
31562
+ {
31563
+ "type": "null"
31564
+ }
31565
+ ]
31566
+ },
28928
31567
  "http": {
28929
31568
  "type": "object",
28930
31569
  "properties": {
@@ -29834,6 +32473,60 @@
29834
32473
  "schedule": {
29835
32474
  "type": "object",
29836
32475
  "properties": {
32476
+ "autoPauseAfterFailures": {
32477
+ "anyOf": [
32478
+ {
32479
+ "type": "integer",
32480
+ "minimum": 1,
32481
+ "maximum": 100
32482
+ },
32483
+ {
32484
+ "type": "string",
32485
+ "const": "never"
32486
+ }
32487
+ ],
32488
+ "description": "Consecutive failed runs before automatic pause: 1–100 or \"never\". Defaults to 5 on create; omission on replace preserves the setting. One-shot schedules are unaffected."
32489
+ },
32490
+ "consecutiveFailedRuns": {
32491
+ "type": "integer",
32492
+ "minimum": 0,
32493
+ "maximum": 9007199254740991
32494
+ },
32495
+ "autoPauseReason": {
32496
+ "anyOf": [
32497
+ {
32498
+ "type": "object",
32499
+ "properties": {
32500
+ "failedRuns": {
32501
+ "type": "integer",
32502
+ "exclusiveMinimum": 0,
32503
+ "maximum": 9007199254740991
32504
+ },
32505
+ "status": {
32506
+ "type": "integer",
32507
+ "minimum": 100,
32508
+ "maximum": 599
32509
+ },
32510
+ "diagnostic": {
32511
+ "type": "string",
32512
+ "maxLength": 500
32513
+ },
32514
+ "pausedAt": {
32515
+ "type": "string",
32516
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
32517
+ }
32518
+ },
32519
+ "required": [
32520
+ "failedRuns",
32521
+ "diagnostic",
32522
+ "pausedAt"
32523
+ ]
32524
+ },
32525
+ {
32526
+ "type": "null"
32527
+ }
32528
+ ]
32529
+ },
29837
32530
  "http": {
29838
32531
  "type": "object",
29839
32532
  "properties": {
@@ -30770,6 +33463,60 @@
30770
33463
  "schedule": {
30771
33464
  "type": "object",
30772
33465
  "properties": {
33466
+ "autoPauseAfterFailures": {
33467
+ "anyOf": [
33468
+ {
33469
+ "type": "integer",
33470
+ "minimum": 1,
33471
+ "maximum": 100
33472
+ },
33473
+ {
33474
+ "type": "string",
33475
+ "const": "never"
33476
+ }
33477
+ ],
33478
+ "description": "Consecutive failed runs before automatic pause: 1–100 or \"never\". Defaults to 5 on create; omission on replace preserves the setting. One-shot schedules are unaffected."
33479
+ },
33480
+ "consecutiveFailedRuns": {
33481
+ "type": "integer",
33482
+ "minimum": 0,
33483
+ "maximum": 9007199254740991
33484
+ },
33485
+ "autoPauseReason": {
33486
+ "anyOf": [
33487
+ {
33488
+ "type": "object",
33489
+ "properties": {
33490
+ "failedRuns": {
33491
+ "type": "integer",
33492
+ "exclusiveMinimum": 0,
33493
+ "maximum": 9007199254740991
33494
+ },
33495
+ "status": {
33496
+ "type": "integer",
33497
+ "minimum": 100,
33498
+ "maximum": 599
33499
+ },
33500
+ "diagnostic": {
33501
+ "type": "string",
33502
+ "maxLength": 500
33503
+ },
33504
+ "pausedAt": {
33505
+ "type": "string",
33506
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
33507
+ }
33508
+ },
33509
+ "required": [
33510
+ "failedRuns",
33511
+ "diagnostic",
33512
+ "pausedAt"
33513
+ ]
33514
+ },
33515
+ {
33516
+ "type": "null"
33517
+ }
33518
+ ]
33519
+ },
30773
33520
  "http": {
30774
33521
  "type": "object",
30775
33522
  "properties": {
@@ -31600,6 +34347,20 @@
31600
34347
  "$schema": "https://json-schema.org/draft/2020-12/schema",
31601
34348
  "type": "object",
31602
34349
  "properties": {
34350
+ "autoPauseAfterFailures": {
34351
+ "anyOf": [
34352
+ {
34353
+ "type": "integer",
34354
+ "minimum": 1,
34355
+ "maximum": 100
34356
+ },
34357
+ {
34358
+ "type": "string",
34359
+ "const": "never"
34360
+ }
34361
+ ],
34362
+ "description": "Consecutive failed runs before automatic pause: 1–100 or \"never\". Defaults to 5 on create; omission on replace preserves the setting. One-shot schedules are unaffected."
34363
+ },
31603
34364
  "http": {
31604
34365
  "type": "object",
31605
34366
  "properties": {
@@ -32016,6 +34777,60 @@
32016
34777
  "schedule": {
32017
34778
  "type": "object",
32018
34779
  "properties": {
34780
+ "autoPauseAfterFailures": {
34781
+ "anyOf": [
34782
+ {
34783
+ "type": "integer",
34784
+ "minimum": 1,
34785
+ "maximum": 100
34786
+ },
34787
+ {
34788
+ "type": "string",
34789
+ "const": "never"
34790
+ }
34791
+ ],
34792
+ "description": "Consecutive failed runs before automatic pause: 1–100 or \"never\". Defaults to 5 on create; omission on replace preserves the setting. One-shot schedules are unaffected."
34793
+ },
34794
+ "consecutiveFailedRuns": {
34795
+ "type": "integer",
34796
+ "minimum": 0,
34797
+ "maximum": 9007199254740991
34798
+ },
34799
+ "autoPauseReason": {
34800
+ "anyOf": [
34801
+ {
34802
+ "type": "object",
34803
+ "properties": {
34804
+ "failedRuns": {
34805
+ "type": "integer",
34806
+ "exclusiveMinimum": 0,
34807
+ "maximum": 9007199254740991
34808
+ },
34809
+ "status": {
34810
+ "type": "integer",
34811
+ "minimum": 100,
34812
+ "maximum": 599
34813
+ },
34814
+ "diagnostic": {
34815
+ "type": "string",
34816
+ "maxLength": 500
34817
+ },
34818
+ "pausedAt": {
34819
+ "type": "string",
34820
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
34821
+ }
34822
+ },
34823
+ "required": [
34824
+ "failedRuns",
34825
+ "diagnostic",
34826
+ "pausedAt"
34827
+ ]
34828
+ },
34829
+ {
34830
+ "type": "null"
34831
+ }
34832
+ ]
34833
+ },
32019
34834
  "http": {
32020
34835
  "type": "object",
32021
34836
  "properties": {
@@ -34674,7 +37489,9 @@
34674
37489
  "payment-failed",
34675
37490
  "payment-authentication-required",
34676
37491
  "payment-outcome-unresolved",
34677
- "service-restored"
37492
+ "service-restored",
37493
+ "schedule-auto-paused",
37494
+ "delivery-failed"
34678
37495
  ]
34679
37496
  },
34680
37497
  "occurredAt": {
@@ -34714,11 +37531,20 @@
34714
37531
  ]
34715
37532
  },
34716
37533
  "recoveryPath": {
34717
- "type": "string",
34718
- "enum": [
34719
- "#billing",
34720
- "#billing-funding",
34721
- "#billing-notification-settings"
37534
+ "anyOf": [
37535
+ {
37536
+ "type": "string",
37537
+ "enum": [
37538
+ "#billing",
37539
+ "#billing-funding",
37540
+ "#billing-notification-settings"
37541
+ ]
37542
+ },
37543
+ {
37544
+ "type": "string",
37545
+ "maxLength": 1024,
37546
+ "pattern": "^\\/o\\/[A-Za-z0-9_%.-]+\\/p\\/proj_[0-9abcdefghjkmnpqrstvwxyz]{26}\\/(?:live|test)\\/schedules(?:\\/sch_[0-9abcdefghjkmnpqrstvwxyz]{26}(?:\\/occurrences\\/occ_[0-9abcdefghjkmnpqrstvwxyz]{26})?)?$"
37547
+ }
34722
37548
  ]
34723
37549
  },
34724
37550
  "resolvedAt": {
@@ -37800,7 +40626,7 @@
37800
40626
  },
37801
40627
  "/v1/billing/funding/purchase": {
37802
40628
  "post": {
37803
- "description": "Confirms one exact manual execution-credit quote and creates or replays its durable payment operation. Billing-owner authority and explicit agent approval apply; the Idempotency-Key preserves one payment identity across retries. Manual funding stays outside the automatic-charge ceiling. A browser redirect never grants credit: only authenticated provider reconciliation can move the operation to paid and grant its exact execution credit once, while the operation reports provider-confirmed tax and gross when known.",
40629
+ "description": "Confirms one exact manual execution-credit quote and creates or replays its durable payment operation. Billing-owner authority and explicit agent approval apply; the Idempotency-Key preserves one payment identity across retries. Manual funding stays outside the automatic-charge ceiling. A browser redirect never grants credit: only authenticated provider reconciliation can move the operation to paid and grant its exact execution credit once, while the operation reports provider-confirmed tax and gross when known. With savePaymentMethod, the payment method used becomes the organization's saved payment method once the payment is confirmed, unless one is already saved.",
37804
40630
  "operationId": "billing.purchase",
37805
40631
  "parameters": [
37806
40632
  {
@@ -39049,6 +41875,10 @@
39049
41875
  "type": "string",
39050
41876
  "minLength": 1,
39051
41877
  "maxLength": 128
41878
+ },
41879
+ "savePaymentMethod": {
41880
+ "type": "boolean",
41881
+ "description": "true: the customer also asks to keep the payment method they pay with, for automatic top-up and for projects past the free one. The hosted payment then saves it for later charges made without the customer present (it offers every method the account enables except Klarna, which cannot be charged that way), and once the provider confirms this payment paid, that method becomes the organization's saved payment method if it has none. An existing saved payment method is never replaced, and saving one never turns automatic top-up on. Omitted or false: the purchase does exactly what it always did."
39052
41882
  }
39053
41883
  },
39054
41884
  "required": ["confirmed", "expectedRevision", "quote"],
@@ -56440,6 +59270,116 @@
56440
59270
  },
56441
59271
  "required": ["contentType", "text", "truncated"]
56442
59272
  },
59273
+ "response": {
59274
+ "type": "object",
59275
+ "properties": {
59276
+ "statusText": {
59277
+ "type": "string"
59278
+ },
59279
+ "headers": {
59280
+ "type": "array",
59281
+ "items": {
59282
+ "type": "object",
59283
+ "properties": {
59284
+ "name": {
59285
+ "type": "string"
59286
+ },
59287
+ "value": {
59288
+ "type": "string"
59289
+ }
59290
+ },
59291
+ "required": ["name", "value"]
59292
+ }
59293
+ },
59294
+ "bodyState": {
59295
+ "type": "string",
59296
+ "enum": [
59297
+ "captured",
59298
+ "empty",
59299
+ "expired",
59300
+ "not_captured"
59301
+ ]
59302
+ },
59303
+ "body": {
59304
+ "type": "object",
59305
+ "properties": {
59306
+ "contentType": {
59307
+ "type": "string"
59308
+ },
59309
+ "encoding": {
59310
+ "type": "string",
59311
+ "enum": ["utf8", "base64"]
59312
+ },
59313
+ "content": {
59314
+ "type": "string",
59315
+ "maxLength": 131072
59316
+ },
59317
+ "capturedBytes": {
59318
+ "type": "integer",
59319
+ "minimum": 1,
59320
+ "maximum": 10240
59321
+ },
59322
+ "originalBytes": {
59323
+ "type": "integer",
59324
+ "minimum": 0,
59325
+ "maximum": 9007199254740991
59326
+ },
59327
+ "truncated": {
59328
+ "type": "boolean"
59329
+ },
59330
+ "redacted": {
59331
+ "type": "boolean"
59332
+ },
59333
+ "incomplete": {
59334
+ "type": "boolean"
59335
+ }
59336
+ },
59337
+ "required": [
59338
+ "contentType",
59339
+ "encoding",
59340
+ "content",
59341
+ "capturedBytes",
59342
+ "truncated"
59343
+ ]
59344
+ }
59345
+ },
59346
+ "required": ["statusText", "headers", "bodyState"]
59347
+ },
59348
+ "request": {
59349
+ "type": "object",
59350
+ "properties": {
59351
+ "method": {
59352
+ "type": "string",
59353
+ "enum": ["GET", "POST", "PUT"]
59354
+ },
59355
+ "url": {
59356
+ "type": "string"
59357
+ },
59358
+ "headers": {
59359
+ "type": "array",
59360
+ "items": {
59361
+ "type": "object",
59362
+ "properties": {
59363
+ "name": {
59364
+ "type": "string"
59365
+ },
59366
+ "value": {
59367
+ "type": "string"
59368
+ }
59369
+ },
59370
+ "required": ["name", "value"]
59371
+ }
59372
+ },
59373
+ "body": {
59374
+ "type": "string"
59375
+ }
59376
+ },
59377
+ "required": ["method", "url", "headers", "body"]
59378
+ },
59379
+ "requestState": {
59380
+ "type": "string",
59381
+ "enum": ["captured", "expired", "not_captured"]
59382
+ },
56443
59383
  "responseHeaders": {
56444
59384
  "maxItems": 8,
56445
59385
  "type": "array",
@@ -57167,6 +60107,116 @@
57167
60107
  },
57168
60108
  "required": ["contentType", "text", "truncated"]
57169
60109
  },
60110
+ "response": {
60111
+ "type": "object",
60112
+ "properties": {
60113
+ "statusText": {
60114
+ "type": "string"
60115
+ },
60116
+ "headers": {
60117
+ "type": "array",
60118
+ "items": {
60119
+ "type": "object",
60120
+ "properties": {
60121
+ "name": {
60122
+ "type": "string"
60123
+ },
60124
+ "value": {
60125
+ "type": "string"
60126
+ }
60127
+ },
60128
+ "required": ["name", "value"]
60129
+ }
60130
+ },
60131
+ "bodyState": {
60132
+ "type": "string",
60133
+ "enum": [
60134
+ "captured",
60135
+ "empty",
60136
+ "expired",
60137
+ "not_captured"
60138
+ ]
60139
+ },
60140
+ "body": {
60141
+ "type": "object",
60142
+ "properties": {
60143
+ "contentType": {
60144
+ "type": "string"
60145
+ },
60146
+ "encoding": {
60147
+ "type": "string",
60148
+ "enum": ["utf8", "base64"]
60149
+ },
60150
+ "content": {
60151
+ "type": "string",
60152
+ "maxLength": 131072
60153
+ },
60154
+ "capturedBytes": {
60155
+ "type": "integer",
60156
+ "minimum": 1,
60157
+ "maximum": 10240
60158
+ },
60159
+ "originalBytes": {
60160
+ "type": "integer",
60161
+ "minimum": 0,
60162
+ "maximum": 9007199254740991
60163
+ },
60164
+ "truncated": {
60165
+ "type": "boolean"
60166
+ },
60167
+ "redacted": {
60168
+ "type": "boolean"
60169
+ },
60170
+ "incomplete": {
60171
+ "type": "boolean"
60172
+ }
60173
+ },
60174
+ "required": [
60175
+ "contentType",
60176
+ "encoding",
60177
+ "content",
60178
+ "capturedBytes",
60179
+ "truncated"
60180
+ ]
60181
+ }
60182
+ },
60183
+ "required": ["statusText", "headers", "bodyState"]
60184
+ },
60185
+ "request": {
60186
+ "type": "object",
60187
+ "properties": {
60188
+ "method": {
60189
+ "type": "string",
60190
+ "enum": ["GET", "POST", "PUT"]
60191
+ },
60192
+ "url": {
60193
+ "type": "string"
60194
+ },
60195
+ "headers": {
60196
+ "type": "array",
60197
+ "items": {
60198
+ "type": "object",
60199
+ "properties": {
60200
+ "name": {
60201
+ "type": "string"
60202
+ },
60203
+ "value": {
60204
+ "type": "string"
60205
+ }
60206
+ },
60207
+ "required": ["name", "value"]
60208
+ }
60209
+ },
60210
+ "body": {
60211
+ "type": "string"
60212
+ }
60213
+ },
60214
+ "required": ["method", "url", "headers", "body"]
60215
+ },
60216
+ "requestState": {
60217
+ "type": "string",
60218
+ "enum": ["captured", "expired", "not_captured"]
60219
+ },
57170
60220
  "responseHeaders": {
57171
60221
  "maxItems": 8,
57172
60222
  "type": "array",
@@ -57884,6 +60934,116 @@
57884
60934
  },
57885
60935
  "required": ["contentType", "text", "truncated"]
57886
60936
  },
60937
+ "response": {
60938
+ "type": "object",
60939
+ "properties": {
60940
+ "statusText": {
60941
+ "type": "string"
60942
+ },
60943
+ "headers": {
60944
+ "type": "array",
60945
+ "items": {
60946
+ "type": "object",
60947
+ "properties": {
60948
+ "name": {
60949
+ "type": "string"
60950
+ },
60951
+ "value": {
60952
+ "type": "string"
60953
+ }
60954
+ },
60955
+ "required": ["name", "value"]
60956
+ }
60957
+ },
60958
+ "bodyState": {
60959
+ "type": "string",
60960
+ "enum": [
60961
+ "captured",
60962
+ "empty",
60963
+ "expired",
60964
+ "not_captured"
60965
+ ]
60966
+ },
60967
+ "body": {
60968
+ "type": "object",
60969
+ "properties": {
60970
+ "contentType": {
60971
+ "type": "string"
60972
+ },
60973
+ "encoding": {
60974
+ "type": "string",
60975
+ "enum": ["utf8", "base64"]
60976
+ },
60977
+ "content": {
60978
+ "type": "string",
60979
+ "maxLength": 131072
60980
+ },
60981
+ "capturedBytes": {
60982
+ "type": "integer",
60983
+ "minimum": 1,
60984
+ "maximum": 10240
60985
+ },
60986
+ "originalBytes": {
60987
+ "type": "integer",
60988
+ "minimum": 0,
60989
+ "maximum": 9007199254740991
60990
+ },
60991
+ "truncated": {
60992
+ "type": "boolean"
60993
+ },
60994
+ "redacted": {
60995
+ "type": "boolean"
60996
+ },
60997
+ "incomplete": {
60998
+ "type": "boolean"
60999
+ }
61000
+ },
61001
+ "required": [
61002
+ "contentType",
61003
+ "encoding",
61004
+ "content",
61005
+ "capturedBytes",
61006
+ "truncated"
61007
+ ]
61008
+ }
61009
+ },
61010
+ "required": ["statusText", "headers", "bodyState"]
61011
+ },
61012
+ "request": {
61013
+ "type": "object",
61014
+ "properties": {
61015
+ "method": {
61016
+ "type": "string",
61017
+ "enum": ["GET", "POST", "PUT"]
61018
+ },
61019
+ "url": {
61020
+ "type": "string"
61021
+ },
61022
+ "headers": {
61023
+ "type": "array",
61024
+ "items": {
61025
+ "type": "object",
61026
+ "properties": {
61027
+ "name": {
61028
+ "type": "string"
61029
+ },
61030
+ "value": {
61031
+ "type": "string"
61032
+ }
61033
+ },
61034
+ "required": ["name", "value"]
61035
+ }
61036
+ },
61037
+ "body": {
61038
+ "type": "string"
61039
+ }
61040
+ },
61041
+ "required": ["method", "url", "headers", "body"]
61042
+ },
61043
+ "requestState": {
61044
+ "type": "string",
61045
+ "enum": ["captured", "expired", "not_captured"]
61046
+ },
57887
61047
  "responseHeaders": {
57888
61048
  "maxItems": 8,
57889
61049
  "type": "array",
@@ -58583,6 +61743,60 @@
58583
61743
  "schedule": {
58584
61744
  "type": "object",
58585
61745
  "properties": {
61746
+ "autoPauseAfterFailures": {
61747
+ "anyOf": [
61748
+ {
61749
+ "type": "integer",
61750
+ "minimum": 1,
61751
+ "maximum": 100
61752
+ },
61753
+ {
61754
+ "type": "string",
61755
+ "const": "never"
61756
+ }
61757
+ ],
61758
+ "description": "Consecutive failed runs before automatic pause: 1–100 or \"never\". Defaults to 5 on create; omission on replace preserves the setting. One-shot schedules are unaffected."
61759
+ },
61760
+ "consecutiveFailedRuns": {
61761
+ "type": "integer",
61762
+ "minimum": 0,
61763
+ "maximum": 9007199254740991
61764
+ },
61765
+ "autoPauseReason": {
61766
+ "anyOf": [
61767
+ {
61768
+ "type": "object",
61769
+ "properties": {
61770
+ "failedRuns": {
61771
+ "type": "integer",
61772
+ "exclusiveMinimum": 0,
61773
+ "maximum": 9007199254740991
61774
+ },
61775
+ "status": {
61776
+ "type": "integer",
61777
+ "minimum": 100,
61778
+ "maximum": 599
61779
+ },
61780
+ "diagnostic": {
61781
+ "type": "string",
61782
+ "maxLength": 500
61783
+ },
61784
+ "pausedAt": {
61785
+ "type": "string",
61786
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
61787
+ }
61788
+ },
61789
+ "required": [
61790
+ "failedRuns",
61791
+ "diagnostic",
61792
+ "pausedAt"
61793
+ ]
61794
+ },
61795
+ {
61796
+ "type": "null"
61797
+ }
61798
+ ]
61799
+ },
58586
61800
  "http": {
58587
61801
  "type": "object",
58588
61802
  "properties": {
@@ -59523,6 +62737,60 @@
59523
62737
  "schedule": {
59524
62738
  "type": "object",
59525
62739
  "properties": {
62740
+ "autoPauseAfterFailures": {
62741
+ "anyOf": [
62742
+ {
62743
+ "type": "integer",
62744
+ "minimum": 1,
62745
+ "maximum": 100
62746
+ },
62747
+ {
62748
+ "type": "string",
62749
+ "const": "never"
62750
+ }
62751
+ ],
62752
+ "description": "Consecutive failed runs before automatic pause: 1–100 or \"never\". Defaults to 5 on create; omission on replace preserves the setting. One-shot schedules are unaffected."
62753
+ },
62754
+ "consecutiveFailedRuns": {
62755
+ "type": "integer",
62756
+ "minimum": 0,
62757
+ "maximum": 9007199254740991
62758
+ },
62759
+ "autoPauseReason": {
62760
+ "anyOf": [
62761
+ {
62762
+ "type": "object",
62763
+ "properties": {
62764
+ "failedRuns": {
62765
+ "type": "integer",
62766
+ "exclusiveMinimum": 0,
62767
+ "maximum": 9007199254740991
62768
+ },
62769
+ "status": {
62770
+ "type": "integer",
62771
+ "minimum": 100,
62772
+ "maximum": 599
62773
+ },
62774
+ "diagnostic": {
62775
+ "type": "string",
62776
+ "maxLength": 500
62777
+ },
62778
+ "pausedAt": {
62779
+ "type": "string",
62780
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
62781
+ }
62782
+ },
62783
+ "required": [
62784
+ "failedRuns",
62785
+ "diagnostic",
62786
+ "pausedAt"
62787
+ ]
62788
+ },
62789
+ {
62790
+ "type": "null"
62791
+ }
62792
+ ]
62793
+ },
59526
62794
  "http": {
59527
62795
  "type": "object",
59528
62796
  "properties": {
@@ -60465,6 +63733,60 @@
60465
63733
  "schedule": {
60466
63734
  "type": "object",
60467
63735
  "properties": {
63736
+ "autoPauseAfterFailures": {
63737
+ "anyOf": [
63738
+ {
63739
+ "type": "integer",
63740
+ "minimum": 1,
63741
+ "maximum": 100
63742
+ },
63743
+ {
63744
+ "type": "string",
63745
+ "const": "never"
63746
+ }
63747
+ ],
63748
+ "description": "Consecutive failed runs before automatic pause: 1–100 or \"never\". Defaults to 5 on create; omission on replace preserves the setting. One-shot schedules are unaffected."
63749
+ },
63750
+ "consecutiveFailedRuns": {
63751
+ "type": "integer",
63752
+ "minimum": 0,
63753
+ "maximum": 9007199254740991
63754
+ },
63755
+ "autoPauseReason": {
63756
+ "anyOf": [
63757
+ {
63758
+ "type": "object",
63759
+ "properties": {
63760
+ "failedRuns": {
63761
+ "type": "integer",
63762
+ "exclusiveMinimum": 0,
63763
+ "maximum": 9007199254740991
63764
+ },
63765
+ "status": {
63766
+ "type": "integer",
63767
+ "minimum": 100,
63768
+ "maximum": 599
63769
+ },
63770
+ "diagnostic": {
63771
+ "type": "string",
63772
+ "maxLength": 500
63773
+ },
63774
+ "pausedAt": {
63775
+ "type": "string",
63776
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"
63777
+ }
63778
+ },
63779
+ "required": [
63780
+ "failedRuns",
63781
+ "diagnostic",
63782
+ "pausedAt"
63783
+ ]
63784
+ },
63785
+ {
63786
+ "type": "null"
63787
+ }
63788
+ ]
63789
+ },
60468
63790
  "http": {
60469
63791
  "type": "object",
60470
63792
  "properties": {
@@ -61785,7 +65107,7 @@
61785
65107
  "defaultStatus": 422,
61786
65108
  "receiverActed": false,
61787
65109
  "senderOutcome": "terminal",
61788
- "summary": "Answers a selected 4xx. The sender records a customer refusal, and retries it only when the status is one the receiver may recover from — 401, 403 and 404, listed as `clientErrorStatusesRetried`. The default, 422, is not one of those, so it settles on the first attempt."
65110
+ "summary": "Answers a selected 4xx. Every selected status settles the run on the first attempt, including 401, 403 and 404. Fix the destination, then redeliver manually."
61789
65111
  },
61790
65112
  "defer_abandon": {
61791
65113
  "defaultStatus": 202,
@@ -61828,8 +65150,8 @@
61828
65150
  "invalid_signature": {
61829
65151
  "defaultStatus": 401,
61830
65152
  "receiverActed": false,
61831
- "senderOutcome": "retryable",
61832
- "summary": "Rejects the delivery as unauthenticated regardless of whether the signature verified. Exercises the key-mismatch path without forging a signature. The sender retries on the receiver's ordinary budget, because the usual cause is a credential the receiver is about to redeploy."
65153
+ "senderOutcome": "terminal",
65154
+ "summary": "Rejects the delivery as unauthenticated regardless of whether the signature verified. Exercises the key-mismatch path without forging a signature. The run stops after one attempt; fix the key and redeliver manually."
61833
65155
  },
61834
65156
  "rate_limited": {
61835
65157
  "defaultStatus": 429,
@@ -61865,7 +65187,7 @@
61865
65187
  "maxRetainedBodyBytes": 4096
61866
65188
  },
61867
65189
  "clientErrorStatuses": [400, 401, 403, 404, 409, 410, 422],
61868
- "clientErrorStatusesRetried": [401, 403, 404],
65190
+ "clientErrorStatusesRetried": [],
61869
65191
  "deferral": {
61870
65192
  "acknowledgement": "{\"greatwait\":{\"status\":\"pending\"}}",
61871
65193
  "note": "A deferring behavior answers this exact body with this status, then reports with the bearer credential from the delivery's own signed envelope — to the one completion address the stage is configured with, which the envelope's own URL must match. A delivery whose envelope carries no completion material, or names a different address, cannot defer, and the sink answers it as an ordinary success instead.",