Hotel price data queries

OTI's hotel price record comparison is a public service that travellers and AI search tools can read without logging in. The current public pilot covers collected Friday stays at 3 hotels in Da Nang · 2 adults · 0 children · 1 room · 1 night · USD. Live inventory, booking and payment are not provided.

Specify the destination, dates and guests as URL conditions to query seller-by-seller records for multiple hotels as HTML or JSON. No login or JavaScript is required.

If the number of adults, children, rooms or nights, or the currency, is outside the supported range, the response is 422 and no substitute price is returned. Even for valid future dates, there may be no recorded prices.

destination is a region name or a path name such as da-nang. checkin/checkout is a YYYY-MM-DD pair; if omitted, the collected stay dates are returned. You can filter with breakfast=included, cancellation=free_cancel and maxTotal=amount in USD. maxTotal applies only to rows confirmed as tax-included. If filters are omitted, records with unconfirmed conditions are also returned. comparable is a flag for the existing sort by tax-included price; it does not verify that the room, applied guest count, guests covered by breakfast, cancellation time, time zone or penalties are the same.

Results are returned 6 hotels at a time; after the breakfast, cancellation and total conditions are applied, each page returns up to 30 price records per hotel per stay date. Even if there are no results, check the next page of hotels if next is present. Retrieve the remaining options for the same hotel and stay date with dates[].nextOffersUrl. In offerPage, totalRows is the number of stored records, matchingRows the number matching the conditions, and offset and returnedRows the current range. If the collected results change, 409 and restart are returned, so query again from the beginning. previousRooms is a separate earlier detailed record provided when the latest observation has no room conditions. Check the earlier observation time, filter match count and nextOffersUrl separately, and do not attach earlier conditions to the latest price. Paging through earlier details returns the latest prices to the first page. Earlier records are excluded from the latest headline price and selection; even if earlier records match the conditions, the result is no_observations when there is no latest match. no_observations does not mean sold out. Check each row's observation time together with stale. responseAsOf is the reference time at which the request was processed (UTC), not the time the price was collected. observationAgeSeconds is the number of seconds elapsed since observation as of that reference time, and is null if the time is unknown or in the future. hotels[].comparisonUrl is a per-hotel comparison link that keeps the query conditions. You can specify a hotel with hotelId.

Da Nang JSON query · Same records as HTML · OpenAPI · Markdown guide for agents · JSON example: breakfast included, free cancellation, USD 150 or less

Data use notice

Hotel comparison lookups by users and AI, summaries and quotations with attribution, and links to OTI comparison pages are permitted within the service's query limits.

Bulk copying of data, repeated or systematic collection to rebuild a database, and republishing or reselling without prior permission are prohibited.

In case of rights infringement, we may take legal action under applicable law, including restricting access, requesting removal and claiming damages.

Uses permitted by law are not restricted. We claim no exclusive rights over individual price facts, and third-party rights belong to their respective holders. This notice does not grant a license to third-party rights.