@ironfang/n8n-nodes-ironfang 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,7 +9,7 @@ exports.operations = [
9
9
  "description": "Archive a monitor (one-way; its audits and evidence remain)",
10
10
  "method": "POST",
11
11
  "path": "/v1/monitors/{monitorId}/archive",
12
- "scope": "auditwolf:manage",
12
+ "scope": "audit:manage",
13
13
  "query": [],
14
14
  "input": "none",
15
15
  "response": "json"
@@ -21,7 +21,7 @@ exports.operations = [
21
21
  "description": "Apply one decision to several findings",
22
22
  "method": "POST",
23
23
  "path": "/v1/findings/bulk",
24
- "scope": "auditwolf:manage",
24
+ "scope": "audit:manage",
25
25
  "query": [],
26
26
  "input": "json",
27
27
  "response": "json",
@@ -38,7 +38,7 @@ exports.operations = [
38
38
  "description": "What changed against the observation before it",
39
39
  "method": "GET",
40
40
  "path": "/v1/page-observations/{observationId}/comparison",
41
- "scope": "auditwolf:read",
41
+ "scope": "audit:read",
42
42
  "query": [],
43
43
  "input": "none",
44
44
  "response": "json"
@@ -50,7 +50,7 @@ exports.operations = [
50
50
  "description": "Create an encrypted S3/S3-compatible destination",
51
51
  "method": "POST",
52
52
  "path": "/v1/export-destinations",
53
- "scope": "auditwolf:integrations",
53
+ "scope": "audit:integrations",
54
54
  "query": [],
55
55
  "input": "json",
56
56
  "response": "json",
@@ -68,10 +68,13 @@ exports.operations = [
68
68
  "description": "Create a monitor",
69
69
  "method": "POST",
70
70
  "path": "/v1/sites/{siteId}/monitors",
71
- "scope": "auditwolf:manage",
71
+ "scope": "audit:manage",
72
72
  "query": [],
73
- "input": "none",
74
- "response": "json"
73
+ "input": "json",
74
+ "response": "json",
75
+ "example": {
76
+ "mode": "full_site"
77
+ }
75
78
  },
76
79
  {
77
80
  "product": "auditwolf",
@@ -80,7 +83,7 @@ exports.operations = [
80
83
  "description": "Create a deterministic rule",
81
84
  "method": "POST",
82
85
  "path": "/v1/sites/{siteId}/rules",
83
- "scope": "auditwolf:manage",
86
+ "scope": "audit:manage",
84
87
  "query": [],
85
88
  "input": "json",
86
89
  "response": "json",
@@ -97,7 +100,7 @@ exports.operations = [
97
100
  "description": "Create a site",
98
101
  "method": "POST",
99
102
  "path": "/v1/sites",
100
- "scope": "auditwolf:manage",
103
+ "scope": "audit:manage",
101
104
  "query": [],
102
105
  "input": "json",
103
106
  "response": "json",
@@ -113,7 +116,7 @@ exports.operations = [
113
116
  "description": "Create a signed webhook endpoint",
114
117
  "method": "POST",
115
118
  "path": "/v1/webhooks",
116
- "scope": "auditwolf:integrations",
119
+ "scope": "audit:integrations",
117
120
  "query": [],
118
121
  "input": "json",
119
122
  "response": "json",
@@ -131,7 +134,7 @@ exports.operations = [
131
134
  "description": "Retire an endpoint (soft; its delivery history is kept)",
132
135
  "method": "DELETE",
133
136
  "path": "/v1/webhooks/{endpointId}",
134
- "scope": "auditwolf:integrations",
137
+ "scope": "audit:integrations",
135
138
  "query": [],
136
139
  "input": "none",
137
140
  "response": "json"
@@ -143,7 +146,7 @@ exports.operations = [
143
146
  "description": "Disable a rule for future audits",
144
147
  "method": "POST",
145
148
  "path": "/v1/rules/{lineageId}/disable",
146
- "scope": "auditwolf:manage",
149
+ "scope": "audit:manage",
147
150
  "query": [],
148
151
  "input": "none",
149
152
  "response": "json"
@@ -155,7 +158,7 @@ exports.operations = [
155
158
  "description": "Stream an authenticated raw artifact",
156
159
  "method": "GET",
157
160
  "path": "/v1/artifacts/{artifactId}",
158
- "scope": "auditwolf:evidence",
161
+ "scope": "audit:evidence",
159
162
  "query": [],
160
163
  "input": "none",
161
164
  "response": "binary"
@@ -167,7 +170,7 @@ exports.operations = [
167
170
  "description": "Download the independently verifiable evidence ZIP",
168
171
  "method": "GET",
169
172
  "path": "/v1/audits/{auditId}/evidence",
170
- "scope": "auditwolf:evidence",
173
+ "scope": "audit:evidence",
171
174
  "query": [],
172
175
  "input": "none",
173
176
  "response": "binary"
@@ -179,7 +182,7 @@ exports.operations = [
179
182
  "description": "Enable a rule for future audits",
180
183
  "method": "POST",
181
184
  "path": "/v1/rules/{lineageId}/enable",
182
- "scope": "auditwolf:manage",
185
+ "scope": "audit:manage",
183
186
  "query": [],
184
187
  "input": "none",
185
188
  "response": "json"
@@ -191,7 +194,7 @@ exports.operations = [
191
194
  "description": "Queue a manual S3 export",
192
195
  "method": "POST",
193
196
  "path": "/v1/audits/{auditId}/exports",
194
- "scope": "auditwolf:integrations",
197
+ "scope": "audit:integrations",
195
198
  "query": [],
196
199
  "input": "json",
197
200
  "response": "json",
@@ -206,7 +209,7 @@ exports.operations = [
206
209
  "description": "Get audit lifecycle, compliance and integrity state",
207
210
  "method": "GET",
208
211
  "path": "/v1/audits/{auditId}",
209
- "scope": "auditwolf:read",
212
+ "scope": "audit:read",
210
213
  "query": [],
211
214
  "input": "none",
212
215
  "response": "json"
@@ -218,7 +221,7 @@ exports.operations = [
218
221
  "description": "Get one finding",
219
222
  "method": "GET",
220
223
  "path": "/v1/findings/{findingId}",
221
- "scope": "auditwolf:read",
224
+ "scope": "audit:read",
222
225
  "query": [],
223
226
  "input": "none",
224
227
  "response": "json"
@@ -230,7 +233,7 @@ exports.operations = [
230
233
  "description": "The numbers at the top of the finding inbox",
231
234
  "method": "GET",
232
235
  "path": "/v1/findings/summary",
233
- "scope": "auditwolf:read",
236
+ "scope": "audit:read",
234
237
  "query": [],
235
238
  "input": "none",
236
239
  "response": "json"
@@ -242,7 +245,7 @@ exports.operations = [
242
245
  "description": "Get a monitor with its URL set",
243
246
  "method": "GET",
244
247
  "path": "/v1/monitors/{monitorId}",
245
- "scope": "auditwolf:read",
248
+ "scope": "audit:read",
246
249
  "query": [],
247
250
  "input": "none",
248
251
  "response": "json"
@@ -254,7 +257,7 @@ exports.operations = [
254
257
  "description": "One observation with its artifacts and rule results",
255
258
  "method": "GET",
256
259
  "path": "/v1/page-observations/{observationId}",
257
- "scope": "auditwolf:read",
260
+ "scope": "audit:read",
258
261
  "query": [],
259
262
  "input": "none",
260
263
  "response": "json"
@@ -266,7 +269,7 @@ exports.operations = [
266
269
  "description": "Get the active revision of a rule",
267
270
  "method": "GET",
268
271
  "path": "/v1/rules/{lineageId}",
269
- "scope": "auditwolf:read",
272
+ "scope": "audit:read",
270
273
  "query": [],
271
274
  "input": "none",
272
275
  "response": "json"
@@ -278,7 +281,19 @@ exports.operations = [
278
281
  "description": "Get a site",
279
282
  "method": "GET",
280
283
  "path": "/v1/sites/{siteId}",
281
- "scope": "auditwolf:read",
284
+ "scope": "audit:read",
285
+ "query": [],
286
+ "input": "none",
287
+ "response": "json"
288
+ },
289
+ {
290
+ "product": "auditwolf",
291
+ "id": "getWebhookDelivery",
292
+ "name": "Get Webhook Delivery",
293
+ "description": "Read one organisation-owned delivery",
294
+ "method": "GET",
295
+ "path": "/v1/webhook-deliveries/{deliveryId}",
296
+ "scope": "audit:integrations",
282
297
  "query": [],
283
298
  "input": "none",
284
299
  "response": "json"
@@ -290,7 +305,7 @@ exports.operations = [
290
305
  "description": "Tenant-scoped setup facts and recent activity for the portal",
291
306
  "method": "GET",
292
307
  "path": "/v1/home",
293
- "scope": "auditwolf:read",
308
+ "scope": "audit:read",
294
309
  "query": [],
295
310
  "input": "none",
296
311
  "response": "json"
@@ -302,7 +317,7 @@ exports.operations = [
302
317
  "description": "Install a rule pack",
303
318
  "method": "POST",
304
319
  "path": "/v1/sites/{siteId}/rule-packs",
305
- "scope": "auditwolf:manage",
320
+ "scope": "audit:manage",
306
321
  "query": [],
307
322
  "input": "json",
308
323
  "response": "json",
@@ -311,6 +326,67 @@ exports.operations = [
311
326
  "variables": {}
312
327
  }
313
328
  },
329
+ {
330
+ "product": "auditwolf",
331
+ "id": "listWebhookDeliveries",
332
+ "name": "List All Webhook Deliveries",
333
+ "description": "Page organisation webhook deliveries",
334
+ "method": "GET",
335
+ "path": "/v1/webhook-deliveries",
336
+ "scope": "audit:integrations",
337
+ "query": [
338
+ {
339
+ "name": "cursor",
340
+ "label": "Cursor",
341
+ "type": "string",
342
+ "required": false,
343
+ "default": "",
344
+ "description": "Last delivery ID from the preceding page, exclusive. Omit on page one.",
345
+ "enum": []
346
+ },
347
+ {
348
+ "name": "limit",
349
+ "label": "Limit",
350
+ "type": "integer",
351
+ "required": false,
352
+ "default": "",
353
+ "description": "Global default 50; endpoint default 200.",
354
+ "enum": []
355
+ },
356
+ {
357
+ "name": "status",
358
+ "label": "Status",
359
+ "type": "string",
360
+ "required": false,
361
+ "default": "",
362
+ "description": "Pending selects queued with no attempts; retrying includes queued after an attempt; queued selects all queued records.",
363
+ "enum": [
364
+ "pending",
365
+ "queued",
366
+ "retrying",
367
+ "delivering",
368
+ "delivered",
369
+ "failed"
370
+ ]
371
+ },
372
+ {
373
+ "name": "destination",
374
+ "label": "Destination",
375
+ "type": "string",
376
+ "required": false,
377
+ "default": "",
378
+ "description": "",
379
+ "enum": []
380
+ }
381
+ ],
382
+ "input": "none",
383
+ "response": "json",
384
+ "pagination": {
385
+ "key": "deliveries",
386
+ "parameter": "cursor",
387
+ "size": 200
388
+ }
389
+ },
314
390
  {
315
391
  "product": "auditwolf",
316
392
  "id": "listAuditsByAuditIdPages",
@@ -318,35 +394,71 @@ exports.operations = [
318
394
  "description": "Page observations of an audit",
319
395
  "method": "GET",
320
396
  "path": "/v1/audits/{auditId}/pages",
321
- "scope": "auditwolf:read",
397
+ "scope": "audit:read",
322
398
  "query": [
323
399
  {
324
400
  "name": "change",
325
401
  "label": "Change",
326
402
  "type": "string",
327
- "default": ""
403
+ "required": false,
404
+ "default": "",
405
+ "description": "",
406
+ "enum": []
328
407
  },
329
408
  {
330
409
  "name": "compliance",
331
410
  "label": "Compliance",
332
411
  "type": "string",
333
- "default": ""
412
+ "required": false,
413
+ "default": "",
414
+ "description": "",
415
+ "enum": []
334
416
  },
335
417
  {
336
418
  "name": "capture",
337
419
  "label": "Capture",
338
420
  "type": "string",
339
- "default": ""
421
+ "required": false,
422
+ "default": "",
423
+ "description": "",
424
+ "enum": []
340
425
  },
341
426
  {
342
427
  "name": "q",
343
428
  "label": "Q",
344
429
  "type": "string",
345
- "default": ""
430
+ "required": false,
431
+ "default": "",
432
+ "description": "",
433
+ "enum": []
434
+ },
435
+ {
436
+ "name": "limit",
437
+ "label": "Limit",
438
+ "type": "integer",
439
+ "required": false,
440
+ "default": 50,
441
+ "description": "",
442
+ "enum": []
443
+ },
444
+ {
445
+ "name": "cursor",
446
+ "label": "Cursor",
447
+ "type": "string",
448
+ "required": false,
449
+ "default": "",
450
+ "description": "Opaque next_cursor from the preceding page. Sort order is immutable created_at descending, then ID descending. This is a continuation boundary, not a frozen snapshot; newer inserts do not shift older pages, and removed records disappear.",
451
+ "enum": []
346
452
  }
347
453
  ],
348
454
  "input": "none",
349
- "response": "json"
455
+ "response": "json",
456
+ "pagination": {
457
+ "key": "pages",
458
+ "parameter": "cursor",
459
+ "size": 200,
460
+ "since": 1.2
461
+ }
350
462
  },
351
463
  {
352
464
  "product": "auditwolf",
@@ -355,17 +467,67 @@ exports.operations = [
355
467
  "description": "List organisation audits",
356
468
  "method": "GET",
357
469
  "path": "/v1/audits",
358
- "scope": "auditwolf:read",
470
+ "scope": "audit:read",
359
471
  "query": [
472
+ {
473
+ "name": "limit",
474
+ "label": "Limit",
475
+ "type": "integer",
476
+ "required": false,
477
+ "default": 200,
478
+ "description": "Bounded page size. The existing default of 200 is preserved; the portal requests 50.",
479
+ "enum": []
480
+ },
481
+ {
482
+ "name": "cursor",
483
+ "label": "Cursor",
484
+ "type": "string",
485
+ "required": false,
486
+ "default": "",
487
+ "description": "Opaque next_cursor from the preceding page. Sort order is immutable created_at descending, then ID descending. This is a continuation boundary, not a frozen snapshot; newer inserts do not shift older pages, and removed records disappear.",
488
+ "enum": []
489
+ },
490
+ {
491
+ "name": "status",
492
+ "label": "Status",
493
+ "type": "string",
494
+ "required": false,
495
+ "default": "",
496
+ "description": "Applied before pagination. active selects every non-terminal audit state.",
497
+ "enum": [
498
+ "active",
499
+ "created",
500
+ "queued",
501
+ "discovering",
502
+ "capturing",
503
+ "evaluating",
504
+ "finalising_evidence",
505
+ "timestamping",
506
+ "completed",
507
+ "failed",
508
+ "cancelled",
509
+ "partial",
510
+ "quota_blocked"
511
+ ]
512
+ },
360
513
  {
361
514
  "name": "site_id",
362
515
  "label": "Site ID",
363
516
  "type": "string",
364
- "default": ""
517
+ "required": false,
518
+ "default": "",
519
+ "description": "",
520
+ "enum": []
365
521
  }
366
522
  ],
367
523
  "input": "none",
368
- "response": "json"
524
+ "response": "json",
525
+ "pagination": {
526
+ "key": "audits",
527
+ "parameter": "cursor",
528
+ "size": 200,
529
+ "since": 1.2
530
+ }
369
531
  },
370
532
  {
371
533
  "product": "auditwolf",
@@ -374,7 +536,7 @@ exports.operations = [
374
536
  "description": "The organisation's recent product events, newest first",
375
537
  "method": "GET",
376
538
  "path": "/v1/events",
377
- "scope": "auditwolf:read",
539
+ "scope": "audit:read",
378
540
  "query": [],
379
541
  "input": "none",
380
542
  "response": "json"
@@ -386,7 +548,7 @@ exports.operations = [
386
548
  "description": "List S3 destinations",
387
549
  "method": "GET",
388
550
  "path": "/v1/export-destinations",
389
- "scope": "auditwolf:integrations",
551
+ "scope": "audit:integrations",
390
552
  "query": [],
391
553
  "input": "none",
392
554
  "response": "json"
@@ -398,10 +560,44 @@ exports.operations = [
398
560
  "description": "List export jobs",
399
561
  "method": "GET",
400
562
  "path": "/v1/exports",
401
- "scope": "auditwolf:integrations",
402
- "query": [],
563
+ "scope": "audit:integrations",
564
+ "query": [
565
+ {
566
+ "name": "limit",
567
+ "label": "Limit",
568
+ "type": "integer",
569
+ "required": false,
570
+ "default": 200,
571
+ "description": "Bounded page size. The existing default of 200 is preserved; the portal requests 50.",
572
+ "enum": []
573
+ },
574
+ {
575
+ "name": "cursor",
576
+ "label": "Cursor",
577
+ "type": "string",
578
+ "required": false,
579
+ "default": "",
580
+ "description": "Opaque next_cursor from the preceding page. Sort order is immutable created_at descending, then ID descending. This is a continuation boundary, not a frozen snapshot; newer inserts do not shift older pages, and removed records disappear.",
581
+ "enum": []
582
+ },
583
+ {
584
+ "name": "audit_id",
585
+ "label": "Audit ID",
586
+ "type": "string",
587
+ "required": false,
588
+ "default": "",
589
+ "description": "",
590
+ "enum": []
591
+ }
592
+ ],
403
593
  "input": "none",
404
- "response": "json"
594
+ "response": "json",
595
+ "pagination": {
596
+ "key": "exports",
597
+ "parameter": "cursor",
598
+ "size": 200,
599
+ "since": 1.2
600
+ }
405
601
  },
406
602
  {
407
603
  "product": "auditwolf",
@@ -410,10 +606,35 @@ exports.operations = [
410
606
  "description": "The append-only history of a finding",
411
607
  "method": "GET",
412
608
  "path": "/v1/findings/{findingId}/events",
413
- "scope": "auditwolf:read",
414
- "query": [],
609
+ "scope": "audit:read",
610
+ "query": [
611
+ {
612
+ "name": "limit",
613
+ "label": "Limit",
614
+ "type": "integer",
615
+ "required": false,
616
+ "default": 200,
617
+ "description": "Bounded page size. The existing default of 200 is preserved; the portal requests 50.",
618
+ "enum": []
619
+ },
620
+ {
621
+ "name": "cursor",
622
+ "label": "Cursor",
623
+ "type": "string",
624
+ "required": false,
625
+ "default": "",
626
+ "description": "Opaque next_cursor from the preceding page. Sort order is immutable created_at descending, then ID descending. This is a continuation boundary, not a frozen snapshot; newer inserts do not shift older pages, and removed records disappear.",
627
+ "enum": []
628
+ }
629
+ ],
415
630
  "input": "none",
416
- "response": "json"
631
+ "response": "json",
632
+ "pagination": {
633
+ "key": "events",
634
+ "parameter": "cursor",
635
+ "size": 200,
636
+ "since": 1.2
637
+ }
417
638
  },
418
639
  {
419
640
  "product": "auditwolf",
@@ -422,7 +643,7 @@ exports.operations = [
422
643
  "description": "The finding inbox",
423
644
  "method": "GET",
424
645
  "path": "/v1/findings",
425
- "scope": "auditwolf:read",
646
+ "scope": "audit:read",
426
647
  "query": [
427
648
  {
428
649
  "name": "site_id",
@@ -501,13 +722,34 @@ exports.operations = [
501
722
  "description": "",
502
723
  "enum": []
503
724
  },
725
+ {
726
+ "name": "sort",
727
+ "label": "Sort",
728
+ "type": "string",
729
+ "required": false,
730
+ "default": "last_seen",
731
+ "description": "",
732
+ "enum": [
733
+ "last_seen",
734
+ "created"
735
+ ]
736
+ },
737
+ {
738
+ "name": "cursor",
739
+ "label": "Cursor",
740
+ "type": "string",
741
+ "required": false,
742
+ "default": "",
743
+ "description": "Returned next_cursor; valid only with sort=created. Omit on the first page.",
744
+ "enum": []
745
+ },
504
746
  {
505
747
  "name": "offset",
506
748
  "label": "Offset",
507
749
  "type": "integer",
508
750
  "required": false,
509
751
  "default": 0,
510
- "description": "",
752
+ "description": "Legacy last-seen list only; cannot be combined with sort=created.",
511
753
  "enum": []
512
754
  }
513
755
  ],
@@ -526,7 +768,7 @@ exports.operations = [
526
768
  "description": "Packs installed on this site",
527
769
  "method": "GET",
528
770
  "path": "/v1/sites/{siteId}/rule-packs",
529
- "scope": "auditwolf:read",
771
+ "scope": "audit:read",
530
772
  "query": [],
531
773
  "input": "none",
532
774
  "response": "json"
@@ -538,77 +780,249 @@ exports.operations = [
538
780
  "description": "The monitor's audits, newest first",
539
781
  "method": "GET",
540
782
  "path": "/v1/monitors/{monitorId}/runs",
541
- "scope": "auditwolf:read",
542
- "query": [],
543
- "input": "none",
544
- "response": "json"
545
- },
546
- {
547
- "product": "auditwolf",
548
- "id": "listPagesByPageIdObservations",
549
- "name": "List Page Observations",
550
- "description": "A page's observation history, newest first",
551
- "method": "GET",
552
- "path": "/v1/pages/{pageId}/observations",
553
- "scope": "auditwolf:read",
783
+ "scope": "audit:read",
554
784
  "query": [
785
+ {
786
+ "name": "limit",
787
+ "label": "Limit",
788
+ "type": "integer",
789
+ "required": false,
790
+ "default": 200,
791
+ "description": "Bounded page size. The existing default of 200 is preserved; the portal requests 50.",
792
+ "enum": []
793
+ },
555
794
  {
556
795
  "name": "cursor",
557
796
  "label": "Cursor",
558
797
  "type": "string",
559
- "default": ""
798
+ "required": false,
799
+ "default": "",
800
+ "description": "Opaque next_cursor from the preceding page. Sort order is immutable created_at descending, then ID descending. This is a continuation boundary, not a frozen snapshot; newer inserts do not shift older pages, and removed records disappear.",
801
+ "enum": []
560
802
  },
561
803
  {
562
- "name": "limit",
563
- "label": "Limit",
564
- "type": "integer",
565
- "default": 50
804
+ "name": "status",
805
+ "label": "Status",
806
+ "type": "string",
807
+ "required": false,
808
+ "default": "",
809
+ "description": "Applied before pagination. active selects every non-terminal audit state.",
810
+ "enum": [
811
+ "active",
812
+ "created",
813
+ "queued",
814
+ "discovering",
815
+ "capturing",
816
+ "evaluating",
817
+ "finalising_evidence",
818
+ "timestamping",
819
+ "completed",
820
+ "failed",
821
+ "cancelled",
822
+ "partial",
823
+ "quota_blocked"
824
+ ]
566
825
  }
567
826
  ],
568
827
  "input": "none",
569
828
  "response": "json",
570
829
  "pagination": {
571
- "key": "observations",
830
+ "key": "audits",
572
831
  "parameter": "cursor",
573
- "size": 100
832
+ "size": 200,
833
+ "since": 1.2
574
834
  }
575
835
  },
576
836
  {
577
837
  "product": "auditwolf",
578
- "id": "listRulePacks",
579
- "name": "List Rule Packs",
580
- "description": "The rule pack catalogue",
581
- "method": "GET",
582
- "path": "/v1/rule-packs",
583
- "scope": "auditwolf:read",
584
- "query": [],
585
- "input": "none",
586
- "response": "json"
587
- },
588
- {
589
- "product": "auditwolf",
590
- "id": "listRulesByLineageIdRevisions",
591
- "name": "List Rule Revisions",
592
- "description": "List every revision of a rule, newest first",
838
+ "id": "listMonitors",
839
+ "name": "List Monitors",
840
+ "description": "List monitors",
593
841
  "method": "GET",
594
- "path": "/v1/rules/{lineageId}/revisions",
595
- "scope": "auditwolf:read",
596
- "query": [],
597
- "input": "none",
598
- "response": "json"
599
- },
600
- {
601
- "product": "auditwolf",
602
- "id": "listSitesBySiteIdAudits",
603
- "name": "List Site Audits",
604
- "description": "List site audits",
842
+ "path": "/v1/monitors",
843
+ "scope": "audit:read",
844
+ "query": [
845
+ {
846
+ "name": "limit",
847
+ "label": "Limit",
848
+ "type": "integer",
849
+ "required": false,
850
+ "default": 200,
851
+ "description": "Bounded page size. The existing default of 200 is preserved; the portal requests 50.",
852
+ "enum": []
853
+ },
854
+ {
855
+ "name": "cursor",
856
+ "label": "Cursor",
857
+ "type": "string",
858
+ "required": false,
859
+ "default": "",
860
+ "description": "Opaque next_cursor from the preceding page. Sort order is immutable created_at descending, then ID descending. This is a continuation boundary, not a frozen snapshot; newer inserts do not shift older pages, and removed records disappear.",
861
+ "enum": []
862
+ },
863
+ {
864
+ "name": "site_id",
865
+ "label": "Site ID",
866
+ "type": "string",
867
+ "required": false,
868
+ "default": "",
869
+ "description": "",
870
+ "enum": []
871
+ }
872
+ ],
873
+ "input": "none",
874
+ "response": "json",
875
+ "pagination": {
876
+ "key": "monitors",
877
+ "parameter": "cursor",
878
+ "size": 200
879
+ }
880
+ },
881
+ {
882
+ "product": "auditwolf",
883
+ "id": "listPagesByPageIdObservations",
884
+ "name": "List Page Observations",
885
+ "description": "A page's observation history, newest first",
605
886
  "method": "GET",
606
- "path": "/v1/sites/{siteId}/audits",
607
- "scope": "auditwolf:read",
887
+ "path": "/v1/pages/{pageId}/observations",
888
+ "scope": "audit:read",
889
+ "query": [
890
+ {
891
+ "name": "limit",
892
+ "label": "Limit",
893
+ "type": "integer",
894
+ "required": false,
895
+ "default": 50,
896
+ "description": "",
897
+ "enum": []
898
+ },
899
+ {
900
+ "name": "cursor",
901
+ "label": "Cursor",
902
+ "type": "string",
903
+ "required": false,
904
+ "default": "",
905
+ "description": "next_cursor from the previous page",
906
+ "enum": []
907
+ }
908
+ ],
909
+ "input": "none",
910
+ "response": "json",
911
+ "pagination": {
912
+ "key": "observations",
913
+ "parameter": "cursor",
914
+ "size": 100
915
+ }
916
+ },
917
+ {
918
+ "product": "auditwolf",
919
+ "id": "listRulePacks",
920
+ "name": "List Rule Packs",
921
+ "description": "The rule pack catalogue",
922
+ "method": "GET",
923
+ "path": "/v1/rule-packs",
924
+ "scope": "audit:read",
608
925
  "query": [],
609
926
  "input": "none",
610
927
  "response": "json"
611
928
  },
929
+ {
930
+ "product": "auditwolf",
931
+ "id": "listRulesByLineageIdRevisions",
932
+ "name": "List Rule Revisions",
933
+ "description": "List every revision of a rule, newest first",
934
+ "method": "GET",
935
+ "path": "/v1/rules/{lineageId}/revisions",
936
+ "scope": "audit:read",
937
+ "query": [
938
+ {
939
+ "name": "limit",
940
+ "label": "Limit",
941
+ "type": "integer",
942
+ "required": false,
943
+ "default": 200,
944
+ "description": "Bounded page size. The existing default of 200 is preserved; the portal requests 50.",
945
+ "enum": []
946
+ },
947
+ {
948
+ "name": "cursor",
949
+ "label": "Cursor",
950
+ "type": "string",
951
+ "required": false,
952
+ "default": "",
953
+ "description": "The next_cursor from the preceding page. This collection is keyed on the revision version, which is unique and monotonic within a rule, so the cursor is that version and the page continues below it.",
954
+ "enum": []
955
+ }
956
+ ],
957
+ "input": "none",
958
+ "response": "json",
959
+ "pagination": {
960
+ "key": "revisions",
961
+ "parameter": "cursor",
962
+ "size": 200,
963
+ "since": 1.2
964
+ }
965
+ },
966
+ {
967
+ "product": "auditwolf",
968
+ "id": "listSitesBySiteIdAudits",
969
+ "name": "List Site Audits",
970
+ "description": "List site audits",
971
+ "method": "GET",
972
+ "path": "/v1/sites/{siteId}/audits",
973
+ "scope": "audit:read",
974
+ "query": [
975
+ {
976
+ "name": "limit",
977
+ "label": "Limit",
978
+ "type": "integer",
979
+ "required": false,
980
+ "default": 200,
981
+ "description": "Bounded page size. The existing default of 200 is preserved; the portal requests 50.",
982
+ "enum": []
983
+ },
984
+ {
985
+ "name": "cursor",
986
+ "label": "Cursor",
987
+ "type": "string",
988
+ "required": false,
989
+ "default": "",
990
+ "description": "Opaque next_cursor from the preceding page. Sort order is immutable created_at descending, then ID descending. This is a continuation boundary, not a frozen snapshot; newer inserts do not shift older pages, and removed records disappear.",
991
+ "enum": []
992
+ },
993
+ {
994
+ "name": "status",
995
+ "label": "Status",
996
+ "type": "string",
997
+ "required": false,
998
+ "default": "",
999
+ "description": "Applied before pagination. active selects every non-terminal audit state.",
1000
+ "enum": [
1001
+ "active",
1002
+ "created",
1003
+ "queued",
1004
+ "discovering",
1005
+ "capturing",
1006
+ "evaluating",
1007
+ "finalising_evidence",
1008
+ "timestamping",
1009
+ "completed",
1010
+ "failed",
1011
+ "cancelled",
1012
+ "partial",
1013
+ "quota_blocked"
1014
+ ]
1015
+ }
1016
+ ],
1017
+ "input": "none",
1018
+ "response": "json",
1019
+ "pagination": {
1020
+ "key": "audits",
1021
+ "parameter": "cursor",
1022
+ "size": 200,
1023
+ "since": 1.2
1024
+ }
1025
+ },
612
1026
  {
613
1027
  "product": "auditwolf",
614
1028
  "id": "listSitesBySiteIdMonitors",
@@ -616,7 +1030,7 @@ exports.operations = [
616
1030
  "description": "List the site's monitors",
617
1031
  "method": "GET",
618
1032
  "path": "/v1/sites/{siteId}/monitors",
619
- "scope": "auditwolf:read",
1033
+ "scope": "audit:read",
620
1034
  "query": [],
621
1035
  "input": "none",
622
1036
  "response": "json"
@@ -628,7 +1042,7 @@ exports.operations = [
628
1042
  "description": "List the site's versioned deterministic rules",
629
1043
  "method": "GET",
630
1044
  "path": "/v1/sites/{siteId}/rules",
631
- "scope": "auditwolf:read",
1045
+ "scope": "audit:read",
632
1046
  "query": [],
633
1047
  "input": "none",
634
1048
  "response": "json"
@@ -640,7 +1054,7 @@ exports.operations = [
640
1054
  "description": "List sites",
641
1055
  "method": "GET",
642
1056
  "path": "/v1/sites",
643
- "scope": "auditwolf:read",
1057
+ "scope": "audit:read",
644
1058
  "query": [],
645
1059
  "input": "none",
646
1060
  "response": "json"
@@ -649,13 +1063,54 @@ exports.operations = [
649
1063
  "product": "auditwolf",
650
1064
  "id": "listWebhooksByEndpointIdDeliveries",
651
1065
  "name": "List Webhook Deliveries",
652
- "description": "List delivery attempts",
1066
+ "description": "List endpoint deliveries",
653
1067
  "method": "GET",
654
1068
  "path": "/v1/webhooks/{endpointId}/deliveries",
655
- "scope": "auditwolf:integrations",
656
- "query": [],
1069
+ "scope": "audit:integrations",
1070
+ "query": [
1071
+ {
1072
+ "name": "cursor",
1073
+ "label": "Cursor",
1074
+ "type": "string",
1075
+ "required": false,
1076
+ "default": "",
1077
+ "description": "Last delivery ID from the preceding page, exclusive. Omit on page one.",
1078
+ "enum": []
1079
+ },
1080
+ {
1081
+ "name": "limit",
1082
+ "label": "Limit",
1083
+ "type": "integer",
1084
+ "required": false,
1085
+ "default": "",
1086
+ "description": "Global default 50; endpoint default 200.",
1087
+ "enum": []
1088
+ },
1089
+ {
1090
+ "name": "status",
1091
+ "label": "Status",
1092
+ "type": "string",
1093
+ "required": false,
1094
+ "default": "",
1095
+ "description": "Pending selects queued with no attempts; retrying includes queued after an attempt; queued selects all queued records.",
1096
+ "enum": [
1097
+ "pending",
1098
+ "queued",
1099
+ "retrying",
1100
+ "delivering",
1101
+ "delivered",
1102
+ "failed"
1103
+ ]
1104
+ }
1105
+ ],
657
1106
  "input": "none",
658
- "response": "json"
1107
+ "response": "json",
1108
+ "pagination": {
1109
+ "key": "deliveries",
1110
+ "parameter": "cursor",
1111
+ "size": 200,
1112
+ "since": 1.2
1113
+ }
659
1114
  },
660
1115
  {
661
1116
  "product": "auditwolf",
@@ -664,7 +1119,7 @@ exports.operations = [
664
1119
  "description": "List lifecycle webhook endpoints",
665
1120
  "method": "GET",
666
1121
  "path": "/v1/webhooks",
667
- "scope": "auditwolf:integrations",
1122
+ "scope": "audit:integrations",
668
1123
  "query": [],
669
1124
  "input": "none",
670
1125
  "response": "json"
@@ -676,7 +1131,7 @@ exports.operations = [
676
1131
  "description": "Pause scheduling",
677
1132
  "method": "POST",
678
1133
  "path": "/v1/monitors/{monitorId}/pause",
679
- "scope": "auditwolf:manage",
1134
+ "scope": "audit:manage",
680
1135
  "query": [],
681
1136
  "input": "none",
682
1137
  "response": "json"
@@ -688,10 +1143,15 @@ exports.operations = [
688
1143
  "description": "Replace a url_set monitor's URL list",
689
1144
  "method": "PUT",
690
1145
  "path": "/v1/monitors/{monitorId}/urls",
691
- "scope": "auditwolf:manage",
1146
+ "scope": "audit:manage",
692
1147
  "query": [],
693
- "input": "none",
694
- "response": "json"
1148
+ "input": "json",
1149
+ "response": "json",
1150
+ "example": {
1151
+ "urls": [
1152
+ "https://example.com"
1153
+ ]
1154
+ }
695
1155
  },
696
1156
  {
697
1157
  "product": "auditwolf",
@@ -700,7 +1160,7 @@ exports.operations = [
700
1160
  "description": "Resume scheduling",
701
1161
  "method": "POST",
702
1162
  "path": "/v1/monitors/{monitorId}/resume",
703
- "scope": "auditwolf:manage",
1163
+ "scope": "audit:manage",
704
1164
  "query": [],
705
1165
  "input": "none",
706
1166
  "response": "json"
@@ -712,7 +1172,7 @@ exports.operations = [
712
1172
  "description": "Retire a rule",
713
1173
  "method": "DELETE",
714
1174
  "path": "/v1/rules/{lineageId}",
715
- "scope": "auditwolf:manage",
1175
+ "scope": "audit:manage",
716
1176
  "query": [],
717
1177
  "input": "none",
718
1178
  "response": "json"
@@ -724,7 +1184,7 @@ exports.operations = [
724
1184
  "description": "Re-queue a failed delivery",
725
1185
  "method": "POST",
726
1186
  "path": "/v1/webhooks/{endpointId}/deliveries/{deliveryId}/retry",
727
- "scope": "auditwolf:integrations",
1187
+ "scope": "audit:integrations",
728
1188
  "query": [],
729
1189
  "input": "none",
730
1190
  "response": "json"
@@ -736,7 +1196,7 @@ exports.operations = [
736
1196
  "description": "Replace the endpoint's signing secret",
737
1197
  "method": "POST",
738
1198
  "path": "/v1/webhooks/{endpointId}/rotate-secret",
739
- "scope": "auditwolf:integrations",
1199
+ "scope": "audit:integrations",
740
1200
  "query": [],
741
1201
  "input": "none",
742
1202
  "response": "json"
@@ -748,7 +1208,7 @@ exports.operations = [
748
1208
  "description": "Queue an audit now with the monitor's scope frozen as the scheduler would freeze it",
749
1209
  "method": "POST",
750
1210
  "path": "/v1/monitors/{monitorId}/run",
751
- "scope": "auditwolf:run",
1211
+ "scope": "audit:run",
752
1212
  "query": [],
753
1213
  "input": "none",
754
1214
  "response": "json",
@@ -761,7 +1221,7 @@ exports.operations = [
761
1221
  "description": "Trigger an asynchronous audit",
762
1222
  "method": "POST",
763
1223
  "path": "/v1/sites/{siteId}/audits",
764
- "scope": "auditwolf:run",
1224
+ "scope": "audit:run",
765
1225
  "query": [],
766
1226
  "input": "json",
767
1227
  "response": "json",
@@ -778,7 +1238,7 @@ exports.operations = [
778
1238
  "description": "Upload and verify a connection-test object",
779
1239
  "method": "POST",
780
1240
  "path": "/v1/export-destinations/{destinationId}/test",
781
- "scope": "auditwolf:integrations",
1241
+ "scope": "audit:integrations",
782
1242
  "query": [],
783
1243
  "input": "none",
784
1244
  "response": "json"
@@ -790,7 +1250,7 @@ exports.operations = [
790
1250
  "description": "Send a signed endpoint.test event",
791
1251
  "method": "POST",
792
1252
  "path": "/v1/webhooks/{endpointId}/test",
793
- "scope": "auditwolf:integrations",
1253
+ "scope": "audit:integrations",
794
1254
  "query": [],
795
1255
  "input": "none",
796
1256
  "response": "json"
@@ -802,7 +1262,7 @@ exports.operations = [
802
1262
  "description": "Uninstall a pack",
803
1263
  "method": "DELETE",
804
1264
  "path": "/v1/rule-packs/installed/{installationId}",
805
- "scope": "auditwolf:manage",
1265
+ "scope": "audit:manage",
806
1266
  "query": [],
807
1267
  "input": "none",
808
1268
  "response": "json"
@@ -814,7 +1274,7 @@ exports.operations = [
814
1274
  "description": "Assign, schedule, acknowledge, accept the risk, or close a finding",
815
1275
  "method": "PATCH",
816
1276
  "path": "/v1/findings/{findingId}",
817
- "scope": "auditwolf:manage",
1277
+ "scope": "audit:manage",
818
1278
  "query": [],
819
1279
  "input": "json",
820
1280
  "response": "json",
@@ -827,10 +1287,13 @@ exports.operations = [
827
1287
  "description": "Change a monitor's name, cadence, anchor, timezone, capture profile or change policy",
828
1288
  "method": "PATCH",
829
1289
  "path": "/v1/monitors/{monitorId}",
830
- "scope": "auditwolf:manage",
1290
+ "scope": "audit:manage",
831
1291
  "query": [],
832
- "input": "none",
833
- "response": "json"
1292
+ "input": "json",
1293
+ "response": "json",
1294
+ "example": {
1295
+ "mode": "full_site"
1296
+ }
834
1297
  },
835
1298
  {
836
1299
  "product": "auditwolf",
@@ -839,7 +1302,7 @@ exports.operations = [
839
1302
  "description": "Revise a rule",
840
1303
  "method": "PATCH",
841
1304
  "path": "/v1/rules/{lineageId}",
842
- "scope": "auditwolf:manage",
1305
+ "scope": "audit:manage",
843
1306
  "query": [],
844
1307
  "input": "json",
845
1308
  "response": "json",
@@ -852,10 +1315,11 @@ exports.operations = [
852
1315
  "description": "Enable or disable an endpoint, or change its subscribed events",
853
1316
  "method": "PATCH",
854
1317
  "path": "/v1/webhooks/{endpointId}",
855
- "scope": "auditwolf:integrations",
1318
+ "scope": "audit:integrations",
856
1319
  "query": [],
857
- "input": "none",
858
- "response": "json"
1320
+ "input": "json",
1321
+ "response": "json",
1322
+ "example": {}
859
1323
  },
860
1324
  {
861
1325
  "product": "auditwolf",
@@ -864,7 +1328,7 @@ exports.operations = [
864
1328
  "description": "Upgrade an installed pack, or change its values",
865
1329
  "method": "POST",
866
1330
  "path": "/v1/rule-packs/installed/{installationId}/upgrade",
867
- "scope": "auditwolf:manage",
1331
+ "scope": "audit:manage",
868
1332
  "query": [],
869
1333
  "input": "json",
870
1334
  "response": "json",
@@ -877,7 +1341,107 @@ exports.operations = [
877
1341
  "description": "Credits, quota position, projection and hosted evidence",
878
1342
  "method": "GET",
879
1343
  "path": "/v1/usage",
880
- "scope": "auditwolf:read",
1344
+ "scope": "audit:read",
1345
+ "query": [],
1346
+ "input": "none",
1347
+ "response": "json"
1348
+ },
1349
+ {
1350
+ "product": "financewolf",
1351
+ "id": "cancelEinvoiceBatch",
1352
+ "name": "Cancel Batch",
1353
+ "description": "Cancel an ordered batch",
1354
+ "method": "POST",
1355
+ "path": "/v1/einvoices/batches/{id}/cancel",
1356
+ "scope": "finance:einvoices:write",
1357
+ "query": [],
1358
+ "input": "none",
1359
+ "response": "json"
1360
+ },
1361
+ {
1362
+ "product": "financewolf",
1363
+ "id": "cancelEinvoiceJob",
1364
+ "name": "Cancel Job",
1365
+ "description": "Cancel an async job",
1366
+ "method": "POST",
1367
+ "path": "/v1/einvoices/jobs/{id}/cancel",
1368
+ "scope": "finance:einvoices:write",
1369
+ "query": [],
1370
+ "input": "none",
1371
+ "response": "json"
1372
+ },
1373
+ {
1374
+ "product": "financewolf",
1375
+ "id": "createEinvoiceBatch",
1376
+ "name": "Create Batch",
1377
+ "description": "Create an ordered batch",
1378
+ "method": "POST",
1379
+ "path": "/v1/einvoices/batches",
1380
+ "scope": "finance:einvoices:write",
1381
+ "query": [],
1382
+ "input": "json",
1383
+ "response": "json",
1384
+ "example": {
1385
+ "jobs": [
1386
+ {
1387
+ "operation": "validate",
1388
+ "document_base64": "PEludm9pY2UvPg==",
1389
+ "options": {
1390
+ "ruleset": "latest",
1391
+ "profile": "peppol-bis-billing-3"
1392
+ }
1393
+ }
1394
+ ]
1395
+ },
1396
+ "idempotency": true
1397
+ },
1398
+ {
1399
+ "product": "financewolf",
1400
+ "id": "createEinvoiceDestination",
1401
+ "name": "Create Destination",
1402
+ "description": "Create a webhook or S3 destination",
1403
+ "method": "POST",
1404
+ "path": "/v1/einvoices/destinations",
1405
+ "scope": "finance:einvoices:destinations:manage",
1406
+ "query": [],
1407
+ "input": "json",
1408
+ "response": "json",
1409
+ "example": {
1410
+ "name": "n8n delivery",
1411
+ "config": {
1412
+ "url": "https://example.com/webhook"
1413
+ }
1414
+ }
1415
+ },
1416
+ {
1417
+ "product": "financewolf",
1418
+ "id": "createEinvoiceJob",
1419
+ "name": "Create Job",
1420
+ "description": "Create an async job",
1421
+ "method": "POST",
1422
+ "path": "/v1/einvoices/jobs",
1423
+ "scope": "finance:einvoices:write",
1424
+ "query": [],
1425
+ "input": "json",
1426
+ "response": "json",
1427
+ "example": {
1428
+ "operation": "validate",
1429
+ "document_base64": "PEludm9pY2UvPg==",
1430
+ "options": {
1431
+ "ruleset": "latest",
1432
+ "profile": "peppol-bis-billing-3"
1433
+ }
1434
+ },
1435
+ "idempotency": true
1436
+ },
1437
+ {
1438
+ "product": "financewolf",
1439
+ "id": "deleteEinvoiceDestination",
1440
+ "name": "Delete Destination",
1441
+ "description": "Retire a destination and erase its stored credentials",
1442
+ "method": "DELETE",
1443
+ "path": "/v1/einvoices/destinations/{id}",
1444
+ "scope": "finance:einvoices:destinations:manage",
881
1445
  "query": [],
882
1446
  "input": "none",
883
1447
  "response": "json"
@@ -889,11 +1453,26 @@ exports.operations = [
889
1453
  "description": "Delete saved result bytes and findings",
890
1454
  "method": "DELETE",
891
1455
  "path": "/v1/einvoices/results/{id}",
892
- "scope": "financewolf:einvoices:write",
1456
+ "scope": "finance:einvoices:write",
893
1457
  "query": [],
894
1458
  "input": "none",
895
1459
  "response": "json"
896
1460
  },
1461
+ {
1462
+ "product": "financewolf",
1463
+ "id": "createEinvoiceReport",
1464
+ "name": "Download Signed Report",
1465
+ "description": "Download a signed report for a retained result",
1466
+ "method": "POST",
1467
+ "path": "/v1/einvoices/reports",
1468
+ "scope": "finance:einvoices:read",
1469
+ "query": [],
1470
+ "input": "json",
1471
+ "response": "binary",
1472
+ "example": {
1473
+ "operation_id": "00000000-0000-0000-0000-000000000000"
1474
+ }
1475
+ },
897
1476
  {
898
1477
  "product": "financewolf",
899
1478
  "id": "generateEInvoice",
@@ -901,7 +1480,7 @@ exports.operations = [
901
1480
  "description": "Generate and validate one UBL e-invoice",
902
1481
  "method": "POST",
903
1482
  "path": "/v1/einvoices/generate",
904
- "scope": "financewolf:einvoices:write",
1483
+ "scope": "finance:einvoices:write",
905
1484
  "query": [
906
1485
  {
907
1486
  "name": "ruleset",
@@ -986,6 +1565,67 @@ exports.operations = [
986
1565
  "idempotency": true,
987
1566
  "public": true
988
1567
  },
1568
+ {
1569
+ "product": "financewolf",
1570
+ "id": "getEinvoiceBatch",
1571
+ "name": "Get Batch",
1572
+ "description": "Get an ordered batch",
1573
+ "method": "GET",
1574
+ "path": "/v1/einvoices/batches/{id}",
1575
+ "scope": "finance:einvoices:read",
1576
+ "query": [],
1577
+ "input": "none",
1578
+ "response": "json"
1579
+ },
1580
+ {
1581
+ "product": "financewolf",
1582
+ "id": "getEinvoiceDelivery",
1583
+ "name": "Get Delivery",
1584
+ "description": "Read a delivery and its immutable attempt history",
1585
+ "method": "GET",
1586
+ "path": "/v1/einvoices/deliveries/{id}",
1587
+ "scope": "finance:einvoices:read",
1588
+ "query": [],
1589
+ "input": "none",
1590
+ "response": "json"
1591
+ },
1592
+ {
1593
+ "product": "financewolf",
1594
+ "id": "getEinvoiceDestination",
1595
+ "name": "Get Destination",
1596
+ "description": "Read a destination without its credentials",
1597
+ "method": "GET",
1598
+ "path": "/v1/einvoices/destinations/{id}",
1599
+ "scope": "finance:einvoices:destinations:manage",
1600
+ "query": [],
1601
+ "input": "none",
1602
+ "response": "json"
1603
+ },
1604
+ {
1605
+ "product": "financewolf",
1606
+ "id": "getEinvoiceJob",
1607
+ "name": "Get Job",
1608
+ "description": "Get an async job",
1609
+ "method": "GET",
1610
+ "path": "/v1/einvoices/jobs/{id}",
1611
+ "scope": "finance:einvoices:read",
1612
+ "query": [],
1613
+ "input": "none",
1614
+ "response": "json"
1615
+ },
1616
+ {
1617
+ "product": "financewolf",
1618
+ "id": "getEinvoiceReportKeys",
1619
+ "name": "Get Report Signing Keys",
1620
+ "description": "Read Ironfang Finance report signing public keys",
1621
+ "method": "GET",
1622
+ "path": "/v1/einvoices/reports/keys",
1623
+ "scope": "none",
1624
+ "query": [],
1625
+ "input": "none",
1626
+ "response": "json",
1627
+ "public": true
1628
+ },
989
1629
  {
990
1630
  "product": "financewolf",
991
1631
  "id": "getValidationResult",
@@ -993,7 +1633,7 @@ exports.operations = [
993
1633
  "description": "Read a saved validation or generation result",
994
1634
  "method": "GET",
995
1635
  "path": "/v1/einvoices/results/{id}",
996
- "scope": "financewolf:einvoices:read",
1636
+ "scope": "finance:einvoices:read",
997
1637
  "query": [],
998
1638
  "input": "none",
999
1639
  "response": "json"
@@ -1005,20 +1645,188 @@ exports.operations = [
1005
1645
  "description": "Fetch one ruleset by its immutable id",
1006
1646
  "method": "GET",
1007
1647
  "path": "/v1/einvoices/rulesets/{id}",
1008
- "scope": "financewolf:einvoices:rulesets:read",
1648
+ "scope": "finance:einvoices:rulesets:read",
1009
1649
  "query": [],
1010
1650
  "input": "none",
1011
1651
  "response": "json",
1012
1652
  "public": true
1013
1653
  },
1654
+ {
1655
+ "product": "financewolf",
1656
+ "id": "listEinvoiceBatches",
1657
+ "name": "List Batches",
1658
+ "description": "List batches",
1659
+ "method": "GET",
1660
+ "path": "/v1/einvoices/batches",
1661
+ "scope": "finance:einvoices:read",
1662
+ "query": [
1663
+ {
1664
+ "name": "limit",
1665
+ "label": "Limit",
1666
+ "type": "integer",
1667
+ "required": false,
1668
+ "default": 50,
1669
+ "description": "",
1670
+ "enum": []
1671
+ },
1672
+ {
1673
+ "name": "cursor",
1674
+ "label": "Cursor",
1675
+ "type": "string",
1676
+ "required": false,
1677
+ "default": "",
1678
+ "description": "Pass next_cursor from the preceding page; empty means the first page.",
1679
+ "enum": []
1680
+ }
1681
+ ],
1682
+ "input": "none",
1683
+ "response": "json",
1684
+ "pagination": {
1685
+ "key": "batches",
1686
+ "parameter": "cursor",
1687
+ "size": 100
1688
+ }
1689
+ },
1690
+ {
1691
+ "product": "financewolf",
1692
+ "id": "listEinvoiceDeliveries",
1693
+ "name": "List Deliveries",
1694
+ "description": "List delivery history with keyset pagination",
1695
+ "method": "GET",
1696
+ "path": "/v1/einvoices/deliveries",
1697
+ "scope": "finance:einvoices:read",
1698
+ "query": [
1699
+ {
1700
+ "name": "destination",
1701
+ "label": "Destination",
1702
+ "type": "string",
1703
+ "required": false,
1704
+ "default": "",
1705
+ "description": "",
1706
+ "enum": []
1707
+ },
1708
+ {
1709
+ "name": "operation_id",
1710
+ "label": "Operation ID",
1711
+ "type": "string",
1712
+ "required": false,
1713
+ "default": "",
1714
+ "description": "",
1715
+ "enum": []
1716
+ },
1717
+ {
1718
+ "name": "status",
1719
+ "label": "Status",
1720
+ "type": "string",
1721
+ "required": false,
1722
+ "default": "",
1723
+ "description": "",
1724
+ "enum": [
1725
+ "pending",
1726
+ "retrying",
1727
+ "delivering",
1728
+ "delivered",
1729
+ "failed"
1730
+ ]
1731
+ },
1732
+ {
1733
+ "name": "cursor",
1734
+ "label": "Cursor",
1735
+ "type": "string",
1736
+ "required": false,
1737
+ "default": "",
1738
+ "description": "",
1739
+ "enum": []
1740
+ },
1741
+ {
1742
+ "name": "limit",
1743
+ "label": "Limit",
1744
+ "type": "integer",
1745
+ "required": false,
1746
+ "default": 50,
1747
+ "description": "",
1748
+ "enum": []
1749
+ }
1750
+ ],
1751
+ "input": "none",
1752
+ "response": "json",
1753
+ "pagination": {
1754
+ "key": "deliveries",
1755
+ "parameter": "cursor",
1756
+ "size": 100
1757
+ }
1758
+ },
1759
+ {
1760
+ "product": "financewolf",
1761
+ "id": "listEinvoiceDestinations",
1762
+ "name": "List Destinations",
1763
+ "description": "List active destination configurations",
1764
+ "method": "GET",
1765
+ "path": "/v1/einvoices/destinations",
1766
+ "scope": "finance:einvoices:destinations:manage",
1767
+ "query": [],
1768
+ "input": "none",
1769
+ "response": "json"
1770
+ },
1771
+ {
1772
+ "product": "financewolf",
1773
+ "id": "listEinvoiceJobs",
1774
+ "name": "List Jobs",
1775
+ "description": "List jobs",
1776
+ "method": "GET",
1777
+ "path": "/v1/einvoices/jobs",
1778
+ "scope": "finance:einvoices:read",
1779
+ "query": [
1780
+ {
1781
+ "name": "limit",
1782
+ "label": "Limit",
1783
+ "type": "integer",
1784
+ "required": false,
1785
+ "default": 50,
1786
+ "description": "",
1787
+ "enum": []
1788
+ },
1789
+ {
1790
+ "name": "cursor",
1791
+ "label": "Cursor",
1792
+ "type": "string",
1793
+ "required": false,
1794
+ "default": "",
1795
+ "description": "Pass next_cursor from the preceding page; empty means the first page.",
1796
+ "enum": []
1797
+ },
1798
+ {
1799
+ "name": "status",
1800
+ "label": "Status",
1801
+ "type": "string",
1802
+ "required": false,
1803
+ "default": "",
1804
+ "description": "",
1805
+ "enum": [
1806
+ "queued",
1807
+ "running",
1808
+ "completed",
1809
+ "failed",
1810
+ "cancelled"
1811
+ ]
1812
+ }
1813
+ ],
1814
+ "input": "none",
1815
+ "response": "json",
1816
+ "pagination": {
1817
+ "key": "jobs",
1818
+ "parameter": "cursor",
1819
+ "size": 100
1820
+ }
1821
+ },
1014
1822
  {
1015
1823
  "product": "financewolf",
1016
1824
  "id": "listValidationResults",
1017
1825
  "name": "List Results",
1018
- "description": "List saved validation results",
1826
+ "description": "List saved validation and generation results",
1019
1827
  "method": "GET",
1020
1828
  "path": "/v1/einvoices/results",
1021
- "scope": "financewolf:einvoices:read",
1829
+ "scope": "finance:einvoices:read",
1022
1830
  "query": [
1023
1831
  {
1024
1832
  "name": "before",
@@ -1026,7 +1834,76 @@ exports.operations = [
1026
1834
  "type": "string",
1027
1835
  "required": false,
1028
1836
  "default": "",
1029
- "description": "Last operation ID from the preceding page.",
1837
+ "description": "Legacy last operation ID; cannot be combined with cursor. Unknown or foreign IDs return 404.",
1838
+ "enum": []
1839
+ },
1840
+ {
1841
+ "name": "cursor",
1842
+ "label": "Cursor",
1843
+ "type": "string",
1844
+ "required": false,
1845
+ "default": "",
1846
+ "description": "Include empty on the first page to opt into stable cursors, then pass next_cursor here.",
1847
+ "enum": []
1848
+ },
1849
+ {
1850
+ "name": "limit",
1851
+ "label": "Limit",
1852
+ "type": "integer",
1853
+ "required": false,
1854
+ "default": 20,
1855
+ "description": "",
1856
+ "enum": []
1857
+ },
1858
+ {
1859
+ "name": "kind",
1860
+ "label": "Kind",
1861
+ "type": "string",
1862
+ "required": false,
1863
+ "default": "",
1864
+ "description": "",
1865
+ "enum": [
1866
+ "validate",
1867
+ "generate"
1868
+ ]
1869
+ },
1870
+ {
1871
+ "name": "outcome",
1872
+ "label": "Outcome",
1873
+ "type": "string",
1874
+ "required": false,
1875
+ "default": "",
1876
+ "description": "",
1877
+ "enum": [
1878
+ "valid",
1879
+ "invalid"
1880
+ ]
1881
+ },
1882
+ {
1883
+ "name": "ruleset",
1884
+ "label": "Ruleset",
1885
+ "type": "string",
1886
+ "required": false,
1887
+ "default": "",
1888
+ "description": "",
1889
+ "enum": []
1890
+ },
1891
+ {
1892
+ "name": "q",
1893
+ "label": "Q",
1894
+ "type": "string",
1895
+ "required": false,
1896
+ "default": "",
1897
+ "description": "Case-insensitive literal substring of operation ID or an available document name. NUL is rejected.",
1898
+ "enum": []
1899
+ },
1900
+ {
1901
+ "name": "operation_id",
1902
+ "label": "Operation ID",
1903
+ "type": "string",
1904
+ "required": false,
1905
+ "default": "",
1906
+ "description": "Exact tenant-owned operation ID for bounded metadata lookup. Unknown or foreign IDs return an empty list.",
1030
1907
  "enum": []
1031
1908
  }
1032
1909
  ],
@@ -1045,7 +1922,7 @@ exports.operations = [
1045
1922
  "description": "List rulesets available for selection and reproduction",
1046
1923
  "method": "GET",
1047
1924
  "path": "/v1/einvoices/rulesets",
1048
- "scope": "financewolf:einvoices:rulesets:read",
1925
+ "scope": "finance:einvoices:rulesets:read",
1049
1926
  "query": [
1050
1927
  {
1051
1928
  "name": "document_type",
@@ -1090,17 +1967,90 @@ exports.operations = [
1090
1967
  },
1091
1968
  {
1092
1969
  "product": "financewolf",
1093
- "id": "validateEInvoice",
1094
- "name": "Validate E-Invoice",
1095
- "description": "Validate one e-invoice XML document",
1970
+ "id": "renderEinvoice",
1971
+ "name": "Render E-Invoice PDF",
1972
+ "description": "Render a saved generation as a readable PDF",
1096
1973
  "method": "POST",
1097
- "path": "/v1/einvoices/validate",
1098
- "scope": "financewolf:einvoices:write",
1099
- "query": [
1100
- {
1101
- "name": "ruleset",
1102
- "label": "Ruleset",
1103
- "type": "string",
1974
+ "path": "/v1/einvoices/render",
1975
+ "scope": "finance:einvoices:read",
1976
+ "query": [],
1977
+ "input": "json",
1978
+ "response": "binary",
1979
+ "example": {
1980
+ "operation_id": "00000000-0000-0000-0000-000000000000"
1981
+ }
1982
+ },
1983
+ {
1984
+ "product": "financewolf",
1985
+ "id": "retryEinvoiceDelivery",
1986
+ "name": "Retry Delivery",
1987
+ "description": "Retry failed delivery without rerunning validation",
1988
+ "method": "POST",
1989
+ "path": "/v1/einvoices/deliveries/{id}/retry",
1990
+ "scope": "finance:einvoices:destinations:manage",
1991
+ "query": [],
1992
+ "input": "none",
1993
+ "response": "json"
1994
+ },
1995
+ {
1996
+ "product": "financewolf",
1997
+ "id": "updateEinvoiceDestination",
1998
+ "name": "Update Destination",
1999
+ "description": "Enable, disable or rotate destination credentials",
2000
+ "method": "PATCH",
2001
+ "path": "/v1/einvoices/destinations/{id}",
2002
+ "scope": "finance:einvoices:destinations:manage",
2003
+ "query": [],
2004
+ "input": "json",
2005
+ "response": "json",
2006
+ "example": {
2007
+ "enabled": true
2008
+ }
2009
+ },
2010
+ {
2011
+ "product": "financewolf",
2012
+ "id": "getEinvoiceUsage",
2013
+ "name": "Usage",
2014
+ "description": "Reconcile Ironfang Finance document usage",
2015
+ "method": "GET",
2016
+ "path": "/v1/einvoices/usage",
2017
+ "scope": "finance:billing:manage",
2018
+ "query": [
2019
+ {
2020
+ "name": "start",
2021
+ "label": "Start",
2022
+ "type": "string",
2023
+ "required": true,
2024
+ "default": "",
2025
+ "description": "RFC3339 inclusive start / exclusive end; at most 366 days.",
2026
+ "enum": []
2027
+ },
2028
+ {
2029
+ "name": "end",
2030
+ "label": "End",
2031
+ "type": "string",
2032
+ "required": true,
2033
+ "default": "",
2034
+ "description": "RFC3339 inclusive start / exclusive end; at most 366 days.",
2035
+ "enum": []
2036
+ }
2037
+ ],
2038
+ "input": "none",
2039
+ "response": "json"
2040
+ },
2041
+ {
2042
+ "product": "financewolf",
2043
+ "id": "validateEInvoice",
2044
+ "name": "Validate E-Invoice",
2045
+ "description": "Validate one e-invoice XML document",
2046
+ "method": "POST",
2047
+ "path": "/v1/einvoices/validate",
2048
+ "scope": "finance:einvoices:write",
2049
+ "query": [
2050
+ {
2051
+ "name": "ruleset",
2052
+ "label": "Ruleset",
2053
+ "type": "string",
1104
2054
  "required": false,
1105
2055
  "default": "latest",
1106
2056
  "description": "`latest` (default) or an exact ruleset id. Read for raw XML bodies only.",
@@ -1136,6 +2086,19 @@ exports.operations = [
1136
2086
  "idempotency": true,
1137
2087
  "public": true
1138
2088
  },
2089
+ {
2090
+ "product": "financewolf",
2091
+ "id": "verifyEinvoiceReport",
2092
+ "name": "Verify Signed Report",
2093
+ "description": "Verify report integrity without an account",
2094
+ "method": "POST",
2095
+ "path": "/v1/einvoices/reports/verify",
2096
+ "scope": "none",
2097
+ "query": [],
2098
+ "input": "zip",
2099
+ "response": "json",
2100
+ "public": true
2101
+ },
1139
2102
  {
1140
2103
  "product": "renderwolf",
1141
2104
  "id": "cancelJob",
@@ -1143,7 +2106,7 @@ exports.operations = [
1143
2106
  "description": "Cancel a job",
1144
2107
  "method": "DELETE",
1145
2108
  "path": "/v1/jobs/{id}",
1146
- "scope": "renderwolf:render",
2109
+ "scope": "render:render",
1147
2110
  "query": [],
1148
2111
  "input": "none",
1149
2112
  "response": "json"
@@ -1152,7 +2115,7 @@ exports.operations = [
1152
2115
  "product": "renderwolf",
1153
2116
  "id": "getCapabilities",
1154
2117
  "name": "Capabilities",
1155
- "description": "What Renderwolf does, is building and does not offer",
2118
+ "description": "What Ironfang Render does, is building and does not offer",
1156
2119
  "method": "GET",
1157
2120
  "path": "/v1/capabilities",
1158
2121
  "scope": "none",
@@ -1168,7 +2131,7 @@ exports.operations = [
1168
2131
  "description": "Register a delivery destination",
1169
2132
  "method": "POST",
1170
2133
  "path": "/v1/destinations",
1171
- "scope": "renderwolf:destinations",
2134
+ "scope": "render:destinations",
1172
2135
  "query": [],
1173
2136
  "input": "json",
1174
2137
  "response": "json",
@@ -1184,7 +2147,7 @@ exports.operations = [
1184
2147
  "description": "Create a template",
1185
2148
  "method": "POST",
1186
2149
  "path": "/v1/templates",
1187
- "scope": "renderwolf:templates:write",
2150
+ "scope": "render:templates:write",
1188
2151
  "query": [],
1189
2152
  "input": "json",
1190
2153
  "response": "json",
@@ -1202,7 +2165,7 @@ exports.operations = [
1202
2165
  "description": "Remove a destination",
1203
2166
  "method": "DELETE",
1204
2167
  "path": "/v1/destinations/{id}",
1205
- "scope": "renderwolf:destinations",
2168
+ "scope": "render:destinations",
1206
2169
  "query": [],
1207
2170
  "input": "none",
1208
2171
  "response": "json"
@@ -1214,7 +2177,7 @@ exports.operations = [
1214
2177
  "description": "Delete a template",
1215
2178
  "method": "DELETE",
1216
2179
  "path": "/v1/templates/{id}",
1217
- "scope": "renderwolf:templates:write",
2180
+ "scope": "render:templates:write",
1218
2181
  "query": [],
1219
2182
  "input": "none",
1220
2183
  "response": "json"
@@ -1226,7 +2189,7 @@ exports.operations = [
1226
2189
  "description": "Collect a job's result",
1227
2190
  "method": "GET",
1228
2191
  "path": "/v1/jobs/{id}/result",
1229
- "scope": "renderwolf:render",
2192
+ "scope": "render:render",
1230
2193
  "query": [],
1231
2194
  "input": "none",
1232
2195
  "response": "redirect"
@@ -1238,7 +2201,7 @@ exports.operations = [
1238
2201
  "description": "Poll a batch",
1239
2202
  "method": "GET",
1240
2203
  "path": "/v1/batches/{id}",
1241
- "scope": "renderwolf:render",
2204
+ "scope": "render:render",
1242
2205
  "query": [],
1243
2206
  "input": "none",
1244
2207
  "response": "json"
@@ -1250,7 +2213,7 @@ exports.operations = [
1250
2213
  "description": "One delivery, with the body it posted",
1251
2214
  "method": "GET",
1252
2215
  "path": "/v1/deliveries/{id}",
1253
- "scope": "renderwolf:render",
2216
+ "scope": "render:render",
1254
2217
  "query": [],
1255
2218
  "input": "none",
1256
2219
  "response": "json"
@@ -1262,7 +2225,7 @@ exports.operations = [
1262
2225
  "description": "Get a destination",
1263
2226
  "method": "GET",
1264
2227
  "path": "/v1/destinations/{id}",
1265
- "scope": "renderwolf:destinations",
2228
+ "scope": "render:destinations",
1266
2229
  "query": [],
1267
2230
  "input": "none",
1268
2231
  "response": "json"
@@ -1274,7 +2237,7 @@ exports.operations = [
1274
2237
  "description": "Poll a job",
1275
2238
  "method": "GET",
1276
2239
  "path": "/v1/jobs/{id}",
1277
- "scope": "renderwolf:render",
2240
+ "scope": "render:render",
1278
2241
  "query": [],
1279
2242
  "input": "none",
1280
2243
  "response": "json"
@@ -1286,11 +2249,47 @@ exports.operations = [
1286
2249
  "description": "Fetch a template",
1287
2250
  "method": "GET",
1288
2251
  "path": "/v1/templates/{id}",
1289
- "scope": "renderwolf:templates:read",
2252
+ "scope": "render:templates:read",
1290
2253
  "query": [],
1291
2254
  "input": "none",
1292
2255
  "response": "json"
1293
2256
  },
2257
+ {
2258
+ "product": "renderwolf",
2259
+ "id": "listBatches",
2260
+ "name": "List Batches",
2261
+ "description": "List batches",
2262
+ "method": "GET",
2263
+ "path": "/v1/batches",
2264
+ "scope": "render:render",
2265
+ "query": [
2266
+ {
2267
+ "name": "limit",
2268
+ "label": "Limit",
2269
+ "type": "integer",
2270
+ "required": false,
2271
+ "default": 50,
2272
+ "description": "",
2273
+ "enum": []
2274
+ },
2275
+ {
2276
+ "name": "cursor",
2277
+ "label": "Cursor",
2278
+ "type": "string",
2279
+ "required": false,
2280
+ "default": "",
2281
+ "description": "Pass next_cursor from the preceding page; empty means the first page.",
2282
+ "enum": []
2283
+ }
2284
+ ],
2285
+ "input": "none",
2286
+ "response": "json",
2287
+ "pagination": {
2288
+ "key": "batches",
2289
+ "parameter": "cursor",
2290
+ "size": 100
2291
+ }
2292
+ },
1294
2293
  {
1295
2294
  "product": "renderwolf",
1296
2295
  "id": "listDeliveries",
@@ -1298,7 +2297,7 @@ exports.operations = [
1298
2297
  "description": "List deliveries",
1299
2298
  "method": "GET",
1300
2299
  "path": "/v1/deliveries",
1301
- "scope": "renderwolf:render",
2300
+ "scope": "render:render",
1302
2301
  "query": [
1303
2302
  {
1304
2303
  "name": "destination",
@@ -1309,12 +2308,36 @@ exports.operations = [
1309
2308
  "description": "",
1310
2309
  "enum": []
1311
2310
  },
2311
+ {
2312
+ "name": "job_id",
2313
+ "label": "Job ID",
2314
+ "type": "string",
2315
+ "required": false,
2316
+ "default": "",
2317
+ "description": "",
2318
+ "enum": []
2319
+ },
2320
+ {
2321
+ "name": "status",
2322
+ "label": "Status",
2323
+ "type": "string",
2324
+ "required": false,
2325
+ "default": "",
2326
+ "description": "",
2327
+ "enum": [
2328
+ "pending",
2329
+ "retrying",
2330
+ "delivering",
2331
+ "delivered",
2332
+ "failed"
2333
+ ]
2334
+ },
1312
2335
  {
1313
2336
  "name": "limit",
1314
2337
  "label": "Limit",
1315
2338
  "type": "integer",
1316
2339
  "required": false,
1317
- "default": "",
2340
+ "default": 50,
1318
2341
  "description": "",
1319
2342
  "enum": []
1320
2343
  },
@@ -1343,7 +2366,7 @@ exports.operations = [
1343
2366
  "description": "List destinations",
1344
2367
  "method": "GET",
1345
2368
  "path": "/v1/destinations",
1346
- "scope": "renderwolf:destinations",
2369
+ "scope": "render:destinations",
1347
2370
  "query": [],
1348
2371
  "input": "none",
1349
2372
  "response": "json"
@@ -1355,7 +2378,7 @@ exports.operations = [
1355
2378
  "description": "List jobs",
1356
2379
  "method": "GET",
1357
2380
  "path": "/v1/jobs",
1358
- "scope": "renderwolf:render",
2381
+ "scope": "render:render",
1359
2382
  "query": [
1360
2383
  {
1361
2384
  "name": "status",
@@ -1400,7 +2423,7 @@ exports.operations = [
1400
2423
  "description": "Request history",
1401
2424
  "method": "GET",
1402
2425
  "path": "/v1/requests",
1403
- "scope": "renderwolf:usage:read",
2426
+ "scope": "render:usage:read",
1404
2427
  "query": [
1405
2428
  {
1406
2429
  "name": "since",
@@ -1522,7 +2545,7 @@ exports.operations = [
1522
2545
  "description": "List templates",
1523
2546
  "method": "GET",
1524
2547
  "path": "/v1/templates",
1525
- "scope": "renderwolf:templates:read",
2548
+ "scope": "render:templates:read",
1526
2549
  "query": [
1527
2550
  {
1528
2551
  "name": "cursor",
@@ -1530,7 +2553,7 @@ exports.operations = [
1530
2553
  "type": "string",
1531
2554
  "required": false,
1532
2555
  "default": "",
1533
- "description": "Opaque next_cursor from the previous page.",
2556
+ "description": "Opaque next_cursor from the previous page; empty means the first page.",
1534
2557
  "enum": []
1535
2558
  },
1536
2559
  {
@@ -1567,7 +2590,7 @@ exports.operations = [
1567
2590
  "description": "Render a QR code",
1568
2591
  "method": "POST",
1569
2592
  "path": "/v1/qr",
1570
- "scope": "renderwolf:render",
2593
+ "scope": "render:render",
1571
2594
  "query": [],
1572
2595
  "input": "json",
1573
2596
  "response": "binary",
@@ -1582,7 +2605,7 @@ exports.operations = [
1582
2605
  "description": "Send a delivery again",
1583
2606
  "method": "POST",
1584
2607
  "path": "/v1/deliveries/{id}/redeliver",
1585
- "scope": "renderwolf:destinations",
2608
+ "scope": "render:destinations",
1586
2609
  "query": [],
1587
2610
  "input": "none",
1588
2611
  "response": "json"
@@ -1594,7 +2617,7 @@ exports.operations = [
1594
2617
  "description": "Render a scrolling website preview",
1595
2618
  "method": "POST",
1596
2619
  "path": "/v1/site-preview",
1597
- "scope": "renderwolf:render",
2620
+ "scope": "render:render",
1598
2621
  "query": [],
1599
2622
  "input": "json",
1600
2623
  "response": "multipart",
@@ -1612,7 +2635,7 @@ exports.operations = [
1612
2635
  "description": "Submit up to 100 jobs together",
1613
2636
  "method": "POST",
1614
2637
  "path": "/v1/batches",
1615
- "scope": "renderwolf:render",
2638
+ "scope": "render:render",
1616
2639
  "query": [],
1617
2640
  "input": "json",
1618
2641
  "response": "json",
@@ -1635,7 +2658,7 @@ exports.operations = [
1635
2658
  "description": "Submit a durable render job",
1636
2659
  "method": "POST",
1637
2660
  "path": "/v1/jobs",
1638
- "scope": "renderwolf:render",
2661
+ "scope": "render:render",
1639
2662
  "query": [],
1640
2663
  "input": "json",
1641
2664
  "response": "json",
@@ -1654,7 +2677,7 @@ exports.operations = [
1654
2677
  "description": "Test a destination now",
1655
2678
  "method": "POST",
1656
2679
  "path": "/v1/destinations/{id}/test",
1657
- "scope": "renderwolf:destinations",
2680
+ "scope": "render:destinations",
1658
2681
  "query": [],
1659
2682
  "input": "none",
1660
2683
  "response": "json"
@@ -1666,7 +2689,7 @@ exports.operations = [
1666
2689
  "description": "Rename or enable a destination",
1667
2690
  "method": "PATCH",
1668
2691
  "path": "/v1/destinations/{id}",
1669
- "scope": "renderwolf:destinations",
2692
+ "scope": "render:destinations",
1670
2693
  "query": [],
1671
2694
  "input": "json",
1672
2695
  "response": "json",
@@ -1679,7 +2702,7 @@ exports.operations = [
1679
2702
  "description": "Replace a template",
1680
2703
  "method": "PUT",
1681
2704
  "path": "/v1/templates/{id}",
1682
- "scope": "renderwolf:templates:write",
2705
+ "scope": "render:templates:write",
1683
2706
  "query": [],
1684
2707
  "input": "json",
1685
2708
  "response": "json",
@@ -1690,6 +2713,665 @@ exports.operations = [
1690
2713
  "height": 630
1691
2714
  }
1692
2715
  },
2716
+ {
2717
+ "product": "rig",
2718
+ "id": "addFault",
2719
+ "name": "Add Fault",
2720
+ "description": "Arm a fault",
2721
+ "method": "POST",
2722
+ "path": "/v1/runs/{runId}/faults",
2723
+ "scope": "rig:run",
2724
+ "query": [],
2725
+ "input": "json",
2726
+ "response": "json",
2727
+ "example": {
2728
+ "type": "delay",
2729
+ "resource": "order_webhook",
2730
+ "delay": "5s"
2731
+ }
2732
+ },
2733
+ {
2734
+ "product": "rig",
2735
+ "id": "cancelRun",
2736
+ "name": "Cancel Run",
2737
+ "description": "Cancel a run",
2738
+ "method": "POST",
2739
+ "path": "/v1/runs/{runId}/cancel",
2740
+ "scope": "rig:run",
2741
+ "query": [],
2742
+ "input": "json",
2743
+ "response": "json",
2744
+ "example": {
2745
+ "reason": "Cancelled from n8n"
2746
+ }
2747
+ },
2748
+ {
2749
+ "product": "rig",
2750
+ "id": "createConnector",
2751
+ "name": "Create Connector",
2752
+ "description": "Mint a connector and its bootstrap token",
2753
+ "method": "POST",
2754
+ "path": "/v1/runs/{runId}/connectors",
2755
+ "scope": "rig:connector",
2756
+ "query": [],
2757
+ "input": "json",
2758
+ "response": "json",
2759
+ "example": {
2760
+ "name": "n8n"
2761
+ }
2762
+ },
2763
+ {
2764
+ "product": "rig",
2765
+ "id": "createProject",
2766
+ "name": "Create Project",
2767
+ "description": "Create a project",
2768
+ "method": "POST",
2769
+ "path": "/v1/projects",
2770
+ "scope": "rig:write",
2771
+ "query": [],
2772
+ "input": "json",
2773
+ "response": "json",
2774
+ "example": {
2775
+ "slug": "ironfang-platform",
2776
+ "name": "Ironfang Platform"
2777
+ }
2778
+ },
2779
+ {
2780
+ "product": "rig",
2781
+ "id": "createResource",
2782
+ "name": "Create Resource",
2783
+ "description": "Allocate a resource",
2784
+ "method": "POST",
2785
+ "path": "/v1/runs/{runId}/resources",
2786
+ "scope": "rig:run",
2787
+ "query": [],
2788
+ "input": "json",
2789
+ "response": "json",
2790
+ "example": {
2791
+ "name": "order_webhook",
2792
+ "type": "callback"
2793
+ }
2794
+ },
2795
+ {
2796
+ "product": "rig",
2797
+ "id": "createRun",
2798
+ "name": "Create Run",
2799
+ "description": "Start a run",
2800
+ "method": "POST",
2801
+ "path": "/v1/suites/{suiteId}/runs",
2802
+ "scope": "rig:run",
2803
+ "query": [],
2804
+ "input": "json",
2805
+ "response": "json",
2806
+ "example": {
2807
+ "ttl": "30m",
2808
+ "reason": "n8n workflow run"
2809
+ },
2810
+ "idempotency": true
2811
+ },
2812
+ {
2813
+ "product": "rig",
2814
+ "id": "createRunReceipt",
2815
+ "name": "Create Run Receipt",
2816
+ "description": "A signed receipt for the run",
2817
+ "method": "POST",
2818
+ "path": "/v1/runs/{runId}/receipt",
2819
+ "scope": "rig:read",
2820
+ "query": [],
2821
+ "input": "none",
2822
+ "response": "json"
2823
+ },
2824
+ {
2825
+ "product": "rig",
2826
+ "id": "createSuite",
2827
+ "name": "Create Suite",
2828
+ "description": "Create a suite",
2829
+ "method": "POST",
2830
+ "path": "/v1/suites",
2831
+ "scope": "rig:write",
2832
+ "query": [],
2833
+ "input": "json",
2834
+ "response": "json",
2835
+ "example": {
2836
+ "project_id": "",
2837
+ "slug": "signup",
2838
+ "name": "Signup flow",
2839
+ "definition": {
2840
+ "version": 1,
2841
+ "resources": {
2842
+ "customer_email": {
2843
+ "type": "email"
2844
+ },
2845
+ "stripe_callback": {
2846
+ "type": "callback",
2847
+ "connector": {
2848
+ "route": "stripe"
2849
+ }
2850
+ },
2851
+ "shipping_api": {
2852
+ "type": "mock_http"
2853
+ }
2854
+ }
2855
+ }
2856
+ }
2857
+ },
2858
+ {
2859
+ "product": "rig",
2860
+ "id": "getEventPayload",
2861
+ "name": "Download Event Payload",
2862
+ "description": "Download an event's payload",
2863
+ "method": "GET",
2864
+ "path": "/v1/runs/{runId}/events/{eventId}/payload",
2865
+ "scope": "rig:read",
2866
+ "query": [],
2867
+ "input": "none",
2868
+ "response": "binary"
2869
+ },
2870
+ {
2871
+ "product": "rig",
2872
+ "id": "exportEvidence",
2873
+ "name": "Export Run Evidence",
2874
+ "description": "Export the run's evidence bundle",
2875
+ "method": "POST",
2876
+ "path": "/v1/runs/{runId}/evidence",
2877
+ "scope": "rig:read",
2878
+ "query": [],
2879
+ "input": "none",
2880
+ "response": "binary",
2881
+ "accept": "application/zip"
2882
+ },
2883
+ {
2884
+ "product": "rig",
2885
+ "id": "finishRun",
2886
+ "name": "Finish Run",
2887
+ "description": "Finish a run",
2888
+ "method": "POST",
2889
+ "path": "/v1/runs/{runId}/finish",
2890
+ "scope": "rig:run",
2891
+ "query": [],
2892
+ "input": "json",
2893
+ "response": "json",
2894
+ "example": {
2895
+ "outcome": "pass"
2896
+ }
2897
+ },
2898
+ {
2899
+ "product": "rig",
2900
+ "id": "getEnvironment",
2901
+ "name": "Get Environment",
2902
+ "description": "The hosts, bounds and retention a client builds against",
2903
+ "method": "GET",
2904
+ "path": "/v1/environment",
2905
+ "scope": "rig:read",
2906
+ "query": [],
2907
+ "input": "none",
2908
+ "response": "json"
2909
+ },
2910
+ {
2911
+ "product": "rig",
2912
+ "id": "getEvent",
2913
+ "name": "Get Event",
2914
+ "description": "Get an event",
2915
+ "method": "GET",
2916
+ "path": "/v1/runs/{runId}/events/{eventId}",
2917
+ "scope": "rig:read",
2918
+ "query": [],
2919
+ "input": "none",
2920
+ "response": "json"
2921
+ },
2922
+ {
2923
+ "product": "rig",
2924
+ "id": "getProject",
2925
+ "name": "Get Project",
2926
+ "description": "Get a project",
2927
+ "method": "GET",
2928
+ "path": "/v1/projects/{projectId}",
2929
+ "scope": "rig:read",
2930
+ "query": [],
2931
+ "input": "none",
2932
+ "response": "json"
2933
+ },
2934
+ {
2935
+ "product": "rig",
2936
+ "id": "getRun",
2937
+ "name": "Get Run",
2938
+ "description": "Get a run",
2939
+ "method": "GET",
2940
+ "path": "/v1/runs/{runId}",
2941
+ "scope": "rig:read",
2942
+ "query": [],
2943
+ "input": "none",
2944
+ "response": "json"
2945
+ },
2946
+ {
2947
+ "product": "rig",
2948
+ "id": "getSuite",
2949
+ "name": "Get Suite",
2950
+ "description": "Get a suite",
2951
+ "method": "GET",
2952
+ "path": "/v1/suites/{suiteId}",
2953
+ "scope": "rig:read",
2954
+ "query": [],
2955
+ "input": "none",
2956
+ "response": "json"
2957
+ },
2958
+ {
2959
+ "product": "rig",
2960
+ "id": "holdRun",
2961
+ "name": "Hold Run",
2962
+ "description": "Keep the run from retention until a date",
2963
+ "method": "PUT",
2964
+ "path": "/v1/runs/{runId}/hold",
2965
+ "scope": "rig:run",
2966
+ "query": [],
2967
+ "input": "json",
2968
+ "response": "json",
2969
+ "example": {
2970
+ "until": "2027-01-01T00:00:00Z"
2971
+ }
2972
+ },
2973
+ {
2974
+ "product": "rig",
2975
+ "id": "getProductHome",
2976
+ "name": "Home",
2977
+ "description": "Tenant-scoped setup facts and recent activity for the portal",
2978
+ "method": "GET",
2979
+ "path": "/v1/home",
2980
+ "scope": "rig:read",
2981
+ "query": [],
2982
+ "input": "none",
2983
+ "response": "json"
2984
+ },
2985
+ {
2986
+ "product": "rig",
2987
+ "id": "listConnectors",
2988
+ "name": "List Connectors",
2989
+ "description": "List a run's connectors",
2990
+ "method": "GET",
2991
+ "path": "/v1/runs/{runId}/connectors",
2992
+ "scope": "rig:read",
2993
+ "query": [],
2994
+ "input": "none",
2995
+ "response": "json"
2996
+ },
2997
+ {
2998
+ "product": "rig",
2999
+ "id": "listEvents",
3000
+ "name": "List Events",
3001
+ "description": "Read the timeline",
3002
+ "method": "GET",
3003
+ "path": "/v1/runs/{runId}/events",
3004
+ "scope": "rig:read",
3005
+ "query": [
3006
+ {
3007
+ "name": "since",
3008
+ "label": "Since",
3009
+ "type": "integer",
3010
+ "required": false,
3011
+ "default": 0,
3012
+ "description": "Return events with a sequence greater than this.",
3013
+ "enum": []
3014
+ },
3015
+ {
3016
+ "name": "limit",
3017
+ "label": "Limit",
3018
+ "type": "integer",
3019
+ "required": false,
3020
+ "default": 100,
3021
+ "description": "",
3022
+ "enum": []
3023
+ }
3024
+ ],
3025
+ "input": "none",
3026
+ "response": "json",
3027
+ "pagination": {
3028
+ "key": "events",
3029
+ "parameter": "since",
3030
+ "size": 500,
3031
+ "next": "next_since"
3032
+ }
3033
+ },
3034
+ {
3035
+ "product": "rig",
3036
+ "id": "listEvidenceKeys",
3037
+ "name": "List Evidence Signing Keys",
3038
+ "description": "The keys evidence is signed with",
3039
+ "method": "GET",
3040
+ "path": "/v1/evidence/keys",
3041
+ "scope": "rig:read",
3042
+ "query": [],
3043
+ "input": "none",
3044
+ "response": "json"
3045
+ },
3046
+ {
3047
+ "product": "rig",
3048
+ "id": "listFaults",
3049
+ "name": "List Faults",
3050
+ "description": "List a run's faults",
3051
+ "method": "GET",
3052
+ "path": "/v1/runs/{runId}/faults",
3053
+ "scope": "rig:read",
3054
+ "query": [],
3055
+ "input": "none",
3056
+ "response": "json"
3057
+ },
3058
+ {
3059
+ "product": "rig",
3060
+ "id": "listProjects",
3061
+ "name": "List Projects",
3062
+ "description": "List projects",
3063
+ "method": "GET",
3064
+ "path": "/v1/projects",
3065
+ "scope": "rig:read",
3066
+ "query": [
3067
+ {
3068
+ "name": "cursor",
3069
+ "label": "Cursor",
3070
+ "type": "string",
3071
+ "required": false,
3072
+ "default": "",
3073
+ "description": "The next_cursor of the previous page.",
3074
+ "enum": []
3075
+ },
3076
+ {
3077
+ "name": "limit",
3078
+ "label": "Limit",
3079
+ "type": "integer",
3080
+ "required": false,
3081
+ "default": 50,
3082
+ "description": "",
3083
+ "enum": []
3084
+ }
3085
+ ],
3086
+ "input": "none",
3087
+ "response": "json",
3088
+ "pagination": {
3089
+ "key": "projects",
3090
+ "parameter": "cursor",
3091
+ "size": 100
3092
+ }
3093
+ },
3094
+ {
3095
+ "product": "rig",
3096
+ "id": "listResources",
3097
+ "name": "List Resources",
3098
+ "description": "List a run's resources",
3099
+ "method": "GET",
3100
+ "path": "/v1/runs/{runId}/resources",
3101
+ "scope": "rig:read",
3102
+ "query": [],
3103
+ "input": "none",
3104
+ "response": "json"
3105
+ },
3106
+ {
3107
+ "product": "rig",
3108
+ "id": "listRuns",
3109
+ "name": "List Runs",
3110
+ "description": "List runs",
3111
+ "method": "GET",
3112
+ "path": "/v1/runs",
3113
+ "scope": "rig:read",
3114
+ "query": [
3115
+ {
3116
+ "name": "project",
3117
+ "label": "Project",
3118
+ "type": "string",
3119
+ "required": false,
3120
+ "default": "",
3121
+ "description": "",
3122
+ "enum": []
3123
+ },
3124
+ {
3125
+ "name": "suite",
3126
+ "label": "Suite",
3127
+ "type": "string",
3128
+ "required": false,
3129
+ "default": "",
3130
+ "description": "",
3131
+ "enum": []
3132
+ },
3133
+ {
3134
+ "name": "status",
3135
+ "label": "Status",
3136
+ "type": "string",
3137
+ "required": false,
3138
+ "default": "",
3139
+ "description": "",
3140
+ "enum": [
3141
+ "active",
3142
+ "finished",
3143
+ "cancelled",
3144
+ "expired"
3145
+ ]
3146
+ },
3147
+ {
3148
+ "name": "cursor",
3149
+ "label": "Cursor",
3150
+ "type": "string",
3151
+ "required": false,
3152
+ "default": "",
3153
+ "description": "The next_cursor of the previous page.",
3154
+ "enum": []
3155
+ },
3156
+ {
3157
+ "name": "limit",
3158
+ "label": "Limit",
3159
+ "type": "integer",
3160
+ "required": false,
3161
+ "default": 50,
3162
+ "description": "",
3163
+ "enum": []
3164
+ }
3165
+ ],
3166
+ "input": "none",
3167
+ "response": "json",
3168
+ "pagination": {
3169
+ "key": "runs",
3170
+ "parameter": "cursor",
3171
+ "size": 100
3172
+ }
3173
+ },
3174
+ {
3175
+ "product": "rig",
3176
+ "id": "listSuiteVersions",
3177
+ "name": "List Suite Versions",
3178
+ "description": "List a suite's versions",
3179
+ "method": "GET",
3180
+ "path": "/v1/suites/{suiteId}/versions",
3181
+ "scope": "rig:read",
3182
+ "query": [],
3183
+ "input": "none",
3184
+ "response": "json"
3185
+ },
3186
+ {
3187
+ "product": "rig",
3188
+ "id": "listSuites",
3189
+ "name": "List Suites",
3190
+ "description": "List suites",
3191
+ "method": "GET",
3192
+ "path": "/v1/suites",
3193
+ "scope": "rig:read",
3194
+ "query": [
3195
+ {
3196
+ "name": "project",
3197
+ "label": "Project",
3198
+ "type": "string",
3199
+ "required": false,
3200
+ "default": "",
3201
+ "description": "Limit to one project by id.",
3202
+ "enum": []
3203
+ },
3204
+ {
3205
+ "name": "cursor",
3206
+ "label": "Cursor",
3207
+ "type": "string",
3208
+ "required": false,
3209
+ "default": "",
3210
+ "description": "The next_cursor of the previous page.",
3211
+ "enum": []
3212
+ },
3213
+ {
3214
+ "name": "limit",
3215
+ "label": "Limit",
3216
+ "type": "integer",
3217
+ "required": false,
3218
+ "default": 50,
3219
+ "description": "",
3220
+ "enum": []
3221
+ }
3222
+ ],
3223
+ "input": "none",
3224
+ "response": "json",
3225
+ "pagination": {
3226
+ "key": "suites",
3227
+ "parameter": "cursor",
3228
+ "size": 100
3229
+ }
3230
+ },
3231
+ {
3232
+ "product": "rig",
3233
+ "id": "releaseRun",
3234
+ "name": "Release Run Hold",
3235
+ "description": "Lift a retention hold",
3236
+ "method": "DELETE",
3237
+ "path": "/v1/runs/{runId}/hold",
3238
+ "scope": "rig:run",
3239
+ "query": [],
3240
+ "input": "none",
3241
+ "response": "json"
3242
+ },
3243
+ {
3244
+ "product": "rig",
3245
+ "id": "removeFault",
3246
+ "name": "Remove Fault",
3247
+ "description": "Disarm a fault",
3248
+ "method": "DELETE",
3249
+ "path": "/v1/runs/{runId}/faults/{faultId}",
3250
+ "scope": "rig:run",
3251
+ "query": [],
3252
+ "input": "none",
3253
+ "response": "json"
3254
+ },
3255
+ {
3256
+ "product": "rig",
3257
+ "id": "replayCallback",
3258
+ "name": "Replay Callback",
3259
+ "description": "Replay a recorded callback",
3260
+ "method": "POST",
3261
+ "path": "/v1/runs/{runId}/events/{eventId}/replay",
3262
+ "scope": "rig:run",
3263
+ "query": [],
3264
+ "input": "none",
3265
+ "response": "json"
3266
+ },
3267
+ {
3268
+ "product": "rig",
3269
+ "id": "reviseSuite",
3270
+ "name": "Revise Suite",
3271
+ "description": "Revise a suite",
3272
+ "method": "PUT",
3273
+ "path": "/v1/suites/{suiteId}",
3274
+ "scope": "rig:write",
3275
+ "query": [],
3276
+ "input": "json",
3277
+ "response": "json",
3278
+ "example": {
3279
+ "definition": {
3280
+ "version": 1,
3281
+ "resources": {
3282
+ "customer_email": {
3283
+ "type": "email"
3284
+ },
3285
+ "stripe_callback": {
3286
+ "type": "callback",
3287
+ "connector": {
3288
+ "route": "stripe"
3289
+ }
3290
+ },
3291
+ "shipping_api": {
3292
+ "type": "mock_http"
3293
+ }
3294
+ }
3295
+ }
3296
+ }
3297
+ },
3298
+ {
3299
+ "product": "rig",
3300
+ "id": "setMockRules",
3301
+ "name": "Set Mock Rules",
3302
+ "description": "Replace a mock's rules",
3303
+ "method": "PUT",
3304
+ "path": "/v1/runs/{runId}/resources/{resourceId}/mock",
3305
+ "scope": "rig:run",
3306
+ "query": [],
3307
+ "input": "json",
3308
+ "response": "json",
3309
+ "example": {
3310
+ "rules": [
3311
+ {
3312
+ "match": {
3313
+ "method": "POST",
3314
+ "path": "/v1/ship/{id}"
3315
+ },
3316
+ "respond": {
3317
+ "status": 200,
3318
+ "json": {
3319
+ "ok": true
3320
+ }
3321
+ }
3322
+ }
3323
+ ]
3324
+ }
3325
+ },
3326
+ {
3327
+ "product": "rig",
3328
+ "id": "getUsage",
3329
+ "name": "Usage",
3330
+ "description": "Runs and events in a window",
3331
+ "method": "GET",
3332
+ "path": "/v1/usage",
3333
+ "scope": "rig:read",
3334
+ "query": [
3335
+ {
3336
+ "name": "since",
3337
+ "label": "Since",
3338
+ "type": "string",
3339
+ "required": false,
3340
+ "default": "",
3341
+ "description": "Start of the window, RFC 3339; default the first of the current UTC month.",
3342
+ "enum": []
3343
+ },
3344
+ {
3345
+ "name": "until",
3346
+ "label": "Until",
3347
+ "type": "string",
3348
+ "required": false,
3349
+ "default": "",
3350
+ "description": "End of the window, RFC 3339, exclusive; default now.",
3351
+ "enum": []
3352
+ }
3353
+ ],
3354
+ "input": "none",
3355
+ "response": "json"
3356
+ },
3357
+ {
3358
+ "product": "rig",
3359
+ "id": "waitForEvent",
3360
+ "name": "Wait For Event",
3361
+ "description": "Wait for an event",
3362
+ "method": "POST",
3363
+ "path": "/v1/runs/{runId}/wait",
3364
+ "scope": "rig:read",
3365
+ "query": [],
3366
+ "input": "json",
3367
+ "response": "json",
3368
+ "example": {
3369
+ "type": "callback.received",
3370
+ "resource": "order_webhook",
3371
+ "timeout": "30s"
3372
+ },
3373
+ "timeout": 100000
3374
+ },
1693
3375
  {
1694
3376
  "product": "tools",
1695
3377
  "id": "convertImage",