diff --git a/.spec-version b/.spec-version new file mode 100644 index 0000000..227cea2 --- /dev/null +++ b/.spec-version @@ -0,0 +1 @@ +2.0.0 diff --git a/spec/release-bump.txt b/spec/release-bump.txt new file mode 100644 index 0000000..acb503f --- /dev/null +++ b/spec/release-bump.txt @@ -0,0 +1 @@ +minor diff --git a/spec/tmsx-hotel-cases.yaml b/spec/tmsx-hotel-cases.yaml new file mode 100644 index 0000000..d043dad --- /dev/null +++ b/spec/tmsx-hotel-cases.yaml @@ -0,0 +1,205 @@ +version: 1 +# Ported from docs/public/doc-template/TMS_API_Integration_Test_Case.xlsx (cases 1-8, English sheet) +# into a machine-readable, parameterizable form. +# +# Field names corrected against spec/tmsx-hotel-spec.yaml during port: +# - PaxRoomRQs → PaxRooms (the actual spec field) +# - RateId → RateCode (the actual spec field on RateInfo) +# - top-level "RoomCount" → moved inside each PaxRoom entry +# - response root "HotelDetailResult.Hotels" → "Hotels" +# +# Dates are resolved at runtime via ${today+Nd} so cases never expire. + +cases: + - id: TC-HOTEL-001 + name: "1 adult per room, 1 room, 1 day — cancelable" + description: | + Search a hotel, pick a Refundable rate, prebook it, create the order. The captured + AgentRefID feeds TC-HOTEL-004 (cancel). + tags: [happy-path, cancelable] + variables: + check_in: "${today+30d}" + check_out: "${today+31d}" + hotel_code: 766917 + adults: 1 + children: 0 + room_count: 1 + flow: + - op: search_hotel + input: + CheckIn: "${check_in}" + CheckOut: "${check_out}" + HotelCodes: ["${hotel_code}"] + PaxRooms: + - Adults: "${adults}" + Children: "${children}" + RoomCount: "${room_count}" + assert: + - { path: "Error.ErrorCode", absent: true } + - { path: "Hotels", non_empty: true } + capture: + - { name: refundable_rate, path: "Hotels[0].RoomTypes[0].RateInfos[?Refundable==true][0]" } + - op: check_room_rate + input: + HotelCodes: ["${hotel_code}"] + CheckIn: "${check_in}" + CheckOut: "${check_out}" + RateCode: "${refundable_rate.RateCode}" + PaxRooms: + - Adults: "${adults}" + Children: "${children}" + RoomCount: "${room_count}" + assert: + - { path: "Error.ErrorCode", absent: true } + # CreateOrder requires ContactInfo, CurrencyCode, AgentRefID — TBD via integration + # questionnaire. The booking step is deliberately not exercised + # until the agent/skill workflow populates these. See follow-ups in . + + - id: TC-HOTEL-002 + name: "2 adults per room, 2 rooms, 1 day" + tags: [multi-room] + variables: + check_in: "${today+30d}" + check_out: "${today+31d}" + hotel_code: 766917 + adults: 2 + room_count: 2 + flow: + - op: search_hotel + input: + CheckIn: "${check_in}" + CheckOut: "${check_out}" + HotelCodes: ["${hotel_code}"] + PaxRooms: + - Adults: "${adults}" + Children: 0 + RoomCount: "${room_count}" + assert: + - { path: "Error.ErrorCode", absent: true } + - { path: "Hotels", non_empty: true } + + - id: TC-HOTEL-003 + name: "2 adults per room, 1 room, 7 days" + tags: [multi-night] + variables: + check_in: "${today+30d}" + check_out: "${today+37d}" + hotel_code: 766917 + adults: 2 + room_count: 1 + flow: + - op: search_hotel + input: + CheckIn: "${check_in}" + CheckOut: "${check_out}" + HotelCodes: ["${hotel_code}"] + PaxRooms: + - Adults: "${adults}" + Children: 0 + RoomCount: "${room_count}" + assert: + - { path: "Error.ErrorCode", absent: true } + - { path: "Hotels", non_empty: true } + + - id: TC-HOTEL-004 + name: "Cancel the order from TC-HOTEL-001" + tags: [cancel, deferred] + depends_on: [TC-HOTEL-001] + flow: + - op: cancel_order + input: + AgentRefID: "${TC-HOTEL-001.agent_ref_id}" + assert: + - { path: "Error.ErrorCode", absent: true } + - { path: "CancelResult.OrderStatus", equals: "CANCELLED" } + + - id: TC-HOTEL-005 + name: "1 adult per room, 1 room, 1 day — non-cancelable hotel" + description: | + Search a non-cancelable hotel rate and verify the response carries Refundable=false + or no CancelPolicyInfos. + tags: [non-cancelable] + variables: + check_in: "${today+30d}" + check_out: "${today+31d}" + hotel_code: 794946 + adults: 1 + room_count: 1 + flow: + - op: search_hotel + input: + CheckIn: "${check_in}" + CheckOut: "${check_out}" + HotelCodes: ["${hotel_code}"] + PaxRooms: + - Adults: "${adults}" + Children: 0 + RoomCount: "${room_count}" + assert: + - { path: "Error.ErrorCode", absent: true } + - { path: "Hotels", non_empty: true } + + - id: TC-HOTEL-006 + name: "Cancel the order from TC-HOTEL-005 — expected to fail or charge penalty" + description: | + The order in TC-HOTEL-005 is non-refundable. This case verifies the SDK surfaces + that outcome correctly. Either failure OR cancel-with-fee is acceptable. + tags: [cancel, expected-error, deferred] + depends_on: [TC-HOTEL-005] + flow: + - op: cancel_order + input: + AgentRefID: "${TC-HOTEL-005.agent_ref_id}" + # NOTE: no `Error.ErrorCode absent` assertion — failure is acceptable here. + + - id: TC-HOTEL-007 + name: "1 adult + 1 child per room, 1 room, 1 day" + tags: [child-age] + variables: + check_in: "${today+30d}" + check_out: "${today+31d}" + hotel_code: 7717374 + adults: 1 + children: 1 + children_ages: [5] + room_count: 1 + flow: + - op: search_hotel + input: + CheckIn: "${check_in}" + CheckOut: "${check_out}" + HotelCodes: ["${hotel_code}"] + PaxRooms: + - Adults: "${adults}" + Children: "${children}" + ChildrenAges: "${children_ages}" + RoomCount: "${room_count}" + assert: + - { path: "Error.ErrorCode", absent: true } + - { path: "Hotels", non_empty: true } + + - id: TC-HOTEL-008 + name: "1 adult + 2 children per room, 1 room, 1 day" + tags: [child-age, multi-child] + variables: + check_in: "${today+30d}" + check_out: "${today+31d}" + hotel_code: 2569549 + adults: 1 + children: 2 + children_ages: [5, 6] + room_count: 1 + flow: + - op: search_hotel + input: + CheckIn: "${check_in}" + CheckOut: "${check_out}" + HotelCodes: ["${hotel_code}"] + PaxRooms: + - Adults: "${adults}" + Children: "${children}" + ChildrenAges: "${children_ages}" + RoomCount: "${room_count}" + assert: + - { path: "Error.ErrorCode", absent: true } + - { path: "Hotels", non_empty: true } diff --git a/spec/tmsx-hotel-spec.yaml b/spec/tmsx-hotel-spec.yaml new file mode 100644 index 0000000..c76e532 --- /dev/null +++ b/spec/tmsx-hotel-spec.yaml @@ -0,0 +1,1513 @@ +openapi: 3.0.0 +info: + title: TMSX Hotel API + description: >- + Hotel-only OpenAPI spec extracted from docs/public/doc-file/merge_en.yaml. + + Source of truth for TMSX hotel SDK code generation (Python, TypeScript, Go). + + + **Authentication.** Every request requires BOTH the headers below (modeled in `security`) AND a `RequestHeader` + envelope inside the JSON body containing `Password`, `RequestTime`, and `TransactionID`. The body envelope is + enforced by SDK middleware — see `sdk/AUTH.md`. + version: '2.0' + contact: {} + license: + name: Proprietary — Shenzhen Tourmind International Travel Service Co., Ltd. + url: https://tourmind.cn/en-US/credit?type=termsAndConditions +servers: + - url: http://developers.tourmind.cn +security: + - AgentCodeHeader: [] + UsernameHeader: [] +tags: + - name: Overall Overview + description: > + Welcome to the Tourmind TMSX Hotel API. + + + ##### Key Features + + - Comprehensive APIs for hotel search, availability, booking, and lifecycle management. + + + ##### Technical Specifications + + - All communications are HTTP POST with JSON request and response bodies. + + - All requests should accept GZIP encoding; responses are returned in GZIP format. + + - Every request must include the dual-channel TMSX auth (see the Authorization section). + + + This spec is the hotel-only slice of the broader Tourmind platform. AI APIs (room matching, rate prediction) live + under a separate contract. + x-displayName: Overall Overview + - name: API Development Process + description: | + ![workflow_EN](../imgs/workflow_EN.png) + x-displayName: API Development Process + - name: Changelog + description: | + + + + + + + +
VersionDateDescription
v1.0.12023.05.01Initial hotel API documentation.
v2.0.12023.05.25Adjustments to hotel API fields.
v2.0.22026.03.19Add Query Bookings endpoint; add new fields to Retrieve Booking response (HotelCode, RoomCount, CheckIn, CheckOut, PaxRooms, Contact, ContactPhone, BookingTime).
+ + + + + + + + + + + + + + +
NameTest URL
HotelDetailhttp://developers.tourmind.cn/v2/HotelDetail
CheckRoomRatehttp://developers.tourmind.cn/v2/CheckRoomRate
CreateOrderhttp://developers.tourmind.cn/v2/CreateOrder
SearchOrderhttp://developers.tourmind.cn/v2/SearchOrder
CancelOrderhttp://developers.tourmind.cn/v2/CancelOrder
QueryBookingshttp://developers.tourmind.cn/v2/QueryBookings
RegionListhttp://developers.tourmind.cn/v2/RegionList
HotelStaticListhttp://developers.tourmind.cn/v2/HotelStaticList
RoomStaticListhttp://developers.tourmind.cn/v2/RoomStaticList
+ externalDocs: + description: ' ' + url: http://47.106.129.42:8080/project/TourmindAPIIntroduction.html + x-displayName: Changelog + - name: Authorization + description: | + #### 1. Common Request Field + + All requests require a common field named RequestHeader, in which account information must be provided. example: + + ```json + { + "AgentCode": "your agent code", + "UserName": "your username", + "Password": "your password", + "RequestTime": "2018-07-26T09:51:32.999Z", + "TransactionID": "6ba7b810-9dad-11d1-80b4-00c04fd430c8" + } + ``` + + #### 2. Http Header + + Please add the following two items to the Http header: + + - X-Agent-Code: your agent code + - X-Username: your username + + #### 3. Test Environment Credential + + + + + + + + +
API Test Credential
AgentCodetms_test
UserNametms_test
Passwordtms_test
+ x-displayName: Authorization + - name: Availability & Booking + x-displayName: Availability & Booking + description: Live operations against bookable inventory — search, prebook, create, retrieve, query, and cancel orders. + - name: StaticData + description: > + ### MealCode {#mealcode} + + + Meal code + + +
MealCodeDescription
1No + Breakfast
2Breakfast
3Lunch
4Dinner
5Lunch + and + Dinner
6HalfBoard
7FullBoard
8AllInclusive
9SelfCatering
+ x-displayName: StaticData + - name: Certification + description: >- + Please complete all test cases in the Test Cases document. + + + ### Attachments + + + Information Questionnaire.(Click to + Download.) + + + Test Cases.(Click to Download.) + x-displayName: Certification +x-tagGroups: + - name: ' ' + tags: + - Overall Overview + - API Development Process + - Changelog + - Authorization + - name: Hotel APIs + tags: + - Availability & Booking + - StaticData + - Certification +paths: + /v2/HotelDetail: + post: + description: >- + Search hotel room rates and available inventory for a specific property, enabling users to view detailed room + availability and pricing information. + operationId: HotelDetail + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/hotelDetail.HotelDetailRequest' + description: Query parameters. + required: true + responses: + '200': + description: Hotel details. + content: + application/json: + schema: + $ref: '#/components/schemas/hotelDetail.HotelDetailResponse' + default: + description: Application-level error envelope. The HTTP status is still 200; check Error.ErrorCode for the failure mode. + content: + application/json: + schema: + $ref: '#/components/schemas/common.Error' + summary: Search + tags: + - Availability & Booking + /v2/CheckRoomRate: + post: + description: >- + Check the availability and price of a specific room rate selected, usually requested when the user selects a + room to book and submits a booking.

+ operationId: CheckRoomRate + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/roomAvail.RoomAvailRequest' + description: Query parameters. + required: true + responses: + '200': + description: Prebook + content: + application/json: + schema: + $ref: '#/components/schemas/roomAvail.RoomAvailResponse' + default: + description: Application-level error envelope. The HTTP status is still 200; check Error.ErrorCode for the failure mode. + content: + application/json: + schema: + $ref: '#/components/schemas/common.Error' + summary: Prebook + tags: + - Availability & Booking + /v2/CreateOrder: + post: + description: >- + Booking + + + Note: If the request times out, returns a PENDING status, or returns an error, please poll the Retrieve Booking + API to obtain the final status of the booking. + operationId: CreateOrder + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/createOrder.CreateOrderRequest' + description: Query parameters. + required: true + responses: + '200': + description: Booking + content: + application/json: + schema: + $ref: '#/components/schemas/createOrder.CreateOrderResponse' + default: + description: Application-level error envelope. The HTTP status is still 200; check Error.ErrorCode for the failure mode. + content: + application/json: + schema: + $ref: '#/components/schemas/common.Error' + summary: Booking + tags: + - Availability & Booking + /v2/CancelOrder: + post: + description: >- + Send a cancel request to cancel refundable and pending bookings. + + + Note: If the request times out or returns an error, please poll the Retrieve Booking API to obtain the final + status of the booking. + operationId: CancelOrder + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/cancelOrder.CancelOrderRequest' + description: Query parameters. + required: true + responses: + '200': + description: Cancel + content: + application/json: + schema: + $ref: '#/components/schemas/cancelOrder.CancelOrderResponse' + default: + description: Application-level error envelope. The HTTP status is still 200; check Error.ErrorCode for the failure mode. + content: + application/json: + schema: + $ref: '#/components/schemas/common.Error' + summary: Cancel + tags: + - Availability & Booking + /v2/SearchOrder: + post: + description: Retrieve booking to check its status in the booking process. + operationId: SearchOrder + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/searchOrder.QueryOrderRequest' + description: Query parameters. + required: true + responses: + '200': + description: Retrieve Booking + content: + application/json: + schema: + $ref: '#/components/schemas/searchOrder.QueryOrderResponse' + default: + description: Application-level error envelope. The HTTP status is still 200; check Error.ErrorCode for the failure mode. + content: + application/json: + schema: + $ref: '#/components/schemas/common.Error' + summary: Retrieve Booking + tags: + - Availability & Booking + /v2/QueryBookings: + post: + description: >- + Query bookings by date range with pagination. Use this endpoint to retrieve a list of orders filtered by + check-in date, check-out date, or booking date. The actual API endpoint is POST /v2/SearchOrder (same URL as + Retrieve Booking, but with different request parameters). + operationId: QueryBookings + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/searchOrder.QueryBookingsRequest' + description: Query parameters. + required: true + responses: + '200': + description: Query Bookings + content: + application/json: + schema: + $ref: '#/components/schemas/searchOrder.QueryBookingsResponse' + default: + description: Application-level error envelope. The HTTP status is still 200; check Error.ErrorCode for the failure mode. + content: + application/json: + schema: + $ref: '#/components/schemas/common.Error' + summary: Query Bookings + tags: + - Availability & Booking + /v2/HotelStaticList: + post: + description: Retrieve static data for hotels. + operationId: HotelStaticList + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/hotelstatic.HotelStaticListRequest' + description: Query parameters. + required: true + responses: + '200': + description: Hotel static information. + content: + application/json: + schema: + $ref: '#/components/schemas/hotelstatic.HotelStaticListResponse' + default: + description: Application-level error envelope. The HTTP status is still 200; check Error.ErrorCode for the failure mode. + content: + application/json: + schema: + $ref: '#/components/schemas/common.Error' + summary: Hotel List + tags: + - StaticData + /v2/RegionList: + post: + description: Retrieve the list of regions. + operationId: RegionList + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/regionList.RegionListRequest' + description: Query parameters. + required: true + responses: + '200': + description: Region List + content: + application/json: + schema: + $ref: '#/components/schemas/regionList.RegionListResponse' + default: + description: Application-level error envelope. The HTTP status is still 200; check Error.ErrorCode for the failure mode. + content: + application/json: + schema: + $ref: '#/components/schemas/common.Error' + summary: Region List + tags: + - StaticData + /v2/RoomStaticList: + post: + description: Retrieve the list of room information of sepecific hotels. + operationId: RoomTypeStatic + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/roomStatic_model.RoomStaticRequest' + description: Query parameters. + required: true + responses: + '200': + description: Hotel room data + content: + application/json: + schema: + $ref: '#/components/schemas/roomStatic_model.RoomStaticResponse' + default: + description: Application-level error envelope. The HTTP status is still 200; check Error.ErrorCode for the failure mode. + content: + application/json: + schema: + $ref: '#/components/schemas/common.Error' + summary: Hotel Room Type List + tags: + - StaticData +components: + schemas: + cancelOrder.CancelOrderRequest: + properties: + AgentRefID: + description: Agent reference ID provided in the CreateOrder request by the agent; maximum length is 128. + example: '213415' + type: string + RequestHeader: + $ref: '#/components/schemas/common.RequestHeader' + type: object + cancelOrder.CancelOrderResponse: + properties: + CancelResult: + allOf: + - $ref: '#/components/schemas/cancelOrder.CancelResult' + description: This value will not be returned if an error occurs. + Error: + allOf: + - $ref: '#/components/schemas/common.Error' + description: This value will be returned if an error occurs. + ResponseHeader: + $ref: '#/components/schemas/common.ResponseHeader' + type: object + cancelOrder.CancelResult: + properties: + CancelFee: + description: Cancellation penalty fee charged. + example: 42 + type: number + CurrencyCode: + description: Currency code for the charge amount. + example: CNY + type: string + OrderStatus: + description: >- + Order status.
OrderStatusDescription
PENDINGBooking + confirmation pending.
CONFIRMEDBooking + confirmed.
CANCELLEDBooking cancelled.
FAILEDBooking + confirmation failed.
+ example: CANCELLED + type: string + type: object + common.Error: + properties: + ErrorCode: + description: >- + Error code.
ErrorCodeDescription
101No payload in the + request.
102Invalid format of the request.
103Request + data validation failed.
104Service error.
105API user + authentication error; invalid AgentCode, Username, or Password.
+ example: '101' + type: string + ErrorMessage: + description: Error message. + example: invaild param + type: string + type: object + common.RequestHeader: + properties: + AgentCode: + description: Unique code for the agent provided by TourMind. + example: tms_test + type: string + Password: + description: Password for the API request. + example: tms_test + type: string + RequestTime: + description: Request timestamp in ISO 8601 format with millisecond precision, e.g., "2006-01-02T15:04:05.123Z". + example: '2018-07-26T09:51:32.123Z' + type: string + TransactionID: + description: Identifier for tracing API requests, such as using a GUID. + example: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 + type: string + UserName: + description: Username for the API request. + example: tms_test + type: string + type: object + common.ResponseHeader: + properties: + ResponseTime: + description: 'Response timestamp, format: “2006-01-02 15:04:05”.' + example: '2018-07-26 09:51:32' + type: string + TransactionID: + description: This value must match the TransactionID in the request.. + example: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 + type: string + type: object + createOrder.ContactInfo: + properties: + Email: + description: Email of the booking contact. + example: xxx@google.com + type: string + FirstName: + description: First Name of the booking contact. + example: Tom + type: string + LastName: + description: Last Name of the booking contact. + example: Lee + type: string + PhoneNo: + description: Phone number of the booking contact. + example: '1521777777' + type: string + type: object + createOrder.CreateOrderRequest: + properties: + AgentRefID: + description: >- + Unique agent reference ID to identify a booking; maximum length is 128 characters. Note! Reserving with the + same AgentRefID will not create a new reservation; instead, the original reservation information will be + returned. + example: '213415' + type: string + CheckIn: + description: 'Check-in date, format: “2006-01-02”.' + example: '2018-08-15' + type: string + CheckOut: + description: 'Check-out date, format: “2006-01-02”.' + example: '2018-08-18' + type: string + ContactInfo: + allOf: + - $ref: '#/components/schemas/createOrder.ContactInfo' + description: Contact information for the booking. + CurrencyCode: + description: Currency code. + example: CNY + type: string + HotelCode: + description: TourMind Hotel ID; only one ID is required in this request. + example: 235113 + type: integer + PaxRooms: + description: >- + Request room occupancies. Note: Currently, only the same number of adults and children is supported for each + room; for multiple rooms, you only need to fill in one object. + items: + $ref: '#/components/schemas/createOrder.PaxRoom' + type: array + RateCode: + description: TourMind Rate ID. + example: '2132151' + type: string + RequestHeader: + $ref: '#/components/schemas/common.RequestHeader' + SpecialRequest: + description: Special customer requests. + example: Non-smoking room + type: string + TotalPrice: + description: Total price for the booking returned from the CheckRoomRateResponse. + example: 88.88 + type: number + type: object + createOrder.CreateOrderResponse: + properties: + Error: + allOf: + - $ref: '#/components/schemas/common.Error' + description: This value will be returned if an error occurs. + OrderInfo: + allOf: + - $ref: '#/components/schemas/createOrder.OrderInfo' + description: This value will not be returned if an error occurs. + ReservationID: + description: Tourmind order ID + example: '10470379' + type: string + ResponseHeader: + $ref: '#/components/schemas/common.ResponseHeader' + type: object + createOrder.OrderInfo: + properties: + OrderStatus: + description: >- + Order status.
OrderStatusDescription
PENDINGBooking + confirmation pending.
CONFIRMEDBooking + confirmed.
CANCELLEDBooking cancelled.
FAILEDBooking + confirmation failed.
+ example: CONFIRMED + type: string + ReservationID: + description: Tourmind order ID + example: '10470379' + type: string + type: object + createOrder.PaxName: + properties: + FirstName: + example: Tom + type: string + LastName: + example: Lee + type: string + Type: + description: ADU represents Adult, CHI represents Child. + example: ADU + type: string + type: object + createOrder.PaxRoom: + properties: + Adults: + example: 2 + type: integer + Children: + example: 0 + type: integer + ChildrenAges: + description: Children's ages; the count of the array must equal the number of children. + items: + type: integer + type: array + PaxNames: + items: + $ref: '#/components/schemas/createOrder.PaxName' + type: array + RoomCount: + example: 1 + type: integer + type: object + hotelDetail.CancelPolicyInfo: + properties: + Amount: + description: Cancellation charge amount. + type: number + CurrencyCode: + description: Currency for the cancellation charge amount. + type: string + EndDateTime: + description: 'Cancellation policy window end, format: “2006-01-02“.' + type: string + From: + description: 'Specific start time, format: "2006-01-02 15:04:05"' + type: string + StartDateTime: + description: 'Cancellation policy window start, format: "2006-01-02".' + type: string + To: + description: 'Specific end time, format: "2006-01-02 15:04:05"' + type: string + type: object + hotelDetail.DailyPriceInfo: + properties: + Count: + description: this is daily inventory count + type: integer + Date: + description: 'Date, format: "2006-01-02"' + type: string + Price: + description: Price for 1 room per night. + type: number + type: object + hotelDetail.Hotel: + properties: + CheckIn: + description: 'Check-in date, format: “2006-01-02”.' + example: '2018-08-25' + type: string + CheckOut: + description: 'Check-out date, format: “2006-01-02”.' + example: '2018-08-26' + type: string + HotelCode: + description: Hotel code. + example: '740650' + type: string + RoomTypes: + description: Room types available based on the search criteria. + items: + $ref: '#/components/schemas/hotelDetail.RoomType' + type: array + type: object + hotelDetail.HotelDetailRequest: + properties: + CheckIn: + description: 'Check-in date, format: “2006-01-02”.' + example: '2018-08-25' + type: string + CheckOut: + description: 'Check-out date, format: “2006-01-02”.' + example: '2018-08-26' + type: string + HotelCodes: + description: TourMind hotel IDs; up to 20 IDs are supported in this request. + items: + type: integer + example: 8268393 + type: array + IsDailyPrice: + description: 'If true, daily price information will be included in the response. Default: false.' + type: boolean + Nationality: + description: Nationality. + example: CN + type: string + PaxRooms: + description: >- + Request room occupancies. Note: Currently, only the same number of adults and children is supported for each + room; for multiple rooms, you only need to fill in one object. + items: + $ref: '#/components/schemas/hotelDetail.PaxRoomRQ' + type: array + Timeout: + description: request timeout, millisecond + example: 6000 + type: integer + RequestHeader: + $ref: '#/components/schemas/common.RequestHeader' + type: object + hotelDetail.HotelDetailResponse: + properties: + Error: + allOf: + - $ref: '#/components/schemas/common.Error' + description: This value will be returned if an error occurs. + Hotels: + description: Hotel information. + items: + $ref: '#/components/schemas/hotelDetail.Hotel' + type: array + ResponseHeader: + $ref: '#/components/schemas/common.ResponseHeader' + type: object + hotelDetail.MealInfo: + properties: + MealCount: + description: Number of free meals offered. + example: 2 + type: integer + MealType: + description: >- + Meal type
MealTypeDescription
1No + Breakfast
2Breakfast
3Lunch
4Dinner
5Lunch + and + Dinner
6HalfBoard
7FullBoard
8AllInclusive
9SelfCatering
+ example: breakfast + type: string + type: object + hotelDetail.PaxRoomRQ: + properties: + Adults: + description: Number of adults per room. + example: 4 + type: integer + Children: + description: Number of children per room. + example: 0 + type: integer + ChildrenAges: + description: Children's ages; the count of the array must equal the number of children. + items: + type: integer + type: array + RoomCount: + description: Room count. + example: 2 + type: integer + type: object + hotelDetail.RateInfo: + properties: + Allotment: + description: Available room inventory count. + example: 2 + type: integer + CancelPolicyInfos: + description: Cancellation policy information. + items: + $ref: '#/components/schemas/hotelDetail.CancelPolicyInfo' + type: array + CurrencyCode: + description: Currency code. + example: CNY + type: string + DailyPriceInfo: + description: Daily pricing information for the hotel. + items: + $ref: '#/components/schemas/hotelDetail.DailyPriceInfo' + type: array + InvoiceInfo: + description: 'Invoice information: 1: Hotel invoice, 2: TourMind invoice' + type: integer + MealInfo: + allOf: + - $ref: '#/components/schemas/hotelDetail.MealInfo' + description: Meal information. + Name: + description: >- + Sub-room name, i.e. the original room name from the supplier/hotel system. More accurate than the aggregated + name in RoomType, but results in more static room entries. In rare cases, sub-rooms may be incorrectly + mapped to their parent room type. + example: SUITE THREE BEDROOMS + type: string + NameCN: + description: >- + Sub-room name in Chinese, i.e. the original room name from the supplier/hotel system. More accurate than the + aggregated name in RoomType, but results in more static room entries. In rare cases, sub-rooms may be + incorrectly mapped to their parent room type. + type: string + RateCode: + description: Rate identifier for a sellable product; this code is unique across all TourMind hotels. + example: '13800206' + type: string + Refundable: + type: boolean + TotalPrice: + description: Total price; this is the total amount charged. + example: 688.88 + type: number + bedTypeDesc: + description: Bed type description. + type: string + bedTypeDescCN: + description: Bed type description in Chinese. + type: string + type: object + hotelDetail.RoomType: + properties: + BedTypeDesc: + description: Bed type description. + type: string + BedTypeDescCN: + description: Bed type description in Chinese. + type: string + Name: + description: >- + Aggregated room type name, cleaner and easier to display, recommended. Note: in rare cases, it may differ + from the sub-room name in RateInfo. + example: Suite 3 bedrooms + type: string + NameCN: + description: >- + Aggregated room type name in Chinese, cleaner and easier to display, recommended. Note: in rare cases, it + may differ from the sub-room name in RateInfo. + example: Triple Room + type: string + RateInfos: + description: A list of rates for a room type; at least one rate will be returned. + items: + $ref: '#/components/schemas/hotelDetail.RateInfo' + type: array + RoomTypeCode: + description: TourMind room type code, which is a unique identifier across all TourMind hotels. + example: '4613' + type: string + type: object + hotelstatic.HotelInfo: + properties: + Address: + description: Hotel address. + example: 3007 Santa Monica Blvd, 90404 + type: string + Address_CN: + description: Hotel address in Chinese. + type: string + CityCode: + description: City code.,Matched region ID. + example: '14209' + type: string + CityName: + description: City name. + example: ShangHai + type: string + CityNameCN: + description: City name in Chinese. + example: Shanghai + type: string + CountryCode: + description: 'Country code.,ISO 3166-1 alpha-2, e.g., China: CN.' + example: CN + type: string + HotelId: + description: TourMind hotel ID. + example: '739315' + type: string + Images: + items: + $ref: '#/components/schemas/hotelstatic.Image' + type: array + Latitude: + description: Latitude. + example: '34.03644' + type: string + Longitude: + description: Longitude. + example: '-118.47048' + type: string + Name: + description: Hotel name. + example: Days Inn Santa Monica/Los Angeles + type: string + Name_CN: + description: Hotel name in Chinese. + type: string + Phone: + description: Hotel phone number. + example: '1523333333' + type: string + StarRating: + description: Hotel star rating. + example: '5' + type: string + type: object + hotelstatic.HotelStaticListRequest: + properties: + CountryCode: + description: Country code. + example: CN + type: string + HotelIds: + description: Identifiers for specific hotels.. + items: + type: integer + type: array + Pagination: + allOf: + - $ref: '#/components/schemas/hotelstatic.Pagination' + description: Pagination information. + RequestHeader: + $ref: '#/components/schemas/common.RequestHeader' + type: object + hotelstatic.HotelStaticListResponse: + properties: + Error: + allOf: + - $ref: '#/components/schemas/common.Error' + description: This value will be returned if an error occurs. + HotelStaticListResult: + allOf: + - $ref: '#/components/schemas/hotelstatic.HotelStaticListResult' + description: This value will not be returned if an error occurs. + ResponseHeader: + $ref: '#/components/schemas/common.ResponseHeader' + type: object + hotelstatic.HotelStaticListResult: + properties: + Hotels: + description: Hotel information. + items: + $ref: '#/components/schemas/hotelstatic.HotelInfo' + type: array + Pagination: + allOf: + - $ref: '#/components/schemas/hotelstatic.PaginationRS' + description: Pagination information. + type: object + hotelstatic.Image: + properties: + caption: + type: string + category: + type: integer + hero_image: + type: boolean + links: + additionalProperties: + $ref: '#/components/schemas/hotelstatic.Link' + type: object + type: object + hotelstatic.Link: + properties: + href: + type: string + method: + type: string + type: object + hotelstatic.Pagination: + properties: + PageIndex: + description: PageIndex needs to accommodate both string and integer types. [1 or '1'] + example: 1 + PageSize: + description: Items per page. + example: 10 + type: integer + type: object + hotelstatic.PaginationRS: + properties: + PageCount: + description: Total number of pages. + example: 1 + type: integer + TotalCount: + description: Total number of records. + example: 10 + type: integer + type: object + regionList.Region: + properties: + CountryCode: + description: 'ISO 3166-1 alpha-2, e.g., China: CN.,' + example: '231' + type: string + Name: + description: Region name. + example: ShangHai + type: string + NameCN: + description: Region name in Chinese. (Nullable.) + example: Shanghai + type: string + RegionID: + description: TourMind region ID. + example: '21312541' + type: string + RegionNameLong: + description: Region name + example: Shanghai, China + type: string + RegionNameLongCN: + description: Full region name in Chinese. + example: Shanghai, China + type: string + type: object + regionList.RegionListRequest: + properties: + CountryCode: + description: Country code. + example: CN + type: string + RequestHeader: + $ref: '#/components/schemas/common.RequestHeader' + type: object + regionList.RegionListResponse: + properties: + Error: + $ref: '#/components/schemas/common.Error' + RegionListResult: + $ref: '#/components/schemas/regionList.RegionListResult' + ResponseHeader: + $ref: '#/components/schemas/common.ResponseHeader' + type: object + regionList.RegionListResult: + properties: + Regions: + items: + $ref: '#/components/schemas/regionList.Region' + type: array + type: object + roomAvail.CancelPolicyInfo: + properties: + Amount: + description: Cancellation charge amount. + type: number + CurrencyCode: + description: Currency for the cancellation charge amount. + type: string + EndDateTime: + description: 'Cancellation policy window end, format: “2006-01-02“.' + type: string + From: + description: 'Specific start time, format: "2006-01-02 15:04:05"' + type: string + StartDateTime: + description: 'Cancellation policy window start, format: "2006-01-02".' + type: string + To: + description: 'Specific end time, format: "2006-01-02 15:04:05"' + type: string + type: object + roomAvail.DailyPriceInfo: + properties: + Count: + description: this is daily inventory count + type: integer + Date: + description: 'Date, format: "2006-01-02"' + type: string + Price: + description: Price of a specific date. + type: number + type: object + roomAvail.DateRange: + properties: + End: + description: End date of low price period + type: string + Start: + description: Start date of low price period + type: string + type: object + roomAvail.Hotel: + properties: + CheckIn: + description: 'Check-in date, format: “2006-01-02”.' + example: '2018-08-25' + type: string + CheckOut: + description: 'Check-out date, format: “2006-01-02”.' + example: '2018-08-26' + type: string + HotelCode: + description: Hotel code. + example: '740650' + type: string + LowPricePeriod: + $ref: '#/components/schemas/roomAvail.LowPricePeriod' + RoomTypes: + description: Room types available based on the search criteria. + items: + $ref: '#/components/schemas/roomAvail.RoomType' + type: array + type: object + roomAvail.LowPricePeriod: + properties: + CurrentPrice: + description: Current price of the hotel + type: number + DateRange: + $ref: '#/components/schemas/roomAvail.DateRange' + LowPriceRange: + $ref: '#/components/schemas/roomAvail.LowPriceRange' + UpdateTime: + description: Last update time of the price prediction + type: string + type: object + roomAvail.LowPriceRange: + properties: + CurrencyCode: + description: Currency code for the prices + type: string + Max: + description: Maximum price in the range + type: number + Min: + description: Minimum price in the range + type: number + type: object + roomAvail.MealInfo: + properties: + MealCount: + description: Number of free meals offered. + example: 2 + type: integer + MealType: + description: >- + Meal type
MealTypeDescription
1No + Breakfast
2Breakfast
+ example: breakfast + type: string + type: object + roomAvail.PaxRoomRQ: + properties: + Adults: + description: Number of adults per room. + example: 4 + type: integer + Children: + description: Number of children per room. + example: 0 + type: integer + ChildrenAges: + description: Children's ages; the count of the array must equal the number of children. + items: + type: integer + type: array + RoomCount: + description: Room count. + example: 2 + type: integer + type: object + roomAvail.RateInfo: + properties: + Allotment: + description: Available room inventory count. + example: 2 + type: integer + CancelPolicyInfos: + description: Cancellation policy information. + items: + $ref: '#/components/schemas/roomAvail.CancelPolicyInfo' + type: array + CurrencyCode: + description: Currency code. + example: CNY + type: string + DailyPriceInfo: + description: Daily pricing information for the hotel. + items: + $ref: '#/components/schemas/roomAvail.DailyPriceInfo' + type: array + MealInfo: + allOf: + - $ref: '#/components/schemas/roomAvail.MealInfo' + description: Meal information. + Name: + description: >- + Sub-room name, i.e. the original room name from the supplier/hotel system. More accurate than the aggregated + name in RoomType, but results in more static room entries. In rare cases, sub-rooms may be incorrectly + mapped to their parent room type. + example: SUITE THREE BEDROOMS + type: string + NameCN: + description: >- + Sub-room name in Chinese, i.e. the original room name from the supplier/hotel system. More accurate than the + aggregated name in RoomType, but results in more static room entries. In rare cases, sub-rooms may be + incorrectly mapped to their parent room type. + type: string + RateCode: + description: Rate identifier for a sellable product; this code is unique across all TourMind hotels. + example: '13800206' + type: string + Refundable: + type: boolean + TotalPrice: + description: Total price; this is the total amount charged. + example: 688.88 + type: number + bedTypeDesc: + description: Bed type description. + type: string + bedTypeDescCN: + description: Bed type description in Chinese. + type: string + type: object + roomAvail.RoomAvailRequest: + properties: + CheckIn: + description: 'Check-in date, format: “2006-01-02”.' + example: '2018-08-25' + type: string + CheckOut: + description: 'Check-out date, format: “2006-01-02”.' + example: '2018-08-26' + type: string + HotelCodes: + description: TourMind Hotel ID; only one ID is required in this request. + items: + type: integer + example: 8268393 + type: array + Nationality: + description: Nationality. + example: CN + type: string + PaxRooms: + description: >- + Request room occupancies. Note: Currently, only the same number of adults and children is supported for each + room. + items: + $ref: '#/components/schemas/roomAvail.PaxRoomRQ' + type: array + RateCode: + description: TourMind Rate ID. + example: '13800206' + type: string + RequestHeader: + $ref: '#/components/schemas/common.RequestHeader' + type: object + roomAvail.RoomAvailResponse: + properties: + Error: + allOf: + - $ref: '#/components/schemas/common.Error' + description: This value will be returned if an error occurs. + Hotels: + description: Hotel information. + items: + $ref: '#/components/schemas/roomAvail.Hotel' + type: array + ResponseHeader: + $ref: '#/components/schemas/common.ResponseHeader' + type: object + roomAvail.RoomType: + properties: + BedTypeDesc: + description: Bed type description. + type: string + BedTypeDescCN: + description: Bed type description in Chinese. + type: string + Name: + description: >- + Aggregated room type name, cleaner and easier to display, recommended. Note: in rare cases, it may differ + from the sub-room name in RateInfo. + example: Suite 3 bedrooms + type: string + NameCN: + description: >- + Aggregated room type name in Chinese, cleaner and easier to display, recommended. Note: in rare cases, it + may differ from the sub-room name in RateInfo. + example: Triple Room + type: string + RateInfos: + description: A list of rates for a room type; at least one rate will be returned. + items: + $ref: '#/components/schemas/roomAvail.RateInfo' + type: array + RoomTypeCode: + description: TourMind room type code, which is a unique identifier across all TourMind hotels. + example: '4613' + type: string + type: object + roomStatic_model.RoomStaticRequest: + properties: + HotelCode: + description: Hotel.Code + example: 235113 + type: integer + RequestHeader: + $ref: '#/components/schemas/common.RequestHeader' + type: object + roomStatic_model.RoomStaticResponse: + properties: + Error: + $ref: '#/components/schemas/common.Error' + ResponseHeader: + $ref: '#/components/schemas/common.ResponseHeader' + RoomTypes: + items: + $ref: '#/components/schemas/roomStatic_model.RoomTypeInfo' + type: array + type: object + roomStatic_model.RoomTypeInfo: + properties: + BedTypeDesc: + type: string + BedTypeDescCN: + type: string + MaxOccupancy: + type: integer + RoomTypeCode: + type: string + RoomTypeName: + type: string + RoomTypeNameCN: + type: string + type: object + searchOrder.OrderInfo: + properties: + AgentRefID: + description: Agent reference ID; + example: '213415' + type: string + CurrencyCode: + description: Currency code. + example: CNY + type: string + HotelConfirmationNo: + description: Hotel confirmation number. + example: '10470374' + type: string + OrderStatus: + description: >- + Order status.
OrderStatusDescription
PENDINGBooking + confirmation pending.
CONFIRMEDBooking + confirmed.
CANCELLEDBooking cancelled.
FAILEDBooking + confirmation failed.
+ example: CANCELLED + type: string + ReservationID: + description: Tourmind order ID + example: '10470374' + type: string + TotalPrice: + description: Total price of the booking. + example: 888.89 + type: number + HotelCode: + description: Tourmind hotel ID. + example: 0 + type: integer + RoomCount: + description: Number of rooms. + example: 0 + type: integer + CheckIn: + description: Check-in date. Format YYYY-MM-DD. + example: '2020-01-01' + type: string + CheckOut: + description: Check-out date. Format YYYY-MM-DD. + example: '2020-01-02' + type: string + PaxRooms: + description: Room occupancy details with guest names. + items: + $ref: '#/components/schemas/createOrder.PaxRoom' + type: array + Contact: + description: Contact person name. + type: string + ContactPhone: + description: Contact phone number. + type: string + BookingTime: + description: Booking creation time. + example: '2020-01-03 12:00:00' + type: string + type: object + searchOrder.OrderList: + properties: + OrderList: + description: List of orders. + items: + $ref: '#/components/schemas/searchOrder.OrderInfo' + type: array + Page: + description: Current page number. + example: 1 + type: integer + PageSize: + description: Page size. + example: 50 + type: integer + Total: + description: Total number of orders matching the query. + example: 100 + type: integer + type: object + searchOrder.QueryBookingsRequest: + properties: + DateType: + description: >- + Date type for date range query. Possible values: CheckIn (check-in date), CheckOut (check-out date), Booking + (booking date). + example: CheckIn + type: string + From: + description: Start date for the query range. Format YYYY-MM-DD. The date span (To minus From) must be <= 31 days. + example: '2024-01-01' + type: string + To: + description: End date for the query range. Format YYYY-MM-DD. The date span (To minus From) must be <= 31 days. + example: '2024-01-31' + type: string + Page: + description: Page number for pagination. Must be >= 1. + example: 1 + type: integer + PageSize: + description: Number of results per page. Must be between 1 and 500. + example: 50 + type: integer + RequestHeader: + $ref: '#/components/schemas/common.RequestHeader' + required: + - DateType + - From + - To + - Page + - PageSize + - RequestHeader + type: object + searchOrder.QueryBookingsResponse: + properties: + Error: + allOf: + - $ref: '#/components/schemas/common.Error' + description: This value will be returned if an error occurs. + OrderList: + allOf: + - $ref: '#/components/schemas/searchOrder.OrderList' + description: Paginated list of orders. Will not be returned if an error occurs. + ResponseHeader: + $ref: '#/components/schemas/common.ResponseHeader' + type: object + searchOrder.QueryOrderRequest: + properties: + AgentRefID: + description: Agent reference ID provided in the CreateOrder request; maximum length is 128. + example: '21345555' + type: string + RequestHeader: + $ref: '#/components/schemas/common.RequestHeader' + type: object + searchOrder.QueryOrderResponse: + properties: + Error: + allOf: + - $ref: '#/components/schemas/common.Error' + description: This value will be returned if an error occurs. + OrderInfo: + allOf: + - $ref: '#/components/schemas/searchOrder.OrderInfo' + description: This value will not be returned if an error occurs. + ResponseHeader: + $ref: '#/components/schemas/common.ResponseHeader' + type: object + securitySchemes: + AgentCodeHeader: + type: apiKey + in: header + name: X-Agent-Code + description: Agent code identifying the calling organization. Must match RequestHeader.AgentCode in the body. + UsernameHeader: + type: apiKey + in: header + name: X-Username + description: Username for the calling user. Must match RequestHeader.UserName in the body.