Skip to content

ListReviews

POST
/wink.partner.v1.Content/ListReviews
curl --request POST \
--url https://example.com/wink.partner.v1.Content/ListReviews \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "propertyId": "example", "page": 1, "size": 1, "knownVersion": "example", "imageFormat": "example" }'

List a property’s guest reviews, one page at a time

Only APPROVED reviews are returned, NEWEST FIRST. page is zero-based. size defaults to 25 when it is zero or negative and may not exceed 100. A page past the end is not an error: it comes back CONTENT_STATUS_OK with no reviews and the true total_reviews / total_pages.

Reviews are not restricted by your sales channel, like the rest of Content. An unknown property_id comes back CONTENT_STATUS_NOT_FOUND on the response (the call itself succeeds).

Conditional fetch works as on GetProperty: send the cache_token of a previous response as known_version and, if nothing on that page changed, the response is CONTENT_STATUS_NOT_MODIFIED carrying the identity, paging inputs, totals and cache_token only, with no reviews. The token covers the page (reviews, image URLs, totals, page, size and image_format), so it is only valid for the same page and size it came from.

Billing is one unit per CALL, whatever comes back, NOT_MODIFIED included.

Returns INVALID_ARGUMENT when property_id is blank, page is negative, size exceeds 100, or image_format is not a supported image media type.

Media typeapplication/json

Request for ListReviews.

object
propertyId

Property whose reviews to list. Identifier comes from a search result’s property_id.

string
page

Zero-based page index. Negative is rejected with INVALID_ARGUMENT.

integer format: int32
size

Reviews per page. Zero or negative means the default of 25; more than 100 is rejected with INVALID_ARGUMENT.

integer format: int32
knownVersion

Content you already hold: the cache_token the previous response for this same page and size carried. A match returns CONTENT_STATUS_NOT_MODIFIED. Send the token, not anything derived from it, and do not parse it. BILLING DOES NOT CHANGE: one unit per call whatever comes back.

string
imageFormat

IANA media type for review image delivery URLs: image/jpeg (the default), image/png, image/webp, or image/* to let the CDN negotiate per client from its Accept header. Empty means image/jpeg. An unrecognised value is rejected with INVALID_ARGUMENT.

string

Example generated

{
"propertyId": "example",
"page": 1,
"size": 1,
"knownVersion": "example",
"imageFormat": "example"
}

The RPC completed with gRPC status OK.

Media typeapplication/json

Response for ListReviews.

object
propertyId

The property identifier as requested.

string
status

CONTENT_STATUS_OK, CONTENT_STATUS_NOT_FOUND (unknown property) or CONTENT_STATUS_NOT_MODIFIED (your known_version is current: keep what you stored, reviews is absent rather than empty).

string
Allowed values: CONTENT_STATUS_UNSPECIFIED CONTENT_STATUS_OK CONTENT_STATUS_NOT_FOUND CONTENT_STATUS_NOT_MODIFIED
page

The zero-based page index served, echoing the request.

integer format: int32
size

The page size served: the request’s size, or 25 when it was zero or negative.

integer format: int32
totalReviews

All approved reviews of the property, across every page.

string format: int64
totalPages

Pages needed for total_reviews at this size.

integer format: int32
reviews

The reviews on this page, newest first. Empty for a page past the end.

Array<object>

One approved guest review.

object
reviewBy

The reviewer’s display name.

string
reviewedOn

When the review was submitted, ISO-8601 local date-time (e.g. 2026-10-17T09:30:00).

string
averageScore

Average score across the answered questions.

number format: double
review

The review text.

string
answers

The per-question answers behind average_score.

Array<object>

One answered review question.

object
category

The question category, e.g. COMFORT, SERVICE or VALUE.

string
sort

Display order of this answer within the review.

integer format: int32
value

The guest’s rating for this question on a 0-10 scale.

integer format: int32
responseFromProperty

The property’s reply to the review. Absent when there is none.

string
likes

How many members liked the review.

integer format: int32
entityId

The Cloudinary public id of the review’s image. Set only when an approved image exists, and then together with urls. Stable across media reorganisations, unlike the URLs.

string
urls

Delivery URLs of the review’s image in the requested image_format. Present only when an approved image exists. URLs may rotate; key your storage on entity_id.

object
original

MULTIMEDIA_KIND_IMAGE only: unscaled, best-quality delivery URL.

object
url

Ready-to-use delivery URL for this variant.

string
maxWidth

Maximum pixel width this variant is scaled to. Unset for variants with no resize (image “original”, video “stream”) — explicit presence so “not resized” is distinguishable from a literal 0px width.

integer format: int32
format

The IANA media type this URL returns: one of image/jpeg, image/png, image/webp, image/* or video/mp4, video/webm. Feed it straight to a Content-Type header or use it to pick a decoder.

This ECHOES what was served, so it reflects the image_format and video_format you sent on the request. Send neither and images are image/jpeg and video is video/mp4.

image/* is the one value that is not a concrete type: it means the CDN negotiates per client from the Accept header, so the same URL returns WebP, AVIF or JPEG to different callers. It is only ever returned if you asked for it. Everything else is deterministic — the same URL returns the same bytes to every client, which is what makes it safe to cache and re-serve.

string
large

MULTIMEDIA_KIND_IMAGE only: large variant, max width 1920px.

object
url

Ready-to-use delivery URL for this variant.

string
maxWidth

Maximum pixel width this variant is scaled to. Unset for variants with no resize (image “original”, video “stream”) — explicit presence so “not resized” is distinguishable from a literal 0px width.

integer format: int32
format

The IANA media type this URL returns: one of image/jpeg, image/png, image/webp, image/* or video/mp4, video/webm. Feed it straight to a Content-Type header or use it to pick a decoder.

This ECHOES what was served, so it reflects the image_format and video_format you sent on the request. Send neither and images are image/jpeg and video is video/mp4.

image/* is the one value that is not a concrete type: it means the CDN negotiates per client from the Accept header, so the same URL returns WebP, AVIF or JPEG to different callers. It is only ever returned if you asked for it. Everything else is deterministic — the same URL returns the same bytes to every client, which is what makes it safe to cache and re-serve.

string
medium

MULTIMEDIA_KIND_IMAGE only: medium variant, max width 1024px.

object
url

Ready-to-use delivery URL for this variant.

string
maxWidth

Maximum pixel width this variant is scaled to. Unset for variants with no resize (image “original”, video “stream”) — explicit presence so “not resized” is distinguishable from a literal 0px width.

integer format: int32
format

The IANA media type this URL returns: one of image/jpeg, image/png, image/webp, image/* or video/mp4, video/webm. Feed it straight to a Content-Type header or use it to pick a decoder.

This ECHOES what was served, so it reflects the image_format and video_format you sent on the request. Send neither and images are image/jpeg and video is video/mp4.

image/* is the one value that is not a concrete type: it means the CDN negotiates per client from the Accept header, so the same URL returns WebP, AVIF or JPEG to different callers. It is only ever returned if you asked for it. Everything else is deterministic — the same URL returns the same bytes to every client, which is what makes it safe to cache and re-serve.

string
thumbnail

MULTIMEDIA_KIND_IMAGE or MULTIMEDIA_KIND_VIDEO (Cloudinary): thumbnail variant, max width 320px. For video this is a still frame extracted from the video, so its format is an image type and follows image_format, not video_format.

object
url

Ready-to-use delivery URL for this variant.

string
maxWidth

Maximum pixel width this variant is scaled to. Unset for variants with no resize (image “original”, video “stream”) — explicit presence so “not resized” is distinguishable from a literal 0px width.

integer format: int32
format

The IANA media type this URL returns: one of image/jpeg, image/png, image/webp, image/* or video/mp4, video/webm. Feed it straight to a Content-Type header or use it to pick a decoder.

This ECHOES what was served, so it reflects the image_format and video_format you sent on the request. Send neither and images are image/jpeg and video is video/mp4.

image/* is the one value that is not a concrete type: it means the CDN negotiates per client from the Accept header, so the same URL returns WebP, AVIF or JPEG to different callers. It is only ever returned if you asked for it. Everything else is deterministic — the same URL returns the same bytes to every client, which is what makes it safe to cache and re-serve.

string
stream

MULTIMEDIA_KIND_VIDEO (Cloudinary) only: streaming delivery URL, unscaled. Delivered as video_format, which defaults to video/mp4.

object
url

Ready-to-use delivery URL for this variant.

string
maxWidth

Maximum pixel width this variant is scaled to. Unset for variants with no resize (image “original”, video “stream”) — explicit presence so “not resized” is distinguishable from a literal 0px width.

integer format: int32
format

The IANA media type this URL returns: one of image/jpeg, image/png, image/webp, image/* or video/mp4, video/webm. Feed it straight to a Content-Type header or use it to pick a decoder.

This ECHOES what was served, so it reflects the image_format and video_format you sent on the request. Send neither and images are image/jpeg and video is video/mp4.

image/* is the one value that is not a concrete type: it means the CDN negotiates per client from the Accept header, so the same URL returns WebP, AVIF or JPEG to different callers. It is only ever returned if you asked for it. Everything else is deterministic — the same URL returns the same bytes to every client, which is what makes it safe to cache and re-serve.

string
preview

MULTIMEDIA_KIND_VIDEO (Cloudinary) only: preview variant, max width 1280px. Delivered as video_format.

object
url

Ready-to-use delivery URL for this variant.

string
maxWidth

Maximum pixel width this variant is scaled to. Unset for variants with no resize (image “original”, video “stream”) — explicit presence so “not resized” is distinguishable from a literal 0px width.

integer format: int32
format

The IANA media type this URL returns: one of image/jpeg, image/png, image/webp, image/* or video/mp4, video/webm. Feed it straight to a Content-Type header or use it to pick a decoder.

This ECHOES what was served, so it reflects the image_format and video_format you sent on the request. Send neither and images are image/jpeg and video is video/mp4.

image/* is the one value that is not a concrete type: it means the CDN negotiates per client from the Accept header, so the same URL returns WebP, AVIF or JPEG to different callers. It is only ever returned if you asked for it. Everything else is deterministic — the same URL returns the same bytes to every client, which is what makes it safe to cache and re-serve.

string
poster

MULTIMEDIA_KIND_VIDEO (Cloudinary) only: poster frame at medium width. A still EXTRACTED from the video, so like thumbnail it is an image and follows image_format.

object
url

Ready-to-use delivery URL for this variant.

string
maxWidth

Maximum pixel width this variant is scaled to. Unset for variants with no resize (image “original”, video “stream”) — explicit presence so “not resized” is distinguishable from a literal 0px width.

integer format: int32
format

The IANA media type this URL returns: one of image/jpeg, image/png, image/webp, image/* or video/mp4, video/webm. Feed it straight to a Content-Type header or use it to pick a decoder.

This ECHOES what was served, so it reflects the image_format and video_format you sent on the request. Send neither and images are image/jpeg and video is video/mp4.

image/* is the one value that is not a concrete type: it means the CDN negotiates per client from the Accept header, so the same URL returns WebP, AVIF or JPEG to different callers. It is only ever returned if you asked for it. Everything else is deterministic — the same URL returns the same bytes to every client, which is what makes it safe to cache and re-serve.

string
externalUrl

MULTIMEDIA_KIND_VIDEO (YouTube) only: pass-through to the YouTube watch URL. Wink generates no variants for externally-hosted media, so no format applies and every MediaUrlVariant field above is unset.

string
cacheToken

Opaque token over everything this page holds. Send it back as known_version on the next call for the same page and size. Absent for CONTENT_STATUS_NOT_FOUND.

string

Example

{
"status": "CONTENT_STATUS_UNSPECIFIED"
}