Travel To Discover

Loading documentation…

3. API Reference

Export .md
[DEVELOPMENT] This endpoint is still under development. For production integrations, use HotelsMetadata instead.

HotelStaticDetail

POST /api/search/hotelStaticDetail

⚠️ [DEVELOPMENT] Not yet finished — do not build production traffic on this endpoint; use the HotelsMetadata API instead for production.

Fetches the full static profile of one hotel: core identity fields, facilities, imagery, contact details and geo/location data.

Primary Use Cases:

  • Rendering a hotel detail page
  • Enriching a booking flow with hotel content
  • Managing hotel profiles inside a CMS

Required Parameters:

  • hotelId: unique hotel identifier (required)

Integration Notes:

  • Returns a detailed hotel profile localised into EN / ZH / AR
  • Carries hotel facilities, imagery and contact details
  • Supplies geo coordinates plus destination information
  • Intended for hotel detail rendering and content administration

Request headers

Header Required Description
Client-Request-Timestamp No Client-side send time for this request, expressed as a unix timestamp.
IP No Caller IP address; both IPv4 and IPv6 are accepted.
Language No IETF BCP 47 language tag (see https://masonreview.com/posts/ietf-bcp-47-language-tags/), for example "en" or "en-US". Falls back to "en-US" when omitted.
Market No Point-of-sale market for this call, as an ISO 3166-1 alpha-2 country code. Required only when your account carries a market restriction: an allow-list cannot admit a market you have not stated, so such an account refuses calls that omit it.
Request-Id No Identifier for this individual request; values must not repeat.
Trace-Id No Identifier used to correlate a group of related requests.
User-Ref No Your own identifier for the person on whose behalf this call is made. Required only once named users have been authorised on your account, after which every call must identify one and is authorised against that user's scopes as well as the key's.
Authorization Yes Bearer credential — the value must be prefixed with "Bearer ". Obtain the token from the Ticket response. The Ticket call itself does not require this header.

Request body

Field Type Required Description
hotelId string Yes

Example request

json
{
  "hotelId": "461850557"
}

Response

Successful calls return the standard envelope. code is 0 on success — check it rather than the HTTP status alone, because some business failures are delivered with HTTP 200.

Field Type Required Description
code integer No
msg string No
data hotel.search.protocol.HotelStaticDetailResp No
data.hotel Hotel No
data.hotel.id string No Identifier of this property as the source that served it names it. It is accepted back on hotelIds, but it is not stable across searches — where several sources sell the same property, this is whichever one served this result. Key your catalogue on ttdHotelId instead.
data.hotel.ttdHotelId string No The platform's stable, client-facing property code — the same value the hotel-catalogue file publishes as ttdHotelId. One property is one code, and unlike id it does not change with the supplier that served this result, so it is the id to key your catalogue on. Present whenever the property is matched to our master catalogue. Accepted anywhere a hotel id is sent.
data.hotel.destinationId string No index
data.hotel.name I18N No Hotel name.
data.hotel.name.en string No English; the default system language.
data.hotel.name.zh string No Chinese (中文).
data.hotel.name.ar string No Arabic (اللغة العربية).
data.hotel.rating number No Hotel rating, on a scale from 0.0 to 5.0. (The range is documented in prose only; the source declares no minimum/maximum keywords.)
data.hotel.address I18N No Localised string set. Keys are fixed language codes.
data.hotel.address.en string No English; the default system language.
data.hotel.address.zh string No Chinese (中文).
data.hotel.address.ar string No Arabic (اللغة العربية).
data.hotel.latlngCoordinator LatlngCoordinator No
data.hotel.latlngCoordinator.google Latlng Yes
data.hotel.latlngCoordinator.gaode Latlng No
data.hotel.logoURL string No
data.hotel.minPrice Money No The lowest price satisfying the search criteria.
data.hotel.minPrice.currency string Yes Currency code, e.g. "USD".
data.hotel.minPrice.amount number Yes Monetary amount, e.g. "14.50".
data.hotel.minPricesByCurrency[] array No Lowest prices expressed in a range of currencies.
data.hotel.minPricesByCurrency[].currency string Yes Currency code, e.g. "USD".
data.hotel.minPricesByCurrency[].amount number Yes Monetary amount, e.g. "14.50".
data.hotel.isAvailable boolean No
data.hotel.rooms[] array No
data.hotel.rooms[].roomTypeId string Yes Standardized room type ID, e.g. "R001".
data.hotel.rooms[].roomTypeName I18N Yes Standardized room type name. When the supplier's type cannot be recognised, a fallback such as "Standard Room" is returned.
data.hotel.rooms[].hotelId string Yes Hotel ID. Repeats the parent hotel's ID so the room can be identified on its own.
data.hotel.rooms[].rates[] array<hotel.supplier.domain.RoomRatePkg> No The core structure — the room offers available for this room.

Example response

json
{
  "code": 0,
  "msg": "string",
  "data": {
    "hotel": {
      "id": "461850557",
      "ttdHotelId": "TTD-1000001",
      "destinationId": "0192f3a7-5c41-7e88-b3d2-9a1c4e6f0b57",
      "name": {
        "en": "Jumeirah Beach Hotel"
      },
      "rating": 4.5,
      "address": {
        "en": "Millenium Al Barsha"
      },
      "latlngCoordinator": {
        "google": {
          "lat": 0,
          "lng": 0
        },
        "gaode": {
          "lat": 0,
          "lng": 0
        }
      },
      "logoURL": "https://cdn.example.com/hotel/461850557_1.jpg",
      "minPrice": {
        "amount": 100,
        "currency": "USD"
      },
      "minPricesByCurrency": [
        {
          "amount": 700,
          "currency": "CNY"
        },
        {
          "amount": 85,
          "currency": "EUR"
        }
      ],
      "isAvailable": true,
      "rooms": [
        {
          "roomTypeId": "string",
          "roomTypeName": {
            "en": "string",
            "zh": "string",
            "ar": "string"
          },
          "hotelId": "string",
          "rates": [
            {}
          ]
        }
      ]
    }
  }
}

Failure responses

HTTP Meaning
400 Bad Request
401 Unauthorized
403 Forbidden
429 Too Many Requests

Every failure uses the { code, msg } envelope. See Error handling for the full business-code table.

Code samples

bash
curl -X POST https://api-test.ttdbooking.com/api/search/hotelStaticDetail \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TICKET" \
  -H "Request-Id: $(uuidgen)" \
  -d '{
    "hotelId": "461850557"
  }'

Try it

Try it

POST /api/search/hotelStaticDetail
A ticket will be fetched with ttdbooking_api_demo.