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