@gojinko/api-client 1.2.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2378 @@
1
+ openapi: 3.0.0
2
+ info:
3
+ title: Jinko Public API
4
+ version: 0.1.0
5
+ description: Curated public REST surface for Jinko. Authenticated with jnk_ API
6
+ keys. See https://docs.gojinko.com for guides.
7
+ components:
8
+ securitySchemes:
9
+ ApiKeyAuth:
10
+ type: apiKey
11
+ in: header
12
+ name: X-API-Key
13
+ schemas:
14
+ HealthResponse:
15
+ type: object
16
+ properties:
17
+ status:
18
+ type: string
19
+ enum:
20
+ - ok
21
+ service:
22
+ type: string
23
+ enum:
24
+ - jinko-api
25
+ version:
26
+ type: string
27
+ example: 0.1.0
28
+ required:
29
+ - status
30
+ - service
31
+ - version
32
+ Amount:
33
+ type: object
34
+ properties:
35
+ value:
36
+ type: number
37
+ currency:
38
+ type: string
39
+ decimal_places:
40
+ type: integer
41
+ required:
42
+ - value
43
+ - currency
44
+ Itinerary:
45
+ type: object
46
+ properties:
47
+ id:
48
+ type: string
49
+ origin:
50
+ type: object
51
+ properties:
52
+ code:
53
+ type: string
54
+ name:
55
+ type: string
56
+ required:
57
+ - code
58
+ destination:
59
+ type: object
60
+ properties:
61
+ code:
62
+ type: string
63
+ name:
64
+ type: string
65
+ required:
66
+ - code
67
+ total:
68
+ $ref: "#/components/schemas/Amount"
69
+ cabin_class:
70
+ type: string
71
+ deep_link:
72
+ type: string
73
+ required:
74
+ - id
75
+ - origin
76
+ - destination
77
+ DestinationSuggestion:
78
+ type: object
79
+ properties:
80
+ city_name:
81
+ type: string
82
+ iata_code:
83
+ type: string
84
+ image_url:
85
+ type: string
86
+ location:
87
+ type: object
88
+ properties:
89
+ latitude:
90
+ type: number
91
+ longitude:
92
+ type: number
93
+ required:
94
+ - latitude
95
+ - longitude
96
+ lowest_fare:
97
+ $ref: "#/components/schemas/Itinerary"
98
+ flights:
99
+ type: array
100
+ items:
101
+ $ref: "#/components/schemas/Itinerary"
102
+ required:
103
+ - flights
104
+ FindDestinationResponse:
105
+ type: object
106
+ properties:
107
+ destinations:
108
+ type: array
109
+ items:
110
+ $ref: "#/components/schemas/DestinationSuggestion"
111
+ total:
112
+ type: number
113
+ next_page_token:
114
+ type: string
115
+ required:
116
+ - destinations
117
+ ErrorResponse:
118
+ type: object
119
+ properties:
120
+ error:
121
+ type: object
122
+ properties:
123
+ code:
124
+ type: string
125
+ message:
126
+ type: string
127
+ doc_url:
128
+ type: string
129
+ required:
130
+ - code
131
+ - message
132
+ required:
133
+ - error
134
+ DateRange:
135
+ type: object
136
+ properties:
137
+ start:
138
+ type: string
139
+ pattern: ^\d{4}-\d{2}-\d{2}$
140
+ end:
141
+ type: string
142
+ pattern: ^\d{4}-\d{2}-\d{2}$
143
+ required:
144
+ - start
145
+ - end
146
+ example:
147
+ start: 2026-06-01
148
+ end: 2026-06-30
149
+ FlightDiscoveryRequest:
150
+ type: object
151
+ properties:
152
+ origins:
153
+ type: array
154
+ items:
155
+ type: string
156
+ example:
157
+ - JFK
158
+ - EWR
159
+ destinations:
160
+ type: array
161
+ items:
162
+ type: string
163
+ origin_type:
164
+ type: string
165
+ enum: &a1
166
+ - city
167
+ - airport
168
+ default: city
169
+ destination_type:
170
+ type: string
171
+ enum: *a1
172
+ default: city
173
+ departure_dates:
174
+ type: array
175
+ items:
176
+ type: string
177
+ pattern: ^\d{4}-\d{2}-\d{2}$
178
+ departure_date_ranges:
179
+ type: array
180
+ items:
181
+ $ref: "#/components/schemas/DateRange"
182
+ return_dates:
183
+ type: array
184
+ items:
185
+ type: string
186
+ pattern: ^\d{4}-\d{2}-\d{2}$
187
+ return_date_ranges:
188
+ type: array
189
+ items:
190
+ $ref: "#/components/schemas/DateRange"
191
+ stay_days:
192
+ type: integer
193
+ minimum: 0
194
+ exclusiveMinimum: true
195
+ stay_days_range:
196
+ type: object
197
+ properties:
198
+ min:
199
+ type: integer
200
+ max:
201
+ type: integer
202
+ required:
203
+ - min
204
+ - max
205
+ trip_type:
206
+ type: string
207
+ enum: &a2
208
+ - oneway
209
+ - roundtrip
210
+ cabin_class:
211
+ type: string
212
+ enum: &a3
213
+ - economy
214
+ - premium_economy
215
+ - business
216
+ - first
217
+ direct_only:
218
+ type: boolean
219
+ adults:
220
+ type: integer
221
+ minimum: 0
222
+ children:
223
+ type: integer
224
+ minimum: 0
225
+ infants_in_lap:
226
+ type: integer
227
+ minimum: 0
228
+ infants_in_seat:
229
+ type: integer
230
+ minimum: 0
231
+ youth:
232
+ type: integer
233
+ minimum: 0
234
+ student:
235
+ type: integer
236
+ minimum: 0
237
+ ages:
238
+ type: array
239
+ items:
240
+ type: integer
241
+ minimum: 0
242
+ residency_country:
243
+ type: string
244
+ minLength: 2
245
+ maxLength: 2
246
+ max_total:
247
+ type: number
248
+ minimum: 0
249
+ exclusiveMinimum: true
250
+ currency:
251
+ type: string
252
+ example: USD
253
+ locale:
254
+ type: string
255
+ example: en-US
256
+ limit:
257
+ type: integer
258
+ minimum: 1
259
+ maximum: 100
260
+ default: 20
261
+ offset:
262
+ type: integer
263
+ minimum: 0
264
+ default: 0
265
+ sort_by:
266
+ type: string
267
+ enum:
268
+ - lowest
269
+ - recommendation
270
+ default: lowest
271
+ FindDestinationRequest:
272
+ allOf:
273
+ - $ref: "#/components/schemas/FlightDiscoveryRequest"
274
+ - type: object
275
+ properties:
276
+ flights_per_destination:
277
+ type: integer
278
+ minimum: 1
279
+ maximum: 10
280
+ default: 1
281
+ FlightCalendarResponse:
282
+ type: object
283
+ properties:
284
+ itineraries:
285
+ type: array
286
+ items:
287
+ $ref: "#/components/schemas/Itinerary"
288
+ next_page_token:
289
+ type: string
290
+ required:
291
+ - itineraries
292
+ FlightLeg:
293
+ type: object
294
+ properties:
295
+ origin:
296
+ type: string
297
+ destination:
298
+ type: string
299
+ departure_datetime:
300
+ type: string
301
+ arrival_datetime:
302
+ type: string
303
+ duration_minutes:
304
+ type: number
305
+ airline:
306
+ type: string
307
+ airline_name:
308
+ type: string
309
+ stops:
310
+ type: number
311
+ Money:
312
+ type: object
313
+ properties:
314
+ amount:
315
+ type: number
316
+ value:
317
+ type: number
318
+ currency:
319
+ type: string
320
+ decimal_places:
321
+ type: integer
322
+ Fare:
323
+ type: object
324
+ properties:
325
+ trip_item_token:
326
+ type: string
327
+ cabin_class:
328
+ type: string
329
+ brand_name:
330
+ type: string
331
+ total_price:
332
+ $ref: "#/components/schemas/Money"
333
+ price_per_person:
334
+ $ref: "#/components/schemas/Money"
335
+ included_baggage:
336
+ type: string
337
+ carry_on_baggage:
338
+ type: string
339
+ is_changeable:
340
+ type: boolean
341
+ FlightOffer:
342
+ type: object
343
+ properties:
344
+ offer_id:
345
+ type: string
346
+ provider:
347
+ type: string
348
+ provider_name:
349
+ type: string
350
+ origin:
351
+ type: object
352
+ properties:
353
+ code:
354
+ type: string
355
+ name:
356
+ type: string
357
+ destination:
358
+ type: object
359
+ properties:
360
+ code:
361
+ type: string
362
+ name:
363
+ type: string
364
+ is_round_trip:
365
+ type: boolean
366
+ total_duration_minutes:
367
+ type: number
368
+ outbound:
369
+ $ref: "#/components/schemas/FlightLeg"
370
+ inbound:
371
+ $ref: "#/components/schemas/FlightLeg"
372
+ fares:
373
+ type: array
374
+ items:
375
+ $ref: "#/components/schemas/Fare"
376
+ required:
377
+ - offer_id
378
+ - origin
379
+ - destination
380
+ - fares
381
+ FlightSearchResponse:
382
+ type: object
383
+ properties:
384
+ offers:
385
+ type: array
386
+ items:
387
+ $ref: "#/components/schemas/FlightOffer"
388
+ exact_match_found:
389
+ type: boolean
390
+ required:
391
+ - offers
392
+ FlightSearchRequest:
393
+ type: object
394
+ properties:
395
+ origin:
396
+ type: string
397
+ example: JFK
398
+ destination:
399
+ type: string
400
+ example: LAX
401
+ departure_date:
402
+ type: string
403
+ pattern: ^\d{4}-\d{2}-\d{2}$
404
+ return_date:
405
+ type: string
406
+ pattern: ^\d{4}-\d{2}-\d{2}$
407
+ trip_type:
408
+ type: string
409
+ enum: *a2
410
+ cabin_class:
411
+ type: string
412
+ enum: *a3
413
+ direct_only:
414
+ type: boolean
415
+ max_price:
416
+ type: number
417
+ minimum: 0
418
+ exclusiveMinimum: true
419
+ include_carriers:
420
+ type: array
421
+ items:
422
+ type: string
423
+ exclude_carriers:
424
+ type: array
425
+ items:
426
+ type: string
427
+ adults:
428
+ type: integer
429
+ minimum: 1
430
+ default: 1
431
+ children:
432
+ type: integer
433
+ minimum: 0
434
+ infants:
435
+ type: integer
436
+ minimum: 0
437
+ currency:
438
+ type: string
439
+ locale:
440
+ type: string
441
+ offer_token:
442
+ type: string
443
+ required:
444
+ - origin
445
+ - destination
446
+ - departure_date
447
+ MonitoredMoney:
448
+ type: object
449
+ properties:
450
+ amount:
451
+ type: number
452
+ value:
453
+ type: number
454
+ currency:
455
+ type: string
456
+ decimal_places:
457
+ type: integer
458
+ MonitoredCarrier:
459
+ type: object
460
+ properties:
461
+ code:
462
+ type: string
463
+ name:
464
+ type: string
465
+ flight_number:
466
+ type: string
467
+ MonitoredFlight:
468
+ type: object
469
+ properties:
470
+ offer_token:
471
+ type: string
472
+ total_price:
473
+ $ref: "#/components/schemas/MonitoredMoney"
474
+ outbound_carrier:
475
+ $ref: "#/components/schemas/MonitoredCarrier"
476
+ inbound_carrier:
477
+ $ref: "#/components/schemas/MonitoredCarrier"
478
+ outbound_stops:
479
+ type: number
480
+ inbound_stops:
481
+ type: number
482
+ outbound_duration_minutes:
483
+ type: number
484
+ inbound_duration_minutes:
485
+ type: number
486
+ outbound_departure_local:
487
+ type: string
488
+ outbound_arrival_local:
489
+ type: string
490
+ inbound_departure_local:
491
+ type: string
492
+ inbound_arrival_local:
493
+ type: string
494
+ cabin_class:
495
+ type: string
496
+ fare_brand:
497
+ type: string
498
+ PriceMonitoringResponse:
499
+ type: object
500
+ properties:
501
+ status:
502
+ type: string
503
+ monitored_at:
504
+ type: string
505
+ flight:
506
+ $ref: "#/components/schemas/MonitoredFlight"
507
+ request_echo:
508
+ nullable: true
509
+ required:
510
+ - status
511
+ PriceMonitoringRequest:
512
+ type: object
513
+ properties:
514
+ origin:
515
+ type: string
516
+ example: PAR
517
+ destination:
518
+ type: string
519
+ example: NYC
520
+ departure_date:
521
+ type: string
522
+ pattern: ^\d{4}-\d{2}-\d{2}$
523
+ return_date:
524
+ type: string
525
+ pattern: ^\d{4}-\d{2}-\d{2}$
526
+ origin_type:
527
+ type: string
528
+ enum: &a4
529
+ - city
530
+ - airport
531
+ destination_type:
532
+ type: string
533
+ enum: *a4
534
+ cabin_class:
535
+ type: string
536
+ enum: *a3
537
+ direct_only:
538
+ type: boolean
539
+ max_price:
540
+ type: number
541
+ minimum: 0
542
+ exclusiveMinimum: true
543
+ include_carriers:
544
+ type: array
545
+ items:
546
+ type: string
547
+ exclude_carriers:
548
+ type: array
549
+ items:
550
+ type: string
551
+ adults:
552
+ type: integer
553
+ minimum: 1
554
+ default: 1
555
+ children:
556
+ type: integer
557
+ minimum: 0
558
+ infants:
559
+ type: integer
560
+ minimum: 0
561
+ currency:
562
+ type: string
563
+ locale:
564
+ type: string
565
+ required:
566
+ - origin
567
+ - destination
568
+ - departure_date
569
+ TripResponse:
570
+ type: object
571
+ properties:
572
+ trip_id:
573
+ type: string
574
+ status:
575
+ type: string
576
+ actions_performed:
577
+ type: array
578
+ items:
579
+ type: string
580
+ items:
581
+ type: array
582
+ items:
583
+ type: object
584
+ properties:
585
+ item_id:
586
+ type: string
587
+ kind:
588
+ type: string
589
+ price:
590
+ type: object
591
+ properties:
592
+ amount:
593
+ type: number
594
+ value:
595
+ type: number
596
+ currency:
597
+ type: string
598
+ decimal_places:
599
+ type: integer
600
+ pax_count:
601
+ type: number
602
+ available_ancillaries:
603
+ type: array
604
+ items:
605
+ nullable: true
606
+ selected_ancillaries:
607
+ type: array
608
+ items:
609
+ nullable: true
610
+ travelers:
611
+ type: array
612
+ items:
613
+ nullable: true
614
+ contact:
615
+ type: object
616
+ properties:
617
+ email:
618
+ type: string
619
+ phone:
620
+ type: string
621
+ totals:
622
+ type: object
623
+ properties:
624
+ currency:
625
+ type: string
626
+ total:
627
+ type: number
628
+ required:
629
+ - trip_id
630
+ Traveler:
631
+ type: object
632
+ properties:
633
+ first_name:
634
+ type: string
635
+ last_name:
636
+ type: string
637
+ date_of_birth:
638
+ type: string
639
+ pattern: ^\d{4}-\d{2}-\d{2}$
640
+ gender:
641
+ type: string
642
+ enum:
643
+ - MALE
644
+ - FEMALE
645
+ passenger_type:
646
+ type: string
647
+ enum:
648
+ - ADULT
649
+ - CHILD
650
+ - INFANT
651
+ nationality:
652
+ type: string
653
+ passport_number:
654
+ type: string
655
+ passport_expiry:
656
+ type: string
657
+ pattern: ^\d{4}-\d{2}-\d{2}$
658
+ passport_country:
659
+ type: string
660
+ required:
661
+ - first_name
662
+ - last_name
663
+ - date_of_birth
664
+ - gender
665
+ - passenger_type
666
+ TripRequest:
667
+ type: object
668
+ properties:
669
+ trip_id:
670
+ type: string
671
+ add_item:
672
+ type: object
673
+ properties:
674
+ trip_item_token:
675
+ type: string
676
+ required:
677
+ - trip_item_token
678
+ remove_item:
679
+ type: object
680
+ properties:
681
+ item_id:
682
+ type: string
683
+ required:
684
+ - item_id
685
+ upsert_travelers:
686
+ type: object
687
+ properties:
688
+ travelers:
689
+ type: array
690
+ items:
691
+ $ref: "#/components/schemas/Traveler"
692
+ contact:
693
+ type: object
694
+ properties:
695
+ email:
696
+ type: string
697
+ format: email
698
+ phone:
699
+ type: string
700
+ required:
701
+ - email
702
+ required:
703
+ - travelers
704
+ GetTripResponse:
705
+ type: object
706
+ properties:
707
+ trip_id:
708
+ type: string
709
+ status:
710
+ type: string
711
+ travelers:
712
+ type: array
713
+ items:
714
+ nullable: true
715
+ contact:
716
+ type: object
717
+ properties:
718
+ email:
719
+ type: string
720
+ phone:
721
+ type: string
722
+ items:
723
+ type: array
724
+ items:
725
+ nullable: true
726
+ total_amount:
727
+ type: object
728
+ properties:
729
+ amount:
730
+ type: number
731
+ value:
732
+ type: number
733
+ currency:
734
+ type: string
735
+ decimal_places:
736
+ type: integer
737
+ quote:
738
+ type: object
739
+ properties:
740
+ quoted_cart_id:
741
+ type: number
742
+ status:
743
+ type: string
744
+ expires_at:
745
+ type: string
746
+ fulfillment:
747
+ type: object
748
+ properties:
749
+ fulfillment_cart_id:
750
+ type: number
751
+ status:
752
+ type: string
753
+ phase:
754
+ type: string
755
+ bookings:
756
+ type: array
757
+ items:
758
+ nullable: true
759
+ created_at:
760
+ type: string
761
+ updated_at:
762
+ type: string
763
+ required:
764
+ - trip_id
765
+ AncillaryResponse:
766
+ type: object
767
+ properties:
768
+ trip_id:
769
+ type: string
770
+ quoted_item_id:
771
+ type: number
772
+ selected_ancillaries:
773
+ type: array
774
+ items:
775
+ nullable: true
776
+ total_with_ancillaries:
777
+ type: object
778
+ properties:
779
+ amount:
780
+ type: number
781
+ value:
782
+ type: number
783
+ currency:
784
+ type: string
785
+ decimal_places:
786
+ type: integer
787
+ AncillaryRequest:
788
+ type: object
789
+ properties:
790
+ trip_id:
791
+ type: string
792
+ item_id:
793
+ type: string
794
+ selections:
795
+ type: array
796
+ items:
797
+ type: object
798
+ properties:
799
+ offer_id:
800
+ type: string
801
+ category:
802
+ type: string
803
+ pax_ref_id:
804
+ type: string
805
+ segment_ref_ids:
806
+ type: array
807
+ items:
808
+ type: string
809
+ journey_ref_id:
810
+ type: string
811
+ quantity:
812
+ type: number
813
+ provider_metadata:
814
+ type: object
815
+ additionalProperties:
816
+ type: string
817
+ required:
818
+ - offer_id
819
+ required:
820
+ - trip_id
821
+ - item_id
822
+ - selections
823
+ BookResponse:
824
+ type: object
825
+ properties:
826
+ session_id:
827
+ type: string
828
+ checkout_url:
829
+ type: string
830
+ status:
831
+ type: string
832
+ expires_at:
833
+ type: string
834
+ total_amount:
835
+ type: object
836
+ properties:
837
+ amount:
838
+ type: number
839
+ value:
840
+ type: number
841
+ currency:
842
+ type: string
843
+ decimal_places:
844
+ type: integer
845
+ items:
846
+ type: array
847
+ items:
848
+ nullable: true
849
+ BookRequest:
850
+ type: object
851
+ properties:
852
+ trip_id:
853
+ type: string
854
+ required:
855
+ - trip_id
856
+ HotelSearchResponse:
857
+ type: object
858
+ properties:
859
+ hotels:
860
+ type: array
861
+ items:
862
+ type: object
863
+ properties:
864
+ hotel_id:
865
+ type: string
866
+ name:
867
+ type: string
868
+ address:
869
+ type: string
870
+ city:
871
+ type: string
872
+ country_code:
873
+ type: string
874
+ star_rating:
875
+ type: number
876
+ rating:
877
+ type: number
878
+ review_count:
879
+ type: number
880
+ images:
881
+ type: array
882
+ items:
883
+ type: string
884
+ thumbnail_url:
885
+ type: string
886
+ rooms:
887
+ type: array
888
+ items:
889
+ nullable: true
890
+ total:
891
+ type: number
892
+ Occupancy:
893
+ type: object
894
+ properties:
895
+ adults:
896
+ type: integer
897
+ minimum: 1
898
+ children_ages:
899
+ type: array
900
+ items:
901
+ type: integer
902
+ required:
903
+ - adults
904
+ HotelSearchRequest:
905
+ type: object
906
+ properties:
907
+ query:
908
+ type: string
909
+ example: Paris
910
+ city_name:
911
+ type: string
912
+ country_code:
913
+ type: string
914
+ minLength: 2
915
+ maxLength: 2
916
+ latitude:
917
+ type: number
918
+ longitude:
919
+ type: number
920
+ radius_km:
921
+ type: number
922
+ minimum: 0
923
+ exclusiveMinimum: true
924
+ maximum: 50
925
+ place_id:
926
+ type: string
927
+ hotel_ids:
928
+ type: array
929
+ items:
930
+ type: string
931
+ checkin:
932
+ type: string
933
+ pattern: ^\d{4}-\d{2}-\d{2}$
934
+ checkout:
935
+ type: string
936
+ pattern: ^\d{4}-\d{2}-\d{2}$
937
+ occupancies:
938
+ type: array
939
+ items:
940
+ $ref: "#/components/schemas/Occupancy"
941
+ adults:
942
+ type: integer
943
+ minimum: 1
944
+ children:
945
+ type: array
946
+ items:
947
+ type: integer
948
+ rooms:
949
+ type: integer
950
+ minimum: 1
951
+ currency:
952
+ type: string
953
+ guest_nationality:
954
+ type: string
955
+ minLength: 2
956
+ maxLength: 2
957
+ min_rating:
958
+ type: number
959
+ min_star_rating:
960
+ type: integer
961
+ minimum: 1
962
+ maximum: 5
963
+ star_rating:
964
+ type: integer
965
+ minimum: 1
966
+ maximum: 5
967
+ max_star_rating:
968
+ type: integer
969
+ minimum: 1
970
+ maximum: 5
971
+ min_reviews:
972
+ type: integer
973
+ max_results:
974
+ type: integer
975
+ hotel_type_ids:
976
+ type: array
977
+ items:
978
+ type: string
979
+ chain_ids:
980
+ type: array
981
+ items:
982
+ type: string
983
+ facility_ids:
984
+ type: array
985
+ items:
986
+ type: string
987
+ required:
988
+ - checkin
989
+ - checkout
990
+ HotelDetailsResponse:
991
+ type: object
992
+ properties:
993
+ hotel:
994
+ type: object
995
+ properties:
996
+ id:
997
+ type: string
998
+ name:
999
+ type: string
1000
+ description:
1001
+ type: string
1002
+ star_rating:
1003
+ type: number
1004
+ address:
1005
+ type: string
1006
+ city:
1007
+ type: string
1008
+ country_code:
1009
+ type: string
1010
+ coordinates:
1011
+ type: object
1012
+ properties:
1013
+ latitude:
1014
+ type: number
1015
+ longitude:
1016
+ type: number
1017
+ images:
1018
+ type: array
1019
+ items:
1020
+ type: string
1021
+ facilities:
1022
+ type: array
1023
+ items:
1024
+ type: string
1025
+ policies:
1026
+ type: array
1027
+ items:
1028
+ nullable: true
1029
+ checkin_time:
1030
+ type: string
1031
+ checkout_time:
1032
+ type: string
1033
+ rooms:
1034
+ type: array
1035
+ items:
1036
+ nullable: true
1037
+ GetBookingResponse:
1038
+ type: object
1039
+ properties:
1040
+ booking:
1041
+ nullable: true
1042
+ GetBookingRequest:
1043
+ type: object
1044
+ properties:
1045
+ booking_ref:
1046
+ type: string
1047
+ last_name:
1048
+ type: string
1049
+ required:
1050
+ - booking_ref
1051
+ - last_name
1052
+ RefundCheckResponse:
1053
+ type: object
1054
+ properties:
1055
+ is_refundable:
1056
+ type: boolean
1057
+ is_automatable:
1058
+ type: boolean
1059
+ support_level:
1060
+ type: string
1061
+ refund_amount:
1062
+ type: object
1063
+ properties:
1064
+ value:
1065
+ type: number
1066
+ amount:
1067
+ type: number
1068
+ currency:
1069
+ type: string
1070
+ decimal_places:
1071
+ type: integer
1072
+ penalty_amount:
1073
+ type: object
1074
+ properties:
1075
+ value:
1076
+ type: number
1077
+ amount:
1078
+ type: number
1079
+ currency:
1080
+ type: string
1081
+ decimal_places:
1082
+ type: integer
1083
+ total_paid:
1084
+ type: object
1085
+ properties:
1086
+ value:
1087
+ type: number
1088
+ amount:
1089
+ type: number
1090
+ currency:
1091
+ type: string
1092
+ decimal_places:
1093
+ type: integer
1094
+ expires_at:
1095
+ type: string
1096
+ warnings:
1097
+ type: array
1098
+ items:
1099
+ type: string
1100
+ RefundCheckRequest:
1101
+ type: object
1102
+ properties:
1103
+ order_id:
1104
+ type: string
1105
+ booking_ref:
1106
+ type: string
1107
+ last_name:
1108
+ type: string
1109
+ ticket_numbers:
1110
+ type: array
1111
+ items:
1112
+ type: string
1113
+ provider:
1114
+ type: string
1115
+ RefundCommitResponse:
1116
+ type: object
1117
+ properties:
1118
+ refund_status:
1119
+ type: string
1120
+ confirmed_refund_amount:
1121
+ type: object
1122
+ properties:
1123
+ value:
1124
+ type: number
1125
+ amount:
1126
+ type: number
1127
+ currency:
1128
+ type: string
1129
+ decimal_places:
1130
+ type: integer
1131
+ refund_reference:
1132
+ type: string
1133
+ warnings:
1134
+ type: array
1135
+ items:
1136
+ type: string
1137
+ RefundCommitRequest:
1138
+ type: object
1139
+ properties:
1140
+ order_id:
1141
+ type: string
1142
+ booking_ref:
1143
+ type: string
1144
+ last_name:
1145
+ type: string
1146
+ ticket_numbers:
1147
+ type: array
1148
+ items:
1149
+ type: string
1150
+ provider:
1151
+ type: string
1152
+ RefundStatusResponse:
1153
+ type: object
1154
+ properties:
1155
+ refund_status:
1156
+ type: string
1157
+ provider_status:
1158
+ type: string
1159
+ refund_amount:
1160
+ type: object
1161
+ properties:
1162
+ value:
1163
+ type: number
1164
+ amount:
1165
+ type: number
1166
+ currency:
1167
+ type: string
1168
+ decimal_places:
1169
+ type: integer
1170
+ refund_reference:
1171
+ type: string
1172
+ warnings:
1173
+ type: array
1174
+ items:
1175
+ type: string
1176
+ RefundStatusRequest:
1177
+ type: object
1178
+ properties:
1179
+ order_id:
1180
+ type: string
1181
+ booking_ref:
1182
+ type: string
1183
+ last_name:
1184
+ type: string
1185
+ ticket_numbers:
1186
+ type: array
1187
+ items:
1188
+ type: string
1189
+ provider:
1190
+ type: string
1191
+ refund_reference:
1192
+ type: string
1193
+ ExchangeShopResponse:
1194
+ type: object
1195
+ properties:
1196
+ support_level:
1197
+ type: string
1198
+ offers:
1199
+ type: array
1200
+ items:
1201
+ nullable: true
1202
+ warnings:
1203
+ type: array
1204
+ items:
1205
+ type: string
1206
+ ExchangeShopRequest:
1207
+ type: object
1208
+ properties:
1209
+ order_id:
1210
+ type: string
1211
+ booking_ref:
1212
+ type: string
1213
+ last_name:
1214
+ type: string
1215
+ ticket_numbers:
1216
+ type: array
1217
+ items:
1218
+ type: string
1219
+ provider:
1220
+ type: string
1221
+ segments_to_exchange:
1222
+ type: array
1223
+ items:
1224
+ nullable: true
1225
+ preferred_departure_date:
1226
+ type: string
1227
+ ExchangePriceResponse:
1228
+ type: object
1229
+ properties:
1230
+ payment_outcome:
1231
+ type: string
1232
+ fare_difference:
1233
+ type: object
1234
+ properties:
1235
+ value:
1236
+ type: number
1237
+ amount:
1238
+ type: number
1239
+ currency:
1240
+ type: string
1241
+ decimal_places:
1242
+ type: integer
1243
+ penalty_amount:
1244
+ type: object
1245
+ properties:
1246
+ value:
1247
+ type: number
1248
+ amount:
1249
+ type: number
1250
+ currency:
1251
+ type: string
1252
+ decimal_places:
1253
+ type: integer
1254
+ total_due:
1255
+ type: object
1256
+ properties:
1257
+ value:
1258
+ type: number
1259
+ amount:
1260
+ type: number
1261
+ currency:
1262
+ type: string
1263
+ decimal_places:
1264
+ type: integer
1265
+ total_refund:
1266
+ type: object
1267
+ properties:
1268
+ value:
1269
+ type: number
1270
+ amount:
1271
+ type: number
1272
+ currency:
1273
+ type: string
1274
+ decimal_places:
1275
+ type: integer
1276
+ session_reference:
1277
+ type: string
1278
+ expires_at:
1279
+ type: string
1280
+ warnings:
1281
+ type: array
1282
+ items:
1283
+ type: string
1284
+ ExchangePriceRequest:
1285
+ type: object
1286
+ properties:
1287
+ order_id:
1288
+ type: string
1289
+ booking_ref:
1290
+ type: string
1291
+ last_name:
1292
+ type: string
1293
+ ticket_numbers:
1294
+ type: array
1295
+ items:
1296
+ type: string
1297
+ provider:
1298
+ type: string
1299
+ offer_id:
1300
+ type: string
1301
+ required:
1302
+ - offer_id
1303
+ ExchangeCommitResponse:
1304
+ type: object
1305
+ properties:
1306
+ exchange_reference:
1307
+ type: string
1308
+ new_order_id:
1309
+ type: string
1310
+ new_ticket_numbers:
1311
+ type: array
1312
+ items:
1313
+ type: string
1314
+ status:
1315
+ type: string
1316
+ payment_outcome:
1317
+ type: string
1318
+ warnings:
1319
+ type: array
1320
+ items:
1321
+ type: string
1322
+ ExchangeCommitRequest:
1323
+ type: object
1324
+ properties:
1325
+ order_id:
1326
+ type: string
1327
+ booking_ref:
1328
+ type: string
1329
+ last_name:
1330
+ type: string
1331
+ ticket_numbers:
1332
+ type: array
1333
+ items:
1334
+ type: string
1335
+ provider:
1336
+ type: string
1337
+ offer_id:
1338
+ type: string
1339
+ session_reference:
1340
+ type: string
1341
+ required:
1342
+ - offer_id
1343
+ - session_reference
1344
+ ExchangeStatusResponse:
1345
+ type: object
1346
+ properties:
1347
+ status:
1348
+ type: string
1349
+ new_ticket_numbers:
1350
+ type: array
1351
+ items:
1352
+ type: string
1353
+ confirmed_payment_outcome:
1354
+ type: string
1355
+ warnings:
1356
+ type: array
1357
+ items:
1358
+ type: string
1359
+ ExchangeStatusRequest:
1360
+ type: object
1361
+ properties:
1362
+ order_id:
1363
+ type: string
1364
+ booking_ref:
1365
+ type: string
1366
+ last_name:
1367
+ type: string
1368
+ ticket_numbers:
1369
+ type: array
1370
+ items:
1371
+ type: string
1372
+ provider:
1373
+ type: string
1374
+ HotelCancelResponse:
1375
+ type: object
1376
+ properties:
1377
+ provider_booking_id:
1378
+ type: string
1379
+ provider:
1380
+ type: string
1381
+ status:
1382
+ type: string
1383
+ refund_amount:
1384
+ type: object
1385
+ properties:
1386
+ value:
1387
+ type: number
1388
+ amount:
1389
+ type: number
1390
+ currency:
1391
+ type: string
1392
+ decimal_places:
1393
+ type: integer
1394
+ penalty_amount:
1395
+ type: object
1396
+ properties:
1397
+ value:
1398
+ type: number
1399
+ amount:
1400
+ type: number
1401
+ currency:
1402
+ type: string
1403
+ decimal_places:
1404
+ type: integer
1405
+ connector_reference:
1406
+ type: string
1407
+ cancelled_at:
1408
+ type: string
1409
+ idempotent:
1410
+ type: boolean
1411
+ HotelCancelRequest:
1412
+ type: object
1413
+ properties:
1414
+ provider_booking_id:
1415
+ type: string
1416
+ provider:
1417
+ type: string
1418
+ booking_ref:
1419
+ type: string
1420
+ last_name:
1421
+ type: string
1422
+ parameters: {}
1423
+ paths:
1424
+ /health:
1425
+ get:
1426
+ tags:
1427
+ - system
1428
+ summary: Service health
1429
+ responses:
1430
+ "200":
1431
+ description: Service is up
1432
+ content:
1433
+ application/json:
1434
+ schema:
1435
+ $ref: "#/components/schemas/HealthResponse"
1436
+ /v1/find_destination:
1437
+ post:
1438
+ tags:
1439
+ - flights
1440
+ summary: Discover destinations reachable from an origin (cache-backed)
1441
+ security:
1442
+ - ApiKeyAuth: []
1443
+ requestBody:
1444
+ content:
1445
+ application/json:
1446
+ schema:
1447
+ $ref: "#/components/schemas/FindDestinationRequest"
1448
+ responses:
1449
+ "200":
1450
+ description: Matching destinations
1451
+ content:
1452
+ application/json:
1453
+ schema:
1454
+ $ref: "#/components/schemas/FindDestinationResponse"
1455
+ "400":
1456
+ description: Bad request
1457
+ content:
1458
+ application/json:
1459
+ schema:
1460
+ $ref: "#/components/schemas/ErrorResponse"
1461
+ "401":
1462
+ description: Authentication required
1463
+ content:
1464
+ application/json:
1465
+ schema:
1466
+ $ref: "#/components/schemas/ErrorResponse"
1467
+ "422":
1468
+ description: Validation error
1469
+ content:
1470
+ application/json:
1471
+ schema:
1472
+ $ref: "#/components/schemas/ErrorResponse"
1473
+ "429":
1474
+ description: Rate limit or quota exceeded
1475
+ content:
1476
+ application/json:
1477
+ schema:
1478
+ $ref: "#/components/schemas/ErrorResponse"
1479
+ "502":
1480
+ description: Upstream service error
1481
+ content:
1482
+ application/json:
1483
+ schema:
1484
+ $ref: "#/components/schemas/ErrorResponse"
1485
+ /v1/flight_calendar:
1486
+ post:
1487
+ tags:
1488
+ - flights
1489
+ summary: Discover flights for a route + flexible dates (cache-backed)
1490
+ security:
1491
+ - ApiKeyAuth: []
1492
+ requestBody:
1493
+ content:
1494
+ application/json:
1495
+ schema:
1496
+ $ref: "#/components/schemas/FlightDiscoveryRequest"
1497
+ responses:
1498
+ "200":
1499
+ description: Matching itineraries
1500
+ content:
1501
+ application/json:
1502
+ schema:
1503
+ $ref: "#/components/schemas/FlightCalendarResponse"
1504
+ "400":
1505
+ description: Bad request
1506
+ content:
1507
+ application/json:
1508
+ schema:
1509
+ $ref: "#/components/schemas/ErrorResponse"
1510
+ "401":
1511
+ description: Authentication required
1512
+ content:
1513
+ application/json:
1514
+ schema:
1515
+ $ref: "#/components/schemas/ErrorResponse"
1516
+ "422":
1517
+ description: Validation error
1518
+ content:
1519
+ application/json:
1520
+ schema:
1521
+ $ref: "#/components/schemas/ErrorResponse"
1522
+ "429":
1523
+ description: Rate limit or quota exceeded
1524
+ content:
1525
+ application/json:
1526
+ schema:
1527
+ $ref: "#/components/schemas/ErrorResponse"
1528
+ "502":
1529
+ description: Upstream service error
1530
+ content:
1531
+ application/json:
1532
+ schema:
1533
+ $ref: "#/components/schemas/ErrorResponse"
1534
+ /v1/flight_search:
1535
+ post:
1536
+ tags:
1537
+ - flights
1538
+ summary: Live-price a route (or re-price an offer_token)
1539
+ security:
1540
+ - ApiKeyAuth: []
1541
+ requestBody:
1542
+ content:
1543
+ application/json:
1544
+ schema:
1545
+ $ref: "#/components/schemas/FlightSearchRequest"
1546
+ responses:
1547
+ "200":
1548
+ description: Priced offers
1549
+ content:
1550
+ application/json:
1551
+ schema:
1552
+ $ref: "#/components/schemas/FlightSearchResponse"
1553
+ "400":
1554
+ description: Bad request
1555
+ content:
1556
+ application/json:
1557
+ schema:
1558
+ $ref: "#/components/schemas/ErrorResponse"
1559
+ "401":
1560
+ description: Authentication required
1561
+ content:
1562
+ application/json:
1563
+ schema:
1564
+ $ref: "#/components/schemas/ErrorResponse"
1565
+ "422":
1566
+ description: Validation error
1567
+ content:
1568
+ application/json:
1569
+ schema:
1570
+ $ref: "#/components/schemas/ErrorResponse"
1571
+ "429":
1572
+ description: Rate limit or quota exceeded
1573
+ content:
1574
+ application/json:
1575
+ schema:
1576
+ $ref: "#/components/schemas/ErrorResponse"
1577
+ "502":
1578
+ description: Upstream service error
1579
+ content:
1580
+ application/json:
1581
+ schema:
1582
+ $ref: "#/components/schemas/ErrorResponse"
1583
+ /v1/price_monitoring:
1584
+ post:
1585
+ tags:
1586
+ - flights
1587
+ summary: Poll the cheapest cached price for a fixed route + dates (cache-only)
1588
+ security:
1589
+ - ApiKeyAuth: []
1590
+ requestBody:
1591
+ content:
1592
+ application/json:
1593
+ schema:
1594
+ $ref: "#/components/schemas/PriceMonitoringRequest"
1595
+ responses:
1596
+ "200":
1597
+ description: Cheapest cached itinerary, or stale on a cache miss
1598
+ content:
1599
+ application/json:
1600
+ schema:
1601
+ $ref: "#/components/schemas/PriceMonitoringResponse"
1602
+ "400":
1603
+ description: Bad request
1604
+ content:
1605
+ application/json:
1606
+ schema:
1607
+ $ref: "#/components/schemas/ErrorResponse"
1608
+ "401":
1609
+ description: Authentication required
1610
+ content:
1611
+ application/json:
1612
+ schema:
1613
+ $ref: "#/components/schemas/ErrorResponse"
1614
+ "422":
1615
+ description: Validation error
1616
+ content:
1617
+ application/json:
1618
+ schema:
1619
+ $ref: "#/components/schemas/ErrorResponse"
1620
+ "429":
1621
+ description: Rate limit or quota exceeded
1622
+ content:
1623
+ application/json:
1624
+ schema:
1625
+ $ref: "#/components/schemas/ErrorResponse"
1626
+ "502":
1627
+ description: Upstream service error
1628
+ content:
1629
+ application/json:
1630
+ schema:
1631
+ $ref: "#/components/schemas/ErrorResponse"
1632
+ /v1/trip:
1633
+ post:
1634
+ tags:
1635
+ - cart
1636
+ summary: Create or update a trip (add/remove item, set travelers)
1637
+ security:
1638
+ - ApiKeyAuth: []
1639
+ requestBody:
1640
+ content:
1641
+ application/json:
1642
+ schema:
1643
+ $ref: "#/components/schemas/TripRequest"
1644
+ responses:
1645
+ "200":
1646
+ description: The trip
1647
+ content:
1648
+ application/json:
1649
+ schema:
1650
+ $ref: "#/components/schemas/TripResponse"
1651
+ "400":
1652
+ description: Bad request
1653
+ content:
1654
+ application/json:
1655
+ schema:
1656
+ $ref: "#/components/schemas/ErrorResponse"
1657
+ "401":
1658
+ description: Authentication required
1659
+ content:
1660
+ application/json:
1661
+ schema:
1662
+ $ref: "#/components/schemas/ErrorResponse"
1663
+ "422":
1664
+ description: Validation error
1665
+ content:
1666
+ application/json:
1667
+ schema:
1668
+ $ref: "#/components/schemas/ErrorResponse"
1669
+ "429":
1670
+ description: Rate limit or quota exceeded
1671
+ content:
1672
+ application/json:
1673
+ schema:
1674
+ $ref: "#/components/schemas/ErrorResponse"
1675
+ "502":
1676
+ description: Upstream service error
1677
+ content:
1678
+ application/json:
1679
+ schema:
1680
+ $ref: "#/components/schemas/ErrorResponse"
1681
+ /v1/trip/{trip_id}:
1682
+ get:
1683
+ tags:
1684
+ - cart
1685
+ summary: Get a trip by id
1686
+ security:
1687
+ - ApiKeyAuth: []
1688
+ parameters:
1689
+ - schema:
1690
+ type: string
1691
+ required: true
1692
+ name: trip_id
1693
+ in: path
1694
+ responses:
1695
+ "200":
1696
+ description: The trip
1697
+ content:
1698
+ application/json:
1699
+ schema:
1700
+ $ref: "#/components/schemas/GetTripResponse"
1701
+ "400":
1702
+ description: Bad request
1703
+ content:
1704
+ application/json:
1705
+ schema:
1706
+ $ref: "#/components/schemas/ErrorResponse"
1707
+ "401":
1708
+ description: Authentication required
1709
+ content:
1710
+ application/json:
1711
+ schema:
1712
+ $ref: "#/components/schemas/ErrorResponse"
1713
+ "422":
1714
+ description: Validation error
1715
+ content:
1716
+ application/json:
1717
+ schema:
1718
+ $ref: "#/components/schemas/ErrorResponse"
1719
+ "429":
1720
+ description: Rate limit or quota exceeded
1721
+ content:
1722
+ application/json:
1723
+ schema:
1724
+ $ref: "#/components/schemas/ErrorResponse"
1725
+ "502":
1726
+ description: Upstream service error
1727
+ content:
1728
+ application/json:
1729
+ schema:
1730
+ $ref: "#/components/schemas/ErrorResponse"
1731
+ /v1/select_ancillaries:
1732
+ post:
1733
+ tags:
1734
+ - cart
1735
+ summary: Select ancillaries for a trip item
1736
+ security:
1737
+ - ApiKeyAuth: []
1738
+ requestBody:
1739
+ content:
1740
+ application/json:
1741
+ schema:
1742
+ $ref: "#/components/schemas/AncillaryRequest"
1743
+ responses:
1744
+ "200":
1745
+ description: Updated ancillary selection
1746
+ content:
1747
+ application/json:
1748
+ schema:
1749
+ $ref: "#/components/schemas/AncillaryResponse"
1750
+ "400":
1751
+ description: Bad request
1752
+ content:
1753
+ application/json:
1754
+ schema:
1755
+ $ref: "#/components/schemas/ErrorResponse"
1756
+ "401":
1757
+ description: Authentication required
1758
+ content:
1759
+ application/json:
1760
+ schema:
1761
+ $ref: "#/components/schemas/ErrorResponse"
1762
+ "422":
1763
+ description: Validation error
1764
+ content:
1765
+ application/json:
1766
+ schema:
1767
+ $ref: "#/components/schemas/ErrorResponse"
1768
+ "429":
1769
+ description: Rate limit or quota exceeded
1770
+ content:
1771
+ application/json:
1772
+ schema:
1773
+ $ref: "#/components/schemas/ErrorResponse"
1774
+ "502":
1775
+ description: Upstream service error
1776
+ content:
1777
+ application/json:
1778
+ schema:
1779
+ $ref: "#/components/schemas/ErrorResponse"
1780
+ /v1/book:
1781
+ post:
1782
+ tags:
1783
+ - cart
1784
+ summary: Checkout a trip (returns a payment/checkout URL)
1785
+ security:
1786
+ - ApiKeyAuth: []
1787
+ requestBody:
1788
+ content:
1789
+ application/json:
1790
+ schema:
1791
+ $ref: "#/components/schemas/BookRequest"
1792
+ responses:
1793
+ "200":
1794
+ description: Checkout session
1795
+ content:
1796
+ application/json:
1797
+ schema:
1798
+ $ref: "#/components/schemas/BookResponse"
1799
+ "400":
1800
+ description: Bad request
1801
+ content:
1802
+ application/json:
1803
+ schema:
1804
+ $ref: "#/components/schemas/ErrorResponse"
1805
+ "401":
1806
+ description: Authentication required
1807
+ content:
1808
+ application/json:
1809
+ schema:
1810
+ $ref: "#/components/schemas/ErrorResponse"
1811
+ "422":
1812
+ description: Validation error
1813
+ content:
1814
+ application/json:
1815
+ schema:
1816
+ $ref: "#/components/schemas/ErrorResponse"
1817
+ "429":
1818
+ description: Rate limit or quota exceeded
1819
+ content:
1820
+ application/json:
1821
+ schema:
1822
+ $ref: "#/components/schemas/ErrorResponse"
1823
+ "502":
1824
+ description: Upstream service error
1825
+ content:
1826
+ application/json:
1827
+ schema:
1828
+ $ref: "#/components/schemas/ErrorResponse"
1829
+ /v1/hotel_search:
1830
+ post:
1831
+ tags:
1832
+ - hotels
1833
+ summary: Search hotels by destination, dates, and occupancy
1834
+ security:
1835
+ - ApiKeyAuth: []
1836
+ requestBody:
1837
+ content:
1838
+ application/json:
1839
+ schema:
1840
+ $ref: "#/components/schemas/HotelSearchRequest"
1841
+ responses:
1842
+ "200":
1843
+ description: Matching hotels
1844
+ content:
1845
+ application/json:
1846
+ schema:
1847
+ $ref: "#/components/schemas/HotelSearchResponse"
1848
+ "400":
1849
+ description: Bad request
1850
+ content:
1851
+ application/json:
1852
+ schema:
1853
+ $ref: "#/components/schemas/ErrorResponse"
1854
+ "401":
1855
+ description: Authentication required
1856
+ content:
1857
+ application/json:
1858
+ schema:
1859
+ $ref: "#/components/schemas/ErrorResponse"
1860
+ "422":
1861
+ description: Validation error
1862
+ content:
1863
+ application/json:
1864
+ schema:
1865
+ $ref: "#/components/schemas/ErrorResponse"
1866
+ "429":
1867
+ description: Rate limit or quota exceeded
1868
+ content:
1869
+ application/json:
1870
+ schema:
1871
+ $ref: "#/components/schemas/ErrorResponse"
1872
+ "502":
1873
+ description: Upstream service error
1874
+ content:
1875
+ application/json:
1876
+ schema:
1877
+ $ref: "#/components/schemas/ErrorResponse"
1878
+ /v1/hotel_details/{hotel_id}:
1879
+ get:
1880
+ tags:
1881
+ - hotels
1882
+ summary: Rich metadata for a single hotel
1883
+ security:
1884
+ - ApiKeyAuth: []
1885
+ parameters:
1886
+ - schema:
1887
+ type: string
1888
+ required: true
1889
+ name: hotel_id
1890
+ in: path
1891
+ - schema:
1892
+ type: string
1893
+ required: false
1894
+ name: checkin
1895
+ in: query
1896
+ - schema:
1897
+ type: string
1898
+ required: false
1899
+ name: checkout
1900
+ in: query
1901
+ responses:
1902
+ "200":
1903
+ description: Hotel detail
1904
+ content:
1905
+ application/json:
1906
+ schema:
1907
+ $ref: "#/components/schemas/HotelDetailsResponse"
1908
+ "400":
1909
+ description: Bad request
1910
+ content:
1911
+ application/json:
1912
+ schema:
1913
+ $ref: "#/components/schemas/ErrorResponse"
1914
+ "401":
1915
+ description: Authentication required
1916
+ content:
1917
+ application/json:
1918
+ schema:
1919
+ $ref: "#/components/schemas/ErrorResponse"
1920
+ "422":
1921
+ description: Validation error
1922
+ content:
1923
+ application/json:
1924
+ schema:
1925
+ $ref: "#/components/schemas/ErrorResponse"
1926
+ "429":
1927
+ description: Rate limit or quota exceeded
1928
+ content:
1929
+ application/json:
1930
+ schema:
1931
+ $ref: "#/components/schemas/ErrorResponse"
1932
+ "502":
1933
+ description: Upstream service error
1934
+ content:
1935
+ application/json:
1936
+ schema:
1937
+ $ref: "#/components/schemas/ErrorResponse"
1938
+ /v1/get_booking:
1939
+ post:
1940
+ tags:
1941
+ - post-booking
1942
+ summary: Retrieve a booking (flight + hotel) by reference + last name
1943
+ security:
1944
+ - ApiKeyAuth: []
1945
+ requestBody:
1946
+ content:
1947
+ application/json:
1948
+ schema:
1949
+ $ref: "#/components/schemas/GetBookingRequest"
1950
+ responses:
1951
+ "200":
1952
+ description: Retrieve a booking (flight + hotel) by reference + last name
1953
+ content:
1954
+ application/json:
1955
+ schema:
1956
+ $ref: "#/components/schemas/GetBookingResponse"
1957
+ "400":
1958
+ description: Bad request
1959
+ content:
1960
+ application/json:
1961
+ schema:
1962
+ $ref: "#/components/schemas/ErrorResponse"
1963
+ "401":
1964
+ description: Authentication required
1965
+ content:
1966
+ application/json:
1967
+ schema:
1968
+ $ref: "#/components/schemas/ErrorResponse"
1969
+ "422":
1970
+ description: Validation error
1971
+ content:
1972
+ application/json:
1973
+ schema:
1974
+ $ref: "#/components/schemas/ErrorResponse"
1975
+ "429":
1976
+ description: Rate limit or quota exceeded
1977
+ content:
1978
+ application/json:
1979
+ schema:
1980
+ $ref: "#/components/schemas/ErrorResponse"
1981
+ "502":
1982
+ description: Upstream service error
1983
+ content:
1984
+ application/json:
1985
+ schema:
1986
+ $ref: "#/components/schemas/ErrorResponse"
1987
+ /v1/refund_check:
1988
+ post:
1989
+ tags:
1990
+ - post-booking
1991
+ summary: Check flight refund eligibility
1992
+ security:
1993
+ - ApiKeyAuth: []
1994
+ requestBody:
1995
+ content:
1996
+ application/json:
1997
+ schema:
1998
+ $ref: "#/components/schemas/RefundCheckRequest"
1999
+ responses:
2000
+ "200":
2001
+ description: Check flight refund eligibility
2002
+ content:
2003
+ application/json:
2004
+ schema:
2005
+ $ref: "#/components/schemas/RefundCheckResponse"
2006
+ "400":
2007
+ description: Bad request
2008
+ content:
2009
+ application/json:
2010
+ schema:
2011
+ $ref: "#/components/schemas/ErrorResponse"
2012
+ "401":
2013
+ description: Authentication required
2014
+ content:
2015
+ application/json:
2016
+ schema:
2017
+ $ref: "#/components/schemas/ErrorResponse"
2018
+ "422":
2019
+ description: Validation error
2020
+ content:
2021
+ application/json:
2022
+ schema:
2023
+ $ref: "#/components/schemas/ErrorResponse"
2024
+ "429":
2025
+ description: Rate limit or quota exceeded
2026
+ content:
2027
+ application/json:
2028
+ schema:
2029
+ $ref: "#/components/schemas/ErrorResponse"
2030
+ "502":
2031
+ description: Upstream service error
2032
+ content:
2033
+ application/json:
2034
+ schema:
2035
+ $ref: "#/components/schemas/ErrorResponse"
2036
+ /v1/refund_commit:
2037
+ post:
2038
+ tags:
2039
+ - post-booking
2040
+ summary: Initiate a flight refund
2041
+ security:
2042
+ - ApiKeyAuth: []
2043
+ requestBody:
2044
+ content:
2045
+ application/json:
2046
+ schema:
2047
+ $ref: "#/components/schemas/RefundCommitRequest"
2048
+ responses:
2049
+ "200":
2050
+ description: Initiate a flight refund
2051
+ content:
2052
+ application/json:
2053
+ schema:
2054
+ $ref: "#/components/schemas/RefundCommitResponse"
2055
+ "400":
2056
+ description: Bad request
2057
+ content:
2058
+ application/json:
2059
+ schema:
2060
+ $ref: "#/components/schemas/ErrorResponse"
2061
+ "401":
2062
+ description: Authentication required
2063
+ content:
2064
+ application/json:
2065
+ schema:
2066
+ $ref: "#/components/schemas/ErrorResponse"
2067
+ "422":
2068
+ description: Validation error
2069
+ content:
2070
+ application/json:
2071
+ schema:
2072
+ $ref: "#/components/schemas/ErrorResponse"
2073
+ "429":
2074
+ description: Rate limit or quota exceeded
2075
+ content:
2076
+ application/json:
2077
+ schema:
2078
+ $ref: "#/components/schemas/ErrorResponse"
2079
+ "502":
2080
+ description: Upstream service error
2081
+ content:
2082
+ application/json:
2083
+ schema:
2084
+ $ref: "#/components/schemas/ErrorResponse"
2085
+ /v1/refund_status:
2086
+ post:
2087
+ tags:
2088
+ - post-booking
2089
+ summary: Poll a flight refund
2090
+ security:
2091
+ - ApiKeyAuth: []
2092
+ requestBody:
2093
+ content:
2094
+ application/json:
2095
+ schema:
2096
+ $ref: "#/components/schemas/RefundStatusRequest"
2097
+ responses:
2098
+ "200":
2099
+ description: Poll a flight refund
2100
+ content:
2101
+ application/json:
2102
+ schema:
2103
+ $ref: "#/components/schemas/RefundStatusResponse"
2104
+ "400":
2105
+ description: Bad request
2106
+ content:
2107
+ application/json:
2108
+ schema:
2109
+ $ref: "#/components/schemas/ErrorResponse"
2110
+ "401":
2111
+ description: Authentication required
2112
+ content:
2113
+ application/json:
2114
+ schema:
2115
+ $ref: "#/components/schemas/ErrorResponse"
2116
+ "422":
2117
+ description: Validation error
2118
+ content:
2119
+ application/json:
2120
+ schema:
2121
+ $ref: "#/components/schemas/ErrorResponse"
2122
+ "429":
2123
+ description: Rate limit or quota exceeded
2124
+ content:
2125
+ application/json:
2126
+ schema:
2127
+ $ref: "#/components/schemas/ErrorResponse"
2128
+ "502":
2129
+ description: Upstream service error
2130
+ content:
2131
+ application/json:
2132
+ schema:
2133
+ $ref: "#/components/schemas/ErrorResponse"
2134
+ /v1/exchange_shop:
2135
+ post:
2136
+ tags:
2137
+ - post-booking
2138
+ summary: Shop flight exchange alternatives
2139
+ security:
2140
+ - ApiKeyAuth: []
2141
+ requestBody:
2142
+ content:
2143
+ application/json:
2144
+ schema:
2145
+ $ref: "#/components/schemas/ExchangeShopRequest"
2146
+ responses:
2147
+ "200":
2148
+ description: Shop flight exchange alternatives
2149
+ content:
2150
+ application/json:
2151
+ schema:
2152
+ $ref: "#/components/schemas/ExchangeShopResponse"
2153
+ "400":
2154
+ description: Bad request
2155
+ content:
2156
+ application/json:
2157
+ schema:
2158
+ $ref: "#/components/schemas/ErrorResponse"
2159
+ "401":
2160
+ description: Authentication required
2161
+ content:
2162
+ application/json:
2163
+ schema:
2164
+ $ref: "#/components/schemas/ErrorResponse"
2165
+ "422":
2166
+ description: Validation error
2167
+ content:
2168
+ application/json:
2169
+ schema:
2170
+ $ref: "#/components/schemas/ErrorResponse"
2171
+ "429":
2172
+ description: Rate limit or quota exceeded
2173
+ content:
2174
+ application/json:
2175
+ schema:
2176
+ $ref: "#/components/schemas/ErrorResponse"
2177
+ "502":
2178
+ description: Upstream service error
2179
+ content:
2180
+ application/json:
2181
+ schema:
2182
+ $ref: "#/components/schemas/ErrorResponse"
2183
+ /v1/exchange_price:
2184
+ post:
2185
+ tags:
2186
+ - post-booking
2187
+ summary: Price a flight exchange offer
2188
+ security:
2189
+ - ApiKeyAuth: []
2190
+ requestBody:
2191
+ content:
2192
+ application/json:
2193
+ schema:
2194
+ $ref: "#/components/schemas/ExchangePriceRequest"
2195
+ responses:
2196
+ "200":
2197
+ description: Price a flight exchange offer
2198
+ content:
2199
+ application/json:
2200
+ schema:
2201
+ $ref: "#/components/schemas/ExchangePriceResponse"
2202
+ "400":
2203
+ description: Bad request
2204
+ content:
2205
+ application/json:
2206
+ schema:
2207
+ $ref: "#/components/schemas/ErrorResponse"
2208
+ "401":
2209
+ description: Authentication required
2210
+ content:
2211
+ application/json:
2212
+ schema:
2213
+ $ref: "#/components/schemas/ErrorResponse"
2214
+ "422":
2215
+ description: Validation error
2216
+ content:
2217
+ application/json:
2218
+ schema:
2219
+ $ref: "#/components/schemas/ErrorResponse"
2220
+ "429":
2221
+ description: Rate limit or quota exceeded
2222
+ content:
2223
+ application/json:
2224
+ schema:
2225
+ $ref: "#/components/schemas/ErrorResponse"
2226
+ "502":
2227
+ description: Upstream service error
2228
+ content:
2229
+ application/json:
2230
+ schema:
2231
+ $ref: "#/components/schemas/ErrorResponse"
2232
+ /v1/exchange_commit:
2233
+ post:
2234
+ tags:
2235
+ - post-booking
2236
+ summary: Execute a flight exchange
2237
+ security:
2238
+ - ApiKeyAuth: []
2239
+ requestBody:
2240
+ content:
2241
+ application/json:
2242
+ schema:
2243
+ $ref: "#/components/schemas/ExchangeCommitRequest"
2244
+ responses:
2245
+ "200":
2246
+ description: Execute a flight exchange
2247
+ content:
2248
+ application/json:
2249
+ schema:
2250
+ $ref: "#/components/schemas/ExchangeCommitResponse"
2251
+ "400":
2252
+ description: Bad request
2253
+ content:
2254
+ application/json:
2255
+ schema:
2256
+ $ref: "#/components/schemas/ErrorResponse"
2257
+ "401":
2258
+ description: Authentication required
2259
+ content:
2260
+ application/json:
2261
+ schema:
2262
+ $ref: "#/components/schemas/ErrorResponse"
2263
+ "422":
2264
+ description: Validation error
2265
+ content:
2266
+ application/json:
2267
+ schema:
2268
+ $ref: "#/components/schemas/ErrorResponse"
2269
+ "429":
2270
+ description: Rate limit or quota exceeded
2271
+ content:
2272
+ application/json:
2273
+ schema:
2274
+ $ref: "#/components/schemas/ErrorResponse"
2275
+ "502":
2276
+ description: Upstream service error
2277
+ content:
2278
+ application/json:
2279
+ schema:
2280
+ $ref: "#/components/schemas/ErrorResponse"
2281
+ /v1/exchange_status:
2282
+ post:
2283
+ tags:
2284
+ - post-booking
2285
+ summary: Poll a flight exchange
2286
+ security:
2287
+ - ApiKeyAuth: []
2288
+ requestBody:
2289
+ content:
2290
+ application/json:
2291
+ schema:
2292
+ $ref: "#/components/schemas/ExchangeStatusRequest"
2293
+ responses:
2294
+ "200":
2295
+ description: Poll a flight exchange
2296
+ content:
2297
+ application/json:
2298
+ schema:
2299
+ $ref: "#/components/schemas/ExchangeStatusResponse"
2300
+ "400":
2301
+ description: Bad request
2302
+ content:
2303
+ application/json:
2304
+ schema:
2305
+ $ref: "#/components/schemas/ErrorResponse"
2306
+ "401":
2307
+ description: Authentication required
2308
+ content:
2309
+ application/json:
2310
+ schema:
2311
+ $ref: "#/components/schemas/ErrorResponse"
2312
+ "422":
2313
+ description: Validation error
2314
+ content:
2315
+ application/json:
2316
+ schema:
2317
+ $ref: "#/components/schemas/ErrorResponse"
2318
+ "429":
2319
+ description: Rate limit or quota exceeded
2320
+ content:
2321
+ application/json:
2322
+ schema:
2323
+ $ref: "#/components/schemas/ErrorResponse"
2324
+ "502":
2325
+ description: Upstream service error
2326
+ content:
2327
+ application/json:
2328
+ schema:
2329
+ $ref: "#/components/schemas/ErrorResponse"
2330
+ /v1/hotel_cancel:
2331
+ post:
2332
+ tags:
2333
+ - post-booking
2334
+ summary: Cancel a hotel booking
2335
+ security:
2336
+ - ApiKeyAuth: []
2337
+ requestBody:
2338
+ content:
2339
+ application/json:
2340
+ schema:
2341
+ $ref: "#/components/schemas/HotelCancelRequest"
2342
+ responses:
2343
+ "200":
2344
+ description: Cancel a hotel booking
2345
+ content:
2346
+ application/json:
2347
+ schema:
2348
+ $ref: "#/components/schemas/HotelCancelResponse"
2349
+ "400":
2350
+ description: Bad request
2351
+ content:
2352
+ application/json:
2353
+ schema:
2354
+ $ref: "#/components/schemas/ErrorResponse"
2355
+ "401":
2356
+ description: Authentication required
2357
+ content:
2358
+ application/json:
2359
+ schema:
2360
+ $ref: "#/components/schemas/ErrorResponse"
2361
+ "422":
2362
+ description: Validation error
2363
+ content:
2364
+ application/json:
2365
+ schema:
2366
+ $ref: "#/components/schemas/ErrorResponse"
2367
+ "429":
2368
+ description: Rate limit or quota exceeded
2369
+ content:
2370
+ application/json:
2371
+ schema:
2372
+ $ref: "#/components/schemas/ErrorResponse"
2373
+ "502":
2374
+ description: Upstream service error
2375
+ content:
2376
+ application/json:
2377
+ schema:
2378
+ $ref: "#/components/schemas/ErrorResponse"