@splitin/verification-server 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2876 @@
1
+ {
2
+ "openapi": "3.1.0",
3
+ "info": {
4
+ "title": "SplitIn Verification Server API",
5
+ "version": "1.0.0",
6
+ "license": {
7
+ "name": "MIT"
8
+ },
9
+ "description": "Provider-neutral verification session, webhook, worker, and operations API. Every path is generated from packages/verification-server/src/catalog.ts V1_ROUTES."
10
+ },
11
+ "servers": [
12
+ {
13
+ "url": "/",
14
+ "description": "Host-mounted verification fetch handler"
15
+ }
16
+ ],
17
+ "tags": [
18
+ {
19
+ "name": "sessions"
20
+ },
21
+ {
22
+ "name": "appeals"
23
+ },
24
+ {
25
+ "name": "support"
26
+ },
27
+ {
28
+ "name": "webhooks"
29
+ },
30
+ {
31
+ "name": "protected-actions"
32
+ },
33
+ {
34
+ "name": "admin"
35
+ },
36
+ {
37
+ "name": "workers"
38
+ }
39
+ ],
40
+ "paths": {
41
+ "/v1/sessions": {
42
+ "post": {
43
+ "operationId": "sessions.create",
44
+ "tags": [
45
+ "sessions"
46
+ ],
47
+ "summary": "sessions create",
48
+ "description": "Auth: actor. Cookie-authenticated mutations require Origin/CSRF. Idempotency-Key is required.",
49
+ "security": [
50
+ {
51
+ "actor": []
52
+ }
53
+ ],
54
+ "parameters": [
55
+ {
56
+ "name": "Idempotency-Key",
57
+ "in": "header",
58
+ "required": true,
59
+ "schema": {
60
+ "type": "string",
61
+ "minLength": 8,
62
+ "maxLength": 128
63
+ }
64
+ }
65
+ ],
66
+ "responses": {
67
+ "200": {
68
+ "description": "Success",
69
+ "content": {
70
+ "application/json": {
71
+ "schema": {
72
+ "$ref": "#/components/schemas/SessionEnvelopeV1"
73
+ }
74
+ }
75
+ }
76
+ },
77
+ "400": {
78
+ "description": "Invalid request",
79
+ "content": {
80
+ "application/json": {
81
+ "schema": {
82
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
83
+ }
84
+ }
85
+ }
86
+ },
87
+ "401": {
88
+ "description": "Unauthenticated"
89
+ },
90
+ "403": {
91
+ "description": "Forbidden"
92
+ },
93
+ "404": {
94
+ "description": "Not found"
95
+ },
96
+ "429": {
97
+ "description": "Rate limited",
98
+ "content": {
99
+ "application/json": {
100
+ "schema": {
101
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
102
+ }
103
+ }
104
+ }
105
+ }
106
+ },
107
+ "requestBody": {
108
+ "required": true,
109
+ "content": {
110
+ "application/json": {
111
+ "schema": {
112
+ "$ref": "#/components/schemas/StartSessionInput"
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
118
+ },
119
+ "/v1/sessions/{id}/resume": {
120
+ "post": {
121
+ "operationId": "sessions.resume",
122
+ "tags": [
123
+ "sessions"
124
+ ],
125
+ "summary": "sessions resume",
126
+ "description": "Auth: actor. Cookie-authenticated mutations require Origin/CSRF. Idempotency-Key is required.",
127
+ "security": [
128
+ {
129
+ "actor": []
130
+ }
131
+ ],
132
+ "parameters": [
133
+ {
134
+ "name": "id",
135
+ "in": "path",
136
+ "required": true,
137
+ "schema": {
138
+ "type": "string",
139
+ "minLength": 1,
140
+ "maxLength": 128
141
+ }
142
+ },
143
+ {
144
+ "name": "Idempotency-Key",
145
+ "in": "header",
146
+ "required": true,
147
+ "schema": {
148
+ "type": "string",
149
+ "minLength": 8,
150
+ "maxLength": 128
151
+ }
152
+ }
153
+ ],
154
+ "responses": {
155
+ "200": {
156
+ "description": "Success",
157
+ "content": {
158
+ "application/json": {
159
+ "schema": {
160
+ "$ref": "#/components/schemas/SessionEnvelopeV1"
161
+ }
162
+ }
163
+ }
164
+ },
165
+ "400": {
166
+ "description": "Invalid request",
167
+ "content": {
168
+ "application/json": {
169
+ "schema": {
170
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
171
+ }
172
+ }
173
+ }
174
+ },
175
+ "401": {
176
+ "description": "Unauthenticated"
177
+ },
178
+ "403": {
179
+ "description": "Forbidden"
180
+ },
181
+ "404": {
182
+ "description": "Not found"
183
+ },
184
+ "429": {
185
+ "description": "Rate limited",
186
+ "content": {
187
+ "application/json": {
188
+ "schema": {
189
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
190
+ }
191
+ }
192
+ }
193
+ }
194
+ }
195
+ }
196
+ },
197
+ "/v1/sessions/{id}": {
198
+ "get": {
199
+ "operationId": "sessions.get",
200
+ "tags": [
201
+ "sessions"
202
+ ],
203
+ "summary": "sessions get",
204
+ "description": "Auth: actor. CSRF is not required. Idempotency-Key is not required.",
205
+ "security": [
206
+ {
207
+ "actor": []
208
+ }
209
+ ],
210
+ "parameters": [
211
+ {
212
+ "name": "id",
213
+ "in": "path",
214
+ "required": true,
215
+ "schema": {
216
+ "type": "string",
217
+ "minLength": 1,
218
+ "maxLength": 128
219
+ }
220
+ }
221
+ ],
222
+ "responses": {
223
+ "200": {
224
+ "description": "Success",
225
+ "content": {
226
+ "application/json": {
227
+ "schema": {
228
+ "$ref": "#/components/schemas/SessionEnvelopeV1"
229
+ }
230
+ }
231
+ }
232
+ },
233
+ "400": {
234
+ "description": "Invalid request",
235
+ "content": {
236
+ "application/json": {
237
+ "schema": {
238
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
239
+ }
240
+ }
241
+ }
242
+ },
243
+ "401": {
244
+ "description": "Unauthenticated"
245
+ },
246
+ "403": {
247
+ "description": "Forbidden"
248
+ },
249
+ "404": {
250
+ "description": "Not found"
251
+ },
252
+ "429": {
253
+ "description": "Rate limited",
254
+ "content": {
255
+ "application/json": {
256
+ "schema": {
257
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
258
+ }
259
+ }
260
+ }
261
+ }
262
+ }
263
+ }
264
+ },
265
+ "/v1/sessions/{id}/retry": {
266
+ "post": {
267
+ "operationId": "sessions.retry",
268
+ "tags": [
269
+ "sessions"
270
+ ],
271
+ "summary": "sessions retry",
272
+ "description": "Auth: actor. Cookie-authenticated mutations require Origin/CSRF. Idempotency-Key is required.",
273
+ "security": [
274
+ {
275
+ "actor": []
276
+ }
277
+ ],
278
+ "parameters": [
279
+ {
280
+ "name": "id",
281
+ "in": "path",
282
+ "required": true,
283
+ "schema": {
284
+ "type": "string",
285
+ "minLength": 1,
286
+ "maxLength": 128
287
+ }
288
+ },
289
+ {
290
+ "name": "Idempotency-Key",
291
+ "in": "header",
292
+ "required": true,
293
+ "schema": {
294
+ "type": "string",
295
+ "minLength": 8,
296
+ "maxLength": 128
297
+ }
298
+ }
299
+ ],
300
+ "responses": {
301
+ "200": {
302
+ "description": "Success",
303
+ "content": {
304
+ "application/json": {
305
+ "schema": {
306
+ "$ref": "#/components/schemas/SessionEnvelopeV1"
307
+ }
308
+ }
309
+ }
310
+ },
311
+ "400": {
312
+ "description": "Invalid request",
313
+ "content": {
314
+ "application/json": {
315
+ "schema": {
316
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
317
+ }
318
+ }
319
+ }
320
+ },
321
+ "401": {
322
+ "description": "Unauthenticated"
323
+ },
324
+ "403": {
325
+ "description": "Forbidden"
326
+ },
327
+ "404": {
328
+ "description": "Not found"
329
+ },
330
+ "429": {
331
+ "description": "Rate limited",
332
+ "content": {
333
+ "application/json": {
334
+ "schema": {
335
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
336
+ }
337
+ }
338
+ }
339
+ }
340
+ }
341
+ }
342
+ },
343
+ "/v1/sessions/{id}/pause": {
344
+ "post": {
345
+ "operationId": "sessions.pause",
346
+ "tags": [
347
+ "sessions"
348
+ ],
349
+ "summary": "sessions pause",
350
+ "description": "Auth: actor. Cookie-authenticated mutations require Origin/CSRF. Idempotency-Key is required.",
351
+ "security": [
352
+ {
353
+ "actor": []
354
+ }
355
+ ],
356
+ "parameters": [
357
+ {
358
+ "name": "id",
359
+ "in": "path",
360
+ "required": true,
361
+ "schema": {
362
+ "type": "string",
363
+ "minLength": 1,
364
+ "maxLength": 128
365
+ }
366
+ },
367
+ {
368
+ "name": "Idempotency-Key",
369
+ "in": "header",
370
+ "required": true,
371
+ "schema": {
372
+ "type": "string",
373
+ "minLength": 8,
374
+ "maxLength": 128
375
+ }
376
+ }
377
+ ],
378
+ "responses": {
379
+ "200": {
380
+ "description": "Success",
381
+ "content": {
382
+ "application/json": {
383
+ "schema": {
384
+ "$ref": "#/components/schemas/SessionMutationResult"
385
+ }
386
+ }
387
+ }
388
+ },
389
+ "400": {
390
+ "description": "Invalid request",
391
+ "content": {
392
+ "application/json": {
393
+ "schema": {
394
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
395
+ }
396
+ }
397
+ }
398
+ },
399
+ "401": {
400
+ "description": "Unauthenticated"
401
+ },
402
+ "403": {
403
+ "description": "Forbidden"
404
+ },
405
+ "404": {
406
+ "description": "Not found"
407
+ },
408
+ "429": {
409
+ "description": "Rate limited",
410
+ "content": {
411
+ "application/json": {
412
+ "schema": {
413
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
414
+ }
415
+ }
416
+ }
417
+ }
418
+ }
419
+ }
420
+ },
421
+ "/v1/sessions/{id}/cancel": {
422
+ "post": {
423
+ "operationId": "sessions.cancel",
424
+ "tags": [
425
+ "sessions"
426
+ ],
427
+ "summary": "sessions cancel",
428
+ "description": "Auth: actor. Cookie-authenticated mutations require Origin/CSRF. Idempotency-Key is required.",
429
+ "security": [
430
+ {
431
+ "actor": []
432
+ }
433
+ ],
434
+ "parameters": [
435
+ {
436
+ "name": "id",
437
+ "in": "path",
438
+ "required": true,
439
+ "schema": {
440
+ "type": "string",
441
+ "minLength": 1,
442
+ "maxLength": 128
443
+ }
444
+ },
445
+ {
446
+ "name": "Idempotency-Key",
447
+ "in": "header",
448
+ "required": true,
449
+ "schema": {
450
+ "type": "string",
451
+ "minLength": 8,
452
+ "maxLength": 128
453
+ }
454
+ }
455
+ ],
456
+ "responses": {
457
+ "200": {
458
+ "description": "Success",
459
+ "content": {
460
+ "application/json": {
461
+ "schema": {
462
+ "$ref": "#/components/schemas/SessionMutationResult"
463
+ }
464
+ }
465
+ }
466
+ },
467
+ "400": {
468
+ "description": "Invalid request",
469
+ "content": {
470
+ "application/json": {
471
+ "schema": {
472
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
473
+ }
474
+ }
475
+ }
476
+ },
477
+ "401": {
478
+ "description": "Unauthenticated"
479
+ },
480
+ "403": {
481
+ "description": "Forbidden"
482
+ },
483
+ "404": {
484
+ "description": "Not found"
485
+ },
486
+ "429": {
487
+ "description": "Rate limited",
488
+ "content": {
489
+ "application/json": {
490
+ "schema": {
491
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
492
+ }
493
+ }
494
+ }
495
+ }
496
+ }
497
+ }
498
+ },
499
+ "/v1/appeals": {
500
+ "post": {
501
+ "operationId": "appeals.create",
502
+ "tags": [
503
+ "appeals"
504
+ ],
505
+ "summary": "appeals create",
506
+ "description": "Auth: actor. Cookie-authenticated mutations require Origin/CSRF. Idempotency-Key is required.",
507
+ "security": [
508
+ {
509
+ "actor": []
510
+ }
511
+ ],
512
+ "parameters": [
513
+ {
514
+ "name": "Idempotency-Key",
515
+ "in": "header",
516
+ "required": true,
517
+ "schema": {
518
+ "type": "string",
519
+ "minLength": 8,
520
+ "maxLength": 128
521
+ }
522
+ }
523
+ ],
524
+ "responses": {
525
+ "200": {
526
+ "description": "Success",
527
+ "content": {
528
+ "application/json": {
529
+ "schema": {
530
+ "$ref": "#/components/schemas/AppealResult"
531
+ }
532
+ }
533
+ }
534
+ },
535
+ "400": {
536
+ "description": "Invalid request",
537
+ "content": {
538
+ "application/json": {
539
+ "schema": {
540
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
541
+ }
542
+ }
543
+ }
544
+ },
545
+ "401": {
546
+ "description": "Unauthenticated"
547
+ },
548
+ "403": {
549
+ "description": "Forbidden"
550
+ },
551
+ "404": {
552
+ "description": "Not found"
553
+ },
554
+ "429": {
555
+ "description": "Rate limited",
556
+ "content": {
557
+ "application/json": {
558
+ "schema": {
559
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
560
+ }
561
+ }
562
+ }
563
+ }
564
+ },
565
+ "requestBody": {
566
+ "required": true,
567
+ "content": {
568
+ "application/json": {
569
+ "schema": {
570
+ "$ref": "#/components/schemas/AppealInput"
571
+ }
572
+ }
573
+ }
574
+ }
575
+ }
576
+ },
577
+ "/v1/support/escalations": {
578
+ "post": {
579
+ "operationId": "support.escalations",
580
+ "tags": [
581
+ "support"
582
+ ],
583
+ "summary": "support escalations",
584
+ "description": "Auth: actor. Cookie-authenticated mutations require Origin/CSRF. Idempotency-Key is required.",
585
+ "security": [
586
+ {
587
+ "actor": []
588
+ }
589
+ ],
590
+ "parameters": [
591
+ {
592
+ "name": "Idempotency-Key",
593
+ "in": "header",
594
+ "required": true,
595
+ "schema": {
596
+ "type": "string",
597
+ "minLength": 8,
598
+ "maxLength": 128
599
+ }
600
+ }
601
+ ],
602
+ "responses": {
603
+ "200": {
604
+ "description": "Success",
605
+ "content": {
606
+ "application/json": {
607
+ "schema": {
608
+ "$ref": "#/components/schemas/SupportEscalationResult"
609
+ }
610
+ }
611
+ }
612
+ },
613
+ "400": {
614
+ "description": "Invalid request",
615
+ "content": {
616
+ "application/json": {
617
+ "schema": {
618
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
619
+ }
620
+ }
621
+ }
622
+ },
623
+ "401": {
624
+ "description": "Unauthenticated"
625
+ },
626
+ "403": {
627
+ "description": "Forbidden"
628
+ },
629
+ "404": {
630
+ "description": "Not found"
631
+ },
632
+ "429": {
633
+ "description": "Rate limited",
634
+ "content": {
635
+ "application/json": {
636
+ "schema": {
637
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
638
+ }
639
+ }
640
+ }
641
+ }
642
+ },
643
+ "requestBody": {
644
+ "required": true,
645
+ "content": {
646
+ "application/json": {
647
+ "schema": {
648
+ "$ref": "#/components/schemas/SupportEscalationInput"
649
+ }
650
+ }
651
+ }
652
+ }
653
+ }
654
+ },
655
+ "/v1/webhooks/{provider}": {
656
+ "post": {
657
+ "operationId": "webhooks.ingest",
658
+ "tags": [
659
+ "webhooks"
660
+ ],
661
+ "summary": "webhooks ingest",
662
+ "description": "Auth: none. CSRF is not required. Idempotency-Key is not required.",
663
+ "security": [],
664
+ "parameters": [
665
+ {
666
+ "name": "provider",
667
+ "in": "path",
668
+ "required": true,
669
+ "schema": {
670
+ "type": "string",
671
+ "minLength": 1,
672
+ "maxLength": 128
673
+ }
674
+ }
675
+ ],
676
+ "responses": {
677
+ "202": {
678
+ "description": "Webhook accepted for reconciliation",
679
+ "content": {
680
+ "application/json": {
681
+ "schema": {
682
+ "$ref": "#/components/schemas/WebhookAccepted"
683
+ }
684
+ }
685
+ }
686
+ },
687
+ "400": {
688
+ "description": "Invalid request",
689
+ "content": {
690
+ "application/json": {
691
+ "schema": {
692
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
693
+ }
694
+ }
695
+ }
696
+ },
697
+ "401": {
698
+ "description": "Unauthenticated"
699
+ },
700
+ "403": {
701
+ "description": "Forbidden"
702
+ },
703
+ "404": {
704
+ "description": "Not found"
705
+ },
706
+ "429": {
707
+ "description": "Rate limited",
708
+ "content": {
709
+ "application/json": {
710
+ "schema": {
711
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
712
+ }
713
+ }
714
+ }
715
+ }
716
+ },
717
+ "requestBody": {
718
+ "required": true,
719
+ "content": {
720
+ "application/json": {
721
+ "schema": {
722
+ "type": "object",
723
+ "additionalProperties": true
724
+ }
725
+ }
726
+ }
727
+ }
728
+ }
729
+ },
730
+ "/v1/protected-actions/evaluate": {
731
+ "post": {
732
+ "operationId": "protectedActions.evaluate",
733
+ "tags": [
734
+ "protected-actions"
735
+ ],
736
+ "summary": "protectedActions evaluate",
737
+ "description": "Auth: actor. Cookie-authenticated mutations require Origin/CSRF. Idempotency-Key is required.",
738
+ "security": [
739
+ {
740
+ "actor": []
741
+ }
742
+ ],
743
+ "parameters": [
744
+ {
745
+ "name": "Idempotency-Key",
746
+ "in": "header",
747
+ "required": true,
748
+ "schema": {
749
+ "type": "string",
750
+ "minLength": 8,
751
+ "maxLength": 128
752
+ }
753
+ }
754
+ ],
755
+ "responses": {
756
+ "200": {
757
+ "description": "Success",
758
+ "content": {
759
+ "application/json": {
760
+ "schema": {
761
+ "$ref": "#/components/schemas/ProtectedActionDecision"
762
+ }
763
+ }
764
+ }
765
+ },
766
+ "400": {
767
+ "description": "Invalid request",
768
+ "content": {
769
+ "application/json": {
770
+ "schema": {
771
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
772
+ }
773
+ }
774
+ }
775
+ },
776
+ "401": {
777
+ "description": "Unauthenticated"
778
+ },
779
+ "403": {
780
+ "description": "Forbidden"
781
+ },
782
+ "404": {
783
+ "description": "Not found"
784
+ },
785
+ "429": {
786
+ "description": "Rate limited",
787
+ "content": {
788
+ "application/json": {
789
+ "schema": {
790
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
791
+ }
792
+ }
793
+ }
794
+ }
795
+ },
796
+ "requestBody": {
797
+ "required": true,
798
+ "content": {
799
+ "application/json": {
800
+ "schema": {
801
+ "$ref": "#/components/schemas/ProtectedActionInput"
802
+ }
803
+ }
804
+ }
805
+ }
806
+ }
807
+ },
808
+ "/v1/admin/health": {
809
+ "get": {
810
+ "operationId": "admin.health",
811
+ "tags": [
812
+ "admin"
813
+ ],
814
+ "summary": "admin health",
815
+ "description": "Auth: operator. CSRF is not required. Idempotency-Key is not required.",
816
+ "security": [
817
+ {
818
+ "operator": []
819
+ }
820
+ ],
821
+ "parameters": [],
822
+ "responses": {
823
+ "200": {
824
+ "description": "Success",
825
+ "content": {
826
+ "application/json": {
827
+ "schema": {
828
+ "$ref": "#/components/schemas/AdminHealthSnapshot"
829
+ }
830
+ }
831
+ }
832
+ },
833
+ "400": {
834
+ "description": "Invalid request",
835
+ "content": {
836
+ "application/json": {
837
+ "schema": {
838
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
839
+ }
840
+ }
841
+ }
842
+ },
843
+ "401": {
844
+ "description": "Unauthenticated"
845
+ },
846
+ "403": {
847
+ "description": "Forbidden"
848
+ },
849
+ "404": {
850
+ "description": "Not found"
851
+ },
852
+ "429": {
853
+ "description": "Rate limited",
854
+ "content": {
855
+ "application/json": {
856
+ "schema": {
857
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
858
+ }
859
+ }
860
+ }
861
+ }
862
+ }
863
+ }
864
+ },
865
+ "/v1/admin/routes": {
866
+ "get": {
867
+ "operationId": "admin.routes.get",
868
+ "tags": [
869
+ "admin"
870
+ ],
871
+ "summary": "admin routes get",
872
+ "description": "Auth: operator. CSRF is not required. Idempotency-Key is not required.",
873
+ "security": [
874
+ {
875
+ "operator": []
876
+ }
877
+ ],
878
+ "parameters": [],
879
+ "responses": {
880
+ "200": {
881
+ "description": "Success",
882
+ "content": {
883
+ "application/json": {
884
+ "schema": {
885
+ "$ref": "#/components/schemas/AdminRoutesSnapshot"
886
+ }
887
+ }
888
+ }
889
+ },
890
+ "400": {
891
+ "description": "Invalid request",
892
+ "content": {
893
+ "application/json": {
894
+ "schema": {
895
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
896
+ }
897
+ }
898
+ }
899
+ },
900
+ "401": {
901
+ "description": "Unauthenticated"
902
+ },
903
+ "403": {
904
+ "description": "Forbidden"
905
+ },
906
+ "404": {
907
+ "description": "Not found"
908
+ },
909
+ "429": {
910
+ "description": "Rate limited",
911
+ "content": {
912
+ "application/json": {
913
+ "schema": {
914
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
915
+ }
916
+ }
917
+ }
918
+ }
919
+ }
920
+ },
921
+ "post": {
922
+ "operationId": "admin.routes.mutate",
923
+ "tags": [
924
+ "admin"
925
+ ],
926
+ "summary": "admin routes mutate",
927
+ "description": "Auth: operator. Cookie-authenticated mutations require Origin/CSRF. Idempotency-Key is required.",
928
+ "security": [
929
+ {
930
+ "operator": []
931
+ }
932
+ ],
933
+ "parameters": [
934
+ {
935
+ "name": "Idempotency-Key",
936
+ "in": "header",
937
+ "required": true,
938
+ "schema": {
939
+ "type": "string",
940
+ "minLength": 8,
941
+ "maxLength": 128
942
+ }
943
+ }
944
+ ],
945
+ "responses": {
946
+ "200": {
947
+ "description": "Success",
948
+ "content": {
949
+ "application/json": {
950
+ "schema": {
951
+ "$ref": "#/components/schemas/SafeAdminRecord"
952
+ }
953
+ }
954
+ }
955
+ },
956
+ "400": {
957
+ "description": "Invalid request",
958
+ "content": {
959
+ "application/json": {
960
+ "schema": {
961
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
962
+ }
963
+ }
964
+ }
965
+ },
966
+ "401": {
967
+ "description": "Unauthenticated"
968
+ },
969
+ "403": {
970
+ "description": "Forbidden"
971
+ },
972
+ "404": {
973
+ "description": "Not found"
974
+ },
975
+ "429": {
976
+ "description": "Rate limited",
977
+ "content": {
978
+ "application/json": {
979
+ "schema": {
980
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
981
+ }
982
+ }
983
+ }
984
+ }
985
+ },
986
+ "requestBody": {
987
+ "required": true,
988
+ "content": {
989
+ "application/json": {
990
+ "schema": {
991
+ "$ref": "#/components/schemas/RouteChangeInput"
992
+ }
993
+ }
994
+ }
995
+ }
996
+ }
997
+ },
998
+ "/v1/admin/circuits": {
999
+ "get": {
1000
+ "operationId": "admin.circuits.get",
1001
+ "tags": [
1002
+ "admin"
1003
+ ],
1004
+ "summary": "admin circuits get",
1005
+ "description": "Auth: operator. CSRF is not required. Idempotency-Key is not required.",
1006
+ "security": [
1007
+ {
1008
+ "operator": []
1009
+ }
1010
+ ],
1011
+ "parameters": [],
1012
+ "responses": {
1013
+ "200": {
1014
+ "description": "Success",
1015
+ "content": {
1016
+ "application/json": {
1017
+ "schema": {
1018
+ "$ref": "#/components/schemas/AdminCircuitsSnapshot"
1019
+ }
1020
+ }
1021
+ }
1022
+ },
1023
+ "400": {
1024
+ "description": "Invalid request",
1025
+ "content": {
1026
+ "application/json": {
1027
+ "schema": {
1028
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1029
+ }
1030
+ }
1031
+ }
1032
+ },
1033
+ "401": {
1034
+ "description": "Unauthenticated"
1035
+ },
1036
+ "403": {
1037
+ "description": "Forbidden"
1038
+ },
1039
+ "404": {
1040
+ "description": "Not found"
1041
+ },
1042
+ "429": {
1043
+ "description": "Rate limited",
1044
+ "content": {
1045
+ "application/json": {
1046
+ "schema": {
1047
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1048
+ }
1049
+ }
1050
+ }
1051
+ }
1052
+ }
1053
+ },
1054
+ "post": {
1055
+ "operationId": "admin.circuits.mutate",
1056
+ "tags": [
1057
+ "admin"
1058
+ ],
1059
+ "summary": "admin circuits mutate",
1060
+ "description": "Auth: operator. Cookie-authenticated mutations require Origin/CSRF. Idempotency-Key is required.",
1061
+ "security": [
1062
+ {
1063
+ "operator": []
1064
+ }
1065
+ ],
1066
+ "parameters": [
1067
+ {
1068
+ "name": "Idempotency-Key",
1069
+ "in": "header",
1070
+ "required": true,
1071
+ "schema": {
1072
+ "type": "string",
1073
+ "minLength": 8,
1074
+ "maxLength": 128
1075
+ }
1076
+ }
1077
+ ],
1078
+ "responses": {
1079
+ "200": {
1080
+ "description": "Success",
1081
+ "content": {
1082
+ "application/json": {
1083
+ "schema": {
1084
+ "$ref": "#/components/schemas/SafeAdminRecord"
1085
+ }
1086
+ }
1087
+ }
1088
+ },
1089
+ "400": {
1090
+ "description": "Invalid request",
1091
+ "content": {
1092
+ "application/json": {
1093
+ "schema": {
1094
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1095
+ }
1096
+ }
1097
+ }
1098
+ },
1099
+ "401": {
1100
+ "description": "Unauthenticated"
1101
+ },
1102
+ "403": {
1103
+ "description": "Forbidden"
1104
+ },
1105
+ "404": {
1106
+ "description": "Not found"
1107
+ },
1108
+ "429": {
1109
+ "description": "Rate limited",
1110
+ "content": {
1111
+ "application/json": {
1112
+ "schema": {
1113
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1114
+ }
1115
+ }
1116
+ }
1117
+ }
1118
+ },
1119
+ "requestBody": {
1120
+ "required": true,
1121
+ "content": {
1122
+ "application/json": {
1123
+ "schema": {
1124
+ "$ref": "#/components/schemas/CircuitInput"
1125
+ }
1126
+ }
1127
+ }
1128
+ }
1129
+ }
1130
+ },
1131
+ "/v1/admin/attempts": {
1132
+ "get": {
1133
+ "operationId": "admin.attempts",
1134
+ "tags": [
1135
+ "admin"
1136
+ ],
1137
+ "summary": "admin attempts",
1138
+ "description": "Auth: operator. CSRF is not required. Idempotency-Key is not required.",
1139
+ "security": [
1140
+ {
1141
+ "operator": []
1142
+ }
1143
+ ],
1144
+ "parameters": [],
1145
+ "responses": {
1146
+ "200": {
1147
+ "description": "Success",
1148
+ "content": {
1149
+ "application/json": {
1150
+ "schema": {
1151
+ "$ref": "#/components/schemas/AdminAttemptsSnapshot"
1152
+ }
1153
+ }
1154
+ }
1155
+ },
1156
+ "400": {
1157
+ "description": "Invalid request",
1158
+ "content": {
1159
+ "application/json": {
1160
+ "schema": {
1161
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1162
+ }
1163
+ }
1164
+ }
1165
+ },
1166
+ "401": {
1167
+ "description": "Unauthenticated"
1168
+ },
1169
+ "403": {
1170
+ "description": "Forbidden"
1171
+ },
1172
+ "404": {
1173
+ "description": "Not found"
1174
+ },
1175
+ "429": {
1176
+ "description": "Rate limited",
1177
+ "content": {
1178
+ "application/json": {
1179
+ "schema": {
1180
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1181
+ }
1182
+ }
1183
+ }
1184
+ }
1185
+ }
1186
+ }
1187
+ },
1188
+ "/v1/admin/review": {
1189
+ "get": {
1190
+ "operationId": "admin.review.get",
1191
+ "tags": [
1192
+ "admin"
1193
+ ],
1194
+ "summary": "admin review get",
1195
+ "description": "Auth: operator. CSRF is not required. Idempotency-Key is not required.",
1196
+ "security": [
1197
+ {
1198
+ "operator": []
1199
+ }
1200
+ ],
1201
+ "parameters": [],
1202
+ "responses": {
1203
+ "200": {
1204
+ "description": "Success",
1205
+ "content": {
1206
+ "application/json": {
1207
+ "schema": {
1208
+ "$ref": "#/components/schemas/AdminReviewSnapshot"
1209
+ }
1210
+ }
1211
+ }
1212
+ },
1213
+ "400": {
1214
+ "description": "Invalid request",
1215
+ "content": {
1216
+ "application/json": {
1217
+ "schema": {
1218
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1219
+ }
1220
+ }
1221
+ }
1222
+ },
1223
+ "401": {
1224
+ "description": "Unauthenticated"
1225
+ },
1226
+ "403": {
1227
+ "description": "Forbidden"
1228
+ },
1229
+ "404": {
1230
+ "description": "Not found"
1231
+ },
1232
+ "429": {
1233
+ "description": "Rate limited",
1234
+ "content": {
1235
+ "application/json": {
1236
+ "schema": {
1237
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1238
+ }
1239
+ }
1240
+ }
1241
+ }
1242
+ }
1243
+ },
1244
+ "post": {
1245
+ "operationId": "admin.review.mutate",
1246
+ "tags": [
1247
+ "admin"
1248
+ ],
1249
+ "summary": "admin review mutate",
1250
+ "description": "Auth: operator. Cookie-authenticated mutations require Origin/CSRF. Idempotency-Key is required.",
1251
+ "security": [
1252
+ {
1253
+ "operator": []
1254
+ }
1255
+ ],
1256
+ "parameters": [
1257
+ {
1258
+ "name": "Idempotency-Key",
1259
+ "in": "header",
1260
+ "required": true,
1261
+ "schema": {
1262
+ "type": "string",
1263
+ "minLength": 8,
1264
+ "maxLength": 128
1265
+ }
1266
+ }
1267
+ ],
1268
+ "responses": {
1269
+ "200": {
1270
+ "description": "Success",
1271
+ "content": {
1272
+ "application/json": {
1273
+ "schema": {
1274
+ "$ref": "#/components/schemas/SafeAdminRecord"
1275
+ }
1276
+ }
1277
+ }
1278
+ },
1279
+ "400": {
1280
+ "description": "Invalid request",
1281
+ "content": {
1282
+ "application/json": {
1283
+ "schema": {
1284
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1285
+ }
1286
+ }
1287
+ }
1288
+ },
1289
+ "401": {
1290
+ "description": "Unauthenticated"
1291
+ },
1292
+ "403": {
1293
+ "description": "Forbidden"
1294
+ },
1295
+ "404": {
1296
+ "description": "Not found"
1297
+ },
1298
+ "429": {
1299
+ "description": "Rate limited",
1300
+ "content": {
1301
+ "application/json": {
1302
+ "schema": {
1303
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1304
+ }
1305
+ }
1306
+ }
1307
+ }
1308
+ },
1309
+ "requestBody": {
1310
+ "required": true,
1311
+ "content": {
1312
+ "application/json": {
1313
+ "schema": {
1314
+ "$ref": "#/components/schemas/ReviewInput"
1315
+ }
1316
+ }
1317
+ }
1318
+ }
1319
+ }
1320
+ },
1321
+ "/v1/admin/audit": {
1322
+ "get": {
1323
+ "operationId": "admin.audit",
1324
+ "tags": [
1325
+ "admin"
1326
+ ],
1327
+ "summary": "admin audit",
1328
+ "description": "Auth: operator. CSRF is not required. Idempotency-Key is not required.",
1329
+ "security": [
1330
+ {
1331
+ "operator": []
1332
+ }
1333
+ ],
1334
+ "parameters": [],
1335
+ "responses": {
1336
+ "200": {
1337
+ "description": "Success",
1338
+ "content": {
1339
+ "application/json": {
1340
+ "schema": {
1341
+ "$ref": "#/components/schemas/AdminAuditSnapshot"
1342
+ }
1343
+ }
1344
+ }
1345
+ },
1346
+ "400": {
1347
+ "description": "Invalid request",
1348
+ "content": {
1349
+ "application/json": {
1350
+ "schema": {
1351
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1352
+ }
1353
+ }
1354
+ }
1355
+ },
1356
+ "401": {
1357
+ "description": "Unauthenticated"
1358
+ },
1359
+ "403": {
1360
+ "description": "Forbidden"
1361
+ },
1362
+ "404": {
1363
+ "description": "Not found"
1364
+ },
1365
+ "429": {
1366
+ "description": "Rate limited",
1367
+ "content": {
1368
+ "application/json": {
1369
+ "schema": {
1370
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1371
+ }
1372
+ }
1373
+ }
1374
+ }
1375
+ }
1376
+ }
1377
+ },
1378
+ "/v1/admin/reconciliation": {
1379
+ "get": {
1380
+ "operationId": "admin.reconciliation.get",
1381
+ "tags": [
1382
+ "admin"
1383
+ ],
1384
+ "summary": "admin reconciliation get",
1385
+ "description": "Auth: operator. CSRF is not required. Idempotency-Key is not required.",
1386
+ "security": [
1387
+ {
1388
+ "operator": []
1389
+ }
1390
+ ],
1391
+ "parameters": [],
1392
+ "responses": {
1393
+ "200": {
1394
+ "description": "Success",
1395
+ "content": {
1396
+ "application/json": {
1397
+ "schema": {
1398
+ "$ref": "#/components/schemas/AdminReconciliationSnapshot"
1399
+ }
1400
+ }
1401
+ }
1402
+ },
1403
+ "400": {
1404
+ "description": "Invalid request",
1405
+ "content": {
1406
+ "application/json": {
1407
+ "schema": {
1408
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1409
+ }
1410
+ }
1411
+ }
1412
+ },
1413
+ "401": {
1414
+ "description": "Unauthenticated"
1415
+ },
1416
+ "403": {
1417
+ "description": "Forbidden"
1418
+ },
1419
+ "404": {
1420
+ "description": "Not found"
1421
+ },
1422
+ "429": {
1423
+ "description": "Rate limited",
1424
+ "content": {
1425
+ "application/json": {
1426
+ "schema": {
1427
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1428
+ }
1429
+ }
1430
+ }
1431
+ }
1432
+ }
1433
+ },
1434
+ "post": {
1435
+ "operationId": "admin.reconciliation.mutate",
1436
+ "tags": [
1437
+ "admin"
1438
+ ],
1439
+ "summary": "admin reconciliation mutate",
1440
+ "description": "Auth: operator. Cookie-authenticated mutations require Origin/CSRF. Idempotency-Key is required.",
1441
+ "security": [
1442
+ {
1443
+ "operator": []
1444
+ }
1445
+ ],
1446
+ "parameters": [
1447
+ {
1448
+ "name": "Idempotency-Key",
1449
+ "in": "header",
1450
+ "required": true,
1451
+ "schema": {
1452
+ "type": "string",
1453
+ "minLength": 8,
1454
+ "maxLength": 128
1455
+ }
1456
+ }
1457
+ ],
1458
+ "responses": {
1459
+ "200": {
1460
+ "description": "Success",
1461
+ "content": {
1462
+ "application/json": {
1463
+ "schema": {
1464
+ "$ref": "#/components/schemas/SafeAdminRecord"
1465
+ }
1466
+ }
1467
+ }
1468
+ },
1469
+ "400": {
1470
+ "description": "Invalid request",
1471
+ "content": {
1472
+ "application/json": {
1473
+ "schema": {
1474
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1475
+ }
1476
+ }
1477
+ }
1478
+ },
1479
+ "401": {
1480
+ "description": "Unauthenticated"
1481
+ },
1482
+ "403": {
1483
+ "description": "Forbidden"
1484
+ },
1485
+ "404": {
1486
+ "description": "Not found"
1487
+ },
1488
+ "429": {
1489
+ "description": "Rate limited",
1490
+ "content": {
1491
+ "application/json": {
1492
+ "schema": {
1493
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1494
+ }
1495
+ }
1496
+ }
1497
+ }
1498
+ },
1499
+ "requestBody": {
1500
+ "required": true,
1501
+ "content": {
1502
+ "application/json": {
1503
+ "schema": {
1504
+ "$ref": "#/components/schemas/ReconciliationInput"
1505
+ }
1506
+ }
1507
+ }
1508
+ }
1509
+ }
1510
+ },
1511
+ "/v1/admin/redaction": {
1512
+ "get": {
1513
+ "operationId": "admin.redaction.get",
1514
+ "tags": [
1515
+ "admin"
1516
+ ],
1517
+ "summary": "admin redaction get",
1518
+ "description": "Auth: operator. CSRF is not required. Idempotency-Key is not required.",
1519
+ "security": [
1520
+ {
1521
+ "operator": []
1522
+ }
1523
+ ],
1524
+ "parameters": [],
1525
+ "responses": {
1526
+ "200": {
1527
+ "description": "Success",
1528
+ "content": {
1529
+ "application/json": {
1530
+ "schema": {
1531
+ "$ref": "#/components/schemas/AdminRedactionSnapshot"
1532
+ }
1533
+ }
1534
+ }
1535
+ },
1536
+ "400": {
1537
+ "description": "Invalid request",
1538
+ "content": {
1539
+ "application/json": {
1540
+ "schema": {
1541
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1542
+ }
1543
+ }
1544
+ }
1545
+ },
1546
+ "401": {
1547
+ "description": "Unauthenticated"
1548
+ },
1549
+ "403": {
1550
+ "description": "Forbidden"
1551
+ },
1552
+ "404": {
1553
+ "description": "Not found"
1554
+ },
1555
+ "429": {
1556
+ "description": "Rate limited",
1557
+ "content": {
1558
+ "application/json": {
1559
+ "schema": {
1560
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1561
+ }
1562
+ }
1563
+ }
1564
+ }
1565
+ }
1566
+ },
1567
+ "post": {
1568
+ "operationId": "admin.redaction.mutate",
1569
+ "tags": [
1570
+ "admin"
1571
+ ],
1572
+ "summary": "admin redaction mutate",
1573
+ "description": "Auth: operator. Cookie-authenticated mutations require Origin/CSRF. Idempotency-Key is required.",
1574
+ "security": [
1575
+ {
1576
+ "operator": []
1577
+ }
1578
+ ],
1579
+ "parameters": [
1580
+ {
1581
+ "name": "Idempotency-Key",
1582
+ "in": "header",
1583
+ "required": true,
1584
+ "schema": {
1585
+ "type": "string",
1586
+ "minLength": 8,
1587
+ "maxLength": 128
1588
+ }
1589
+ }
1590
+ ],
1591
+ "responses": {
1592
+ "200": {
1593
+ "description": "Success",
1594
+ "content": {
1595
+ "application/json": {
1596
+ "schema": {
1597
+ "$ref": "#/components/schemas/SafeAdminRecord"
1598
+ }
1599
+ }
1600
+ }
1601
+ },
1602
+ "400": {
1603
+ "description": "Invalid request",
1604
+ "content": {
1605
+ "application/json": {
1606
+ "schema": {
1607
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1608
+ }
1609
+ }
1610
+ }
1611
+ },
1612
+ "401": {
1613
+ "description": "Unauthenticated"
1614
+ },
1615
+ "403": {
1616
+ "description": "Forbidden"
1617
+ },
1618
+ "404": {
1619
+ "description": "Not found"
1620
+ },
1621
+ "429": {
1622
+ "description": "Rate limited",
1623
+ "content": {
1624
+ "application/json": {
1625
+ "schema": {
1626
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1627
+ }
1628
+ }
1629
+ }
1630
+ }
1631
+ },
1632
+ "requestBody": {
1633
+ "required": true,
1634
+ "content": {
1635
+ "application/json": {
1636
+ "schema": {
1637
+ "$ref": "#/components/schemas/RedactionInput"
1638
+ }
1639
+ }
1640
+ }
1641
+ }
1642
+ }
1643
+ },
1644
+ "/v1/workers/claim": {
1645
+ "post": {
1646
+ "operationId": "workers.claim",
1647
+ "tags": [
1648
+ "workers"
1649
+ ],
1650
+ "summary": "workers claim",
1651
+ "description": "Auth: system. CSRF is not required. Idempotency-Key is required.",
1652
+ "security": [
1653
+ {
1654
+ "system": []
1655
+ }
1656
+ ],
1657
+ "parameters": [
1658
+ {
1659
+ "name": "Idempotency-Key",
1660
+ "in": "header",
1661
+ "required": true,
1662
+ "schema": {
1663
+ "type": "string",
1664
+ "minLength": 8,
1665
+ "maxLength": 128
1666
+ }
1667
+ }
1668
+ ],
1669
+ "responses": {
1670
+ "200": {
1671
+ "description": "Success",
1672
+ "content": {
1673
+ "application/json": {
1674
+ "schema": {
1675
+ "$ref": "#/components/schemas/WorkerClaimResult"
1676
+ }
1677
+ }
1678
+ }
1679
+ },
1680
+ "400": {
1681
+ "description": "Invalid request",
1682
+ "content": {
1683
+ "application/json": {
1684
+ "schema": {
1685
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1686
+ }
1687
+ }
1688
+ }
1689
+ },
1690
+ "401": {
1691
+ "description": "Unauthenticated"
1692
+ },
1693
+ "403": {
1694
+ "description": "Forbidden"
1695
+ },
1696
+ "404": {
1697
+ "description": "Not found"
1698
+ },
1699
+ "429": {
1700
+ "description": "Rate limited",
1701
+ "content": {
1702
+ "application/json": {
1703
+ "schema": {
1704
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1705
+ }
1706
+ }
1707
+ }
1708
+ }
1709
+ },
1710
+ "requestBody": {
1711
+ "required": true,
1712
+ "content": {
1713
+ "application/json": {
1714
+ "schema": {
1715
+ "$ref": "#/components/schemas/WorkerClaimInput"
1716
+ }
1717
+ }
1718
+ }
1719
+ }
1720
+ }
1721
+ },
1722
+ "/v1/workers/process": {
1723
+ "post": {
1724
+ "operationId": "workers.process",
1725
+ "tags": [
1726
+ "workers"
1727
+ ],
1728
+ "summary": "workers process",
1729
+ "description": "Auth: system. CSRF is not required. Idempotency-Key is required.",
1730
+ "security": [
1731
+ {
1732
+ "system": []
1733
+ }
1734
+ ],
1735
+ "parameters": [
1736
+ {
1737
+ "name": "Idempotency-Key",
1738
+ "in": "header",
1739
+ "required": true,
1740
+ "schema": {
1741
+ "type": "string",
1742
+ "minLength": 8,
1743
+ "maxLength": 128
1744
+ }
1745
+ }
1746
+ ],
1747
+ "responses": {
1748
+ "200": {
1749
+ "description": "Success",
1750
+ "content": {
1751
+ "application/json": {
1752
+ "schema": {
1753
+ "$ref": "#/components/schemas/WorkerProcessResult"
1754
+ }
1755
+ }
1756
+ }
1757
+ },
1758
+ "400": {
1759
+ "description": "Invalid request",
1760
+ "content": {
1761
+ "application/json": {
1762
+ "schema": {
1763
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1764
+ }
1765
+ }
1766
+ }
1767
+ },
1768
+ "401": {
1769
+ "description": "Unauthenticated"
1770
+ },
1771
+ "403": {
1772
+ "description": "Forbidden"
1773
+ },
1774
+ "404": {
1775
+ "description": "Not found"
1776
+ },
1777
+ "429": {
1778
+ "description": "Rate limited",
1779
+ "content": {
1780
+ "application/json": {
1781
+ "schema": {
1782
+ "$ref": "#/components/schemas/SafeErrorEnvelope"
1783
+ }
1784
+ }
1785
+ }
1786
+ }
1787
+ },
1788
+ "requestBody": {
1789
+ "required": true,
1790
+ "content": {
1791
+ "application/json": {
1792
+ "schema": {
1793
+ "$ref": "#/components/schemas/WorkerProcessInput"
1794
+ }
1795
+ }
1796
+ }
1797
+ }
1798
+ }
1799
+ }
1800
+ },
1801
+ "components": {
1802
+ "securitySchemes": {
1803
+ "actor": {
1804
+ "type": "http",
1805
+ "scheme": "bearer",
1806
+ "description": "Host-authenticated actor. Cookie sessions require Origin/CSRF."
1807
+ },
1808
+ "operator": {
1809
+ "type": "http",
1810
+ "scheme": "bearer",
1811
+ "description": "Operations operator. Cookie sessions require Origin/CSRF."
1812
+ },
1813
+ "system": {
1814
+ "type": "http",
1815
+ "scheme": "bearer",
1816
+ "description": "Worker/system credential. CSRF is not used."
1817
+ }
1818
+ },
1819
+ "schemas": {
1820
+ "CanonicalStatus": {
1821
+ "type": "string",
1822
+ "enum": [
1823
+ "created",
1824
+ "pending_user_input",
1825
+ "paused",
1826
+ "processing",
1827
+ "manual_review_required",
1828
+ "verified",
1829
+ "declined",
1830
+ "failed",
1831
+ "expired",
1832
+ "canceled",
1833
+ "provider_unavailable",
1834
+ "redacted"
1835
+ ]
1836
+ },
1837
+ "SessionContinuationV1": {
1838
+ "type": "object",
1839
+ "additionalProperties": false,
1840
+ "required": [
1841
+ "key",
1842
+ "token",
1843
+ "expiresAt"
1844
+ ],
1845
+ "properties": {
1846
+ "key": {
1847
+ "type": "string"
1848
+ },
1849
+ "token": {
1850
+ "type": "string"
1851
+ },
1852
+ "expiresAt": {
1853
+ "type": "string",
1854
+ "format": "date-time"
1855
+ }
1856
+ }
1857
+ },
1858
+ "ProviderLaunchEnvelope": {
1859
+ "type": "object",
1860
+ "additionalProperties": false,
1861
+ "required": [
1862
+ "attemptId",
1863
+ "canonicalStatus",
1864
+ "launcherKey",
1865
+ "presentation"
1866
+ ],
1867
+ "properties": {
1868
+ "attemptId": {
1869
+ "type": "string"
1870
+ },
1871
+ "canonicalStatus": {
1872
+ "type": "string",
1873
+ "enum": [
1874
+ "created",
1875
+ "pending_user_input",
1876
+ "paused",
1877
+ "processing",
1878
+ "manual_review_required",
1879
+ "verified",
1880
+ "declined",
1881
+ "failed",
1882
+ "expired",
1883
+ "canceled",
1884
+ "provider_unavailable",
1885
+ "redacted"
1886
+ ]
1887
+ },
1888
+ "launcherKey": {
1889
+ "type": "string"
1890
+ },
1891
+ "presentation": {
1892
+ "type": "string",
1893
+ "enum": [
1894
+ "embedded",
1895
+ "hosted",
1896
+ "qr",
1897
+ "none"
1898
+ ]
1899
+ },
1900
+ "providerDisclosure": {
1901
+ "type": "string"
1902
+ },
1903
+ "transientSecret": {
1904
+ "type": "string"
1905
+ },
1906
+ "transientSecretExpiresAt": {
1907
+ "type": "string",
1908
+ "format": "date-time"
1909
+ },
1910
+ "hostedUrl": {
1911
+ "type": "string",
1912
+ "format": "uri"
1913
+ },
1914
+ "hostedFallbackExpiresAt": {
1915
+ "type": "string",
1916
+ "format": "date-time"
1917
+ },
1918
+ "safeErrorCode": {
1919
+ "type": [
1920
+ "string",
1921
+ "null"
1922
+ ]
1923
+ },
1924
+ "retryAfter": {
1925
+ "type": [
1926
+ "string",
1927
+ "null"
1928
+ ]
1929
+ },
1930
+ "supportPath": {
1931
+ "type": [
1932
+ "string",
1933
+ "null"
1934
+ ]
1935
+ },
1936
+ "continuationReference": {
1937
+ "type": "string"
1938
+ }
1939
+ }
1940
+ },
1941
+ "SessionEnvelopeV1": {
1942
+ "type": "object",
1943
+ "additionalProperties": false,
1944
+ "required": [
1945
+ "contractVersion",
1946
+ "attemptId",
1947
+ "packageCode",
1948
+ "status",
1949
+ "presentation",
1950
+ "launch",
1951
+ "launcherKey",
1952
+ "providerDisclosure",
1953
+ "safeErrorCode",
1954
+ "retryAfter",
1955
+ "supportPath",
1956
+ "expiresAt",
1957
+ "canResume",
1958
+ "canRetry",
1959
+ "continuation"
1960
+ ],
1961
+ "properties": {
1962
+ "contractVersion": {
1963
+ "const": "1.0.0"
1964
+ },
1965
+ "attemptId": {
1966
+ "type": "string"
1967
+ },
1968
+ "packageCode": {
1969
+ "type": "string"
1970
+ },
1971
+ "status": {
1972
+ "type": "string",
1973
+ "enum": [
1974
+ "created",
1975
+ "pending_user_input",
1976
+ "paused",
1977
+ "processing",
1978
+ "manual_review_required",
1979
+ "verified",
1980
+ "declined",
1981
+ "failed",
1982
+ "expired",
1983
+ "canceled",
1984
+ "provider_unavailable",
1985
+ "redacted"
1986
+ ]
1987
+ },
1988
+ "presentation": {
1989
+ "type": "string",
1990
+ "enum": [
1991
+ "embedded",
1992
+ "hosted",
1993
+ "qr",
1994
+ "none"
1995
+ ]
1996
+ },
1997
+ "launch": {
1998
+ "anyOf": [
1999
+ {
2000
+ "$ref": "#/components/schemas/ProviderLaunchEnvelope"
2001
+ },
2002
+ {
2003
+ "type": "null"
2004
+ }
2005
+ ]
2006
+ },
2007
+ "launcherKey": {
2008
+ "type": [
2009
+ "string",
2010
+ "null"
2011
+ ]
2012
+ },
2013
+ "providerDisclosure": {
2014
+ "type": [
2015
+ "string",
2016
+ "null"
2017
+ ]
2018
+ },
2019
+ "safeErrorCode": {
2020
+ "type": [
2021
+ "string",
2022
+ "null"
2023
+ ]
2024
+ },
2025
+ "retryAfter": {
2026
+ "type": [
2027
+ "string",
2028
+ "null"
2029
+ ]
2030
+ },
2031
+ "supportPath": {
2032
+ "type": [
2033
+ "string",
2034
+ "null"
2035
+ ]
2036
+ },
2037
+ "expiresAt": {
2038
+ "type": [
2039
+ "string",
2040
+ "null"
2041
+ ]
2042
+ },
2043
+ "canResume": {
2044
+ "type": "boolean"
2045
+ },
2046
+ "canRetry": {
2047
+ "type": "boolean"
2048
+ },
2049
+ "continuation": {
2050
+ "anyOf": [
2051
+ {
2052
+ "$ref": "#/components/schemas/SessionContinuationV1"
2053
+ },
2054
+ {
2055
+ "type": "null"
2056
+ }
2057
+ ]
2058
+ }
2059
+ }
2060
+ },
2061
+ "SessionMutationResult": {
2062
+ "type": "object",
2063
+ "required": [
2064
+ "attemptId",
2065
+ "status"
2066
+ ],
2067
+ "properties": {
2068
+ "attemptId": {
2069
+ "type": "string"
2070
+ },
2071
+ "status": {
2072
+ "type": "string",
2073
+ "enum": [
2074
+ "created",
2075
+ "pending_user_input",
2076
+ "paused",
2077
+ "processing",
2078
+ "manual_review_required",
2079
+ "verified",
2080
+ "declined",
2081
+ "failed",
2082
+ "expired",
2083
+ "canceled",
2084
+ "provider_unavailable",
2085
+ "redacted"
2086
+ ]
2087
+ },
2088
+ "paused": {
2089
+ "type": "boolean"
2090
+ },
2091
+ "canceled": {
2092
+ "type": "boolean"
2093
+ },
2094
+ "canResume": {
2095
+ "type": "boolean"
2096
+ },
2097
+ "canRetry": {
2098
+ "type": "boolean"
2099
+ }
2100
+ }
2101
+ },
2102
+ "StartSessionInput": {
2103
+ "type": "object",
2104
+ "required": [
2105
+ "packageCode"
2106
+ ],
2107
+ "properties": {
2108
+ "packageCode": {
2109
+ "type": "string"
2110
+ },
2111
+ "countryCode": {
2112
+ "type": "string",
2113
+ "pattern": "^[A-Z]{2}$"
2114
+ },
2115
+ "action": {
2116
+ "type": "string"
2117
+ },
2118
+ "resourceType": {
2119
+ "type": "string"
2120
+ },
2121
+ "resourceReference": {
2122
+ "type": "string"
2123
+ },
2124
+ "subjectReference": {
2125
+ "type": "string"
2126
+ },
2127
+ "continuationToken": {
2128
+ "type": "string"
2129
+ },
2130
+ "continuationKey": {
2131
+ "type": "string"
2132
+ },
2133
+ "legalFirstName": {
2134
+ "type": [
2135
+ "string",
2136
+ "null"
2137
+ ]
2138
+ },
2139
+ "legalLastName": {
2140
+ "type": [
2141
+ "string",
2142
+ "null"
2143
+ ]
2144
+ },
2145
+ "email": {
2146
+ "type": [
2147
+ "string",
2148
+ "null"
2149
+ ]
2150
+ },
2151
+ "organization": {
2152
+ "type": "object",
2153
+ "additionalProperties": true
2154
+ },
2155
+ "relationship": {
2156
+ "type": "object",
2157
+ "additionalProperties": true
2158
+ },
2159
+ "associatedPerson": {
2160
+ "type": "object",
2161
+ "additionalProperties": true
2162
+ },
2163
+ "evidenceReferences": {
2164
+ "type": "array",
2165
+ "items": {
2166
+ "type": "string"
2167
+ }
2168
+ },
2169
+ "metadata": {
2170
+ "type": "object",
2171
+ "additionalProperties": {
2172
+ "type": [
2173
+ "string",
2174
+ "number",
2175
+ "boolean",
2176
+ "null"
2177
+ ]
2178
+ }
2179
+ }
2180
+ }
2181
+ },
2182
+ "ProtectedActionDenial": {
2183
+ "type": "object",
2184
+ "additionalProperties": false,
2185
+ "required": [
2186
+ "code",
2187
+ "action",
2188
+ "resourceHash",
2189
+ "requiredPackages",
2190
+ "continuation"
2191
+ ],
2192
+ "properties": {
2193
+ "code": {
2194
+ "const": "VERIFICATION_REQUIRED"
2195
+ },
2196
+ "action": {
2197
+ "type": "string"
2198
+ },
2199
+ "resourceHash": {
2200
+ "type": "string"
2201
+ },
2202
+ "requiredPackages": {
2203
+ "type": "array",
2204
+ "items": {
2205
+ "type": "string"
2206
+ }
2207
+ },
2208
+ "continuation": {
2209
+ "$ref": "#/components/schemas/SessionContinuationV1"
2210
+ },
2211
+ "retryAfter": {
2212
+ "type": [
2213
+ "string",
2214
+ "null"
2215
+ ]
2216
+ },
2217
+ "supportPath": {
2218
+ "type": [
2219
+ "string",
2220
+ "null"
2221
+ ]
2222
+ }
2223
+ }
2224
+ },
2225
+ "ProtectedActionAllow": {
2226
+ "type": "object",
2227
+ "required": [
2228
+ "allowed"
2229
+ ],
2230
+ "properties": {
2231
+ "allowed": {
2232
+ "const": true
2233
+ },
2234
+ "enforcementActive": {
2235
+ "type": "boolean"
2236
+ },
2237
+ "policyVersionId": {
2238
+ "type": [
2239
+ "string",
2240
+ "null"
2241
+ ]
2242
+ }
2243
+ }
2244
+ },
2245
+ "ProtectedActionDecision": {
2246
+ "oneOf": [
2247
+ {
2248
+ "$ref": "#/components/schemas/ProtectedActionAllow"
2249
+ },
2250
+ {
2251
+ "allOf": [
2252
+ {
2253
+ "type": "object",
2254
+ "required": [
2255
+ "allowed"
2256
+ ],
2257
+ "properties": {
2258
+ "allowed": {
2259
+ "const": false
2260
+ }
2261
+ }
2262
+ },
2263
+ {
2264
+ "$ref": "#/components/schemas/ProtectedActionDenial"
2265
+ }
2266
+ ]
2267
+ }
2268
+ ]
2269
+ },
2270
+ "ProtectedActionInput": {
2271
+ "type": "object",
2272
+ "required": [
2273
+ "action"
2274
+ ],
2275
+ "properties": {
2276
+ "action": {
2277
+ "type": "string"
2278
+ },
2279
+ "resourceType": {
2280
+ "type": "string"
2281
+ },
2282
+ "resourceReference": {
2283
+ "type": "string"
2284
+ }
2285
+ }
2286
+ },
2287
+ "WebhookAccepted": {
2288
+ "type": "object",
2289
+ "required": [
2290
+ "accepted",
2291
+ "duplicate"
2292
+ ],
2293
+ "properties": {
2294
+ "accepted": {
2295
+ "type": "boolean"
2296
+ },
2297
+ "duplicate": {
2298
+ "type": "boolean"
2299
+ },
2300
+ "providerEventKey": {
2301
+ "type": "string"
2302
+ }
2303
+ }
2304
+ },
2305
+ "AppealInput": {
2306
+ "type": "object",
2307
+ "required": [
2308
+ "reasonCode"
2309
+ ],
2310
+ "properties": {
2311
+ "attemptId": {
2312
+ "type": "string"
2313
+ },
2314
+ "reasonCode": {
2315
+ "type": "string"
2316
+ },
2317
+ "nonBiometricPathRequested": {
2318
+ "type": "boolean"
2319
+ },
2320
+ "details": {
2321
+ "type": "string"
2322
+ }
2323
+ }
2324
+ },
2325
+ "AppealResult": {
2326
+ "type": "object",
2327
+ "required": [
2328
+ "appealId",
2329
+ "status"
2330
+ ],
2331
+ "properties": {
2332
+ "appealId": {
2333
+ "type": "string"
2334
+ },
2335
+ "status": {
2336
+ "type": "string",
2337
+ "enum": [
2338
+ "open",
2339
+ "in_review",
2340
+ "resolved",
2341
+ "rejected"
2342
+ ]
2343
+ }
2344
+ }
2345
+ },
2346
+ "SupportEscalationInput": {
2347
+ "type": "object",
2348
+ "required": [
2349
+ "reasonCode"
2350
+ ],
2351
+ "properties": {
2352
+ "attemptId": {
2353
+ "type": "string"
2354
+ },
2355
+ "appealId": {
2356
+ "type": "string"
2357
+ },
2358
+ "reasonCode": {
2359
+ "type": "string"
2360
+ },
2361
+ "message": {
2362
+ "type": "string"
2363
+ }
2364
+ }
2365
+ },
2366
+ "SupportEscalationResult": {
2367
+ "type": "object",
2368
+ "required": [
2369
+ "escalationId",
2370
+ "status"
2371
+ ],
2372
+ "properties": {
2373
+ "escalationId": {
2374
+ "type": "string"
2375
+ },
2376
+ "status": {
2377
+ "const": "open"
2378
+ }
2379
+ }
2380
+ },
2381
+ "SafeAdminRecord": {
2382
+ "type": "object",
2383
+ "additionalProperties": {
2384
+ "type": [
2385
+ "string",
2386
+ "number",
2387
+ "boolean",
2388
+ "null"
2389
+ ]
2390
+ },
2391
+ "properties": {
2392
+ "id": {
2393
+ "type": "string"
2394
+ }
2395
+ }
2396
+ },
2397
+ "AdminHealthSnapshot": {
2398
+ "type": "object",
2399
+ "required": [
2400
+ "generatedAt",
2401
+ "runtime",
2402
+ "health",
2403
+ "alerts"
2404
+ ],
2405
+ "properties": {
2406
+ "generatedAt": {
2407
+ "type": "string",
2408
+ "format": "date-time"
2409
+ },
2410
+ "runtime": {
2411
+ "type": "array",
2412
+ "items": {
2413
+ "$ref": "#/components/schemas/SafeAdminRecord"
2414
+ }
2415
+ },
2416
+ "health": {
2417
+ "type": "array",
2418
+ "items": {
2419
+ "$ref": "#/components/schemas/SafeAdminRecord"
2420
+ }
2421
+ },
2422
+ "alerts": {
2423
+ "type": "array",
2424
+ "items": {
2425
+ "$ref": "#/components/schemas/SafeAdminRecord"
2426
+ }
2427
+ }
2428
+ }
2429
+ },
2430
+ "AdminRoutesSnapshot": {
2431
+ "type": "object",
2432
+ "required": [
2433
+ "generatedAt",
2434
+ "routes",
2435
+ "routeChanges"
2436
+ ],
2437
+ "properties": {
2438
+ "generatedAt": {
2439
+ "type": "string",
2440
+ "format": "date-time"
2441
+ },
2442
+ "routes": {
2443
+ "type": "array",
2444
+ "items": {
2445
+ "$ref": "#/components/schemas/SafeAdminRecord"
2446
+ }
2447
+ },
2448
+ "routeChanges": {
2449
+ "type": "array",
2450
+ "items": {
2451
+ "$ref": "#/components/schemas/SafeAdminRecord"
2452
+ }
2453
+ }
2454
+ }
2455
+ },
2456
+ "AdminCircuitsSnapshot": {
2457
+ "type": "object",
2458
+ "required": [
2459
+ "generatedAt",
2460
+ "circuits"
2461
+ ],
2462
+ "properties": {
2463
+ "generatedAt": {
2464
+ "type": "string",
2465
+ "format": "date-time"
2466
+ },
2467
+ "circuits": {
2468
+ "type": "array",
2469
+ "items": {
2470
+ "$ref": "#/components/schemas/SafeAdminRecord"
2471
+ }
2472
+ }
2473
+ }
2474
+ },
2475
+ "AdminAttemptsSnapshot": {
2476
+ "type": "object",
2477
+ "required": [
2478
+ "generatedAt",
2479
+ "attempts"
2480
+ ],
2481
+ "properties": {
2482
+ "generatedAt": {
2483
+ "type": "string",
2484
+ "format": "date-time"
2485
+ },
2486
+ "attempts": {
2487
+ "type": "array",
2488
+ "items": {
2489
+ "$ref": "#/components/schemas/SafeAdminRecord"
2490
+ }
2491
+ }
2492
+ }
2493
+ },
2494
+ "AdminReviewSnapshot": {
2495
+ "type": "object",
2496
+ "required": [
2497
+ "generatedAt",
2498
+ "appeals",
2499
+ "manualExceptions",
2500
+ "policyVersions"
2501
+ ],
2502
+ "properties": {
2503
+ "generatedAt": {
2504
+ "type": "string",
2505
+ "format": "date-time"
2506
+ },
2507
+ "appeals": {
2508
+ "type": "array",
2509
+ "items": {
2510
+ "$ref": "#/components/schemas/SafeAdminRecord"
2511
+ }
2512
+ },
2513
+ "manualExceptions": {
2514
+ "type": "array",
2515
+ "items": {
2516
+ "$ref": "#/components/schemas/SafeAdminRecord"
2517
+ }
2518
+ },
2519
+ "policyVersions": {
2520
+ "type": "array",
2521
+ "items": {
2522
+ "$ref": "#/components/schemas/SafeAdminRecord"
2523
+ }
2524
+ }
2525
+ }
2526
+ },
2527
+ "AdminAuditSnapshot": {
2528
+ "type": "object",
2529
+ "required": [
2530
+ "generatedAt",
2531
+ "audit"
2532
+ ],
2533
+ "properties": {
2534
+ "generatedAt": {
2535
+ "type": "string",
2536
+ "format": "date-time"
2537
+ },
2538
+ "audit": {
2539
+ "type": "array",
2540
+ "items": {
2541
+ "$ref": "#/components/schemas/SafeAdminRecord"
2542
+ }
2543
+ }
2544
+ }
2545
+ },
2546
+ "AdminReconciliationSnapshot": {
2547
+ "type": "object",
2548
+ "required": [
2549
+ "generatedAt",
2550
+ "jobs",
2551
+ "queues"
2552
+ ],
2553
+ "properties": {
2554
+ "generatedAt": {
2555
+ "type": "string",
2556
+ "format": "date-time"
2557
+ },
2558
+ "jobs": {
2559
+ "type": "array",
2560
+ "items": {
2561
+ "$ref": "#/components/schemas/SafeAdminRecord"
2562
+ }
2563
+ },
2564
+ "queues": {
2565
+ "type": "object",
2566
+ "additionalProperties": {
2567
+ "type": "integer"
2568
+ }
2569
+ }
2570
+ }
2571
+ },
2572
+ "AdminRedactionSnapshot": {
2573
+ "type": "object",
2574
+ "required": [
2575
+ "generatedAt",
2576
+ "privacyRequests",
2577
+ "jobs"
2578
+ ],
2579
+ "properties": {
2580
+ "generatedAt": {
2581
+ "type": "string",
2582
+ "format": "date-time"
2583
+ },
2584
+ "privacyRequests": {
2585
+ "type": "array",
2586
+ "items": {
2587
+ "$ref": "#/components/schemas/SafeAdminRecord"
2588
+ }
2589
+ },
2590
+ "jobs": {
2591
+ "type": "array",
2592
+ "items": {
2593
+ "$ref": "#/components/schemas/SafeAdminRecord"
2594
+ }
2595
+ }
2596
+ }
2597
+ },
2598
+ "RouteChangeInput": {
2599
+ "type": "object",
2600
+ "required": [
2601
+ "operation"
2602
+ ],
2603
+ "properties": {
2604
+ "operation": {
2605
+ "type": "string",
2606
+ "enum": [
2607
+ "propose",
2608
+ "approve",
2609
+ "apply"
2610
+ ]
2611
+ },
2612
+ "targetRoutePolicyId": {
2613
+ "type": "string"
2614
+ },
2615
+ "requestId": {
2616
+ "type": "string"
2617
+ },
2618
+ "action": {
2619
+ "type": "string",
2620
+ "enum": [
2621
+ "activate",
2622
+ "drain",
2623
+ "rollback"
2624
+ ]
2625
+ },
2626
+ "reasonCode": {
2627
+ "type": "string"
2628
+ }
2629
+ }
2630
+ },
2631
+ "CircuitInput": {
2632
+ "type": "object",
2633
+ "required": [
2634
+ "provider",
2635
+ "providerEnvironment",
2636
+ "status"
2637
+ ],
2638
+ "properties": {
2639
+ "provider": {
2640
+ "type": "string"
2641
+ },
2642
+ "providerEnvironment": {
2643
+ "type": "string",
2644
+ "enum": [
2645
+ "sandbox",
2646
+ "production"
2647
+ ]
2648
+ },
2649
+ "status": {
2650
+ "type": "string",
2651
+ "enum": [
2652
+ "healthy",
2653
+ "degraded",
2654
+ "unavailable",
2655
+ "circuit_open"
2656
+ ]
2657
+ },
2658
+ "errorCode": {
2659
+ "type": "string"
2660
+ },
2661
+ "circuitOpenUntil": {
2662
+ "type": "string",
2663
+ "format": "date-time"
2664
+ }
2665
+ }
2666
+ },
2667
+ "ReviewInput": {
2668
+ "type": "object",
2669
+ "required": [
2670
+ "operation"
2671
+ ],
2672
+ "properties": {
2673
+ "operation": {
2674
+ "type": "string",
2675
+ "enum": [
2676
+ "begin_appeal_review",
2677
+ "propose_manual_exception",
2678
+ "approve_manual_exception",
2679
+ "apply_manual_exception"
2680
+ ]
2681
+ },
2682
+ "appealId": {
2683
+ "type": "string"
2684
+ },
2685
+ "requestId": {
2686
+ "type": "string"
2687
+ },
2688
+ "packageCode": {
2689
+ "type": "string"
2690
+ },
2691
+ "decision": {
2692
+ "type": "string",
2693
+ "enum": [
2694
+ "approve",
2695
+ "deny",
2696
+ "revoke",
2697
+ "request_more_information"
2698
+ ]
2699
+ },
2700
+ "reasonCode": {
2701
+ "type": "string"
2702
+ },
2703
+ "policyVersionId": {
2704
+ "type": "string"
2705
+ },
2706
+ "evidenceReferenceHash": {
2707
+ "type": "string"
2708
+ },
2709
+ "expiresAt": {
2710
+ "type": "string",
2711
+ "format": "date-time"
2712
+ }
2713
+ }
2714
+ },
2715
+ "ReconciliationInput": {
2716
+ "type": "object",
2717
+ "required": [
2718
+ "attemptId"
2719
+ ],
2720
+ "properties": {
2721
+ "attemptId": {
2722
+ "type": "string"
2723
+ }
2724
+ }
2725
+ },
2726
+ "RedactionInput": {
2727
+ "type": "object",
2728
+ "required": [
2729
+ "privacyRequestId"
2730
+ ],
2731
+ "properties": {
2732
+ "privacyRequestId": {
2733
+ "type": "string"
2734
+ }
2735
+ }
2736
+ },
2737
+ "WorkerClaimInput": {
2738
+ "type": "object",
2739
+ "required": [
2740
+ "queue"
2741
+ ],
2742
+ "properties": {
2743
+ "queue": {
2744
+ "type": "string",
2745
+ "enum": [
2746
+ "webhook",
2747
+ "reconciliation",
2748
+ "redaction",
2749
+ "dead_letter"
2750
+ ]
2751
+ },
2752
+ "limit": {
2753
+ "type": "integer",
2754
+ "minimum": 1
2755
+ }
2756
+ }
2757
+ },
2758
+ "WorkerClaimResult": {
2759
+ "type": "object",
2760
+ "required": [
2761
+ "leases"
2762
+ ],
2763
+ "properties": {
2764
+ "leases": {
2765
+ "type": "array",
2766
+ "items": {
2767
+ "type": "object",
2768
+ "required": [
2769
+ "leaseId",
2770
+ "jobId",
2771
+ "queue"
2772
+ ],
2773
+ "properties": {
2774
+ "leaseId": {
2775
+ "type": "string"
2776
+ },
2777
+ "jobId": {
2778
+ "type": "string"
2779
+ },
2780
+ "queue": {
2781
+ "type": "string"
2782
+ }
2783
+ }
2784
+ }
2785
+ }
2786
+ }
2787
+ },
2788
+ "WorkerProcessInput": {
2789
+ "type": "object",
2790
+ "required": [
2791
+ "leaseId",
2792
+ "jobId"
2793
+ ],
2794
+ "properties": {
2795
+ "leaseId": {
2796
+ "type": "string"
2797
+ },
2798
+ "jobId": {
2799
+ "type": "string"
2800
+ }
2801
+ }
2802
+ },
2803
+ "WorkerProcessResult": {
2804
+ "type": "object",
2805
+ "required": [
2806
+ "processed",
2807
+ "disposition"
2808
+ ],
2809
+ "properties": {
2810
+ "processed": {
2811
+ "type": "boolean"
2812
+ },
2813
+ "disposition": {
2814
+ "type": "string",
2815
+ "enum": [
2816
+ "completed",
2817
+ "retryable",
2818
+ "dead_letter",
2819
+ "duplicate"
2820
+ ]
2821
+ }
2822
+ }
2823
+ },
2824
+ "SafeErrorEnvelope": {
2825
+ "type": "object",
2826
+ "additionalProperties": false,
2827
+ "required": [
2828
+ "contractVersion",
2829
+ "error",
2830
+ "safeErrorCode",
2831
+ "retryAfter",
2832
+ "supportPath"
2833
+ ],
2834
+ "properties": {
2835
+ "contractVersion": {
2836
+ "const": "1.0.0"
2837
+ },
2838
+ "error": {
2839
+ "type": "object",
2840
+ "required": [
2841
+ "code",
2842
+ "message",
2843
+ "retryable"
2844
+ ],
2845
+ "properties": {
2846
+ "code": {
2847
+ "type": "string"
2848
+ },
2849
+ "message": {
2850
+ "type": "string"
2851
+ },
2852
+ "retryable": {
2853
+ "type": "boolean"
2854
+ }
2855
+ }
2856
+ },
2857
+ "safeErrorCode": {
2858
+ "type": "string"
2859
+ },
2860
+ "retryAfter": {
2861
+ "type": [
2862
+ "integer",
2863
+ "null"
2864
+ ]
2865
+ },
2866
+ "supportPath": {
2867
+ "type": [
2868
+ "string",
2869
+ "null"
2870
+ ]
2871
+ }
2872
+ }
2873
+ }
2874
+ }
2875
+ }
2876
+ }