@voyant-travel/openapi 0.2.6 → 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.
Files changed (41) hide show
  1. package/package.json +8 -5
  2. package/spec/admin/accommodations.json +1443 -0
  3. package/spec/admin/action-ledger.json +6285 -0
  4. package/spec/admin/booking-requirements.json +5975 -0
  5. package/spec/admin/bookings.json +19276 -0
  6. package/spec/admin/catalog.json +703 -0
  7. package/spec/admin/distribution.json +20434 -0
  8. package/spec/admin/external-refs.json +1437 -0
  9. package/spec/admin/extras.json +4787 -0
  10. package/spec/admin/finance.json +36583 -0
  11. package/spec/admin/identity.json +4141 -0
  12. package/spec/admin/legal.json +14821 -0
  13. package/spec/admin/markets.json +5551 -0
  14. package/spec/admin/notifications.json +8667 -0
  15. package/spec/admin/operations.json +41627 -0
  16. package/spec/admin/operator-settings.json +1451 -0
  17. package/spec/admin/pricing.json +11136 -0
  18. package/spec/admin/products.json +23257 -0
  19. package/spec/admin/promotions.json +2778 -0
  20. package/spec/admin/quotes.json +7333 -0
  21. package/spec/admin/relationships.json +14512 -0
  22. package/spec/admin/sellability.json +5056 -0
  23. package/spec/admin/storefront.json +1973 -0
  24. package/spec/admin/suppliers.json +6094 -0
  25. package/spec/admin/trips.json +9531 -0
  26. package/spec/framework-admin.json +12715 -1375
  27. package/spec/framework-openapi.json +13731 -1482
  28. package/spec/framework-storefront.json +1022 -107
  29. package/spec/storefront/booking-requirements.json +380 -0
  30. package/spec/storefront/bookings.json +6213 -0
  31. package/spec/storefront/catalog.json +703 -0
  32. package/spec/storefront/customer-portal.json +6177 -0
  33. package/spec/storefront/finance.json +4914 -0
  34. package/spec/storefront/legal.json +2165 -0
  35. package/spec/storefront/markets.json +269 -0
  36. package/spec/storefront/operator-settings.json +329 -0
  37. package/spec/storefront/pricing.json +598 -0
  38. package/spec/storefront/products.json +2965 -0
  39. package/spec/storefront/storefront-verification.json +943 -0
  40. package/spec/storefront/storefront.json +4157 -0
  41. package/spec/storefront/trips.json +9531 -0
@@ -0,0 +1,4787 @@
1
+ {
2
+ "openapi": "3.1.0",
3
+ "info": {
4
+ "title": "Voyant Framework API",
5
+ "version": "0.0.0",
6
+ "description": "Generated from the Voyant framework's standard module composition. Do not edit by hand."
7
+ },
8
+ "servers": [
9
+ {
10
+ "url": "/",
11
+ "description": "This deployment (same origin)"
12
+ }
13
+ ],
14
+ "components": {
15
+ "schemas": {
16
+ "CatalogSearchFilter": {
17
+ "anyOf": [
18
+ {
19
+ "type": "object",
20
+ "properties": {
21
+ "kind": {
22
+ "type": "string",
23
+ "enum": [
24
+ "eq"
25
+ ]
26
+ },
27
+ "field": {
28
+ "type": "string",
29
+ "minLength": 1
30
+ },
31
+ "value": {
32
+ "anyOf": [
33
+ {
34
+ "type": "string"
35
+ },
36
+ {
37
+ "type": "number"
38
+ },
39
+ {
40
+ "type": "boolean"
41
+ }
42
+ ]
43
+ }
44
+ },
45
+ "required": [
46
+ "kind",
47
+ "field",
48
+ "value"
49
+ ]
50
+ },
51
+ {
52
+ "type": "object",
53
+ "properties": {
54
+ "kind": {
55
+ "type": "string",
56
+ "enum": [
57
+ "in"
58
+ ]
59
+ },
60
+ "field": {
61
+ "type": "string",
62
+ "minLength": 1
63
+ },
64
+ "values": {
65
+ "type": "array",
66
+ "items": {
67
+ "anyOf": [
68
+ {
69
+ "type": "string"
70
+ },
71
+ {
72
+ "type": "number"
73
+ }
74
+ ]
75
+ }
76
+ }
77
+ },
78
+ "required": [
79
+ "kind",
80
+ "field",
81
+ "values"
82
+ ]
83
+ },
84
+ {
85
+ "type": "object",
86
+ "properties": {
87
+ "kind": {
88
+ "type": "string",
89
+ "enum": [
90
+ "range"
91
+ ]
92
+ },
93
+ "field": {
94
+ "type": "string",
95
+ "minLength": 1
96
+ },
97
+ "gte": {
98
+ "type": "number"
99
+ },
100
+ "lte": {
101
+ "type": "number"
102
+ }
103
+ },
104
+ "required": [
105
+ "kind",
106
+ "field"
107
+ ]
108
+ },
109
+ {
110
+ "type": "object",
111
+ "properties": {
112
+ "kind": {
113
+ "type": "string",
114
+ "enum": [
115
+ "and"
116
+ ]
117
+ },
118
+ "clauses": {
119
+ "type": "array",
120
+ "items": {
121
+ "$ref": "#/components/schemas/CatalogSearchFilter"
122
+ }
123
+ }
124
+ },
125
+ "required": [
126
+ "kind",
127
+ "clauses"
128
+ ]
129
+ },
130
+ {
131
+ "type": "object",
132
+ "properties": {
133
+ "kind": {
134
+ "type": "string",
135
+ "enum": [
136
+ "or"
137
+ ]
138
+ },
139
+ "clauses": {
140
+ "type": "array",
141
+ "items": {
142
+ "$ref": "#/components/schemas/CatalogSearchFilter"
143
+ }
144
+ }
145
+ },
146
+ "required": [
147
+ "kind",
148
+ "clauses"
149
+ ]
150
+ }
151
+ ]
152
+ }
153
+ },
154
+ "parameters": {}
155
+ },
156
+ "paths": {
157
+ "/v1/admin/extras/product-extras": {
158
+ "get": {
159
+ "parameters": [
160
+ {
161
+ "schema": {
162
+ "type": "integer",
163
+ "minimum": 1,
164
+ "maximum": 200,
165
+ "default": 50
166
+ },
167
+ "required": false,
168
+ "name": "limit",
169
+ "in": "query"
170
+ },
171
+ {
172
+ "schema": {
173
+ "type": [
174
+ "integer",
175
+ "null"
176
+ ],
177
+ "minimum": 0,
178
+ "default": 0
179
+ },
180
+ "required": false,
181
+ "name": "offset",
182
+ "in": "query"
183
+ },
184
+ {
185
+ "schema": {
186
+ "type": "string"
187
+ },
188
+ "required": false,
189
+ "name": "productId",
190
+ "in": "query"
191
+ },
192
+ {
193
+ "schema": {
194
+ "type": "string"
195
+ },
196
+ "required": false,
197
+ "name": "supplierId",
198
+ "in": "query"
199
+ },
200
+ {
201
+ "schema": {
202
+ "type": "string",
203
+ "enum": [
204
+ "0",
205
+ "1",
206
+ "true",
207
+ "false"
208
+ ]
209
+ },
210
+ "required": false,
211
+ "name": "active",
212
+ "in": "query"
213
+ },
214
+ {
215
+ "schema": {
216
+ "type": "string"
217
+ },
218
+ "required": false,
219
+ "name": "search",
220
+ "in": "query"
221
+ }
222
+ ],
223
+ "responses": {
224
+ "200": {
225
+ "description": "Paginated product extras",
226
+ "content": {
227
+ "application/json": {
228
+ "schema": {
229
+ "type": "object",
230
+ "properties": {
231
+ "data": {
232
+ "type": "array",
233
+ "items": {
234
+ "type": "object",
235
+ "properties": {
236
+ "id": {
237
+ "type": "string"
238
+ },
239
+ "productId": {
240
+ "type": "string"
241
+ },
242
+ "supplierId": {
243
+ "type": [
244
+ "string",
245
+ "null"
246
+ ]
247
+ },
248
+ "code": {
249
+ "type": [
250
+ "string",
251
+ "null"
252
+ ]
253
+ },
254
+ "name": {
255
+ "type": "string"
256
+ },
257
+ "description": {
258
+ "type": [
259
+ "string",
260
+ "null"
261
+ ]
262
+ },
263
+ "selectionType": {
264
+ "type": "string",
265
+ "enum": [
266
+ "optional",
267
+ "required",
268
+ "default_selected",
269
+ "unavailable"
270
+ ]
271
+ },
272
+ "pricingMode": {
273
+ "type": "string",
274
+ "enum": [
275
+ "included",
276
+ "per_person",
277
+ "per_booking",
278
+ "quantity_based",
279
+ "on_request",
280
+ "free"
281
+ ]
282
+ },
283
+ "pricedPerPerson": {
284
+ "type": "boolean"
285
+ },
286
+ "collectionMode": {
287
+ "type": "string",
288
+ "enum": [
289
+ "booking_total",
290
+ "cash_on_trip",
291
+ "external",
292
+ "included",
293
+ "none"
294
+ ]
295
+ },
296
+ "showOnSlotManifest": {
297
+ "type": "boolean"
298
+ },
299
+ "minQuantity": {
300
+ "type": [
301
+ "integer",
302
+ "null"
303
+ ]
304
+ },
305
+ "maxQuantity": {
306
+ "type": [
307
+ "integer",
308
+ "null"
309
+ ]
310
+ },
311
+ "defaultQuantity": {
312
+ "type": [
313
+ "integer",
314
+ "null"
315
+ ]
316
+ },
317
+ "active": {
318
+ "type": "boolean"
319
+ },
320
+ "sortOrder": {
321
+ "type": "integer"
322
+ },
323
+ "metadata": {
324
+ "type": [
325
+ "object",
326
+ "null"
327
+ ],
328
+ "additionalProperties": {}
329
+ },
330
+ "createdAt": {
331
+ "type": "string"
332
+ },
333
+ "updatedAt": {
334
+ "type": "string"
335
+ }
336
+ },
337
+ "required": [
338
+ "id",
339
+ "productId",
340
+ "supplierId",
341
+ "code",
342
+ "name",
343
+ "description",
344
+ "selectionType",
345
+ "pricingMode",
346
+ "pricedPerPerson",
347
+ "collectionMode",
348
+ "showOnSlotManifest",
349
+ "minQuantity",
350
+ "maxQuantity",
351
+ "defaultQuantity",
352
+ "active",
353
+ "sortOrder",
354
+ "metadata",
355
+ "createdAt",
356
+ "updatedAt"
357
+ ]
358
+ }
359
+ },
360
+ "total": {
361
+ "type": "integer"
362
+ },
363
+ "limit": {
364
+ "type": "integer"
365
+ },
366
+ "offset": {
367
+ "type": "integer"
368
+ }
369
+ },
370
+ "required": [
371
+ "data",
372
+ "total",
373
+ "limit",
374
+ "offset"
375
+ ]
376
+ }
377
+ }
378
+ }
379
+ },
380
+ "400": {
381
+ "description": "invalid_request — request input failed validation",
382
+ "content": {
383
+ "application/json": {
384
+ "schema": {
385
+ "type": "object",
386
+ "properties": {
387
+ "error": {
388
+ "type": "string"
389
+ }
390
+ },
391
+ "required": [
392
+ "error"
393
+ ]
394
+ }
395
+ }
396
+ }
397
+ }
398
+ },
399
+ "operationId": "getAdminExtrasProductExtras",
400
+ "summary": "GET /v1/admin/extras/product-extras",
401
+ "tags": [
402
+ "extras"
403
+ ],
404
+ "x-voyant-module": "extras",
405
+ "x-voyant-surface": "admin"
406
+ },
407
+ "post": {
408
+ "requestBody": {
409
+ "required": true,
410
+ "description": "Product extra",
411
+ "content": {
412
+ "application/json": {
413
+ "schema": {
414
+ "type": "object",
415
+ "properties": {
416
+ "productId": {
417
+ "type": "string"
418
+ },
419
+ "supplierId": {
420
+ "type": [
421
+ "string",
422
+ "null"
423
+ ]
424
+ },
425
+ "code": {
426
+ "type": [
427
+ "string",
428
+ "null"
429
+ ],
430
+ "maxLength": 100
431
+ },
432
+ "name": {
433
+ "type": "string",
434
+ "minLength": 1,
435
+ "maxLength": 255
436
+ },
437
+ "description": {
438
+ "type": [
439
+ "string",
440
+ "null"
441
+ ]
442
+ },
443
+ "selectionType": {
444
+ "type": "string",
445
+ "enum": [
446
+ "optional",
447
+ "required",
448
+ "default_selected",
449
+ "unavailable"
450
+ ],
451
+ "default": "optional"
452
+ },
453
+ "pricingMode": {
454
+ "type": "string",
455
+ "enum": [
456
+ "included",
457
+ "per_person",
458
+ "per_booking",
459
+ "quantity_based",
460
+ "on_request",
461
+ "free"
462
+ ],
463
+ "default": "per_booking"
464
+ },
465
+ "pricedPerPerson": {
466
+ "type": "boolean",
467
+ "default": false
468
+ },
469
+ "collectionMode": {
470
+ "type": "string",
471
+ "enum": [
472
+ "booking_total",
473
+ "cash_on_trip",
474
+ "external",
475
+ "included",
476
+ "none"
477
+ ],
478
+ "default": "booking_total"
479
+ },
480
+ "showOnSlotManifest": {
481
+ "type": "boolean",
482
+ "default": true
483
+ },
484
+ "minQuantity": {
485
+ "type": [
486
+ "integer",
487
+ "null"
488
+ ],
489
+ "minimum": 0
490
+ },
491
+ "maxQuantity": {
492
+ "type": [
493
+ "integer",
494
+ "null"
495
+ ],
496
+ "minimum": 0
497
+ },
498
+ "defaultQuantity": {
499
+ "type": [
500
+ "integer",
501
+ "null"
502
+ ],
503
+ "minimum": 0
504
+ },
505
+ "active": {
506
+ "type": "boolean",
507
+ "default": true
508
+ },
509
+ "sortOrder": {
510
+ "type": "integer",
511
+ "default": 0
512
+ },
513
+ "metadata": {
514
+ "type": [
515
+ "object",
516
+ "null"
517
+ ],
518
+ "additionalProperties": {}
519
+ }
520
+ },
521
+ "required": [
522
+ "productId",
523
+ "name"
524
+ ]
525
+ }
526
+ }
527
+ }
528
+ },
529
+ "responses": {
530
+ "201": {
531
+ "description": "The created product extra",
532
+ "content": {
533
+ "application/json": {
534
+ "schema": {
535
+ "type": "object",
536
+ "properties": {
537
+ "data": {
538
+ "type": "object",
539
+ "properties": {
540
+ "id": {
541
+ "type": "string"
542
+ },
543
+ "productId": {
544
+ "type": "string"
545
+ },
546
+ "supplierId": {
547
+ "type": [
548
+ "string",
549
+ "null"
550
+ ]
551
+ },
552
+ "code": {
553
+ "type": [
554
+ "string",
555
+ "null"
556
+ ]
557
+ },
558
+ "name": {
559
+ "type": "string"
560
+ },
561
+ "description": {
562
+ "type": [
563
+ "string",
564
+ "null"
565
+ ]
566
+ },
567
+ "selectionType": {
568
+ "type": "string",
569
+ "enum": [
570
+ "optional",
571
+ "required",
572
+ "default_selected",
573
+ "unavailable"
574
+ ]
575
+ },
576
+ "pricingMode": {
577
+ "type": "string",
578
+ "enum": [
579
+ "included",
580
+ "per_person",
581
+ "per_booking",
582
+ "quantity_based",
583
+ "on_request",
584
+ "free"
585
+ ]
586
+ },
587
+ "pricedPerPerson": {
588
+ "type": "boolean"
589
+ },
590
+ "collectionMode": {
591
+ "type": "string",
592
+ "enum": [
593
+ "booking_total",
594
+ "cash_on_trip",
595
+ "external",
596
+ "included",
597
+ "none"
598
+ ]
599
+ },
600
+ "showOnSlotManifest": {
601
+ "type": "boolean"
602
+ },
603
+ "minQuantity": {
604
+ "type": [
605
+ "integer",
606
+ "null"
607
+ ]
608
+ },
609
+ "maxQuantity": {
610
+ "type": [
611
+ "integer",
612
+ "null"
613
+ ]
614
+ },
615
+ "defaultQuantity": {
616
+ "type": [
617
+ "integer",
618
+ "null"
619
+ ]
620
+ },
621
+ "active": {
622
+ "type": "boolean"
623
+ },
624
+ "sortOrder": {
625
+ "type": "integer"
626
+ },
627
+ "metadata": {
628
+ "type": [
629
+ "object",
630
+ "null"
631
+ ],
632
+ "additionalProperties": {}
633
+ },
634
+ "createdAt": {
635
+ "type": "string"
636
+ },
637
+ "updatedAt": {
638
+ "type": "string"
639
+ }
640
+ },
641
+ "required": [
642
+ "id",
643
+ "productId",
644
+ "supplierId",
645
+ "code",
646
+ "name",
647
+ "description",
648
+ "selectionType",
649
+ "pricingMode",
650
+ "pricedPerPerson",
651
+ "collectionMode",
652
+ "showOnSlotManifest",
653
+ "minQuantity",
654
+ "maxQuantity",
655
+ "defaultQuantity",
656
+ "active",
657
+ "sortOrder",
658
+ "metadata",
659
+ "createdAt",
660
+ "updatedAt"
661
+ ]
662
+ }
663
+ },
664
+ "required": [
665
+ "data"
666
+ ]
667
+ }
668
+ }
669
+ }
670
+ },
671
+ "400": {
672
+ "description": "invalid_request — request input failed validation",
673
+ "content": {
674
+ "application/json": {
675
+ "schema": {
676
+ "type": "object",
677
+ "properties": {
678
+ "error": {
679
+ "type": "string"
680
+ }
681
+ },
682
+ "required": [
683
+ "error"
684
+ ]
685
+ }
686
+ }
687
+ }
688
+ }
689
+ },
690
+ "operationId": "postAdminExtrasProductExtras",
691
+ "summary": "POST /v1/admin/extras/product-extras",
692
+ "tags": [
693
+ "extras"
694
+ ],
695
+ "x-voyant-module": "extras",
696
+ "x-voyant-surface": "admin"
697
+ }
698
+ },
699
+ "/v1/admin/extras/product-extras/{id}": {
700
+ "get": {
701
+ "parameters": [
702
+ {
703
+ "schema": {
704
+ "type": "string"
705
+ },
706
+ "required": true,
707
+ "name": "id",
708
+ "in": "path"
709
+ }
710
+ ],
711
+ "responses": {
712
+ "200": {
713
+ "description": "A product extra by id",
714
+ "content": {
715
+ "application/json": {
716
+ "schema": {
717
+ "type": "object",
718
+ "properties": {
719
+ "data": {
720
+ "type": "object",
721
+ "properties": {
722
+ "id": {
723
+ "type": "string"
724
+ },
725
+ "productId": {
726
+ "type": "string"
727
+ },
728
+ "supplierId": {
729
+ "type": [
730
+ "string",
731
+ "null"
732
+ ]
733
+ },
734
+ "code": {
735
+ "type": [
736
+ "string",
737
+ "null"
738
+ ]
739
+ },
740
+ "name": {
741
+ "type": "string"
742
+ },
743
+ "description": {
744
+ "type": [
745
+ "string",
746
+ "null"
747
+ ]
748
+ },
749
+ "selectionType": {
750
+ "type": "string",
751
+ "enum": [
752
+ "optional",
753
+ "required",
754
+ "default_selected",
755
+ "unavailable"
756
+ ]
757
+ },
758
+ "pricingMode": {
759
+ "type": "string",
760
+ "enum": [
761
+ "included",
762
+ "per_person",
763
+ "per_booking",
764
+ "quantity_based",
765
+ "on_request",
766
+ "free"
767
+ ]
768
+ },
769
+ "pricedPerPerson": {
770
+ "type": "boolean"
771
+ },
772
+ "collectionMode": {
773
+ "type": "string",
774
+ "enum": [
775
+ "booking_total",
776
+ "cash_on_trip",
777
+ "external",
778
+ "included",
779
+ "none"
780
+ ]
781
+ },
782
+ "showOnSlotManifest": {
783
+ "type": "boolean"
784
+ },
785
+ "minQuantity": {
786
+ "type": [
787
+ "integer",
788
+ "null"
789
+ ]
790
+ },
791
+ "maxQuantity": {
792
+ "type": [
793
+ "integer",
794
+ "null"
795
+ ]
796
+ },
797
+ "defaultQuantity": {
798
+ "type": [
799
+ "integer",
800
+ "null"
801
+ ]
802
+ },
803
+ "active": {
804
+ "type": "boolean"
805
+ },
806
+ "sortOrder": {
807
+ "type": "integer"
808
+ },
809
+ "metadata": {
810
+ "type": [
811
+ "object",
812
+ "null"
813
+ ],
814
+ "additionalProperties": {}
815
+ },
816
+ "createdAt": {
817
+ "type": "string"
818
+ },
819
+ "updatedAt": {
820
+ "type": "string"
821
+ }
822
+ },
823
+ "required": [
824
+ "id",
825
+ "productId",
826
+ "supplierId",
827
+ "code",
828
+ "name",
829
+ "description",
830
+ "selectionType",
831
+ "pricingMode",
832
+ "pricedPerPerson",
833
+ "collectionMode",
834
+ "showOnSlotManifest",
835
+ "minQuantity",
836
+ "maxQuantity",
837
+ "defaultQuantity",
838
+ "active",
839
+ "sortOrder",
840
+ "metadata",
841
+ "createdAt",
842
+ "updatedAt"
843
+ ]
844
+ }
845
+ },
846
+ "required": [
847
+ "data"
848
+ ]
849
+ }
850
+ }
851
+ }
852
+ },
853
+ "404": {
854
+ "description": "Product extra not found",
855
+ "content": {
856
+ "application/json": {
857
+ "schema": {
858
+ "type": "object",
859
+ "properties": {
860
+ "error": {
861
+ "type": "string"
862
+ }
863
+ },
864
+ "required": [
865
+ "error"
866
+ ]
867
+ }
868
+ }
869
+ }
870
+ }
871
+ },
872
+ "operationId": "getAdminExtrasProductExtrasById",
873
+ "summary": "GET /v1/admin/extras/product-extras/{id}",
874
+ "tags": [
875
+ "extras"
876
+ ],
877
+ "x-voyant-module": "extras",
878
+ "x-voyant-surface": "admin"
879
+ },
880
+ "patch": {
881
+ "parameters": [
882
+ {
883
+ "schema": {
884
+ "type": "string"
885
+ },
886
+ "required": true,
887
+ "name": "id",
888
+ "in": "path"
889
+ }
890
+ ],
891
+ "requestBody": {
892
+ "required": false,
893
+ "description": "Partial product extra update",
894
+ "content": {
895
+ "application/json": {
896
+ "schema": {
897
+ "type": "object",
898
+ "properties": {
899
+ "productId": {
900
+ "type": "string"
901
+ },
902
+ "supplierId": {
903
+ "type": [
904
+ "string",
905
+ "null"
906
+ ]
907
+ },
908
+ "code": {
909
+ "type": [
910
+ "string",
911
+ "null"
912
+ ],
913
+ "maxLength": 100
914
+ },
915
+ "name": {
916
+ "type": "string",
917
+ "minLength": 1,
918
+ "maxLength": 255
919
+ },
920
+ "description": {
921
+ "type": [
922
+ "string",
923
+ "null"
924
+ ]
925
+ },
926
+ "selectionType": {
927
+ "type": "string",
928
+ "enum": [
929
+ "optional",
930
+ "required",
931
+ "default_selected",
932
+ "unavailable"
933
+ ],
934
+ "default": "optional"
935
+ },
936
+ "pricingMode": {
937
+ "type": "string",
938
+ "enum": [
939
+ "included",
940
+ "per_person",
941
+ "per_booking",
942
+ "quantity_based",
943
+ "on_request",
944
+ "free"
945
+ ],
946
+ "default": "per_booking"
947
+ },
948
+ "pricedPerPerson": {
949
+ "type": "boolean",
950
+ "default": false
951
+ },
952
+ "collectionMode": {
953
+ "type": "string",
954
+ "enum": [
955
+ "booking_total",
956
+ "cash_on_trip",
957
+ "external",
958
+ "included",
959
+ "none"
960
+ ],
961
+ "default": "booking_total"
962
+ },
963
+ "showOnSlotManifest": {
964
+ "type": "boolean",
965
+ "default": true
966
+ },
967
+ "minQuantity": {
968
+ "type": [
969
+ "integer",
970
+ "null"
971
+ ],
972
+ "minimum": 0
973
+ },
974
+ "maxQuantity": {
975
+ "type": [
976
+ "integer",
977
+ "null"
978
+ ],
979
+ "minimum": 0
980
+ },
981
+ "defaultQuantity": {
982
+ "type": [
983
+ "integer",
984
+ "null"
985
+ ],
986
+ "minimum": 0
987
+ },
988
+ "active": {
989
+ "type": "boolean",
990
+ "default": true
991
+ },
992
+ "sortOrder": {
993
+ "type": "integer",
994
+ "default": 0
995
+ },
996
+ "metadata": {
997
+ "type": [
998
+ "object",
999
+ "null"
1000
+ ],
1001
+ "additionalProperties": {}
1002
+ }
1003
+ }
1004
+ }
1005
+ }
1006
+ }
1007
+ },
1008
+ "responses": {
1009
+ "200": {
1010
+ "description": "The updated product extra",
1011
+ "content": {
1012
+ "application/json": {
1013
+ "schema": {
1014
+ "type": "object",
1015
+ "properties": {
1016
+ "data": {
1017
+ "type": "object",
1018
+ "properties": {
1019
+ "id": {
1020
+ "type": "string"
1021
+ },
1022
+ "productId": {
1023
+ "type": "string"
1024
+ },
1025
+ "supplierId": {
1026
+ "type": [
1027
+ "string",
1028
+ "null"
1029
+ ]
1030
+ },
1031
+ "code": {
1032
+ "type": [
1033
+ "string",
1034
+ "null"
1035
+ ]
1036
+ },
1037
+ "name": {
1038
+ "type": "string"
1039
+ },
1040
+ "description": {
1041
+ "type": [
1042
+ "string",
1043
+ "null"
1044
+ ]
1045
+ },
1046
+ "selectionType": {
1047
+ "type": "string",
1048
+ "enum": [
1049
+ "optional",
1050
+ "required",
1051
+ "default_selected",
1052
+ "unavailable"
1053
+ ]
1054
+ },
1055
+ "pricingMode": {
1056
+ "type": "string",
1057
+ "enum": [
1058
+ "included",
1059
+ "per_person",
1060
+ "per_booking",
1061
+ "quantity_based",
1062
+ "on_request",
1063
+ "free"
1064
+ ]
1065
+ },
1066
+ "pricedPerPerson": {
1067
+ "type": "boolean"
1068
+ },
1069
+ "collectionMode": {
1070
+ "type": "string",
1071
+ "enum": [
1072
+ "booking_total",
1073
+ "cash_on_trip",
1074
+ "external",
1075
+ "included",
1076
+ "none"
1077
+ ]
1078
+ },
1079
+ "showOnSlotManifest": {
1080
+ "type": "boolean"
1081
+ },
1082
+ "minQuantity": {
1083
+ "type": [
1084
+ "integer",
1085
+ "null"
1086
+ ]
1087
+ },
1088
+ "maxQuantity": {
1089
+ "type": [
1090
+ "integer",
1091
+ "null"
1092
+ ]
1093
+ },
1094
+ "defaultQuantity": {
1095
+ "type": [
1096
+ "integer",
1097
+ "null"
1098
+ ]
1099
+ },
1100
+ "active": {
1101
+ "type": "boolean"
1102
+ },
1103
+ "sortOrder": {
1104
+ "type": "integer"
1105
+ },
1106
+ "metadata": {
1107
+ "type": [
1108
+ "object",
1109
+ "null"
1110
+ ],
1111
+ "additionalProperties": {}
1112
+ },
1113
+ "createdAt": {
1114
+ "type": "string"
1115
+ },
1116
+ "updatedAt": {
1117
+ "type": "string"
1118
+ }
1119
+ },
1120
+ "required": [
1121
+ "id",
1122
+ "productId",
1123
+ "supplierId",
1124
+ "code",
1125
+ "name",
1126
+ "description",
1127
+ "selectionType",
1128
+ "pricingMode",
1129
+ "pricedPerPerson",
1130
+ "collectionMode",
1131
+ "showOnSlotManifest",
1132
+ "minQuantity",
1133
+ "maxQuantity",
1134
+ "defaultQuantity",
1135
+ "active",
1136
+ "sortOrder",
1137
+ "metadata",
1138
+ "createdAt",
1139
+ "updatedAt"
1140
+ ]
1141
+ }
1142
+ },
1143
+ "required": [
1144
+ "data"
1145
+ ]
1146
+ }
1147
+ }
1148
+ }
1149
+ },
1150
+ "400": {
1151
+ "description": "invalid_request — request input failed validation",
1152
+ "content": {
1153
+ "application/json": {
1154
+ "schema": {
1155
+ "type": "object",
1156
+ "properties": {
1157
+ "error": {
1158
+ "type": "string"
1159
+ }
1160
+ },
1161
+ "required": [
1162
+ "error"
1163
+ ]
1164
+ }
1165
+ }
1166
+ }
1167
+ },
1168
+ "404": {
1169
+ "description": "Product extra not found",
1170
+ "content": {
1171
+ "application/json": {
1172
+ "schema": {
1173
+ "type": "object",
1174
+ "properties": {
1175
+ "error": {
1176
+ "type": "string"
1177
+ }
1178
+ },
1179
+ "required": [
1180
+ "error"
1181
+ ]
1182
+ }
1183
+ }
1184
+ }
1185
+ }
1186
+ },
1187
+ "operationId": "patchAdminExtrasProductExtrasById",
1188
+ "summary": "PATCH /v1/admin/extras/product-extras/{id}",
1189
+ "tags": [
1190
+ "extras"
1191
+ ],
1192
+ "x-voyant-module": "extras",
1193
+ "x-voyant-surface": "admin"
1194
+ },
1195
+ "delete": {
1196
+ "parameters": [
1197
+ {
1198
+ "schema": {
1199
+ "type": "string"
1200
+ },
1201
+ "required": true,
1202
+ "name": "id",
1203
+ "in": "path"
1204
+ }
1205
+ ],
1206
+ "responses": {
1207
+ "200": {
1208
+ "description": "The product extra was deleted",
1209
+ "content": {
1210
+ "application/json": {
1211
+ "schema": {
1212
+ "type": "object",
1213
+ "properties": {
1214
+ "success": {
1215
+ "type": "boolean"
1216
+ }
1217
+ },
1218
+ "required": [
1219
+ "success"
1220
+ ]
1221
+ }
1222
+ }
1223
+ }
1224
+ },
1225
+ "404": {
1226
+ "description": "Product extra not found",
1227
+ "content": {
1228
+ "application/json": {
1229
+ "schema": {
1230
+ "type": "object",
1231
+ "properties": {
1232
+ "error": {
1233
+ "type": "string"
1234
+ }
1235
+ },
1236
+ "required": [
1237
+ "error"
1238
+ ]
1239
+ }
1240
+ }
1241
+ }
1242
+ }
1243
+ },
1244
+ "operationId": "deleteAdminExtrasProductExtrasById",
1245
+ "summary": "DELETE /v1/admin/extras/product-extras/{id}",
1246
+ "tags": [
1247
+ "extras"
1248
+ ],
1249
+ "x-voyant-module": "extras",
1250
+ "x-voyant-surface": "admin"
1251
+ }
1252
+ },
1253
+ "/v1/admin/extras/option-extra-configs": {
1254
+ "get": {
1255
+ "parameters": [
1256
+ {
1257
+ "schema": {
1258
+ "type": "integer",
1259
+ "minimum": 1,
1260
+ "maximum": 200,
1261
+ "default": 50
1262
+ },
1263
+ "required": false,
1264
+ "name": "limit",
1265
+ "in": "query"
1266
+ },
1267
+ {
1268
+ "schema": {
1269
+ "type": [
1270
+ "integer",
1271
+ "null"
1272
+ ],
1273
+ "minimum": 0,
1274
+ "default": 0
1275
+ },
1276
+ "required": false,
1277
+ "name": "offset",
1278
+ "in": "query"
1279
+ },
1280
+ {
1281
+ "schema": {
1282
+ "type": "string"
1283
+ },
1284
+ "required": false,
1285
+ "name": "optionId",
1286
+ "in": "query"
1287
+ },
1288
+ {
1289
+ "schema": {
1290
+ "type": "string"
1291
+ },
1292
+ "required": false,
1293
+ "name": "productExtraId",
1294
+ "in": "query"
1295
+ },
1296
+ {
1297
+ "schema": {
1298
+ "type": "string",
1299
+ "enum": [
1300
+ "0",
1301
+ "1",
1302
+ "true",
1303
+ "false"
1304
+ ]
1305
+ },
1306
+ "required": false,
1307
+ "name": "active",
1308
+ "in": "query"
1309
+ }
1310
+ ],
1311
+ "responses": {
1312
+ "200": {
1313
+ "description": "Paginated option extra configs",
1314
+ "content": {
1315
+ "application/json": {
1316
+ "schema": {
1317
+ "type": "object",
1318
+ "properties": {
1319
+ "data": {
1320
+ "type": "array",
1321
+ "items": {
1322
+ "type": "object",
1323
+ "properties": {
1324
+ "id": {
1325
+ "type": "string"
1326
+ },
1327
+ "optionId": {
1328
+ "type": "string"
1329
+ },
1330
+ "productExtraId": {
1331
+ "type": "string"
1332
+ },
1333
+ "selectionType": {
1334
+ "type": [
1335
+ "string",
1336
+ "null"
1337
+ ],
1338
+ "enum": [
1339
+ "optional",
1340
+ "required",
1341
+ "default_selected",
1342
+ "unavailable",
1343
+ null
1344
+ ]
1345
+ },
1346
+ "pricingMode": {
1347
+ "type": [
1348
+ "string",
1349
+ "null"
1350
+ ],
1351
+ "enum": [
1352
+ "included",
1353
+ "per_person",
1354
+ "per_booking",
1355
+ "quantity_based",
1356
+ "on_request",
1357
+ "free",
1358
+ null
1359
+ ]
1360
+ },
1361
+ "pricedPerPerson": {
1362
+ "type": [
1363
+ "boolean",
1364
+ "null"
1365
+ ]
1366
+ },
1367
+ "minQuantity": {
1368
+ "type": [
1369
+ "integer",
1370
+ "null"
1371
+ ]
1372
+ },
1373
+ "maxQuantity": {
1374
+ "type": [
1375
+ "integer",
1376
+ "null"
1377
+ ]
1378
+ },
1379
+ "defaultQuantity": {
1380
+ "type": [
1381
+ "integer",
1382
+ "null"
1383
+ ]
1384
+ },
1385
+ "isDefault": {
1386
+ "type": "boolean"
1387
+ },
1388
+ "active": {
1389
+ "type": "boolean"
1390
+ },
1391
+ "sortOrder": {
1392
+ "type": "integer"
1393
+ },
1394
+ "notes": {
1395
+ "type": [
1396
+ "string",
1397
+ "null"
1398
+ ]
1399
+ },
1400
+ "metadata": {
1401
+ "type": [
1402
+ "object",
1403
+ "null"
1404
+ ],
1405
+ "additionalProperties": {}
1406
+ },
1407
+ "createdAt": {
1408
+ "type": "string"
1409
+ },
1410
+ "updatedAt": {
1411
+ "type": "string"
1412
+ }
1413
+ },
1414
+ "required": [
1415
+ "id",
1416
+ "optionId",
1417
+ "productExtraId",
1418
+ "selectionType",
1419
+ "pricingMode",
1420
+ "pricedPerPerson",
1421
+ "minQuantity",
1422
+ "maxQuantity",
1423
+ "defaultQuantity",
1424
+ "isDefault",
1425
+ "active",
1426
+ "sortOrder",
1427
+ "notes",
1428
+ "metadata",
1429
+ "createdAt",
1430
+ "updatedAt"
1431
+ ]
1432
+ }
1433
+ },
1434
+ "total": {
1435
+ "type": "integer"
1436
+ },
1437
+ "limit": {
1438
+ "type": "integer"
1439
+ },
1440
+ "offset": {
1441
+ "type": "integer"
1442
+ }
1443
+ },
1444
+ "required": [
1445
+ "data",
1446
+ "total",
1447
+ "limit",
1448
+ "offset"
1449
+ ]
1450
+ }
1451
+ }
1452
+ }
1453
+ },
1454
+ "400": {
1455
+ "description": "invalid_request — request input failed validation",
1456
+ "content": {
1457
+ "application/json": {
1458
+ "schema": {
1459
+ "type": "object",
1460
+ "properties": {
1461
+ "error": {
1462
+ "type": "string"
1463
+ }
1464
+ },
1465
+ "required": [
1466
+ "error"
1467
+ ]
1468
+ }
1469
+ }
1470
+ }
1471
+ }
1472
+ },
1473
+ "operationId": "getAdminExtrasOptionExtraConfigs",
1474
+ "summary": "GET /v1/admin/extras/option-extra-configs",
1475
+ "tags": [
1476
+ "extras"
1477
+ ],
1478
+ "x-voyant-module": "extras",
1479
+ "x-voyant-surface": "admin"
1480
+ },
1481
+ "post": {
1482
+ "requestBody": {
1483
+ "required": true,
1484
+ "description": "Option extra config",
1485
+ "content": {
1486
+ "application/json": {
1487
+ "schema": {
1488
+ "type": "object",
1489
+ "properties": {
1490
+ "optionId": {
1491
+ "type": "string"
1492
+ },
1493
+ "productExtraId": {
1494
+ "type": "string"
1495
+ },
1496
+ "selectionType": {
1497
+ "type": [
1498
+ "string",
1499
+ "null"
1500
+ ],
1501
+ "enum": [
1502
+ "optional",
1503
+ "required",
1504
+ "default_selected",
1505
+ "unavailable",
1506
+ null
1507
+ ]
1508
+ },
1509
+ "pricingMode": {
1510
+ "type": [
1511
+ "string",
1512
+ "null"
1513
+ ],
1514
+ "enum": [
1515
+ "included",
1516
+ "per_person",
1517
+ "per_booking",
1518
+ "quantity_based",
1519
+ "on_request",
1520
+ "free",
1521
+ null
1522
+ ]
1523
+ },
1524
+ "pricedPerPerson": {
1525
+ "type": [
1526
+ "boolean",
1527
+ "null"
1528
+ ]
1529
+ },
1530
+ "minQuantity": {
1531
+ "type": [
1532
+ "integer",
1533
+ "null"
1534
+ ],
1535
+ "minimum": 0
1536
+ },
1537
+ "maxQuantity": {
1538
+ "type": [
1539
+ "integer",
1540
+ "null"
1541
+ ],
1542
+ "minimum": 0
1543
+ },
1544
+ "defaultQuantity": {
1545
+ "type": [
1546
+ "integer",
1547
+ "null"
1548
+ ],
1549
+ "minimum": 0
1550
+ },
1551
+ "isDefault": {
1552
+ "type": "boolean",
1553
+ "default": false
1554
+ },
1555
+ "active": {
1556
+ "type": "boolean",
1557
+ "default": true
1558
+ },
1559
+ "sortOrder": {
1560
+ "type": "integer",
1561
+ "default": 0
1562
+ },
1563
+ "notes": {
1564
+ "type": [
1565
+ "string",
1566
+ "null"
1567
+ ]
1568
+ },
1569
+ "metadata": {
1570
+ "type": [
1571
+ "object",
1572
+ "null"
1573
+ ],
1574
+ "additionalProperties": {}
1575
+ }
1576
+ },
1577
+ "required": [
1578
+ "optionId",
1579
+ "productExtraId"
1580
+ ]
1581
+ }
1582
+ }
1583
+ }
1584
+ },
1585
+ "responses": {
1586
+ "201": {
1587
+ "description": "The created option extra config",
1588
+ "content": {
1589
+ "application/json": {
1590
+ "schema": {
1591
+ "type": "object",
1592
+ "properties": {
1593
+ "data": {
1594
+ "type": "object",
1595
+ "properties": {
1596
+ "id": {
1597
+ "type": "string"
1598
+ },
1599
+ "optionId": {
1600
+ "type": "string"
1601
+ },
1602
+ "productExtraId": {
1603
+ "type": "string"
1604
+ },
1605
+ "selectionType": {
1606
+ "type": [
1607
+ "string",
1608
+ "null"
1609
+ ],
1610
+ "enum": [
1611
+ "optional",
1612
+ "required",
1613
+ "default_selected",
1614
+ "unavailable",
1615
+ null
1616
+ ]
1617
+ },
1618
+ "pricingMode": {
1619
+ "type": [
1620
+ "string",
1621
+ "null"
1622
+ ],
1623
+ "enum": [
1624
+ "included",
1625
+ "per_person",
1626
+ "per_booking",
1627
+ "quantity_based",
1628
+ "on_request",
1629
+ "free",
1630
+ null
1631
+ ]
1632
+ },
1633
+ "pricedPerPerson": {
1634
+ "type": [
1635
+ "boolean",
1636
+ "null"
1637
+ ]
1638
+ },
1639
+ "minQuantity": {
1640
+ "type": [
1641
+ "integer",
1642
+ "null"
1643
+ ]
1644
+ },
1645
+ "maxQuantity": {
1646
+ "type": [
1647
+ "integer",
1648
+ "null"
1649
+ ]
1650
+ },
1651
+ "defaultQuantity": {
1652
+ "type": [
1653
+ "integer",
1654
+ "null"
1655
+ ]
1656
+ },
1657
+ "isDefault": {
1658
+ "type": "boolean"
1659
+ },
1660
+ "active": {
1661
+ "type": "boolean"
1662
+ },
1663
+ "sortOrder": {
1664
+ "type": "integer"
1665
+ },
1666
+ "notes": {
1667
+ "type": [
1668
+ "string",
1669
+ "null"
1670
+ ]
1671
+ },
1672
+ "metadata": {
1673
+ "type": [
1674
+ "object",
1675
+ "null"
1676
+ ],
1677
+ "additionalProperties": {}
1678
+ },
1679
+ "createdAt": {
1680
+ "type": "string"
1681
+ },
1682
+ "updatedAt": {
1683
+ "type": "string"
1684
+ }
1685
+ },
1686
+ "required": [
1687
+ "id",
1688
+ "optionId",
1689
+ "productExtraId",
1690
+ "selectionType",
1691
+ "pricingMode",
1692
+ "pricedPerPerson",
1693
+ "minQuantity",
1694
+ "maxQuantity",
1695
+ "defaultQuantity",
1696
+ "isDefault",
1697
+ "active",
1698
+ "sortOrder",
1699
+ "notes",
1700
+ "metadata",
1701
+ "createdAt",
1702
+ "updatedAt"
1703
+ ]
1704
+ }
1705
+ },
1706
+ "required": [
1707
+ "data"
1708
+ ]
1709
+ }
1710
+ }
1711
+ }
1712
+ },
1713
+ "400": {
1714
+ "description": "invalid_request — request input failed validation",
1715
+ "content": {
1716
+ "application/json": {
1717
+ "schema": {
1718
+ "type": "object",
1719
+ "properties": {
1720
+ "error": {
1721
+ "type": "string"
1722
+ }
1723
+ },
1724
+ "required": [
1725
+ "error"
1726
+ ]
1727
+ }
1728
+ }
1729
+ }
1730
+ }
1731
+ },
1732
+ "operationId": "postAdminExtrasOptionExtraConfigs",
1733
+ "summary": "POST /v1/admin/extras/option-extra-configs",
1734
+ "tags": [
1735
+ "extras"
1736
+ ],
1737
+ "x-voyant-module": "extras",
1738
+ "x-voyant-surface": "admin"
1739
+ }
1740
+ },
1741
+ "/v1/admin/extras/option-extra-configs/{id}": {
1742
+ "get": {
1743
+ "parameters": [
1744
+ {
1745
+ "schema": {
1746
+ "type": "string"
1747
+ },
1748
+ "required": true,
1749
+ "name": "id",
1750
+ "in": "path"
1751
+ }
1752
+ ],
1753
+ "responses": {
1754
+ "200": {
1755
+ "description": "An option extra config by id",
1756
+ "content": {
1757
+ "application/json": {
1758
+ "schema": {
1759
+ "type": "object",
1760
+ "properties": {
1761
+ "data": {
1762
+ "type": "object",
1763
+ "properties": {
1764
+ "id": {
1765
+ "type": "string"
1766
+ },
1767
+ "optionId": {
1768
+ "type": "string"
1769
+ },
1770
+ "productExtraId": {
1771
+ "type": "string"
1772
+ },
1773
+ "selectionType": {
1774
+ "type": [
1775
+ "string",
1776
+ "null"
1777
+ ],
1778
+ "enum": [
1779
+ "optional",
1780
+ "required",
1781
+ "default_selected",
1782
+ "unavailable",
1783
+ null
1784
+ ]
1785
+ },
1786
+ "pricingMode": {
1787
+ "type": [
1788
+ "string",
1789
+ "null"
1790
+ ],
1791
+ "enum": [
1792
+ "included",
1793
+ "per_person",
1794
+ "per_booking",
1795
+ "quantity_based",
1796
+ "on_request",
1797
+ "free",
1798
+ null
1799
+ ]
1800
+ },
1801
+ "pricedPerPerson": {
1802
+ "type": [
1803
+ "boolean",
1804
+ "null"
1805
+ ]
1806
+ },
1807
+ "minQuantity": {
1808
+ "type": [
1809
+ "integer",
1810
+ "null"
1811
+ ]
1812
+ },
1813
+ "maxQuantity": {
1814
+ "type": [
1815
+ "integer",
1816
+ "null"
1817
+ ]
1818
+ },
1819
+ "defaultQuantity": {
1820
+ "type": [
1821
+ "integer",
1822
+ "null"
1823
+ ]
1824
+ },
1825
+ "isDefault": {
1826
+ "type": "boolean"
1827
+ },
1828
+ "active": {
1829
+ "type": "boolean"
1830
+ },
1831
+ "sortOrder": {
1832
+ "type": "integer"
1833
+ },
1834
+ "notes": {
1835
+ "type": [
1836
+ "string",
1837
+ "null"
1838
+ ]
1839
+ },
1840
+ "metadata": {
1841
+ "type": [
1842
+ "object",
1843
+ "null"
1844
+ ],
1845
+ "additionalProperties": {}
1846
+ },
1847
+ "createdAt": {
1848
+ "type": "string"
1849
+ },
1850
+ "updatedAt": {
1851
+ "type": "string"
1852
+ }
1853
+ },
1854
+ "required": [
1855
+ "id",
1856
+ "optionId",
1857
+ "productExtraId",
1858
+ "selectionType",
1859
+ "pricingMode",
1860
+ "pricedPerPerson",
1861
+ "minQuantity",
1862
+ "maxQuantity",
1863
+ "defaultQuantity",
1864
+ "isDefault",
1865
+ "active",
1866
+ "sortOrder",
1867
+ "notes",
1868
+ "metadata",
1869
+ "createdAt",
1870
+ "updatedAt"
1871
+ ]
1872
+ }
1873
+ },
1874
+ "required": [
1875
+ "data"
1876
+ ]
1877
+ }
1878
+ }
1879
+ }
1880
+ },
1881
+ "404": {
1882
+ "description": "Option extra config not found",
1883
+ "content": {
1884
+ "application/json": {
1885
+ "schema": {
1886
+ "type": "object",
1887
+ "properties": {
1888
+ "error": {
1889
+ "type": "string"
1890
+ }
1891
+ },
1892
+ "required": [
1893
+ "error"
1894
+ ]
1895
+ }
1896
+ }
1897
+ }
1898
+ }
1899
+ },
1900
+ "operationId": "getAdminExtrasOptionExtraConfigsById",
1901
+ "summary": "GET /v1/admin/extras/option-extra-configs/{id}",
1902
+ "tags": [
1903
+ "extras"
1904
+ ],
1905
+ "x-voyant-module": "extras",
1906
+ "x-voyant-surface": "admin"
1907
+ },
1908
+ "patch": {
1909
+ "parameters": [
1910
+ {
1911
+ "schema": {
1912
+ "type": "string"
1913
+ },
1914
+ "required": true,
1915
+ "name": "id",
1916
+ "in": "path"
1917
+ }
1918
+ ],
1919
+ "requestBody": {
1920
+ "required": false,
1921
+ "description": "Partial option extra config update",
1922
+ "content": {
1923
+ "application/json": {
1924
+ "schema": {
1925
+ "type": "object",
1926
+ "properties": {
1927
+ "optionId": {
1928
+ "type": "string"
1929
+ },
1930
+ "productExtraId": {
1931
+ "type": "string"
1932
+ },
1933
+ "selectionType": {
1934
+ "type": [
1935
+ "string",
1936
+ "null"
1937
+ ],
1938
+ "enum": [
1939
+ "optional",
1940
+ "required",
1941
+ "default_selected",
1942
+ "unavailable",
1943
+ null
1944
+ ]
1945
+ },
1946
+ "pricingMode": {
1947
+ "type": [
1948
+ "string",
1949
+ "null"
1950
+ ],
1951
+ "enum": [
1952
+ "included",
1953
+ "per_person",
1954
+ "per_booking",
1955
+ "quantity_based",
1956
+ "on_request",
1957
+ "free",
1958
+ null
1959
+ ]
1960
+ },
1961
+ "pricedPerPerson": {
1962
+ "type": [
1963
+ "boolean",
1964
+ "null"
1965
+ ]
1966
+ },
1967
+ "minQuantity": {
1968
+ "type": [
1969
+ "integer",
1970
+ "null"
1971
+ ],
1972
+ "minimum": 0
1973
+ },
1974
+ "maxQuantity": {
1975
+ "type": [
1976
+ "integer",
1977
+ "null"
1978
+ ],
1979
+ "minimum": 0
1980
+ },
1981
+ "defaultQuantity": {
1982
+ "type": [
1983
+ "integer",
1984
+ "null"
1985
+ ],
1986
+ "minimum": 0
1987
+ },
1988
+ "isDefault": {
1989
+ "type": "boolean",
1990
+ "default": false
1991
+ },
1992
+ "active": {
1993
+ "type": "boolean",
1994
+ "default": true
1995
+ },
1996
+ "sortOrder": {
1997
+ "type": "integer",
1998
+ "default": 0
1999
+ },
2000
+ "notes": {
2001
+ "type": [
2002
+ "string",
2003
+ "null"
2004
+ ]
2005
+ },
2006
+ "metadata": {
2007
+ "type": [
2008
+ "object",
2009
+ "null"
2010
+ ],
2011
+ "additionalProperties": {}
2012
+ }
2013
+ }
2014
+ }
2015
+ }
2016
+ }
2017
+ },
2018
+ "responses": {
2019
+ "200": {
2020
+ "description": "The updated option extra config",
2021
+ "content": {
2022
+ "application/json": {
2023
+ "schema": {
2024
+ "type": "object",
2025
+ "properties": {
2026
+ "data": {
2027
+ "type": "object",
2028
+ "properties": {
2029
+ "id": {
2030
+ "type": "string"
2031
+ },
2032
+ "optionId": {
2033
+ "type": "string"
2034
+ },
2035
+ "productExtraId": {
2036
+ "type": "string"
2037
+ },
2038
+ "selectionType": {
2039
+ "type": [
2040
+ "string",
2041
+ "null"
2042
+ ],
2043
+ "enum": [
2044
+ "optional",
2045
+ "required",
2046
+ "default_selected",
2047
+ "unavailable",
2048
+ null
2049
+ ]
2050
+ },
2051
+ "pricingMode": {
2052
+ "type": [
2053
+ "string",
2054
+ "null"
2055
+ ],
2056
+ "enum": [
2057
+ "included",
2058
+ "per_person",
2059
+ "per_booking",
2060
+ "quantity_based",
2061
+ "on_request",
2062
+ "free",
2063
+ null
2064
+ ]
2065
+ },
2066
+ "pricedPerPerson": {
2067
+ "type": [
2068
+ "boolean",
2069
+ "null"
2070
+ ]
2071
+ },
2072
+ "minQuantity": {
2073
+ "type": [
2074
+ "integer",
2075
+ "null"
2076
+ ]
2077
+ },
2078
+ "maxQuantity": {
2079
+ "type": [
2080
+ "integer",
2081
+ "null"
2082
+ ]
2083
+ },
2084
+ "defaultQuantity": {
2085
+ "type": [
2086
+ "integer",
2087
+ "null"
2088
+ ]
2089
+ },
2090
+ "isDefault": {
2091
+ "type": "boolean"
2092
+ },
2093
+ "active": {
2094
+ "type": "boolean"
2095
+ },
2096
+ "sortOrder": {
2097
+ "type": "integer"
2098
+ },
2099
+ "notes": {
2100
+ "type": [
2101
+ "string",
2102
+ "null"
2103
+ ]
2104
+ },
2105
+ "metadata": {
2106
+ "type": [
2107
+ "object",
2108
+ "null"
2109
+ ],
2110
+ "additionalProperties": {}
2111
+ },
2112
+ "createdAt": {
2113
+ "type": "string"
2114
+ },
2115
+ "updatedAt": {
2116
+ "type": "string"
2117
+ }
2118
+ },
2119
+ "required": [
2120
+ "id",
2121
+ "optionId",
2122
+ "productExtraId",
2123
+ "selectionType",
2124
+ "pricingMode",
2125
+ "pricedPerPerson",
2126
+ "minQuantity",
2127
+ "maxQuantity",
2128
+ "defaultQuantity",
2129
+ "isDefault",
2130
+ "active",
2131
+ "sortOrder",
2132
+ "notes",
2133
+ "metadata",
2134
+ "createdAt",
2135
+ "updatedAt"
2136
+ ]
2137
+ }
2138
+ },
2139
+ "required": [
2140
+ "data"
2141
+ ]
2142
+ }
2143
+ }
2144
+ }
2145
+ },
2146
+ "400": {
2147
+ "description": "invalid_request — request input failed validation",
2148
+ "content": {
2149
+ "application/json": {
2150
+ "schema": {
2151
+ "type": "object",
2152
+ "properties": {
2153
+ "error": {
2154
+ "type": "string"
2155
+ }
2156
+ },
2157
+ "required": [
2158
+ "error"
2159
+ ]
2160
+ }
2161
+ }
2162
+ }
2163
+ },
2164
+ "404": {
2165
+ "description": "Option extra config not found",
2166
+ "content": {
2167
+ "application/json": {
2168
+ "schema": {
2169
+ "type": "object",
2170
+ "properties": {
2171
+ "error": {
2172
+ "type": "string"
2173
+ }
2174
+ },
2175
+ "required": [
2176
+ "error"
2177
+ ]
2178
+ }
2179
+ }
2180
+ }
2181
+ }
2182
+ },
2183
+ "operationId": "patchAdminExtrasOptionExtraConfigsById",
2184
+ "summary": "PATCH /v1/admin/extras/option-extra-configs/{id}",
2185
+ "tags": [
2186
+ "extras"
2187
+ ],
2188
+ "x-voyant-module": "extras",
2189
+ "x-voyant-surface": "admin"
2190
+ },
2191
+ "delete": {
2192
+ "parameters": [
2193
+ {
2194
+ "schema": {
2195
+ "type": "string"
2196
+ },
2197
+ "required": true,
2198
+ "name": "id",
2199
+ "in": "path"
2200
+ }
2201
+ ],
2202
+ "responses": {
2203
+ "200": {
2204
+ "description": "The option extra config was deleted",
2205
+ "content": {
2206
+ "application/json": {
2207
+ "schema": {
2208
+ "type": "object",
2209
+ "properties": {
2210
+ "success": {
2211
+ "type": "boolean"
2212
+ }
2213
+ },
2214
+ "required": [
2215
+ "success"
2216
+ ]
2217
+ }
2218
+ }
2219
+ }
2220
+ },
2221
+ "404": {
2222
+ "description": "Option extra config not found",
2223
+ "content": {
2224
+ "application/json": {
2225
+ "schema": {
2226
+ "type": "object",
2227
+ "properties": {
2228
+ "error": {
2229
+ "type": "string"
2230
+ }
2231
+ },
2232
+ "required": [
2233
+ "error"
2234
+ ]
2235
+ }
2236
+ }
2237
+ }
2238
+ }
2239
+ },
2240
+ "operationId": "deleteAdminExtrasOptionExtraConfigsById",
2241
+ "summary": "DELETE /v1/admin/extras/option-extra-configs/{id}",
2242
+ "tags": [
2243
+ "extras"
2244
+ ],
2245
+ "x-voyant-module": "extras",
2246
+ "x-voyant-surface": "admin"
2247
+ }
2248
+ },
2249
+ "/v1/admin/extras/booking-extras": {
2250
+ "get": {
2251
+ "parameters": [
2252
+ {
2253
+ "schema": {
2254
+ "type": "integer",
2255
+ "minimum": 1,
2256
+ "maximum": 200,
2257
+ "default": 50
2258
+ },
2259
+ "required": false,
2260
+ "name": "limit",
2261
+ "in": "query"
2262
+ },
2263
+ {
2264
+ "schema": {
2265
+ "type": [
2266
+ "integer",
2267
+ "null"
2268
+ ],
2269
+ "minimum": 0,
2270
+ "default": 0
2271
+ },
2272
+ "required": false,
2273
+ "name": "offset",
2274
+ "in": "query"
2275
+ },
2276
+ {
2277
+ "schema": {
2278
+ "type": "string"
2279
+ },
2280
+ "required": false,
2281
+ "name": "bookingId",
2282
+ "in": "query"
2283
+ },
2284
+ {
2285
+ "schema": {
2286
+ "type": "string"
2287
+ },
2288
+ "required": false,
2289
+ "name": "productExtraId",
2290
+ "in": "query"
2291
+ },
2292
+ {
2293
+ "schema": {
2294
+ "type": "string"
2295
+ },
2296
+ "required": false,
2297
+ "name": "optionExtraConfigId",
2298
+ "in": "query"
2299
+ },
2300
+ {
2301
+ "schema": {
2302
+ "type": "string",
2303
+ "enum": [
2304
+ "draft",
2305
+ "selected",
2306
+ "confirmed",
2307
+ "cancelled",
2308
+ "fulfilled"
2309
+ ]
2310
+ },
2311
+ "required": false,
2312
+ "name": "status",
2313
+ "in": "query"
2314
+ }
2315
+ ],
2316
+ "responses": {
2317
+ "200": {
2318
+ "description": "Paginated booking extras",
2319
+ "content": {
2320
+ "application/json": {
2321
+ "schema": {
2322
+ "type": "object",
2323
+ "properties": {
2324
+ "data": {
2325
+ "type": "array",
2326
+ "items": {
2327
+ "type": "object",
2328
+ "properties": {
2329
+ "id": {
2330
+ "type": "string"
2331
+ },
2332
+ "bookingId": {
2333
+ "type": "string"
2334
+ },
2335
+ "productExtraId": {
2336
+ "type": [
2337
+ "string",
2338
+ "null"
2339
+ ]
2340
+ },
2341
+ "optionExtraConfigId": {
2342
+ "type": [
2343
+ "string",
2344
+ "null"
2345
+ ]
2346
+ },
2347
+ "name": {
2348
+ "type": "string"
2349
+ },
2350
+ "description": {
2351
+ "type": [
2352
+ "string",
2353
+ "null"
2354
+ ]
2355
+ },
2356
+ "status": {
2357
+ "type": "string",
2358
+ "enum": [
2359
+ "draft",
2360
+ "selected",
2361
+ "confirmed",
2362
+ "cancelled",
2363
+ "fulfilled"
2364
+ ]
2365
+ },
2366
+ "pricingMode": {
2367
+ "type": "string",
2368
+ "enum": [
2369
+ "included",
2370
+ "per_person",
2371
+ "per_booking",
2372
+ "quantity_based",
2373
+ "on_request",
2374
+ "free"
2375
+ ]
2376
+ },
2377
+ "pricedPerPerson": {
2378
+ "type": "boolean"
2379
+ },
2380
+ "quantity": {
2381
+ "type": "integer"
2382
+ },
2383
+ "sellCurrency": {
2384
+ "type": "string"
2385
+ },
2386
+ "unitSellAmountCents": {
2387
+ "type": [
2388
+ "integer",
2389
+ "null"
2390
+ ]
2391
+ },
2392
+ "totalSellAmountCents": {
2393
+ "type": [
2394
+ "integer",
2395
+ "null"
2396
+ ]
2397
+ },
2398
+ "costCurrency": {
2399
+ "type": [
2400
+ "string",
2401
+ "null"
2402
+ ]
2403
+ },
2404
+ "unitCostAmountCents": {
2405
+ "type": [
2406
+ "integer",
2407
+ "null"
2408
+ ]
2409
+ },
2410
+ "totalCostAmountCents": {
2411
+ "type": [
2412
+ "integer",
2413
+ "null"
2414
+ ]
2415
+ },
2416
+ "notes": {
2417
+ "type": [
2418
+ "string",
2419
+ "null"
2420
+ ]
2421
+ },
2422
+ "metadata": {
2423
+ "type": [
2424
+ "object",
2425
+ "null"
2426
+ ],
2427
+ "additionalProperties": {}
2428
+ },
2429
+ "createdAt": {
2430
+ "type": "string"
2431
+ },
2432
+ "updatedAt": {
2433
+ "type": "string"
2434
+ }
2435
+ },
2436
+ "required": [
2437
+ "id",
2438
+ "bookingId",
2439
+ "productExtraId",
2440
+ "optionExtraConfigId",
2441
+ "name",
2442
+ "description",
2443
+ "status",
2444
+ "pricingMode",
2445
+ "pricedPerPerson",
2446
+ "quantity",
2447
+ "sellCurrency",
2448
+ "unitSellAmountCents",
2449
+ "totalSellAmountCents",
2450
+ "costCurrency",
2451
+ "unitCostAmountCents",
2452
+ "totalCostAmountCents",
2453
+ "notes",
2454
+ "metadata",
2455
+ "createdAt",
2456
+ "updatedAt"
2457
+ ]
2458
+ }
2459
+ },
2460
+ "total": {
2461
+ "type": "integer"
2462
+ },
2463
+ "limit": {
2464
+ "type": "integer"
2465
+ },
2466
+ "offset": {
2467
+ "type": "integer"
2468
+ }
2469
+ },
2470
+ "required": [
2471
+ "data",
2472
+ "total",
2473
+ "limit",
2474
+ "offset"
2475
+ ]
2476
+ }
2477
+ }
2478
+ }
2479
+ },
2480
+ "400": {
2481
+ "description": "invalid_request — request input failed validation",
2482
+ "content": {
2483
+ "application/json": {
2484
+ "schema": {
2485
+ "type": "object",
2486
+ "properties": {
2487
+ "error": {
2488
+ "type": "string"
2489
+ }
2490
+ },
2491
+ "required": [
2492
+ "error"
2493
+ ]
2494
+ }
2495
+ }
2496
+ }
2497
+ }
2498
+ },
2499
+ "operationId": "getAdminExtrasBookingExtras",
2500
+ "summary": "GET /v1/admin/extras/booking-extras",
2501
+ "tags": [
2502
+ "extras"
2503
+ ],
2504
+ "x-voyant-module": "extras",
2505
+ "x-voyant-surface": "admin"
2506
+ },
2507
+ "post": {
2508
+ "requestBody": {
2509
+ "required": true,
2510
+ "description": "Booking extra",
2511
+ "content": {
2512
+ "application/json": {
2513
+ "schema": {
2514
+ "type": "object",
2515
+ "properties": {
2516
+ "bookingId": {
2517
+ "type": "string"
2518
+ },
2519
+ "productExtraId": {
2520
+ "type": [
2521
+ "string",
2522
+ "null"
2523
+ ]
2524
+ },
2525
+ "optionExtraConfigId": {
2526
+ "type": [
2527
+ "string",
2528
+ "null"
2529
+ ]
2530
+ },
2531
+ "name": {
2532
+ "type": "string",
2533
+ "minLength": 1,
2534
+ "maxLength": 255
2535
+ },
2536
+ "description": {
2537
+ "type": [
2538
+ "string",
2539
+ "null"
2540
+ ]
2541
+ },
2542
+ "status": {
2543
+ "type": "string",
2544
+ "enum": [
2545
+ "draft",
2546
+ "selected",
2547
+ "confirmed",
2548
+ "cancelled",
2549
+ "fulfilled"
2550
+ ],
2551
+ "default": "draft"
2552
+ },
2553
+ "pricingMode": {
2554
+ "type": "string",
2555
+ "enum": [
2556
+ "included",
2557
+ "per_person",
2558
+ "per_booking",
2559
+ "quantity_based",
2560
+ "on_request",
2561
+ "free"
2562
+ ],
2563
+ "default": "per_booking"
2564
+ },
2565
+ "pricedPerPerson": {
2566
+ "type": "boolean",
2567
+ "default": false
2568
+ },
2569
+ "quantity": {
2570
+ "type": "integer",
2571
+ "minimum": 1,
2572
+ "default": 1
2573
+ },
2574
+ "sellCurrency": {
2575
+ "type": "string",
2576
+ "minLength": 3,
2577
+ "maxLength": 3
2578
+ },
2579
+ "unitSellAmountCents": {
2580
+ "type": [
2581
+ "integer",
2582
+ "null"
2583
+ ],
2584
+ "minimum": 0
2585
+ },
2586
+ "totalSellAmountCents": {
2587
+ "type": [
2588
+ "integer",
2589
+ "null"
2590
+ ],
2591
+ "minimum": 0
2592
+ },
2593
+ "costCurrency": {
2594
+ "type": [
2595
+ "string",
2596
+ "null"
2597
+ ],
2598
+ "minLength": 3,
2599
+ "maxLength": 3
2600
+ },
2601
+ "unitCostAmountCents": {
2602
+ "type": [
2603
+ "integer",
2604
+ "null"
2605
+ ],
2606
+ "minimum": 0
2607
+ },
2608
+ "totalCostAmountCents": {
2609
+ "type": [
2610
+ "integer",
2611
+ "null"
2612
+ ],
2613
+ "minimum": 0
2614
+ },
2615
+ "notes": {
2616
+ "type": [
2617
+ "string",
2618
+ "null"
2619
+ ]
2620
+ },
2621
+ "metadata": {
2622
+ "type": [
2623
+ "object",
2624
+ "null"
2625
+ ],
2626
+ "additionalProperties": {}
2627
+ }
2628
+ },
2629
+ "required": [
2630
+ "bookingId",
2631
+ "name",
2632
+ "sellCurrency"
2633
+ ]
2634
+ }
2635
+ }
2636
+ }
2637
+ },
2638
+ "responses": {
2639
+ "201": {
2640
+ "description": "The created booking extra",
2641
+ "content": {
2642
+ "application/json": {
2643
+ "schema": {
2644
+ "type": "object",
2645
+ "properties": {
2646
+ "data": {
2647
+ "type": "object",
2648
+ "properties": {
2649
+ "id": {
2650
+ "type": "string"
2651
+ },
2652
+ "bookingId": {
2653
+ "type": "string"
2654
+ },
2655
+ "productExtraId": {
2656
+ "type": [
2657
+ "string",
2658
+ "null"
2659
+ ]
2660
+ },
2661
+ "optionExtraConfigId": {
2662
+ "type": [
2663
+ "string",
2664
+ "null"
2665
+ ]
2666
+ },
2667
+ "name": {
2668
+ "type": "string"
2669
+ },
2670
+ "description": {
2671
+ "type": [
2672
+ "string",
2673
+ "null"
2674
+ ]
2675
+ },
2676
+ "status": {
2677
+ "type": "string",
2678
+ "enum": [
2679
+ "draft",
2680
+ "selected",
2681
+ "confirmed",
2682
+ "cancelled",
2683
+ "fulfilled"
2684
+ ]
2685
+ },
2686
+ "pricingMode": {
2687
+ "type": "string",
2688
+ "enum": [
2689
+ "included",
2690
+ "per_person",
2691
+ "per_booking",
2692
+ "quantity_based",
2693
+ "on_request",
2694
+ "free"
2695
+ ]
2696
+ },
2697
+ "pricedPerPerson": {
2698
+ "type": "boolean"
2699
+ },
2700
+ "quantity": {
2701
+ "type": "integer"
2702
+ },
2703
+ "sellCurrency": {
2704
+ "type": "string"
2705
+ },
2706
+ "unitSellAmountCents": {
2707
+ "type": [
2708
+ "integer",
2709
+ "null"
2710
+ ]
2711
+ },
2712
+ "totalSellAmountCents": {
2713
+ "type": [
2714
+ "integer",
2715
+ "null"
2716
+ ]
2717
+ },
2718
+ "costCurrency": {
2719
+ "type": [
2720
+ "string",
2721
+ "null"
2722
+ ]
2723
+ },
2724
+ "unitCostAmountCents": {
2725
+ "type": [
2726
+ "integer",
2727
+ "null"
2728
+ ]
2729
+ },
2730
+ "totalCostAmountCents": {
2731
+ "type": [
2732
+ "integer",
2733
+ "null"
2734
+ ]
2735
+ },
2736
+ "notes": {
2737
+ "type": [
2738
+ "string",
2739
+ "null"
2740
+ ]
2741
+ },
2742
+ "metadata": {
2743
+ "type": [
2744
+ "object",
2745
+ "null"
2746
+ ],
2747
+ "additionalProperties": {}
2748
+ },
2749
+ "createdAt": {
2750
+ "type": "string"
2751
+ },
2752
+ "updatedAt": {
2753
+ "type": "string"
2754
+ }
2755
+ },
2756
+ "required": [
2757
+ "id",
2758
+ "bookingId",
2759
+ "productExtraId",
2760
+ "optionExtraConfigId",
2761
+ "name",
2762
+ "description",
2763
+ "status",
2764
+ "pricingMode",
2765
+ "pricedPerPerson",
2766
+ "quantity",
2767
+ "sellCurrency",
2768
+ "unitSellAmountCents",
2769
+ "totalSellAmountCents",
2770
+ "costCurrency",
2771
+ "unitCostAmountCents",
2772
+ "totalCostAmountCents",
2773
+ "notes",
2774
+ "metadata",
2775
+ "createdAt",
2776
+ "updatedAt"
2777
+ ]
2778
+ }
2779
+ },
2780
+ "required": [
2781
+ "data"
2782
+ ]
2783
+ }
2784
+ }
2785
+ }
2786
+ },
2787
+ "400": {
2788
+ "description": "invalid_request — request input failed validation",
2789
+ "content": {
2790
+ "application/json": {
2791
+ "schema": {
2792
+ "type": "object",
2793
+ "properties": {
2794
+ "error": {
2795
+ "type": "string"
2796
+ }
2797
+ },
2798
+ "required": [
2799
+ "error"
2800
+ ]
2801
+ }
2802
+ }
2803
+ }
2804
+ }
2805
+ },
2806
+ "operationId": "postAdminExtrasBookingExtras",
2807
+ "summary": "POST /v1/admin/extras/booking-extras",
2808
+ "tags": [
2809
+ "extras"
2810
+ ],
2811
+ "x-voyant-module": "extras",
2812
+ "x-voyant-surface": "admin"
2813
+ }
2814
+ },
2815
+ "/v1/admin/extras/booking-extras/{id}": {
2816
+ "get": {
2817
+ "parameters": [
2818
+ {
2819
+ "schema": {
2820
+ "type": "string"
2821
+ },
2822
+ "required": true,
2823
+ "name": "id",
2824
+ "in": "path"
2825
+ }
2826
+ ],
2827
+ "responses": {
2828
+ "200": {
2829
+ "description": "A booking extra by id",
2830
+ "content": {
2831
+ "application/json": {
2832
+ "schema": {
2833
+ "type": "object",
2834
+ "properties": {
2835
+ "data": {
2836
+ "type": "object",
2837
+ "properties": {
2838
+ "id": {
2839
+ "type": "string"
2840
+ },
2841
+ "bookingId": {
2842
+ "type": "string"
2843
+ },
2844
+ "productExtraId": {
2845
+ "type": [
2846
+ "string",
2847
+ "null"
2848
+ ]
2849
+ },
2850
+ "optionExtraConfigId": {
2851
+ "type": [
2852
+ "string",
2853
+ "null"
2854
+ ]
2855
+ },
2856
+ "name": {
2857
+ "type": "string"
2858
+ },
2859
+ "description": {
2860
+ "type": [
2861
+ "string",
2862
+ "null"
2863
+ ]
2864
+ },
2865
+ "status": {
2866
+ "type": "string",
2867
+ "enum": [
2868
+ "draft",
2869
+ "selected",
2870
+ "confirmed",
2871
+ "cancelled",
2872
+ "fulfilled"
2873
+ ]
2874
+ },
2875
+ "pricingMode": {
2876
+ "type": "string",
2877
+ "enum": [
2878
+ "included",
2879
+ "per_person",
2880
+ "per_booking",
2881
+ "quantity_based",
2882
+ "on_request",
2883
+ "free"
2884
+ ]
2885
+ },
2886
+ "pricedPerPerson": {
2887
+ "type": "boolean"
2888
+ },
2889
+ "quantity": {
2890
+ "type": "integer"
2891
+ },
2892
+ "sellCurrency": {
2893
+ "type": "string"
2894
+ },
2895
+ "unitSellAmountCents": {
2896
+ "type": [
2897
+ "integer",
2898
+ "null"
2899
+ ]
2900
+ },
2901
+ "totalSellAmountCents": {
2902
+ "type": [
2903
+ "integer",
2904
+ "null"
2905
+ ]
2906
+ },
2907
+ "costCurrency": {
2908
+ "type": [
2909
+ "string",
2910
+ "null"
2911
+ ]
2912
+ },
2913
+ "unitCostAmountCents": {
2914
+ "type": [
2915
+ "integer",
2916
+ "null"
2917
+ ]
2918
+ },
2919
+ "totalCostAmountCents": {
2920
+ "type": [
2921
+ "integer",
2922
+ "null"
2923
+ ]
2924
+ },
2925
+ "notes": {
2926
+ "type": [
2927
+ "string",
2928
+ "null"
2929
+ ]
2930
+ },
2931
+ "metadata": {
2932
+ "type": [
2933
+ "object",
2934
+ "null"
2935
+ ],
2936
+ "additionalProperties": {}
2937
+ },
2938
+ "createdAt": {
2939
+ "type": "string"
2940
+ },
2941
+ "updatedAt": {
2942
+ "type": "string"
2943
+ }
2944
+ },
2945
+ "required": [
2946
+ "id",
2947
+ "bookingId",
2948
+ "productExtraId",
2949
+ "optionExtraConfigId",
2950
+ "name",
2951
+ "description",
2952
+ "status",
2953
+ "pricingMode",
2954
+ "pricedPerPerson",
2955
+ "quantity",
2956
+ "sellCurrency",
2957
+ "unitSellAmountCents",
2958
+ "totalSellAmountCents",
2959
+ "costCurrency",
2960
+ "unitCostAmountCents",
2961
+ "totalCostAmountCents",
2962
+ "notes",
2963
+ "metadata",
2964
+ "createdAt",
2965
+ "updatedAt"
2966
+ ]
2967
+ }
2968
+ },
2969
+ "required": [
2970
+ "data"
2971
+ ]
2972
+ }
2973
+ }
2974
+ }
2975
+ },
2976
+ "404": {
2977
+ "description": "Booking extra not found",
2978
+ "content": {
2979
+ "application/json": {
2980
+ "schema": {
2981
+ "type": "object",
2982
+ "properties": {
2983
+ "error": {
2984
+ "type": "string"
2985
+ }
2986
+ },
2987
+ "required": [
2988
+ "error"
2989
+ ]
2990
+ }
2991
+ }
2992
+ }
2993
+ }
2994
+ },
2995
+ "operationId": "getAdminExtrasBookingExtrasById",
2996
+ "summary": "GET /v1/admin/extras/booking-extras/{id}",
2997
+ "tags": [
2998
+ "extras"
2999
+ ],
3000
+ "x-voyant-module": "extras",
3001
+ "x-voyant-surface": "admin"
3002
+ },
3003
+ "patch": {
3004
+ "parameters": [
3005
+ {
3006
+ "schema": {
3007
+ "type": "string"
3008
+ },
3009
+ "required": true,
3010
+ "name": "id",
3011
+ "in": "path"
3012
+ }
3013
+ ],
3014
+ "requestBody": {
3015
+ "required": false,
3016
+ "description": "Partial booking extra update",
3017
+ "content": {
3018
+ "application/json": {
3019
+ "schema": {
3020
+ "type": "object",
3021
+ "properties": {
3022
+ "bookingId": {
3023
+ "type": "string"
3024
+ },
3025
+ "productExtraId": {
3026
+ "type": [
3027
+ "string",
3028
+ "null"
3029
+ ]
3030
+ },
3031
+ "optionExtraConfigId": {
3032
+ "type": [
3033
+ "string",
3034
+ "null"
3035
+ ]
3036
+ },
3037
+ "name": {
3038
+ "type": "string",
3039
+ "minLength": 1,
3040
+ "maxLength": 255
3041
+ },
3042
+ "description": {
3043
+ "type": [
3044
+ "string",
3045
+ "null"
3046
+ ]
3047
+ },
3048
+ "status": {
3049
+ "type": "string",
3050
+ "enum": [
3051
+ "draft",
3052
+ "selected",
3053
+ "confirmed",
3054
+ "cancelled",
3055
+ "fulfilled"
3056
+ ],
3057
+ "default": "draft"
3058
+ },
3059
+ "pricingMode": {
3060
+ "type": "string",
3061
+ "enum": [
3062
+ "included",
3063
+ "per_person",
3064
+ "per_booking",
3065
+ "quantity_based",
3066
+ "on_request",
3067
+ "free"
3068
+ ],
3069
+ "default": "per_booking"
3070
+ },
3071
+ "pricedPerPerson": {
3072
+ "type": "boolean",
3073
+ "default": false
3074
+ },
3075
+ "quantity": {
3076
+ "type": "integer",
3077
+ "minimum": 1,
3078
+ "default": 1
3079
+ },
3080
+ "sellCurrency": {
3081
+ "type": "string",
3082
+ "minLength": 3,
3083
+ "maxLength": 3
3084
+ },
3085
+ "unitSellAmountCents": {
3086
+ "type": [
3087
+ "integer",
3088
+ "null"
3089
+ ],
3090
+ "minimum": 0
3091
+ },
3092
+ "totalSellAmountCents": {
3093
+ "type": [
3094
+ "integer",
3095
+ "null"
3096
+ ],
3097
+ "minimum": 0
3098
+ },
3099
+ "costCurrency": {
3100
+ "type": [
3101
+ "string",
3102
+ "null"
3103
+ ],
3104
+ "minLength": 3,
3105
+ "maxLength": 3
3106
+ },
3107
+ "unitCostAmountCents": {
3108
+ "type": [
3109
+ "integer",
3110
+ "null"
3111
+ ],
3112
+ "minimum": 0
3113
+ },
3114
+ "totalCostAmountCents": {
3115
+ "type": [
3116
+ "integer",
3117
+ "null"
3118
+ ],
3119
+ "minimum": 0
3120
+ },
3121
+ "notes": {
3122
+ "type": [
3123
+ "string",
3124
+ "null"
3125
+ ]
3126
+ },
3127
+ "metadata": {
3128
+ "type": [
3129
+ "object",
3130
+ "null"
3131
+ ],
3132
+ "additionalProperties": {}
3133
+ }
3134
+ }
3135
+ }
3136
+ }
3137
+ }
3138
+ },
3139
+ "responses": {
3140
+ "200": {
3141
+ "description": "The updated booking extra",
3142
+ "content": {
3143
+ "application/json": {
3144
+ "schema": {
3145
+ "type": "object",
3146
+ "properties": {
3147
+ "data": {
3148
+ "type": "object",
3149
+ "properties": {
3150
+ "id": {
3151
+ "type": "string"
3152
+ },
3153
+ "bookingId": {
3154
+ "type": "string"
3155
+ },
3156
+ "productExtraId": {
3157
+ "type": [
3158
+ "string",
3159
+ "null"
3160
+ ]
3161
+ },
3162
+ "optionExtraConfigId": {
3163
+ "type": [
3164
+ "string",
3165
+ "null"
3166
+ ]
3167
+ },
3168
+ "name": {
3169
+ "type": "string"
3170
+ },
3171
+ "description": {
3172
+ "type": [
3173
+ "string",
3174
+ "null"
3175
+ ]
3176
+ },
3177
+ "status": {
3178
+ "type": "string",
3179
+ "enum": [
3180
+ "draft",
3181
+ "selected",
3182
+ "confirmed",
3183
+ "cancelled",
3184
+ "fulfilled"
3185
+ ]
3186
+ },
3187
+ "pricingMode": {
3188
+ "type": "string",
3189
+ "enum": [
3190
+ "included",
3191
+ "per_person",
3192
+ "per_booking",
3193
+ "quantity_based",
3194
+ "on_request",
3195
+ "free"
3196
+ ]
3197
+ },
3198
+ "pricedPerPerson": {
3199
+ "type": "boolean"
3200
+ },
3201
+ "quantity": {
3202
+ "type": "integer"
3203
+ },
3204
+ "sellCurrency": {
3205
+ "type": "string"
3206
+ },
3207
+ "unitSellAmountCents": {
3208
+ "type": [
3209
+ "integer",
3210
+ "null"
3211
+ ]
3212
+ },
3213
+ "totalSellAmountCents": {
3214
+ "type": [
3215
+ "integer",
3216
+ "null"
3217
+ ]
3218
+ },
3219
+ "costCurrency": {
3220
+ "type": [
3221
+ "string",
3222
+ "null"
3223
+ ]
3224
+ },
3225
+ "unitCostAmountCents": {
3226
+ "type": [
3227
+ "integer",
3228
+ "null"
3229
+ ]
3230
+ },
3231
+ "totalCostAmountCents": {
3232
+ "type": [
3233
+ "integer",
3234
+ "null"
3235
+ ]
3236
+ },
3237
+ "notes": {
3238
+ "type": [
3239
+ "string",
3240
+ "null"
3241
+ ]
3242
+ },
3243
+ "metadata": {
3244
+ "type": [
3245
+ "object",
3246
+ "null"
3247
+ ],
3248
+ "additionalProperties": {}
3249
+ },
3250
+ "createdAt": {
3251
+ "type": "string"
3252
+ },
3253
+ "updatedAt": {
3254
+ "type": "string"
3255
+ }
3256
+ },
3257
+ "required": [
3258
+ "id",
3259
+ "bookingId",
3260
+ "productExtraId",
3261
+ "optionExtraConfigId",
3262
+ "name",
3263
+ "description",
3264
+ "status",
3265
+ "pricingMode",
3266
+ "pricedPerPerson",
3267
+ "quantity",
3268
+ "sellCurrency",
3269
+ "unitSellAmountCents",
3270
+ "totalSellAmountCents",
3271
+ "costCurrency",
3272
+ "unitCostAmountCents",
3273
+ "totalCostAmountCents",
3274
+ "notes",
3275
+ "metadata",
3276
+ "createdAt",
3277
+ "updatedAt"
3278
+ ]
3279
+ }
3280
+ },
3281
+ "required": [
3282
+ "data"
3283
+ ]
3284
+ }
3285
+ }
3286
+ }
3287
+ },
3288
+ "400": {
3289
+ "description": "invalid_request — request input failed validation",
3290
+ "content": {
3291
+ "application/json": {
3292
+ "schema": {
3293
+ "type": "object",
3294
+ "properties": {
3295
+ "error": {
3296
+ "type": "string"
3297
+ }
3298
+ },
3299
+ "required": [
3300
+ "error"
3301
+ ]
3302
+ }
3303
+ }
3304
+ }
3305
+ },
3306
+ "404": {
3307
+ "description": "Booking extra not found",
3308
+ "content": {
3309
+ "application/json": {
3310
+ "schema": {
3311
+ "type": "object",
3312
+ "properties": {
3313
+ "error": {
3314
+ "type": "string"
3315
+ }
3316
+ },
3317
+ "required": [
3318
+ "error"
3319
+ ]
3320
+ }
3321
+ }
3322
+ }
3323
+ }
3324
+ },
3325
+ "operationId": "patchAdminExtrasBookingExtrasById",
3326
+ "summary": "PATCH /v1/admin/extras/booking-extras/{id}",
3327
+ "tags": [
3328
+ "extras"
3329
+ ],
3330
+ "x-voyant-module": "extras",
3331
+ "x-voyant-surface": "admin"
3332
+ },
3333
+ "delete": {
3334
+ "parameters": [
3335
+ {
3336
+ "schema": {
3337
+ "type": "string"
3338
+ },
3339
+ "required": true,
3340
+ "name": "id",
3341
+ "in": "path"
3342
+ }
3343
+ ],
3344
+ "responses": {
3345
+ "200": {
3346
+ "description": "The booking extra was deleted",
3347
+ "content": {
3348
+ "application/json": {
3349
+ "schema": {
3350
+ "type": "object",
3351
+ "properties": {
3352
+ "success": {
3353
+ "type": "boolean"
3354
+ }
3355
+ },
3356
+ "required": [
3357
+ "success"
3358
+ ]
3359
+ }
3360
+ }
3361
+ }
3362
+ },
3363
+ "404": {
3364
+ "description": "Booking extra not found",
3365
+ "content": {
3366
+ "application/json": {
3367
+ "schema": {
3368
+ "type": "object",
3369
+ "properties": {
3370
+ "error": {
3371
+ "type": "string"
3372
+ }
3373
+ },
3374
+ "required": [
3375
+ "error"
3376
+ ]
3377
+ }
3378
+ }
3379
+ }
3380
+ }
3381
+ },
3382
+ "operationId": "deleteAdminExtrasBookingExtrasById",
3383
+ "summary": "DELETE /v1/admin/extras/booking-extras/{id}",
3384
+ "tags": [
3385
+ "extras"
3386
+ ],
3387
+ "x-voyant-module": "extras",
3388
+ "x-voyant-surface": "admin"
3389
+ }
3390
+ },
3391
+ "/v1/admin/extras/slot-manifests/{slotId}": {
3392
+ "get": {
3393
+ "parameters": [
3394
+ {
3395
+ "schema": {
3396
+ "type": "string"
3397
+ },
3398
+ "required": true,
3399
+ "name": "slotId",
3400
+ "in": "path"
3401
+ },
3402
+ {
3403
+ "schema": {
3404
+ "type": "string",
3405
+ "enum": [
3406
+ "0",
3407
+ "1",
3408
+ "true",
3409
+ "false"
3410
+ ],
3411
+ "default": false
3412
+ },
3413
+ "required": false,
3414
+ "name": "includeInactiveExtras",
3415
+ "in": "query"
3416
+ }
3417
+ ],
3418
+ "responses": {
3419
+ "200": {
3420
+ "description": "The slot extra manifest",
3421
+ "content": {
3422
+ "application/json": {
3423
+ "schema": {
3424
+ "type": "object",
3425
+ "properties": {
3426
+ "data": {
3427
+ "type": "object",
3428
+ "properties": {
3429
+ "slot": {
3430
+ "type": "object",
3431
+ "properties": {
3432
+ "id": {
3433
+ "type": "string"
3434
+ },
3435
+ "productId": {
3436
+ "type": "string"
3437
+ },
3438
+ "optionId": {
3439
+ "type": [
3440
+ "string",
3441
+ "null"
3442
+ ]
3443
+ },
3444
+ "facilityId": {
3445
+ "type": [
3446
+ "string",
3447
+ "null"
3448
+ ]
3449
+ },
3450
+ "availabilityRuleId": {
3451
+ "type": [
3452
+ "string",
3453
+ "null"
3454
+ ]
3455
+ },
3456
+ "startTimeId": {
3457
+ "type": [
3458
+ "string",
3459
+ "null"
3460
+ ]
3461
+ },
3462
+ "dateLocal": {
3463
+ "type": "string"
3464
+ },
3465
+ "startsAt": {
3466
+ "type": "string"
3467
+ },
3468
+ "endsAt": {
3469
+ "type": [
3470
+ "string",
3471
+ "null"
3472
+ ]
3473
+ },
3474
+ "timezone": {
3475
+ "type": "string"
3476
+ },
3477
+ "status": {
3478
+ "type": "string",
3479
+ "enum": [
3480
+ "open",
3481
+ "closed",
3482
+ "sold_out",
3483
+ "cancelled"
3484
+ ]
3485
+ },
3486
+ "unlimited": {
3487
+ "type": "boolean"
3488
+ },
3489
+ "initialPax": {
3490
+ "type": [
3491
+ "integer",
3492
+ "null"
3493
+ ]
3494
+ },
3495
+ "remainingPax": {
3496
+ "type": [
3497
+ "integer",
3498
+ "null"
3499
+ ]
3500
+ },
3501
+ "initialPickups": {
3502
+ "type": [
3503
+ "integer",
3504
+ "null"
3505
+ ]
3506
+ },
3507
+ "remainingPickups": {
3508
+ "type": [
3509
+ "integer",
3510
+ "null"
3511
+ ]
3512
+ },
3513
+ "remainingResources": {
3514
+ "type": [
3515
+ "integer",
3516
+ "null"
3517
+ ]
3518
+ },
3519
+ "pastCutoff": {
3520
+ "type": "boolean"
3521
+ },
3522
+ "tooEarly": {
3523
+ "type": "boolean"
3524
+ },
3525
+ "nights": {
3526
+ "type": [
3527
+ "integer",
3528
+ "null"
3529
+ ]
3530
+ },
3531
+ "days": {
3532
+ "type": [
3533
+ "integer",
3534
+ "null"
3535
+ ]
3536
+ },
3537
+ "notes": {
3538
+ "type": [
3539
+ "string",
3540
+ "null"
3541
+ ]
3542
+ },
3543
+ "createdAt": {
3544
+ "type": "string"
3545
+ },
3546
+ "updatedAt": {
3547
+ "type": "string"
3548
+ }
3549
+ },
3550
+ "required": [
3551
+ "id",
3552
+ "productId",
3553
+ "optionId",
3554
+ "facilityId",
3555
+ "availabilityRuleId",
3556
+ "startTimeId",
3557
+ "dateLocal",
3558
+ "startsAt",
3559
+ "endsAt",
3560
+ "timezone",
3561
+ "status",
3562
+ "unlimited",
3563
+ "initialPax",
3564
+ "remainingPax",
3565
+ "initialPickups",
3566
+ "remainingPickups",
3567
+ "remainingResources",
3568
+ "pastCutoff",
3569
+ "tooEarly",
3570
+ "nights",
3571
+ "days",
3572
+ "notes",
3573
+ "createdAt",
3574
+ "updatedAt"
3575
+ ]
3576
+ },
3577
+ "extras": {
3578
+ "type": "array",
3579
+ "items": {
3580
+ "type": "object",
3581
+ "properties": {
3582
+ "id": {
3583
+ "type": "string"
3584
+ },
3585
+ "productId": {
3586
+ "type": "string"
3587
+ },
3588
+ "supplierId": {
3589
+ "type": [
3590
+ "string",
3591
+ "null"
3592
+ ]
3593
+ },
3594
+ "code": {
3595
+ "type": [
3596
+ "string",
3597
+ "null"
3598
+ ]
3599
+ },
3600
+ "name": {
3601
+ "type": "string"
3602
+ },
3603
+ "description": {
3604
+ "type": [
3605
+ "string",
3606
+ "null"
3607
+ ]
3608
+ },
3609
+ "selectionType": {
3610
+ "type": "string",
3611
+ "enum": [
3612
+ "optional",
3613
+ "required",
3614
+ "default_selected",
3615
+ "unavailable"
3616
+ ]
3617
+ },
3618
+ "pricingMode": {
3619
+ "type": "string",
3620
+ "enum": [
3621
+ "included",
3622
+ "per_person",
3623
+ "per_booking",
3624
+ "quantity_based",
3625
+ "on_request",
3626
+ "free"
3627
+ ]
3628
+ },
3629
+ "pricedPerPerson": {
3630
+ "type": "boolean"
3631
+ },
3632
+ "collectionMode": {
3633
+ "type": "string",
3634
+ "enum": [
3635
+ "booking_total",
3636
+ "cash_on_trip",
3637
+ "external",
3638
+ "included",
3639
+ "none"
3640
+ ]
3641
+ },
3642
+ "showOnSlotManifest": {
3643
+ "type": "boolean"
3644
+ },
3645
+ "minQuantity": {
3646
+ "type": [
3647
+ "integer",
3648
+ "null"
3649
+ ]
3650
+ },
3651
+ "maxQuantity": {
3652
+ "type": [
3653
+ "integer",
3654
+ "null"
3655
+ ]
3656
+ },
3657
+ "defaultQuantity": {
3658
+ "type": [
3659
+ "integer",
3660
+ "null"
3661
+ ]
3662
+ },
3663
+ "active": {
3664
+ "type": "boolean"
3665
+ },
3666
+ "sortOrder": {
3667
+ "type": "integer"
3668
+ },
3669
+ "metadata": {
3670
+ "type": [
3671
+ "object",
3672
+ "null"
3673
+ ],
3674
+ "additionalProperties": {}
3675
+ },
3676
+ "createdAt": {
3677
+ "type": "string"
3678
+ },
3679
+ "updatedAt": {
3680
+ "type": "string"
3681
+ }
3682
+ },
3683
+ "required": [
3684
+ "id",
3685
+ "productId",
3686
+ "supplierId",
3687
+ "code",
3688
+ "name",
3689
+ "description",
3690
+ "selectionType",
3691
+ "pricingMode",
3692
+ "pricedPerPerson",
3693
+ "collectionMode",
3694
+ "showOnSlotManifest",
3695
+ "minQuantity",
3696
+ "maxQuantity",
3697
+ "defaultQuantity",
3698
+ "active",
3699
+ "sortOrder",
3700
+ "metadata",
3701
+ "createdAt",
3702
+ "updatedAt"
3703
+ ]
3704
+ }
3705
+ },
3706
+ "travelers": {
3707
+ "type": "array",
3708
+ "items": {
3709
+ "type": "object",
3710
+ "properties": {
3711
+ "id": {
3712
+ "type": "string"
3713
+ },
3714
+ "bookingId": {
3715
+ "type": "string"
3716
+ },
3717
+ "bookingNumber": {
3718
+ "type": "string"
3719
+ },
3720
+ "bookingStatus": {
3721
+ "type": "string"
3722
+ },
3723
+ "participantType": {
3724
+ "type": "string"
3725
+ },
3726
+ "travelerCategory": {
3727
+ "type": [
3728
+ "string",
3729
+ "null"
3730
+ ]
3731
+ },
3732
+ "firstName": {
3733
+ "type": "string"
3734
+ },
3735
+ "lastName": {
3736
+ "type": "string"
3737
+ },
3738
+ "email": {
3739
+ "type": [
3740
+ "string",
3741
+ "null"
3742
+ ]
3743
+ },
3744
+ "phone": {
3745
+ "type": [
3746
+ "string",
3747
+ "null"
3748
+ ]
3749
+ },
3750
+ "isPrimary": {
3751
+ "type": "boolean"
3752
+ },
3753
+ "createdAt": {
3754
+ "type": "string"
3755
+ },
3756
+ "fullName": {
3757
+ "type": "string"
3758
+ }
3759
+ },
3760
+ "required": [
3761
+ "id",
3762
+ "bookingId",
3763
+ "bookingNumber",
3764
+ "bookingStatus",
3765
+ "participantType",
3766
+ "travelerCategory",
3767
+ "firstName",
3768
+ "lastName",
3769
+ "email",
3770
+ "phone",
3771
+ "isPrimary",
3772
+ "createdAt",
3773
+ "fullName"
3774
+ ]
3775
+ }
3776
+ },
3777
+ "selections": {
3778
+ "type": "array",
3779
+ "items": {
3780
+ "type": "object",
3781
+ "properties": {
3782
+ "bookingId": {
3783
+ "type": "string"
3784
+ },
3785
+ "travelerId": {
3786
+ "type": "string"
3787
+ },
3788
+ "productExtraId": {
3789
+ "type": "string"
3790
+ },
3791
+ "optionExtraConfigId": {
3792
+ "type": [
3793
+ "string",
3794
+ "null"
3795
+ ]
3796
+ },
3797
+ "bookingItemId": {
3798
+ "type": [
3799
+ "string",
3800
+ "null"
3801
+ ]
3802
+ },
3803
+ "status": {
3804
+ "type": "string"
3805
+ },
3806
+ "selected": {
3807
+ "type": "boolean"
3808
+ },
3809
+ "collectionMode": {
3810
+ "type": "string",
3811
+ "enum": [
3812
+ "booking_total",
3813
+ "cash_on_trip",
3814
+ "external",
3815
+ "included",
3816
+ "none"
3817
+ ]
3818
+ },
3819
+ "collectionStatus": {
3820
+ "type": "string"
3821
+ },
3822
+ "collectionCurrency": {
3823
+ "type": [
3824
+ "string",
3825
+ "null"
3826
+ ]
3827
+ },
3828
+ "collectionAmountCents": {
3829
+ "type": [
3830
+ "integer",
3831
+ "null"
3832
+ ]
3833
+ },
3834
+ "collectedAt": {
3835
+ "type": [
3836
+ "string",
3837
+ "null"
3838
+ ]
3839
+ },
3840
+ "collectedBy": {
3841
+ "type": [
3842
+ "string",
3843
+ "null"
3844
+ ]
3845
+ },
3846
+ "notes": {
3847
+ "type": [
3848
+ "string",
3849
+ "null"
3850
+ ]
3851
+ },
3852
+ "metadata": {
3853
+ "type": [
3854
+ "object",
3855
+ "null"
3856
+ ],
3857
+ "additionalProperties": {}
3858
+ },
3859
+ "source": {
3860
+ "type": "string"
3861
+ }
3862
+ },
3863
+ "required": [
3864
+ "bookingId",
3865
+ "travelerId",
3866
+ "productExtraId",
3867
+ "optionExtraConfigId",
3868
+ "bookingItemId",
3869
+ "status",
3870
+ "selected",
3871
+ "collectionMode",
3872
+ "collectionStatus",
3873
+ "collectionCurrency",
3874
+ "collectionAmountCents",
3875
+ "collectedAt",
3876
+ "collectedBy",
3877
+ "notes",
3878
+ "metadata",
3879
+ "source"
3880
+ ]
3881
+ }
3882
+ }
3883
+ },
3884
+ "required": [
3885
+ "slot",
3886
+ "extras",
3887
+ "travelers",
3888
+ "selections"
3889
+ ]
3890
+ }
3891
+ },
3892
+ "required": [
3893
+ "data"
3894
+ ]
3895
+ }
3896
+ }
3897
+ }
3898
+ },
3899
+ "400": {
3900
+ "description": "invalid_request — request input failed validation",
3901
+ "content": {
3902
+ "application/json": {
3903
+ "schema": {
3904
+ "type": "object",
3905
+ "properties": {
3906
+ "error": {
3907
+ "type": "string"
3908
+ }
3909
+ },
3910
+ "required": [
3911
+ "error"
3912
+ ]
3913
+ }
3914
+ }
3915
+ }
3916
+ },
3917
+ "404": {
3918
+ "description": "Slot not found",
3919
+ "content": {
3920
+ "application/json": {
3921
+ "schema": {
3922
+ "type": "object",
3923
+ "properties": {
3924
+ "error": {
3925
+ "type": "string"
3926
+ }
3927
+ },
3928
+ "required": [
3929
+ "error"
3930
+ ]
3931
+ }
3932
+ }
3933
+ }
3934
+ }
3935
+ },
3936
+ "operationId": "getAdminExtrasSlotManifestsBySlotId",
3937
+ "summary": "GET /v1/admin/extras/slot-manifests/{slotId}",
3938
+ "tags": [
3939
+ "extras"
3940
+ ],
3941
+ "x-voyant-module": "extras",
3942
+ "x-voyant-surface": "admin"
3943
+ }
3944
+ },
3945
+ "/v1/admin/extras/slot-manifests/{slotId}/selections": {
3946
+ "patch": {
3947
+ "parameters": [
3948
+ {
3949
+ "schema": {
3950
+ "type": "string"
3951
+ },
3952
+ "required": true,
3953
+ "name": "slotId",
3954
+ "in": "path"
3955
+ }
3956
+ ],
3957
+ "requestBody": {
3958
+ "required": true,
3959
+ "description": "A single slot extra selection",
3960
+ "content": {
3961
+ "application/json": {
3962
+ "schema": {
3963
+ "type": "object",
3964
+ "properties": {
3965
+ "bookingId": {
3966
+ "type": "string",
3967
+ "minLength": 1
3968
+ },
3969
+ "travelerId": {
3970
+ "type": "string",
3971
+ "minLength": 1
3972
+ },
3973
+ "productExtraId": {
3974
+ "type": "string",
3975
+ "minLength": 1
3976
+ },
3977
+ "optionExtraConfigId": {
3978
+ "type": [
3979
+ "string",
3980
+ "null"
3981
+ ]
3982
+ },
3983
+ "status": {
3984
+ "type": "string",
3985
+ "enum": [
3986
+ "selected",
3987
+ "cancelled",
3988
+ "fulfilled",
3989
+ "no_show"
3990
+ ],
3991
+ "default": "selected"
3992
+ },
3993
+ "collectionStatus": {
3994
+ "type": "string",
3995
+ "enum": [
3996
+ "not_required",
3997
+ "pending",
3998
+ "collected",
3999
+ "waived",
4000
+ "refunded"
4001
+ ]
4002
+ },
4003
+ "collectionCurrency": {
4004
+ "type": [
4005
+ "string",
4006
+ "null"
4007
+ ],
4008
+ "minLength": 3,
4009
+ "maxLength": 3
4010
+ },
4011
+ "collectionAmountCents": {
4012
+ "type": [
4013
+ "integer",
4014
+ "null"
4015
+ ],
4016
+ "minimum": 0
4017
+ },
4018
+ "notes": {
4019
+ "type": [
4020
+ "string",
4021
+ "null"
4022
+ ]
4023
+ },
4024
+ "metadata": {
4025
+ "type": [
4026
+ "object",
4027
+ "null"
4028
+ ],
4029
+ "additionalProperties": {}
4030
+ }
4031
+ },
4032
+ "required": [
4033
+ "bookingId",
4034
+ "travelerId",
4035
+ "productExtraId"
4036
+ ]
4037
+ }
4038
+ }
4039
+ }
4040
+ },
4041
+ "responses": {
4042
+ "200": {
4043
+ "description": "The upserted selection",
4044
+ "content": {
4045
+ "application/json": {
4046
+ "schema": {
4047
+ "type": "object",
4048
+ "properties": {
4049
+ "data": {
4050
+ "type": [
4051
+ "object",
4052
+ "null"
4053
+ ],
4054
+ "properties": {
4055
+ "id": {
4056
+ "type": "string"
4057
+ },
4058
+ "bookingId": {
4059
+ "type": "string"
4060
+ },
4061
+ "bookingItemId": {
4062
+ "type": [
4063
+ "string",
4064
+ "null"
4065
+ ]
4066
+ },
4067
+ "travelerId": {
4068
+ "type": "string"
4069
+ },
4070
+ "productExtraId": {
4071
+ "type": "string"
4072
+ },
4073
+ "optionExtraConfigId": {
4074
+ "type": [
4075
+ "string",
4076
+ "null"
4077
+ ]
4078
+ },
4079
+ "status": {
4080
+ "type": "string",
4081
+ "enum": [
4082
+ "selected",
4083
+ "cancelled",
4084
+ "fulfilled",
4085
+ "no_show"
4086
+ ]
4087
+ },
4088
+ "collectionMode": {
4089
+ "type": "string",
4090
+ "enum": [
4091
+ "booking_total",
4092
+ "cash_on_trip",
4093
+ "external",
4094
+ "included",
4095
+ "none"
4096
+ ]
4097
+ },
4098
+ "collectionStatus": {
4099
+ "type": "string",
4100
+ "enum": [
4101
+ "not_required",
4102
+ "pending",
4103
+ "collected",
4104
+ "waived",
4105
+ "refunded"
4106
+ ]
4107
+ },
4108
+ "collectionCurrency": {
4109
+ "type": [
4110
+ "string",
4111
+ "null"
4112
+ ]
4113
+ },
4114
+ "collectionAmountCents": {
4115
+ "type": [
4116
+ "integer",
4117
+ "null"
4118
+ ]
4119
+ },
4120
+ "collectedAt": {
4121
+ "type": [
4122
+ "string",
4123
+ "null"
4124
+ ]
4125
+ },
4126
+ "collectedBy": {
4127
+ "type": [
4128
+ "string",
4129
+ "null"
4130
+ ]
4131
+ },
4132
+ "notes": {
4133
+ "type": [
4134
+ "string",
4135
+ "null"
4136
+ ]
4137
+ },
4138
+ "metadata": {
4139
+ "type": [
4140
+ "object",
4141
+ "null"
4142
+ ],
4143
+ "additionalProperties": {}
4144
+ },
4145
+ "createdAt": {
4146
+ "type": "string"
4147
+ },
4148
+ "updatedAt": {
4149
+ "type": "string"
4150
+ }
4151
+ },
4152
+ "required": [
4153
+ "id",
4154
+ "bookingId",
4155
+ "bookingItemId",
4156
+ "travelerId",
4157
+ "productExtraId",
4158
+ "optionExtraConfigId",
4159
+ "status",
4160
+ "collectionMode",
4161
+ "collectionStatus",
4162
+ "collectionCurrency",
4163
+ "collectionAmountCents",
4164
+ "collectedAt",
4165
+ "collectedBy",
4166
+ "notes",
4167
+ "metadata",
4168
+ "createdAt",
4169
+ "updatedAt"
4170
+ ]
4171
+ }
4172
+ },
4173
+ "required": [
4174
+ "data"
4175
+ ]
4176
+ }
4177
+ }
4178
+ }
4179
+ },
4180
+ "400": {
4181
+ "description": "invalid_request — request input failed validation",
4182
+ "content": {
4183
+ "application/json": {
4184
+ "schema": {
4185
+ "type": "object",
4186
+ "properties": {
4187
+ "error": {
4188
+ "type": "string"
4189
+ }
4190
+ },
4191
+ "required": [
4192
+ "error"
4193
+ ]
4194
+ }
4195
+ }
4196
+ }
4197
+ },
4198
+ "404": {
4199
+ "description": "Slot, extra, or traveler not found",
4200
+ "content": {
4201
+ "application/json": {
4202
+ "schema": {
4203
+ "type": "object",
4204
+ "properties": {
4205
+ "error": {
4206
+ "type": "string"
4207
+ }
4208
+ },
4209
+ "required": [
4210
+ "error"
4211
+ ]
4212
+ }
4213
+ }
4214
+ }
4215
+ }
4216
+ },
4217
+ "operationId": "patchAdminExtrasSlotManifestsBySlotIdSelections",
4218
+ "summary": "PATCH /v1/admin/extras/slot-manifests/{slotId}/selections",
4219
+ "tags": [
4220
+ "extras"
4221
+ ],
4222
+ "x-voyant-module": "extras",
4223
+ "x-voyant-surface": "admin"
4224
+ }
4225
+ },
4226
+ "/v1/admin/extras/slot-manifests/{slotId}/selections/bulk": {
4227
+ "post": {
4228
+ "parameters": [
4229
+ {
4230
+ "schema": {
4231
+ "type": "string"
4232
+ },
4233
+ "required": true,
4234
+ "name": "slotId",
4235
+ "in": "path"
4236
+ }
4237
+ ],
4238
+ "requestBody": {
4239
+ "required": true,
4240
+ "description": "Bulk slot extra selections",
4241
+ "content": {
4242
+ "application/json": {
4243
+ "schema": {
4244
+ "type": "object",
4245
+ "properties": {
4246
+ "selections": {
4247
+ "type": "array",
4248
+ "items": {
4249
+ "type": "object",
4250
+ "properties": {
4251
+ "bookingId": {
4252
+ "type": "string",
4253
+ "minLength": 1
4254
+ },
4255
+ "travelerId": {
4256
+ "type": "string",
4257
+ "minLength": 1
4258
+ },
4259
+ "productExtraId": {
4260
+ "type": "string",
4261
+ "minLength": 1
4262
+ },
4263
+ "optionExtraConfigId": {
4264
+ "type": [
4265
+ "string",
4266
+ "null"
4267
+ ]
4268
+ },
4269
+ "status": {
4270
+ "type": "string",
4271
+ "enum": [
4272
+ "selected",
4273
+ "cancelled",
4274
+ "fulfilled",
4275
+ "no_show"
4276
+ ],
4277
+ "default": "selected"
4278
+ },
4279
+ "collectionStatus": {
4280
+ "type": "string",
4281
+ "enum": [
4282
+ "not_required",
4283
+ "pending",
4284
+ "collected",
4285
+ "waived",
4286
+ "refunded"
4287
+ ]
4288
+ },
4289
+ "collectionCurrency": {
4290
+ "type": [
4291
+ "string",
4292
+ "null"
4293
+ ],
4294
+ "minLength": 3,
4295
+ "maxLength": 3
4296
+ },
4297
+ "collectionAmountCents": {
4298
+ "type": [
4299
+ "integer",
4300
+ "null"
4301
+ ],
4302
+ "minimum": 0
4303
+ },
4304
+ "notes": {
4305
+ "type": [
4306
+ "string",
4307
+ "null"
4308
+ ]
4309
+ },
4310
+ "metadata": {
4311
+ "type": [
4312
+ "object",
4313
+ "null"
4314
+ ],
4315
+ "additionalProperties": {}
4316
+ }
4317
+ },
4318
+ "required": [
4319
+ "bookingId",
4320
+ "travelerId",
4321
+ "productExtraId"
4322
+ ]
4323
+ },
4324
+ "minItems": 1,
4325
+ "maxItems": 500
4326
+ }
4327
+ },
4328
+ "required": [
4329
+ "selections"
4330
+ ]
4331
+ }
4332
+ }
4333
+ }
4334
+ },
4335
+ "responses": {
4336
+ "200": {
4337
+ "description": "The upserted selections",
4338
+ "content": {
4339
+ "application/json": {
4340
+ "schema": {
4341
+ "type": "object",
4342
+ "properties": {
4343
+ "data": {
4344
+ "type": "array",
4345
+ "items": {
4346
+ "type": [
4347
+ "object",
4348
+ "null"
4349
+ ],
4350
+ "properties": {
4351
+ "id": {
4352
+ "type": "string"
4353
+ },
4354
+ "bookingId": {
4355
+ "type": "string"
4356
+ },
4357
+ "bookingItemId": {
4358
+ "type": [
4359
+ "string",
4360
+ "null"
4361
+ ]
4362
+ },
4363
+ "travelerId": {
4364
+ "type": "string"
4365
+ },
4366
+ "productExtraId": {
4367
+ "type": "string"
4368
+ },
4369
+ "optionExtraConfigId": {
4370
+ "type": [
4371
+ "string",
4372
+ "null"
4373
+ ]
4374
+ },
4375
+ "status": {
4376
+ "type": "string",
4377
+ "enum": [
4378
+ "selected",
4379
+ "cancelled",
4380
+ "fulfilled",
4381
+ "no_show"
4382
+ ]
4383
+ },
4384
+ "collectionMode": {
4385
+ "type": "string",
4386
+ "enum": [
4387
+ "booking_total",
4388
+ "cash_on_trip",
4389
+ "external",
4390
+ "included",
4391
+ "none"
4392
+ ]
4393
+ },
4394
+ "collectionStatus": {
4395
+ "type": "string",
4396
+ "enum": [
4397
+ "not_required",
4398
+ "pending",
4399
+ "collected",
4400
+ "waived",
4401
+ "refunded"
4402
+ ]
4403
+ },
4404
+ "collectionCurrency": {
4405
+ "type": [
4406
+ "string",
4407
+ "null"
4408
+ ]
4409
+ },
4410
+ "collectionAmountCents": {
4411
+ "type": [
4412
+ "integer",
4413
+ "null"
4414
+ ]
4415
+ },
4416
+ "collectedAt": {
4417
+ "type": [
4418
+ "string",
4419
+ "null"
4420
+ ]
4421
+ },
4422
+ "collectedBy": {
4423
+ "type": [
4424
+ "string",
4425
+ "null"
4426
+ ]
4427
+ },
4428
+ "notes": {
4429
+ "type": [
4430
+ "string",
4431
+ "null"
4432
+ ]
4433
+ },
4434
+ "metadata": {
4435
+ "type": [
4436
+ "object",
4437
+ "null"
4438
+ ],
4439
+ "additionalProperties": {}
4440
+ },
4441
+ "createdAt": {
4442
+ "type": "string"
4443
+ },
4444
+ "updatedAt": {
4445
+ "type": "string"
4446
+ }
4447
+ },
4448
+ "required": [
4449
+ "id",
4450
+ "bookingId",
4451
+ "bookingItemId",
4452
+ "travelerId",
4453
+ "productExtraId",
4454
+ "optionExtraConfigId",
4455
+ "status",
4456
+ "collectionMode",
4457
+ "collectionStatus",
4458
+ "collectionCurrency",
4459
+ "collectionAmountCents",
4460
+ "collectedAt",
4461
+ "collectedBy",
4462
+ "notes",
4463
+ "metadata",
4464
+ "createdAt",
4465
+ "updatedAt"
4466
+ ]
4467
+ }
4468
+ }
4469
+ },
4470
+ "required": [
4471
+ "data"
4472
+ ]
4473
+ }
4474
+ }
4475
+ }
4476
+ },
4477
+ "400": {
4478
+ "description": "invalid_request — request input failed validation",
4479
+ "content": {
4480
+ "application/json": {
4481
+ "schema": {
4482
+ "type": "object",
4483
+ "properties": {
4484
+ "error": {
4485
+ "type": "string"
4486
+ }
4487
+ },
4488
+ "required": [
4489
+ "error"
4490
+ ]
4491
+ }
4492
+ }
4493
+ }
4494
+ },
4495
+ "404": {
4496
+ "description": "Slot, extra, or traveler not found",
4497
+ "content": {
4498
+ "application/json": {
4499
+ "schema": {
4500
+ "type": "object",
4501
+ "properties": {
4502
+ "error": {
4503
+ "type": "string"
4504
+ }
4505
+ },
4506
+ "required": [
4507
+ "error"
4508
+ ]
4509
+ }
4510
+ }
4511
+ }
4512
+ }
4513
+ },
4514
+ "operationId": "postAdminExtrasSlotManifestsBySlotIdSelectionsBulk",
4515
+ "summary": "POST /v1/admin/extras/slot-manifests/{slotId}/selections/bulk",
4516
+ "tags": [
4517
+ "extras"
4518
+ ],
4519
+ "x-voyant-module": "extras",
4520
+ "x-voyant-surface": "admin"
4521
+ }
4522
+ },
4523
+ "/v1/admin/extras/slot-manifests/{slotId}/collections/bulk": {
4524
+ "post": {
4525
+ "parameters": [
4526
+ {
4527
+ "schema": {
4528
+ "type": "string"
4529
+ },
4530
+ "required": true,
4531
+ "name": "slotId",
4532
+ "in": "path"
4533
+ }
4534
+ ],
4535
+ "requestBody": {
4536
+ "required": true,
4537
+ "description": "Bulk slot extra collection updates",
4538
+ "content": {
4539
+ "application/json": {
4540
+ "schema": {
4541
+ "type": "object",
4542
+ "properties": {
4543
+ "productExtraId": {
4544
+ "type": "string",
4545
+ "minLength": 1
4546
+ },
4547
+ "travelerIds": {
4548
+ "type": "array",
4549
+ "items": {
4550
+ "type": "string",
4551
+ "minLength": 1
4552
+ },
4553
+ "minItems": 1,
4554
+ "maxItems": 500
4555
+ },
4556
+ "collectionStatus": {
4557
+ "type": "string",
4558
+ "enum": [
4559
+ "not_required",
4560
+ "pending",
4561
+ "collected",
4562
+ "waived",
4563
+ "refunded"
4564
+ ]
4565
+ },
4566
+ "collectionCurrency": {
4567
+ "type": [
4568
+ "string",
4569
+ "null"
4570
+ ],
4571
+ "minLength": 3,
4572
+ "maxLength": 3
4573
+ },
4574
+ "collectionAmountCents": {
4575
+ "type": [
4576
+ "integer",
4577
+ "null"
4578
+ ],
4579
+ "minimum": 0
4580
+ },
4581
+ "notes": {
4582
+ "type": [
4583
+ "string",
4584
+ "null"
4585
+ ]
4586
+ }
4587
+ },
4588
+ "required": [
4589
+ "productExtraId",
4590
+ "travelerIds",
4591
+ "collectionStatus"
4592
+ ]
4593
+ }
4594
+ }
4595
+ }
4596
+ },
4597
+ "responses": {
4598
+ "200": {
4599
+ "description": "The updated collection selections",
4600
+ "content": {
4601
+ "application/json": {
4602
+ "schema": {
4603
+ "type": "object",
4604
+ "properties": {
4605
+ "data": {
4606
+ "type": "array",
4607
+ "items": {
4608
+ "type": [
4609
+ "object",
4610
+ "null"
4611
+ ],
4612
+ "properties": {
4613
+ "id": {
4614
+ "type": "string"
4615
+ },
4616
+ "bookingId": {
4617
+ "type": "string"
4618
+ },
4619
+ "bookingItemId": {
4620
+ "type": [
4621
+ "string",
4622
+ "null"
4623
+ ]
4624
+ },
4625
+ "travelerId": {
4626
+ "type": "string"
4627
+ },
4628
+ "productExtraId": {
4629
+ "type": "string"
4630
+ },
4631
+ "optionExtraConfigId": {
4632
+ "type": [
4633
+ "string",
4634
+ "null"
4635
+ ]
4636
+ },
4637
+ "status": {
4638
+ "type": "string",
4639
+ "enum": [
4640
+ "selected",
4641
+ "cancelled",
4642
+ "fulfilled",
4643
+ "no_show"
4644
+ ]
4645
+ },
4646
+ "collectionMode": {
4647
+ "type": "string",
4648
+ "enum": [
4649
+ "booking_total",
4650
+ "cash_on_trip",
4651
+ "external",
4652
+ "included",
4653
+ "none"
4654
+ ]
4655
+ },
4656
+ "collectionStatus": {
4657
+ "type": "string",
4658
+ "enum": [
4659
+ "not_required",
4660
+ "pending",
4661
+ "collected",
4662
+ "waived",
4663
+ "refunded"
4664
+ ]
4665
+ },
4666
+ "collectionCurrency": {
4667
+ "type": [
4668
+ "string",
4669
+ "null"
4670
+ ]
4671
+ },
4672
+ "collectionAmountCents": {
4673
+ "type": [
4674
+ "integer",
4675
+ "null"
4676
+ ]
4677
+ },
4678
+ "collectedAt": {
4679
+ "type": [
4680
+ "string",
4681
+ "null"
4682
+ ]
4683
+ },
4684
+ "collectedBy": {
4685
+ "type": [
4686
+ "string",
4687
+ "null"
4688
+ ]
4689
+ },
4690
+ "notes": {
4691
+ "type": [
4692
+ "string",
4693
+ "null"
4694
+ ]
4695
+ },
4696
+ "metadata": {
4697
+ "type": [
4698
+ "object",
4699
+ "null"
4700
+ ],
4701
+ "additionalProperties": {}
4702
+ },
4703
+ "createdAt": {
4704
+ "type": "string"
4705
+ },
4706
+ "updatedAt": {
4707
+ "type": "string"
4708
+ }
4709
+ },
4710
+ "required": [
4711
+ "id",
4712
+ "bookingId",
4713
+ "bookingItemId",
4714
+ "travelerId",
4715
+ "productExtraId",
4716
+ "optionExtraConfigId",
4717
+ "status",
4718
+ "collectionMode",
4719
+ "collectionStatus",
4720
+ "collectionCurrency",
4721
+ "collectionAmountCents",
4722
+ "collectedAt",
4723
+ "collectedBy",
4724
+ "notes",
4725
+ "metadata",
4726
+ "createdAt",
4727
+ "updatedAt"
4728
+ ]
4729
+ }
4730
+ }
4731
+ },
4732
+ "required": [
4733
+ "data"
4734
+ ]
4735
+ }
4736
+ }
4737
+ }
4738
+ },
4739
+ "400": {
4740
+ "description": "invalid_request — request input failed validation",
4741
+ "content": {
4742
+ "application/json": {
4743
+ "schema": {
4744
+ "type": "object",
4745
+ "properties": {
4746
+ "error": {
4747
+ "type": "string"
4748
+ }
4749
+ },
4750
+ "required": [
4751
+ "error"
4752
+ ]
4753
+ }
4754
+ }
4755
+ }
4756
+ },
4757
+ "404": {
4758
+ "description": "Slot, extra, or traveler not found",
4759
+ "content": {
4760
+ "application/json": {
4761
+ "schema": {
4762
+ "type": "object",
4763
+ "properties": {
4764
+ "error": {
4765
+ "type": "string"
4766
+ }
4767
+ },
4768
+ "required": [
4769
+ "error"
4770
+ ]
4771
+ }
4772
+ }
4773
+ }
4774
+ }
4775
+ },
4776
+ "operationId": "postAdminExtrasSlotManifestsBySlotIdCollectionsBulk",
4777
+ "summary": "POST /v1/admin/extras/slot-manifests/{slotId}/collections/bulk",
4778
+ "tags": [
4779
+ "extras"
4780
+ ],
4781
+ "x-voyant-module": "extras",
4782
+ "x-voyant-surface": "admin"
4783
+ }
4784
+ }
4785
+ },
4786
+ "webhooks": {}
4787
+ }