Property reviews
const url = 'https://api.wink.travel/api/public/d5b8a3c2-9e6f-4a1b-8d34-7c2e1f0a5b69/inventory/reviews?hotelIdentifier=e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18&customizationIdentifier=2c5b9e3a-7f1d-4a8c-b6e2-0d4f1a9b3c72&page=0&size=25';const options = { method: 'GET', headers: {'Wink-Version': '2.0', Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.wink.travel/api/public/d5b8a3c2-9e6f-4a1b-8d34-7c2e1f0a5b69/inventory/reviews?hotelIdentifier=e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18&customizationIdentifier=2c5b9e3a-7f1d-4a8c-b6e2-0d4f1a9b3c72&page=0&size=25' \ --header 'Authorization: Bearer <token>' \ --header 'Wink-Version: 2.0'Return one page of a property’s approved guest reviews, newest first, in the same shape as the Partner API’s Content.ListReviews (camelCase). Identify the property with urlName or hotelIdentifier (exactly one of the two; giving neither or both is a 400). A property is served only when it is available and the managing entity in the path has an active sales channel for it; otherwise the answer is a 404, identical to an unknown property. Only reviews the property approved are returned, and a review carries entityId and urls only when its image was approved too. page is zero-based (default 0, at most 10000); size is 1 to 100 (default 25); anything else is a 400. A page past the last one is a 200 with no reviews and the true totals. The response carries cacheToken, and an ETag equal to the quoted cacheToken with Cache-Control: no-cache; send the ETag back in If-None-Match to receive 304 Not Modified while the page is unchanged.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Managing entity identifier
Example
d5b8a3c2-9e6f-4a1b-8d34-7c2e1f0a5b69Query Parameters
Section titled “Query Parameters”Property identifier; give this or urlName, not both
Example
e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18Property url-friendly name; give this or hotelIdentifier, not both
Booking engine customization identifier; accepted for parity with the other inventory endpoints and currently unused
Example
2c5b9e3a-7f1d-4a8c-b6e2-0d4f1a9b3c72Zero-based page index, 0 to 10000. Defaults to 0
Example
0Page size, 1 to 100. Defaults to 25
Example
25Header Parameters
Section titled “Header Parameters”ETag from a previous response; when it still matches, 304 Not Modified is returned without a body
Responses
Section titled “Responses”The reviews page. Carries an ETag (quoted cacheToken) and Cache-Control: no-cache, so clients may store it but must revalidate.
One page of a property’s approved guest reviews, newest first.
object
Opaque token identifying this representation; equals the ETag value, unquoted.
The property identifier; same value as propertyId.
Zero-based page index.
The property identifier.
The reviews on this page, newest first. Empty past the last page.
One approved guest review.
object
Per-question answers.
Public-facing view of a single question-answer pair within a guest review, displayed on a property profile.
object
Category of the review question (e.g., COMFORT, SERVICE, VALUE).
Display order of this answer within the review.
Guest’s numeric rating for this question on a 0-10 scale.
Average score across the answered questions (0-10).
Cloudinary public id of the review image; present only when the image was approved.
How many members liked the review.
The property’s reply to the review.
The review text.
Reviewer’s display name.
When the review was submitted.
Delivery URLs of the review image; present only when the image was approved.
object
Watch URL for media hosted outside our CDN (for example YouTube).
Image scaled to at most 1920px wide.
object
Delivery format label of this variant.
Maximum width in pixels of this variant. Absent when the variant is not resized.
Absolute HTTPS URL that can be used directly in an img/video tag.
Image scaled to at most 1024px wide.
object
Delivery format label of this variant.
Maximum width in pixels of this variant. Absent when the variant is not resized.
Absolute HTTPS URL that can be used directly in an img/video tag.
Full-size image, not resized.
object
Delivery format label of this variant.
Maximum width in pixels of this variant. Absent when the variant is not resized.
Absolute HTTPS URL that can be used directly in an img/video tag.
Still frame to show before the video plays.
object
Delivery format label of this variant.
Maximum width in pixels of this variant. Absent when the variant is not resized.
Absolute HTTPS URL that can be used directly in an img/video tag.
Short low-bandwidth video preview.
object
Delivery format label of this variant.
Maximum width in pixels of this variant. Absent when the variant is not resized.
Absolute HTTPS URL that can be used directly in an img/video tag.
Video stream at full size.
object
Delivery format label of this variant.
Maximum width in pixels of this variant. Absent when the variant is not resized.
Absolute HTTPS URL that can be used directly in an img/video tag.
Small still, at most 320px wide. For videos this is a frame of the video.
object
Delivery format label of this variant.
Maximum width in pixels of this variant. Absent when the variant is not resized.
Absolute HTTPS URL that can be used directly in an img/video tag.
Page size.
Pages needed for totalReviews at this size.
All approved reviews of the property, independent of paging.
The url name the request used; absent when the property was identified by hotelIdentifier.
Example
{ "reviews": [ { "answers": [ { "category": "SERVICE", "sort": 1, "value": 7 } ], "urls": { "external": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "large": { "format": "jpg", "maxWidth": 1920, "url": "https://res.cloudinary.com/traveliko/image/upload/w_1920/the-siam-residences/lobby-entrance.jpg" }, "medium": { "format": "jpg", "maxWidth": 1920, "url": "https://res.cloudinary.com/traveliko/image/upload/w_1920/the-siam-residences/lobby-entrance.jpg" }, "original": { "format": "jpg", "maxWidth": 1920, "url": "https://res.cloudinary.com/traveliko/image/upload/w_1920/the-siam-residences/lobby-entrance.jpg" }, "poster": { "format": "jpg", "maxWidth": 1920, "url": "https://res.cloudinary.com/traveliko/image/upload/w_1920/the-siam-residences/lobby-entrance.jpg" }, "preview": { "format": "jpg", "maxWidth": 1920, "url": "https://res.cloudinary.com/traveliko/image/upload/w_1920/the-siam-residences/lobby-entrance.jpg" }, "stream": { "format": "jpg", "maxWidth": 1920, "url": "https://res.cloudinary.com/traveliko/image/upload/w_1920/the-siam-residences/lobby-entrance.jpg" }, "thumbnail": { "format": "jpg", "maxWidth": 1920, "url": "https://res.cloudinary.com/traveliko/image/upload/w_1920/the-siam-residences/lobby-entrance.jpg" } } } ]}Headers
Section titled “Headers”Always no-cache: store, but revalidate before reuse
Quoted cacheToken of this representation; send it back in If-None-Match
Not Modified: the If-None-Match value matches the current ETag (a comma-separated list, weak W/ validators and * are honoured). No body; the ETag and Cache-Control headers are repeated.
Headers
Section titled “Headers”Always no-cache
Quoted cacheToken of the current representation
Bad Request — missing or invalid request parameter or body
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Unauthorized — authentication is required or the session has expired
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Forbidden — authenticated but lacking the required permission or scope
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Not Found — the requested resource does not exist
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Method Not Allowed — the HTTP verb is not supported on this endpoint
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Conflict — the resource was modified by someone else since you read it; re-read it and retry with the new version
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Unsupported Media Type — use application/json
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Internal Server Error — an unexpected failure occurred on the server
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Service Unavailable — a downstream dependency is unreachable
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}