@mongoui/skills 0.1.7 → 0.1.9

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.
@@ -1,130 +1,148 @@
1
- # Glink Endpoint Index
2
-
3
- All routes are public gateway routes. Sign the public path, not the downstream Glink path.
4
-
5
- ## Static Data
6
-
7
- - `glink.queryBusinessList`
8
- - `POST /openapi/v1/glink/queryBusinessList`
9
- - Required body fields: `cityCode`
10
- - `glink.queryCountryList`
11
- - `POST /openapi/v1/glink/queryCountryList`
12
- - Required body fields: none
13
- - `glink.queryHotelPlateList`
14
- - `POST /openapi/v1/glink/queryHotelPlateList`
15
- - Required body fields: none
16
- - `glink.queryHotCityList`
17
- - `POST /openapi/v1/glink/queryHotCityList`
18
- - Required body fields: none
19
- - `glink.queryDistrictList`
20
- - `POST /openapi/v1/glink/queryDistrictList`
21
- - Required body fields: `cityCode`
22
- - `glink.queryDistrictAndBusiness`
23
- - `POST /openapi/v1/glink/queryDistrictAndBusiness`
24
- - Required body fields: `cityCode`
25
- - `glink.queryCityList`
26
- - `POST /openapi/v1/glink/queryCityList`
27
- - Required body fields: `countryCode`
28
-
29
- ## Hotel Query
30
-
31
- - `glink.queryCityAndHotelByKeyword`
32
- - `POST /openapi/v1/glink/queryCityAndHotelByKeyword`
33
- - Required body fields: `keyWord`
34
- - `glink.getDestination`
35
- - `POST /openapi/v1/glink/getDestination`
36
- - Required body fields: `keyWord`
37
- - Swagger example uses `keyword`; double-check the field naming against current backend behavior before coding around it.
38
- - `glink.getHotelSearch`
39
- - `POST /openapi/v1/glink/getHotelSearch`
40
- - Required body fields: none
41
- - Common fields: `cityCode`, `checkInDate`, `checkOutDate`, `roomNum`, `language`
42
- - `glink.findHotelList`
43
- - `POST /openapi/v1/glink/findHotelList`
44
- - Required body fields from schema: `roomFacilityCodes`, `hotelFacilityCodes`, `checkInDate`, `checkOutDate`, `distance`
45
- - Treat this as a high-friction route and inspect the real example payload before implementing.
46
- - `glink.queryHotelAllList`
47
- - `POST /openapi/v1/glink/queryHotelAllList`
48
- - Required body fields: none
49
-
50
- ## Hotel Info
51
-
52
- - `glink.queryHotelIdList`
53
- - `POST /openapi/v1/glink/queryHotelIdList`
54
- - Required body fields: none
55
- - The Open Platform Glink onboarding flow commonly uses `cityCode` to fetch the account's saleable hotel IDs for that city; verify the current swagger/code example before generating strict DTOs.
56
- - `glink.queryHotelInfo`
57
- - `POST /openapi/v1/glink/queryHotelInfo`
58
- - Required body fields: `hotelIds`
59
- - `glink.queryHotelIncrement`
60
- - `POST /openapi/v1/glink/queryHotelIncrement`
61
- - Required body fields: `startTime`, `endTime`
62
- - Swagger example uses `lastUpdateTime`; inspect schema versus example before generating code.
63
- - `glink.queryHotelImage`
64
- - `POST /openapi/v1/glink/queryHotelImage`
65
- - Required body fields: `hotelIds`
66
- - Swagger example uses `hotelId`; inspect schema versus example before generating code.
67
- - `glink.queryHotelMainInfoByHotelIds`
68
- - `POST /openapi/v1/glink/queryHotelMainInfoByHotelIds`
69
- - Required body fields: `language`
70
-
71
- ## Product Info
72
-
73
- - `glink.queryHotelLowestPrice`
74
- - `POST /openapi/v1/glink/queryHotelLowestPrice`
75
- - Required body fields: `hotelIds`
76
- - `glink.queryProductDetail`
77
- - `POST /openapi/v1/glink/queryProductDetail`
78
- - Required body fields: `hotelId`, `checkInDate`, `checkOutDate`, `roomNum`
79
-
80
- ## Order Info
81
-
82
- - `glink.checkBooking`
83
- - `POST /openapi/v1/glink/checkBooking`
84
- - Required body fields: `hotelId`, `checkInDate`, `checkOutDate`, `roomId`, `ratePlanId`, `roomNum`, `supplyCode`
85
- - `glink.createOrder`
86
- - `POST /openapi/v1/glink/createOrder`
87
- - Required body fields: `hotelId`, `checkInDate`, `checkOutDate`, `roomId`, `ratePlanId`, `roomNum`, `supplyCode`, `totalAmount`, `coOrderCode`, `priceItems`, `guestInfos`, `linkMan`, `linkPhone`, `arriveTime`, `latestArriveTime`
88
- - `glink.payOrder`
89
- - `POST /openapi/v1/glink/payOrder`
90
- - Required body fields: none
91
- - Common fields: `coOrderCode`, `fcOrderCode`
92
- - `glink.cancelOrder`
93
- - `POST /openapi/v1/glink/cancelOrder`
94
- - Required body fields: none
95
- - Common fields: `coOrderCode`, `fcOrderCode`, `cancelReson`
96
- - `glink.queryOrderDetail`
97
- - `POST /openapi/v1/glink/queryOrderDetail`
98
- - Required body fields: none
99
- - Common fields: `coOrderCode`, `fcOrderCode`
100
- - Glink order operation push/callback
101
- - Required by the Open Platform Glink booking flow after `payOrder`.
102
- - This is an inbound callback capability rather than a normal public `/openapi/v1/glink/*` request route in the current endpoint list. Before implementing, inspect route code or product requirements for the platform callback URL, signature/auth expectations, idempotency key, and retry handling.
103
- - `glink.queryOrderCheckDetailInfo`
104
- - `POST /openapi/v1/glink/queryOrderCheckDetailInfo`
105
- - Required body fields: none
106
- - Common fields: `coOrderCode`, `fcOrderCode`
107
- - `glink.checkoutApply`
108
- - `POST /openapi/v1/glink/checkoutApply`
109
- - Required body fields: `fcOrderCode`, `checkoutReason`, `checkoutRoomInfoList`
110
- - `glink.queryCheckoutDetail`
111
- - `POST /openapi/v1/glink/queryCheckoutDetail`
112
- - Required body fields: `taskOrderCode`
113
- - Swagger example uses order codes instead of `taskOrderCode`; inspect the live contract before coding.
114
-
115
- ## Finance
116
-
117
- - `glink.createInvoice`
118
- - `POST /openapi/v1/glink/createInvoice`
119
- - Business-required fields to focus on: `orderCode`, `invoiceTypeInteger`, `invoiceHeader`, `amount`, `applyId`, `invoiceTitleType`, `getMethod`
120
- - Schema still marks `partnerCode` and `sign` as required, but route docs say the platform injects Glink auth fields. Do not send Glink-managed fields from the client.
121
- - `glink.queryCreditBalance`
122
- - `POST /openapi/v1/glink/queryCreditBalance`
123
- - Required body fields: none
124
-
125
- ## Global Notes
126
-
1
+ # Glink Endpoint Index
2
+
3
+ Source of truth: current DHub / `docs/swagger/glink-api.json`.
4
+
5
+ All routes below are customer-facing short interface paths. For actual gateway calls and signing, prefix them with `/openapi/v1/glink`.
6
+
7
+ Customer-facing explanations should use only short interface paths such as `/search/destination`.
8
+
9
+ Integration mode shortcuts:
10
+
11
+ - Standard API Integration: prefer `/search/hotelIdList` -> `/hotel/detail` -> `/hotel/increment` and maintain local saleable hotel mappings.
12
+ - Lightweight Integration Flow: prefer `/search/destination` -> `/search/hotelFilters` -> `/search/hotelList` -> `/hotel/detail`/`/hotel/images` -> `/booking/productDetails` for faster launch.
13
+
14
+ ## Region Static Data
15
+
16
+ - `/region/countries`
17
+ - Method: `POST`
18
+ - Required body fields: none.
19
+ - Response `data` is an array of country objects directly; there is no `countries` wrapper.
20
+ - `/region/cities`
21
+ - Method: `POST`
22
+ - Common body fields: `countryCode`, `language`.
23
+ - Response `data` is an array of province/city-group objects directly; there is no `provinces` wrapper.
24
+ - `/region/popularCities`
25
+ - Method: `POST`
26
+ - Required body fields: none.
27
+ - Response `data` is an array directly; fields include `latBaidu`, `lngBaidu`, `timeZone`, and `areaType`.
28
+ - `/region/businesses`
29
+ - Method: `POST`
30
+ - Common body fields: `cityCode`, `language`.
31
+ - `/region/districts`
32
+ - Method: `POST`
33
+ - Common body fields: `cityCode`, `language`.
34
+ - `/region/pois`
35
+ - Method: `POST`
36
+ - Common body fields: `cityCode`, `keyword`, `language`.
37
+
38
+ ## Hotel Info
39
+
40
+ - `/search/hotelIdList`
41
+ - Method: `POST`
42
+ - Common body fields: `cityCode`, `pageNo`, `pageSize`.
43
+ - Use `pageNo >= 1` and `pageSize >= 1`; examples default to `pageNo=1`, `pageSize=1000`.
44
+ - Response pagination uses `totalCount`, not `total`; pagination fields may be absent.
45
+ - Use for saleable hotel ID bootstrap and cache refresh.
46
+ - `/hotel/popularIdList`
47
+ - Method: `POST`
48
+ - Common body fields: `pageNo`, `pageSize`.
49
+ - `/hotel/detail`
50
+ - Method: `POST`
51
+ - Required body fields: `hotelIds`.
52
+ - Current response uses `facility`, `popularFacility`, `applicableRoomTypes`, `openingDate`, `groupId`, `groupName`, `brandId`, `brandName`, `latBaidu`, `lngBaidu`, `wiredBroadband`, `wirelessBroadband`, `comment.averageScore`, and `comment.source`.
53
+ - Meeting images are under `hotelMeetingInfos[].meetingImages`; do not expect derived size URLs in that node.
54
+ - Room bed info under both `roomBeds` and `livingRoomBeds` uses object `bedInfos[]` with `bedTypeCode`, `bedName`, `bedWidth`, and `bedNum`.
55
+ - `/hotel/increment`
56
+ - Method: `POST`
57
+ - Common body fields: `startTime`, `endTime`, `maxId`, `pageSize`.
58
+ - `/hotel/lowestPrice`
59
+ - Method: `POST`
60
+ - Common body fields: `hotelIds`, `checkInDate`, `checkOutDate`, `checkInType`.
61
+ - `/hotel/images`
62
+ - Method: `POST`
63
+ - Common body fields: `hotelIds` or `hotelId`; verify the current swagger example before strict DTO generation.
64
+ - `/hotel/groupBrand`
65
+ - Method: `POST`
66
+ - Required body fields: none.
67
+
68
+ ## Search And Booking
69
+
70
+ - `/search/destination`
71
+ - Method: `POST`
72
+ - Common body fields: `keyWord`, `cityCode`, `destinationType`, `source`.
73
+ - Response `data` is an array directly. Destination item fields are flat and include `destinationId`, `destinationType`, `source`, name/code fields, `hotelId`, `latGoogle`, `lngGoogle`, `latBaidu`, and `lngBaidu`.
74
+ - `/search/hotelFilters`
75
+ - Method: `POST`
76
+ - Common body fields: `destinationId`, `language`, `lngGoogle`, `latGoogle`, `distance`.
77
+ - `/search/hotelList`
78
+ - Method: `POST`
79
+ - Common body fields: `destinationId`, `lngGoogle`, `latGoogle`, `checkInDate`, `checkOutDate`, filters, `distance`, `currentPage`, `pageSize`.
80
+ - Response list items use `latBaidu` and `lngBaidu`; items may include `groupName` and `brandName`.
81
+ - `/booking/productDetails`
82
+ - Method: `POST`
83
+ - Required body fields: `hotelId`, `checkInDate`, `checkOutDate`, `roomNum`, `numberOfAdults`.
84
+ - Product response removed `reminder`. `taxAndFeeDetails` and `feeItems` are objects, not arrays. `priceItems[].taxDetail` includes numeric `roomPrice`, `taxFee`, `salesTax`, and `otherTax`.
85
+ - `/booking/availabilityCheck`
86
+ - Method: `POST`
87
+ - Required body fields: `hotelId`, `roomId`, `ratePlanId`, `checkInDate`, `checkOutDate`, `roomNum`, `supplyCode`.
88
+ - Response-level `breakfastNum` and `breakfastType` are outside `priceItems`. `roomTaxDetail` is an object. `priceItems[].taxDetail` contains room and tax breakdown. `roomStatus` is not exposed.
89
+ - `/booking/createOrder`
90
+ - Method: `POST`
91
+ - Required body fields: `hotelId`, `roomId`, `ratePlanId`, `checkInDate`, `checkOutDate`, `roomNum`, `supplyCode`, `totalAmount`, `coOrderCode`, `priceItems`, `guestInfos`, `linkMan`, `linkPhone`, `arriveTime`, `latestArriveTime`.
92
+ - Use `guestInfos[].guestType` for guest type; do not send `guestInfos[].nationality`.
93
+ - `/booking/payOrder`
94
+ - Method: `POST`
95
+ - Common body fields: `coOrderCode`, `fcOrderCode`.
96
+ - `/search/creditBalance`
97
+ - Method: `POST`
98
+ - Required body fields: none; send `{}` or omit body according to the SDK/runtime caller.
99
+
100
+ ## Order Info
101
+
102
+ - `/order/orderDetail`
103
+ - Method: `POST`
104
+ - Common body fields: `coOrderCode`, `fcOrderCode`.
105
+ - Response uses `roomGuestNumbers[]` for room-level adult/child counts. It may include `originalAmount`, top-level `nationality`, and `guestInfos[].guestType`.
106
+ - `/order/cancelOrder`
107
+ - Method: `POST`
108
+ - Common body fields: `coOrderCode`, `fcOrderCode`, `cancelReason`.
109
+ - `/order/checkInDetail`
110
+ - Method: `POST`
111
+ - Common body fields: `coOrderCode`, `fcOrderCode`.
112
+ - `/order/invoiceRequest`
113
+ - Method: `POST`
114
+ - Business fields to focus on: `orderCode`, `invoiceTypeInteger`, `invoiceHeader`, `amount`, `applyId`, `invoiceTitleType`, `getMethod`.
115
+ - `/order/invoiceInfo`
116
+ - Method: `POST`
117
+ - Common body fields: `coOrderCode` or `fcOrderCode`.
118
+ - `/order/checkoutRequest`
119
+ - Method: `POST`
120
+ - Required body fields: `fcOrderCode`, `supplierRefundNumber`, `checkoutReason`, `refundType`, `checkoutRooms`.
121
+ - `/order/checkoutDetail`
122
+ - Method: `POST`
123
+ - Common body fields: `taskOrderCode`.
124
+ - Response includes hotel/product context, `paymentType`, `refundDetailList[]`, and `checkoutDetailPriceItemList[].originalSalePrice`.
125
+
126
+ ## Callback Capabilities
127
+
128
+ - `/notify/orderStatus`
129
+ - Method: `POST`
130
+ - Order status push/callback. The receiver must be idempotent.
131
+ - `/notify/orderOperate`
132
+ - Method: `POST`
133
+ - Order operation push/callback. The receiver must be idempotent.
134
+ - `/notify/orderCheckout`
135
+ - Method: `POST`
136
+ - Checkout status push/callback. The receiver must be idempotent.
137
+ - `/notify/orderInvoice`
138
+ - Method: `POST`
139
+ - Invoice status push/callback. The receiver must be idempotent.
140
+
141
+ ## Global Notes
142
+
143
+ - Current Glink swagger route count may include outbound request APIs and callback APIs; verify against `docs/swagger/glink-api.json`.
127
144
  - Most Glink routes accept plain business JSON bodies with no wrapper objects.
145
+ - For response-shape changes and enum-like values, read `field-and-enum-notes.md` before generating DTOs or examples.
128
146
  - Platform error responses can return `401`, `403`, `404`, `500`, `502`, or `504`.
129
- - Common auth-related `401` codes are `APP_KEY_INVALID`, `SIGN_ERROR`, `TIMESTAMP_EXPIRED`, and `NONCE_REPLAY`.
130
- - Common `403` cause is `PRODUCT_FORBIDDEN`.
147
+ - Common auth-related `401` codes are `APP_KEY_INVALID`, `SIGN_ERROR`, `TIMESTAMP_EXPIRED`, and `NONCE_REPLAY`.
148
+ - Common `403` cause is `PRODUCT_FORBIDDEN`.
@@ -0,0 +1,161 @@
1
+ # Glink Field And Enum Notes
2
+
3
+ Source of truth: current `docs/swagger/glink-api.json` and its examples. If the public portal page is available, compare it with this file before changing SDK or customer-facing guidance.
4
+
5
+ All paths below are customer-facing short paths. Prefix `/openapi/v1/glink` only for actual gateway calls and signing.
6
+
7
+ ## Current Response Shape Notes
8
+
9
+ - `/region/countries`
10
+ - `data` is an array of country objects directly. There is no `countries` wrapper.
11
+ - Example item: `countryCode`, `countryName`, `countryId`.
12
+ - `/region/cities`
13
+ - `data` is an array of province/city-group objects directly. There is no `provinces` wrapper.
14
+ - Example item: `countryCode`, `countryName`, `provinceCode`, `provinceName`, `citys[]`.
15
+ - City coordinates use `latBaidu`, `lngBaidu`, `latGoogle`, `lngGoogle`.
16
+ - `/region/popularCities`
17
+ - `data` is an array directly. There is no `list` wrapper.
18
+ - Current fields include `cityCode`, `cityName`, `parentAreaId`, `latBaidu`, `lngBaidu`, `timeZone`, and `areaType`.
19
+ - `/search/destination`
20
+ - `data` is an array directly. There is no `destinationDTOList` wrapper.
21
+ - Destination item is flat: `destinationId`, `destinationType`, `source`, `cityName`, `cityCode`, `destinationName`, province/country fields, `hotelId`, `latGoogle`, `lngGoogle`, `latBaidu`, `lngBaidu`.
22
+ - `/search/hotelIdList`
23
+ - Request supports `pageNo` and `pageSize`; default examples use `pageNo=1`, `pageSize=1000`.
24
+ - Response uses `totalCount`, not `total`. Pagination fields may be absent.
25
+ - `/search/hotelList`
26
+ - Hotel list coordinates use `latBaidu` and `lngBaidu`, not `latitude` and `longitude`.
27
+ - Items may include `groupName` and `brandName`.
28
+ - `/hotel/detail`
29
+ - Hotel static details use `facility`, not `hotelFacilityNew`.
30
+ - Popular hotel facilities use `popularFacility`, not `hotFacility`.
31
+ - `popularFacility.has24HourFrontDesk` replaces `hourFrontDesk_24`.
32
+ - Facility room scope uses `applicableRoomTypes`, not `applicableRoomTypeIDs`.
33
+ - Group and brand fields use `groupId`, `groupName`, `brandId`, and `brandName`.
34
+ - Baidu coordinates use `latBaidu` and `lngBaidu`; Google coordinates remain `latGoogle` and `lngGoogle`.
35
+ - Opening date uses `openingDate`, not `praciceDate`.
36
+ - Room network fields are `wiredBroadband` and `wirelessBroadband`.
37
+ - Comment fields are `averageScore` and `source`.
38
+ - `allowsPet`, `petText`, meeting-level `hotelId`, and pet charge `chargeFrequency` are not part of the current public response.
39
+ - Meeting images use `meetingImages`; derived size URLs and `title` are not exposed there.
40
+ - `roomBedTypeInfos.roomBeds[].bedGroups[].bedInfos[]` is an object list with `bedTypeCode`, `bedName`, `bedWidth`, and `bedNum`, matching `livingRoomBeds`.
41
+ - `/booking/productDetails`
42
+ - Product-level `reminder` is removed.
43
+ - `taxAndFeeDetails` is an object, not an array.
44
+ - `taxAndFeeDetails.feeItems` is an object, not an array.
45
+ - `priceItems[].taxDetail` includes `roomPrice`, `taxFee`, `salesTax`, and `otherTax`, all numeric.
46
+ - `/booking/availabilityCheck`
47
+ - `breakfastNum` and `breakfastType` are at the response `data` level, not under `priceItems`.
48
+ - `priceItems[].taxDetail` contains `roomPrice`, `taxFee`, `salesTax`, and `otherTax`.
49
+ - `roomTaxDetail` is an object with `taxFee`, `salesTax`, and `otherTax`.
50
+ - `roomStatus` is not exposed.
51
+ - `payAtHotelFee` and `payAtHotelFeeCurrency` refer to hotel-local currency amounts.
52
+ - `/booking/createOrder`
53
+ - `guestInfos[].guestType` replaces `guestInfos[].nationality`.
54
+ - `guestType` follows the dictionary item "宾客类型".
55
+ - `/order/orderDetail`
56
+ - Top-level room occupancy is represented by `roomGuestNumbers[]`, with `roomNumber`, `numberOfAdults`, `numberOfChildren`, and `childrenAges`.
57
+ - Top-level `roomNumber`, `numberOfAdults`, `numberOfChildren`, and `childrenAges` are not part of the current response.
58
+ - `originalAmount` is the order original amount.
59
+ - Top-level `nationality` is the country or region code.
60
+ - `guestInfos[].guestType` replaces `guestInfos[].nationality`.
61
+ - `/order/cancelOrder`
62
+ - Request field is `cancelReason`, not `cancelReson`.
63
+ - `/order/checkoutDetail`
64
+ - Response includes hotel and product context such as `cityCode`, `cityName`, `hotelId`, `hotelName`, `roomId`, `roomTypeName`, `ratePlanId`, and `paymentType`.
65
+ - `refundDetailList[]` includes `refundChannel`, `refundTime`, `amount`, and `billNo`.
66
+ - `checkoutDetailPriceItemList[].originalSalePrice` is the original sale price.
67
+
68
+ ## Common Enum-Like Values
69
+
70
+ Destination and source:
71
+
72
+ - `destinationType`: `1` hotel, `2` city, `3` district, `4` business area, `5` tourist area, `6` city and surroundings, `7` sub-city area, `8` place or metro station, `9` province, `10` country, `13` other.
73
+ - `source`: `0` Glink, `1` Google, `2` Baidu.
74
+
75
+ Hotel detail:
76
+
77
+ - `facility.categoryType`: `1` hotel facility, `2` room facility.
78
+ - `facility.status`: `0` none for all rooms, `1` available for all rooms, `2` available for some rooms. When status is `2`, inspect `applicableRoomTypes`.
79
+ - `breakfastOpenType`: `0` daily open, `1` specified dates.
80
+ - `breakfastOpenTimes[].isOpen`: `0` closed, `1` open.
81
+ - `parkingLocation`: `0` in hotel, `1` nearby.
82
+ - `parkingType`: `0` private parking, `1` public parking.
83
+ - `isReserved`: `0` reservation required, `1` no reservation required, `2` cannot reserve in advance.
84
+ - `isChargeable`: `0` free, `1` some guests may be charged, `2` charged.
85
+ - `parking.chargeType`: `1` per day, `2` per hour, `3` per week, `4` per stay, `5` per entry or exit.
86
+ - `isLimitParking`: `0` no, `1` yes.
87
+ - `isChargePark`: `0` no charging parking, `1` has charging parking.
88
+ - `chargingPile`: comma-separated values; `0` normal charger, `1` Tesla destination charger, `2` Tesla supercharger.
89
+ - `chargingType`: `0` private parking, `1` public parking.
90
+ - `isLimitCharging`: `0` do not display, `1` display first-come-first-served.
91
+ - `informType`: `0` hotel notice, `1` city notice, `2` important notice.
92
+ - `roomInfos[].isAllowSmoking`: `1` yes, `2` no, `3` partial, `-100` unknown.
93
+ - `roomInfos[].addBedflag`: `0` no extra bed, `1` extra bed available, `2` partially available.
94
+ - `hotelVideoInfos[].videoType`: `1` hotel video, `2` room video.
95
+ - Child/extra-bed `chargeManner`: `1` fixed amount, `2` percentage of room fee, `3` percentage of adult average price where applicable.
96
+ - Child/extra-bed `chargeFrequency`: `0` per night, `1` per stay.
97
+ - `addBedType`: `2` extra bed, `3` crib.
98
+ - `childBreakfast.rangeType`: `0` age, `1` height in centimeters.
99
+ - `petPolicy.isCharge`: `0` free, `1` charged.
100
+ - `petPolicy.limitInfos.animalType`: `1` dog, `2` cat, `0` other.
101
+ - Hotel image `imageType`: `1` room, `2` exterior, `3` lobby, `4` facility, `5` other, `6` banquet hall, `7` meeting room, `8` ticket, `9` other service.
102
+ - Image `isMain`: `1` main image, `0` non-main image.
103
+
104
+ Product, booking, and payment:
105
+
106
+ - `bookType`: `0` sold out, `1` bookable, `2` partially bookable, `3` view only / not satisfying booking or stay terms.
107
+ - `invoiceModel`: product details currently expose `1` merchant invoice; order detail may use `0` no invoice, `1` merchant invoice, `2` hotel front desk pickup.
108
+ - `invoiceType`: `1` normal invoice, `2` special invoice in product detail. Invoice APIs use the invoice-specific values below.
109
+ - `payAtHotelFlag`: `1` pay at hotel, `0` or other values mean not pay at hotel.
110
+ - `cancelRestrictionType`: `0` no cancellation policy, `1` non-cancellable and non-changeable, `2` cancellation after configured day/time requires penalty, `3` after configured day/time non-cancellable and non-changeable, `4` free cancellation.
111
+ - `windowType`: `0` no window, `1` partial window, `2` window, `3` internal window, `4` skylight.
112
+ - `pointsLabel`: `7` points available; `null` no points.
113
+ - `commissionLabel`: `8` GDS commission; `null` no commission.
114
+ - `settlementLabel`: `9` agency settlement, `10` non-agency settlement.
115
+ - `canBook`: examples use `1` for bookable after availability check.
116
+ - `createOrder.result`: `1` booking succeeded, `2` booking failed.
117
+ - `payStatus`: `1` payment success, `2` payment failure.
118
+
119
+ Order, cancel, checkout, and invoice:
120
+
121
+ - `orderStatus`: `2` processing, `3` confirmed, `4` canceled, `5` completed.
122
+ - `cancelResult`: `1` cancellation success, `2` cancellation refused, `3` cancelling.
123
+ - `invoiceRequest.invoiceType`: `0` electronic normal, `1` electronic special, `2` paper normal, `3` paper special.
124
+ - `invoiceTitleType`: `0` company, `1` personal or non-company.
125
+ - `invoiceTitleCode`: value range `1` to `6`.
126
+ - `invoiceDeliveryMethod`: `1` email, `2` post, `3` self-pickup.
127
+ - `invoiceInfo.invoiceStatus`: `0` pending, `1` downloaded and waiting for ticket creation, `2` ticket creation failed, `3` invoice binding failed, `4` invoiced, `5` invoicing, `6` invoiced and waiting for download, `7` invoicing failed, `8` attachment downloaded.
128
+ - `invoicePickup.getMethod`: `1` email.
129
+ - `invoicePickup.sendStatus`: `0` not sent, `1` sent, `2` send failed.
130
+ - `checkoutRequest.refundType`: `0` whole-order cancellation, `1` partial cancellation.
131
+ - `checkoutDetail.paymentType`: `0` prepaid, `1` pay at hotel.
132
+
133
+ ## Practical Scenarios
134
+
135
+ ### Standard catalog integration
136
+
137
+ Use this when the partner maintains local hotel and room mappings.
138
+
139
+ 1. Build a saleable hotel cache with `/search/hotelIdList` using `pageNo` and `pageSize`.
140
+ 2. Fetch static details with `/hotel/detail`. Persist current field names such as `facility`, `popularFacility`, `roomInfos`, `latBaidu`, `lngBaidu`, `groupName`, and `brandName`.
141
+ 3. Refresh static changes with `/hotel/increment`, then hydrate changed IDs with `/hotel/detail`.
142
+ 4. Refresh starting prices with `/hotel/lowestPrice` for list display.
143
+ 5. Call `/booking/productDetails` only for hotels in the local saleable cache.
144
+ 6. Use `/booking/availabilityCheck` immediately before `/booking/createOrder`; repeat the check if order submission is delayed.
145
+
146
+ ### Lightweight destination integration
147
+
148
+ Use this when the partner does not want a full static hotel sync.
149
+
150
+ 1. Resolve a keyword with `/search/destination`; the response is an array and `destinationType/source` identify the result type and source.
151
+ 2. Fetch filters with `/search/hotelFilters` when the UI needs filter panels.
152
+ 3. Search hotels with `/search/hotelList`; use `latBaidu/lngBaidu`, `groupName`, and `brandName` from list items for display.
153
+ 4. Hydrate selected hotels with `/hotel/detail` and `/hotel/images`.
154
+ 5. Continue with `/booking/productDetails`, `/booking/availabilityCheck`, `/booking/createOrder`, and `/booking/payOrder`.
155
+
156
+ ### Order aftercare
157
+
158
+ - For customer cancellation or unpaid timeout, call `/order/cancelOrder` with `cancelReason`.
159
+ - Treat `/notify/orderStatus` as the primary confirmation channel. Use `/order/orderDetail` only as compensation.
160
+ - For partial checkout/refund scenarios, call `/order/checkoutRequest` with `refundType=1`, then query `/order/checkoutDetail` by `taskOrderCode`.
161
+ - For invoice flows, call `/order/invoiceRequest`, then `/order/invoiceInfo` for status and pickup/download metadata.