Skip to content

GetProperties

POST
/wink.partner.v1.Content/GetProperties
curl --request POST \
--url https://example.com/wink.partner.v1.Content/GetProperties \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "propertyIds": [ "example" ], "languageCode": "example", "include": [ "CONTENT_SCOPE_UNSPECIFIED" ], "maxMediaPerEntity": 1, "knownVersions": { "additionalProperty": "example" }, "imageFormat": "example", "videoFormat": "example" }'

Get static content for one or more properties

Pass up to 50 property identifiers. Every property we hold comes back with a status of CONTENT_STATUS_OK, and unknown identifiers come back CONTENT_STATUS_NOT_FOUND — the call itself succeeds, so a single bad identifier cannot fail the batch. A property you already hold an unchanged copy of comes back CONTENT_STATUS_NOT_MODIFIED when you pass its token in known_versions.

Content is not restricted by your sales channel; the BOOKABLE collections are. See ContentStatus.

Billing is one unit per CALL, not per property, whatever you included. Fifty properties in one call cost what one does, so batch.

Returns INVALID_ARGUMENT when property_ids is empty, exceeds 50, or repeats an identifier, and when known_versions holds more than 50 entries.

Media typeapplication/json

Request for GetProperties.

object
propertyIds

Properties to fetch, 1 to 50. Identifiers come from a search result’s property_id.

Array<string>
languageCode

ISO 639-1 language for descriptions, e.g. “th”. English is ALWAYS returned alongside it, so a missing translation never leaves you with nothing to display. Defaults to English only.

string
include

What to include beyond the property’s basic identity. Empty means basics only.

Array<string>
Allowed values: CONTENT_SCOPE_UNSPECIFIED CONTENT_SCOPE_PROPERTY_DETAILS CONTENT_SCOPE_RESTAURANT CONTENT_SCOPE_SPA CONTENT_SCOPE_MEETING_ROOM CONTENT_SCOPE_ACTIVITY CONTENT_SCOPE_ATTRACTION CONTENT_SCOPE_PLACE CONTENT_SCOPE_CANCELLATION_POLICY CONTENT_SCOPE_PERK CONTENT_SCOPE_ROOM_TYPE CONTENT_SCOPE_RATE_PLAN CONTENT_SCOPE_RECOGNITION CONTENT_SCOPE_GREEN_INDEX CONTENT_SCOPE_ADD_ON
maxMediaPerEntity

Cap on images and videos returned per entity. Zero means no cap, which is the default — you are expected to cache the full bundle. Set this when you want a lighter response for a preview surface.

integer format: int32
knownVersions

Content you already hold: property identifier to the cache_token that property’s last response carried.

A property whose token still matches comes back CONTENT_STATUS_NOT_MODIFIED carrying its content_version and cache_token and nothing else — keep serving what you cached. Anything that has changed, and anything you did not list here, comes back in full as usual. Omit the field entirely and every property is returned in full, which is the default.

Send back the cache_token, NOT the content_version. The token is opaque: do not parse it, do not build one, and do not assume anything about its length or alphabet. It covers the content AND the shape of the request that produced it — your sales channel, language_code, include, max_media_per_entity, image_format and video_format — which is precisely what makes it safe to change a request. Ask for a scope you did not have last time, or a different media format, and the token stops matching, so you get the full response rather than a NOT_MODIFIED that would have left you permanently missing the thing you just asked for.

BILLING DOES NOT CHANGE. You are charged one unit per call whatever comes back, so this saves response size and processing on both ends, not money. Batching is what lowers a bill.

Entries for properties absent from property_ids are ignored, so you may keep one map and reuse it across batches. At most 50 entries, the same bound as property_ids.

object
key
additional properties
string
imageFormat

IANA media type for 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 rather than quietly falling back, so a typo like “image/jpg” (not a media type) fails loudly instead of serving you JPEG while you believe you asked for something else. Whatever is served is echoed back on MediaUrlVariant.format.

string
videoFormat

IANA media type for the PLAYABLE video delivery URLs, stream and preview: video/mp4 (the default) or video/webm. Empty means video/mp4.

This does NOT affect poster and thumbnail. Those are still frames extracted from the video, so they are images and follow image_format. An unrecognised value is rejected with INVALID_ARGUMENT.

string

The RPC completed with gRPC status OK.

Media typeapplication/json

Response for GetProperties.

object
properties

One entry per requested property, in the order requested.

Array<object>

Everything requested about one property.

Populated fields depend on the include scopes you asked for. A scope you did not request is absent, not empty — proto3 cannot distinguish “no restaurants” from “restaurants not requested” on a repeated field, so check included_scopes rather than inferring from an empty list.

object
propertyId

The property this entry describes.

string
status

Whether content was returned, and if not, why.

string
Allowed values: CONTENT_STATUS_UNSPECIFIED CONTENT_STATUS_OK CONTENT_STATUS_NOT_FOUND CONTENT_STATUS_NOT_MODIFIED
contentVersion

A stable hash of this response’s content: equal for equal content, different when anything you would receive differs (the property, its perks, your channel’s room types and rates, the language, include set, media cap and formats, and the media URLs). Present on CONTENT_STATUS_OK and CONTENT_STATUS_NOT_MODIFIED.

It is NOT the last_update the pricing endpoints return, and is not comparable to it. To ask us whether your cached copy is current, send cache_token rather than this.

string
includedScopes

The scopes actually populated below. Echoed back so you can tell “not requested” from “none exist”.

Array<string>
Allowed values: CONTENT_SCOPE_UNSPECIFIED CONTENT_SCOPE_PROPERTY_DETAILS CONTENT_SCOPE_RESTAURANT CONTENT_SCOPE_SPA CONTENT_SCOPE_MEETING_ROOM CONTENT_SCOPE_ACTIVITY CONTENT_SCOPE_ATTRACTION CONTENT_SCOPE_PLACE CONTENT_SCOPE_CANCELLATION_POLICY CONTENT_SCOPE_PERK CONTENT_SCOPE_ROOM_TYPE CONTENT_SCOPE_RATE_PLAN CONTENT_SCOPE_RECOGNITION CONTENT_SCOPE_GREEN_INDEX CONTENT_SCOPE_ADD_ON
property

Basic identity — always present when status is CONTENT_STATUS_OK.

object
propertyId

Stable property identifier.

string
urlName

Url-safe slug.

string
name

Property name in the requested language.

string
localName

Property name in its local language, when it differs.

string
geoLocation

Where the property is.

Bare latitude and longitude, not GeoJSON: this field carries only coordinates, and the surrounding JSON already tells you what kind of thing they belong to.

object
longitude

Degrees east of the prime meridian, -180 to 180.

number format: double
latitude

Degrees north of the equator, -90 to 90.

number format: double
starRating

Official star rating, 1-5. Zero when unrated.

integer format: int32
images

Published property images, lowest sort first. Capped by max_media_per_entity when you set one. Unpublished assets are never returned — a property that took an image down did so deliberately.

Array<object>

One published image or video.

Key anything you cache on entity_id, the asset’s Cloudinary public id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
entityId

The asset’s Cloudinary public id: the stable identity of this image or video, and the key to use for your own cache. It can be used to build delivery URLs yourself, e.g. https://res.cloudinary.com/<cloud>/image/upload/<transformations>/<entity_id>; prefer the ready-made urls where they are present, since URLs can change.

string
kind

MEDIA_TYPE_IMAGE or MEDIA_TYPE_VIDEO.

string
Allowed values: MULTIMEDIA_KIND_UNSPECIFIED MULTIMEDIA_KIND_IMAGE MULTIMEDIA_KIND_VIDEO
source

Where the asset came from, e.g. the property’s own upload or a syndicated source.

string
sort

Display order within its gallery, ascending.

integer format: int32
angle

Camera angle or shot description, when the property supplied one.

string
width

Intrinsic width in pixels.

integer format: int32
height

Intrinsic height in pixels.

integer format: int32
descriptions

Localized captions.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
lifestyleType

The lifestyle this asset is meant to illustrate, when tagged.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
urls

Ready-to-use delivery URLs, one per variant. Which variants are populated depends on whether the asset is an image, a Cloudinary video or an externally-hosted one — see MediaUrlSet.

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
otaPicCategory

OpenTravel PIC (Picture Category) code, e.g. “2” = Lobby view, “6” = Guest room. What the asset depicts, which is what you want when laying out a gallery rather than dumping it in sort order. Empty when the property never categorised the asset. Look codes up at https://wink.travel/developers/taxonomy.

string
videos

Published property videos, same ordering and cap as images.

Array<object>

One published image or video.

Key anything you cache on entity_id, the asset’s Cloudinary public id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
entityId

The asset’s Cloudinary public id: the stable identity of this image or video, and the key to use for your own cache. It can be used to build delivery URLs yourself, e.g. https://res.cloudinary.com/<cloud>/image/upload/<transformations>/<entity_id>; prefer the ready-made urls where they are present, since URLs can change.

string
kind

MEDIA_TYPE_IMAGE or MEDIA_TYPE_VIDEO.

string
Allowed values: MULTIMEDIA_KIND_UNSPECIFIED MULTIMEDIA_KIND_IMAGE MULTIMEDIA_KIND_VIDEO
source

Where the asset came from, e.g. the property’s own upload or a syndicated source.

string
sort

Display order within its gallery, ascending.

integer format: int32
angle

Camera angle or shot description, when the property supplied one.

string
width

Intrinsic width in pixels.

integer format: int32
height

Intrinsic height in pixels.

integer format: int32
descriptions

Localized captions.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
lifestyleType

The lifestyle this asset is meant to illustrate, when tagged.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
urls

Ready-to-use delivery URLs, one per variant. Which variants are populated depends on whether the asset is an image, a Cloudinary video or an externally-hosted one — see MediaUrlSet.

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
otaPicCategory

OpenTravel PIC (Picture Category) code, e.g. “2” = Lobby view, “6” = Guest room. What the asset depicts, which is what you want when laying out a gallery rather than dumping it in sort order. Empty when the property never categorised the asset. Look codes up at https://wink.travel/developers/taxonomy.

string
currencyCode

ISO 4217 currency the property trades in.

string
numberOfRooms

Total rooms at the property.

integer format: int32
city

The city this property is in, with the identifiers the destination surfaces take.

Here rather than on PropertyDetails so that it arrives on every successful Content call, whatever scopes you asked for: pivoting from a property to its city should not require paying for the full details scope. Absent when the property has no city on record.

object
geoNameId

GeoNames id, e.g. “1609350” for Bangkok. Pass to Search.SearchByCity.

Always set when this message is present: every property that has a city has this.

string
name

The city’s name.

NOT localized, unlike every other name on this surface. The lightweight GeoNames record this comes from deliberately excludes alternate-name translations, so this is the canonical GeoNames name whatever language_code you asked for. Said plainly because a caller would otherwise reasonably assume it follows the rest of the response.

string
urlName

Url-safe slug. Pass to Search.RankByCity, which takes the url name rather than the GeoNames id.

EMPTY for a substantial minority of properties – 601 of 3,230 in production, about 19% – because the slug is populated separately from the GeoNames link. Check it before building a RankByCity call; an empty value here does not mean the property has no city, only that this particular handle is missing.

string
countryCode

ISO 3166-1 alpha-2 country code of the city, e.g. “TH”.

string
details

Descriptions, address, policies, amenities, social profiles and the reservations desk’s email and phone. Present with CONTENT_SCOPE_PROPERTY_DETAILS.

object
descriptions

Localized descriptions, in English plus your requested language.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
address

Postal address.

object
address1

Street line 1.

string
address2

Street line 2, when the property supplies one.

string
state

State, province or region.

string
postalCode

Postal or ZIP code.

string
city

City name.

string
countryCode

ISO 3166-1 alpha-2 country code, e.g. “TH”.

string
country

Country name in the requested language.

string
fullAddress

The full address pre-formatted for display, newline-free.

string
chain

Property chain, when the property belongs to one.

string
brand

Brand within the chain.

string
locationCategory

Setting, e.g. beachfront or city centre.

string
segmentCategory

Market segment, e.g. luxury or economy.

string
propertyCategory

Property type, e.g. property, hostel or resort.

string
architecturalStyle

Architectural style, when recorded.

string
whenBuilt

Year or period built, when recorded.

string
lifestyleTypes

Lifestyles this property is oriented toward.

Array<string>
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
policy

Check-in, check-out, children and pet rules.

object
checkInTime

Local check-in time, “HH:mm”.

string
checkOutTime

Local check-out time, “HH:mm”.

string
childrenAllowed

Whether children are accepted.

boolean
childrenMinimumAge

Minimum age accepted, when the property sets one.

integer format: int32
petsAllowed

Whether pets are accepted.

boolean
petMaxWeightInKilos

Maximum pet weight in kilograms, when limited.

number format: double
internetConnectionType

How internet is provided, e.g. wired or wireless.

string
internetConnectionLocation

Where internet is available, e.g. in-room or public areas.

string
internetAvailability

Whether internet is free or paid.

string
parkingAvailability

Whether parking is free, paid or unavailable.

string
parkingAccess

How parking is accessed, e.g. valet or self.

string
otaHacAmenityCodes

OpenTravel HAC (Hotel Amenity) codes. Look codes up at https://wink.travel/developers/taxonomy.

Array<string>
otaPhyAccessibilityCodes

OpenTravel PHY (Accessibility Feature) codes.

Array<string>
otaSecSecurityCodes

OpenTravel SEC (Security Feature) codes.

Array<string>
aggregateReviewRating

Mean guest review rating.

number format: float
totalReviews

Number of guest reviews behind the rating.

integer format: int32
aggregateGreendexRating

Wink sustainability rating.

number format: float
socials

The property’s social network profiles, in the order the property listed them. Empty when it lists none.

Array<object>

A social network profile.

object
type

The network, as its platform name: “FACEBOOK”, “INSTAGRAM”, “SKYPE”, “TRIP_ADVISOR” and so on. An open set, so a client must tolerate a name it does not know yet.

string
location

The profile URL or the network’s own identifier for it.

string
reservations

How to reach the reservations desk. Unset when the property records no reservations contact.

EMAIL AND PHONE ONLY. The platform stores more than this for the desk (a contact’s name and a secondary email); none of it is published, and the message has no field it could arrive in.

object
email

The reservations email address. Empty when the property records none.

string
phoneNumber

The reservations phone number, as the property entered it. Empty when the property records none.

string
restaurants

On- and off-premises restaurants. Present with CONTENT_SCOPE_RESTAURANT.

Array<object>

A non-room inventory item: restaurant, spa, meeting room, activity, attraction, place or add-on.

These share a shape deliberately. They differ in what they mean, not in what they carry, and one message keeps the contract small and lets a client render any of them with the same code. Where a type needs fields the others do not, those arrive as new field numbers on this message rather than a new message – the facts only one type has sit in the venue_details oneof below, one message per type.

At most one of restaurant, meetingRoom, attraction, place is set (protobuf oneof venue_details).

object
id

Stable identifier for this item.

string
name

Item name in the requested language.

string
descriptions

Localized descriptions, in English plus your requested language.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
multimedias

Images and videos.

Array<object>

One published image or video.

Key anything you cache on entity_id, the asset’s Cloudinary public id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
entityId

The asset’s Cloudinary public id: the stable identity of this image or video, and the key to use for your own cache. It can be used to build delivery URLs yourself, e.g. https://res.cloudinary.com/<cloud>/image/upload/<transformations>/<entity_id>; prefer the ready-made urls where they are present, since URLs can change.

string
kind

MEDIA_TYPE_IMAGE or MEDIA_TYPE_VIDEO.

string
Allowed values: MULTIMEDIA_KIND_UNSPECIFIED MULTIMEDIA_KIND_IMAGE MULTIMEDIA_KIND_VIDEO
source

Where the asset came from, e.g. the property’s own upload or a syndicated source.

string
sort

Display order within its gallery, ascending.

integer format: int32
angle

Camera angle or shot description, when the property supplied one.

string
width

Intrinsic width in pixels.

integer format: int32
height

Intrinsic height in pixels.

integer format: int32
descriptions

Localized captions.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
lifestyleType

The lifestyle this asset is meant to illustrate, when tagged.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
urls

Ready-to-use delivery URLs, one per variant. Which variants are populated depends on whether the asset is an image, a Cloudinary video or an externally-hosted one — see MediaUrlSet.

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
otaPicCategory

OpenTravel PIC (Picture Category) code, e.g. “2” = Lobby view, “6” = Guest room. What the asset depicts, which is what you want when laying out a gallery rather than dumping it in sort order. Empty when the property never categorised the asset. Look codes up at https://wink.travel/developers/taxonomy.

string
sort

Display order within its collection, ascending.

integer format: int32
onPremises

Whether the item is on the property’s premises.

boolean
geoLocation

Where the item is, when it differs from the property.

Bare latitude and longitude, not GeoJSON. Absent, not zeroed, when the item sits at the property – see PartnerContentContractMeasurementTest for how that absence is verified rather than assumed.

object
longitude

Degrees east of the prime meridian, -180 to 180.

number format: double
latitude

Degrees north of the equator, -90 to 90.

number format: double
address

Postal address, when the item has its own.

object
address1

Street line 1.

string
address2

Street line 2, when the property supplies one.

string
state

State, province or region.

string
postalCode

Postal or ZIP code.

string
city

City name.

string
countryCode

ISO 3166-1 alpha-2 country code, e.g. “TH”.

string
country

Country name in the requested language.

string
fullAddress

The full address pre-formatted for display, newline-free.

string
lifestyleType

The lifestyle this item suits, when tagged. Singular, not a list: the platform records exactly one per item.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
otaRsiAmenities

OpenTravel RSI (Restaurant Service/Amenity) codes. Populated only for restaurants.

Array<string>
otaSpaAmenities

OpenTravel SPA (Spa Feature) codes. Populated only for spas.

Array<string>
otaMrcAmenities

OpenTravel MRC (Meeting Room Code) codes. Populated only for meeting_rooms.

Array<string>
otaRecAmenities

OpenTravel REC (Recreation) codes. Populated only for activities.

Array<string>
otaPrxProximityCode

OpenTravel PRX (Proximity) code, e.g. “1” = On premises, “3” = Nearby. Five values, so do NOT read it as a boolean – on_premises above is the two-way answer if that is all you need.

string
otaAqcMinAgeAppropriateCode

OpenTravel AQC (Age Qualifying) code, e.g. “3” = Under 2, “8” = Child, “1” = Over 21. An age CATEGORY, not a numeric minimum age – parsing it as a number yields nonsense for most values.

string
otaSecSecurityFeatures

OpenTravel SEC (Security Feature) codes.

Array<string>
otaPhyAccessibilityFeatures

OpenTravel PHY (Accessibility Feature) codes.

Array<string>
opens

Opening time, local to the property, “HH:mm”. Empty when the venue records none (spas, activities and places often do not).

string
closes

Closing time, local to the property, “HH:mm”. Empty when the venue records none.

string
daysOfWeek

The days the venue is open. Unset when the venue records none, and ALSO unset when the venue has no days selected: the platform stores “no days selected” to mean every day, so that case is published as “not stated” rather than as a message with every day false (which would read as “never open”). When set, at least one day is true.

object
monday

Open on Monday.

boolean
tuesday

Open on Tuesday.

boolean
wednesday

Open on Wednesday.

boolean
thursday

Open on Thursday.

boolean
friday

Open on Friday.

boolean
saturday

Open on Saturday.

boolean
sunday

Open on Sunday.

boolean
reservationRequired

Whether guests must reserve in advance. The platform stores this as a plain yes/no with no “not stated” state, so a venue that never answered arrives as false, exactly like one that answered no. Do not read false as “walk-ins are welcome”. The field is declared optional so a future release can leave it unset for a venue that has not said; today it is always set.

boolean
restaurant

Restaurant seating and service. Set on restaurants.

object
maxSeatingCapacity

Total seating capacity. Unset when the property has not recorded it.

integer format: int32
maxSingleParty

The largest party that can be seated together. Unset when the property has not recorded it.

integer format: int32
offerBreakfast

Whether breakfast is served. False also covers “never recorded”.

boolean
offerLunch

Whether lunch is served. False also covers “never recorded”.

boolean
offerDinner

Whether dinner is served. False also covers “never recorded”.

boolean
offerBrunch

Whether brunch is served. False also covers “never recorded”.

boolean
otaCuiCuisineCodes

OpenTravel CUI (Main Cuisine) codes. Look codes up at https://wink.travel/developers/taxonomy.

Array<string>
otaResCategoryCodes

OpenTravel RES (Restaurant Category) codes.

Array<string>
meetingRoom

Meeting room size and format. Set on meeting_rooms.

object
capacity

How many people the room holds. 0 means not recorded.

integer format: int32
areaSquareMeters

Floor area in square meters. 0 means not recorded.

number format: float
heightMeters

Ceiling height in meters. 0 means not recorded.

number format: float
widthMeters

Width in meters. 0 means not recorded.

number format: float
lengthMeters

Length in meters. 0 means not recorded.

number format: float
irregular

Whether the room has an irregular shape. False also covers “never recorded”.

boolean
access

The kind of access to the room, e.g. private or public. Untranslated text as the property entered it.

string
level

The level of the facility the room is on, as the property entered it.

string
otaMrfFormatCode

OpenTravel MRF (Meeting Room Format) code.

string
dedicated

Whether the room is dedicated to meetings rather than shared with other uses. False also covers “never recorded”.

boolean
attraction

Attraction category. Set on attractions.

object
otaAccCategoryCode

OpenTravel ACC (Attraction Category) code.

string
place

Place category. Set on places.

object
otaRefCategoryCode

OpenTravel REF (Reference Point Category) code.

string
spas

Spas. Present with CONTENT_SCOPE_SPA.

Array<object>

A non-room inventory item: restaurant, spa, meeting room, activity, attraction, place or add-on.

These share a shape deliberately. They differ in what they mean, not in what they carry, and one message keeps the contract small and lets a client render any of them with the same code. Where a type needs fields the others do not, those arrive as new field numbers on this message rather than a new message – the facts only one type has sit in the venue_details oneof below, one message per type.

At most one of restaurant, meetingRoom, attraction, place is set (protobuf oneof venue_details).

object
id

Stable identifier for this item.

string
name

Item name in the requested language.

string
descriptions

Localized descriptions, in English plus your requested language.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
multimedias

Images and videos.

Array<object>

One published image or video.

Key anything you cache on entity_id, the asset’s Cloudinary public id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
entityId

The asset’s Cloudinary public id: the stable identity of this image or video, and the key to use for your own cache. It can be used to build delivery URLs yourself, e.g. https://res.cloudinary.com/<cloud>/image/upload/<transformations>/<entity_id>; prefer the ready-made urls where they are present, since URLs can change.

string
kind

MEDIA_TYPE_IMAGE or MEDIA_TYPE_VIDEO.

string
Allowed values: MULTIMEDIA_KIND_UNSPECIFIED MULTIMEDIA_KIND_IMAGE MULTIMEDIA_KIND_VIDEO
source

Where the asset came from, e.g. the property’s own upload or a syndicated source.

string
sort

Display order within its gallery, ascending.

integer format: int32
angle

Camera angle or shot description, when the property supplied one.

string
width

Intrinsic width in pixels.

integer format: int32
height

Intrinsic height in pixels.

integer format: int32
descriptions

Localized captions.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
lifestyleType

The lifestyle this asset is meant to illustrate, when tagged.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
urls

Ready-to-use delivery URLs, one per variant. Which variants are populated depends on whether the asset is an image, a Cloudinary video or an externally-hosted one — see MediaUrlSet.

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
otaPicCategory

OpenTravel PIC (Picture Category) code, e.g. “2” = Lobby view, “6” = Guest room. What the asset depicts, which is what you want when laying out a gallery rather than dumping it in sort order. Empty when the property never categorised the asset. Look codes up at https://wink.travel/developers/taxonomy.

string
sort

Display order within its collection, ascending.

integer format: int32
onPremises

Whether the item is on the property’s premises.

boolean
geoLocation

Where the item is, when it differs from the property.

Bare latitude and longitude, not GeoJSON. Absent, not zeroed, when the item sits at the property – see PartnerContentContractMeasurementTest for how that absence is verified rather than assumed.

object
longitude

Degrees east of the prime meridian, -180 to 180.

number format: double
latitude

Degrees north of the equator, -90 to 90.

number format: double
address

Postal address, when the item has its own.

object
address1

Street line 1.

string
address2

Street line 2, when the property supplies one.

string
state

State, province or region.

string
postalCode

Postal or ZIP code.

string
city

City name.

string
countryCode

ISO 3166-1 alpha-2 country code, e.g. “TH”.

string
country

Country name in the requested language.

string
fullAddress

The full address pre-formatted for display, newline-free.

string
lifestyleType

The lifestyle this item suits, when tagged. Singular, not a list: the platform records exactly one per item.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
otaRsiAmenities

OpenTravel RSI (Restaurant Service/Amenity) codes. Populated only for restaurants.

Array<string>
otaSpaAmenities

OpenTravel SPA (Spa Feature) codes. Populated only for spas.

Array<string>
otaMrcAmenities

OpenTravel MRC (Meeting Room Code) codes. Populated only for meeting_rooms.

Array<string>
otaRecAmenities

OpenTravel REC (Recreation) codes. Populated only for activities.

Array<string>
otaPrxProximityCode

OpenTravel PRX (Proximity) code, e.g. “1” = On premises, “3” = Nearby. Five values, so do NOT read it as a boolean – on_premises above is the two-way answer if that is all you need.

string
otaAqcMinAgeAppropriateCode

OpenTravel AQC (Age Qualifying) code, e.g. “3” = Under 2, “8” = Child, “1” = Over 21. An age CATEGORY, not a numeric minimum age – parsing it as a number yields nonsense for most values.

string
otaSecSecurityFeatures

OpenTravel SEC (Security Feature) codes.

Array<string>
otaPhyAccessibilityFeatures

OpenTravel PHY (Accessibility Feature) codes.

Array<string>
opens

Opening time, local to the property, “HH:mm”. Empty when the venue records none (spas, activities and places often do not).

string
closes

Closing time, local to the property, “HH:mm”. Empty when the venue records none.

string
daysOfWeek

The days the venue is open. Unset when the venue records none, and ALSO unset when the venue has no days selected: the platform stores “no days selected” to mean every day, so that case is published as “not stated” rather than as a message with every day false (which would read as “never open”). When set, at least one day is true.

object
monday

Open on Monday.

boolean
tuesday

Open on Tuesday.

boolean
wednesday

Open on Wednesday.

boolean
thursday

Open on Thursday.

boolean
friday

Open on Friday.

boolean
saturday

Open on Saturday.

boolean
sunday

Open on Sunday.

boolean
reservationRequired

Whether guests must reserve in advance. The platform stores this as a plain yes/no with no “not stated” state, so a venue that never answered arrives as false, exactly like one that answered no. Do not read false as “walk-ins are welcome”. The field is declared optional so a future release can leave it unset for a venue that has not said; today it is always set.

boolean
restaurant

Restaurant seating and service. Set on restaurants.

object
maxSeatingCapacity

Total seating capacity. Unset when the property has not recorded it.

integer format: int32
maxSingleParty

The largest party that can be seated together. Unset when the property has not recorded it.

integer format: int32
offerBreakfast

Whether breakfast is served. False also covers “never recorded”.

boolean
offerLunch

Whether lunch is served. False also covers “never recorded”.

boolean
offerDinner

Whether dinner is served. False also covers “never recorded”.

boolean
offerBrunch

Whether brunch is served. False also covers “never recorded”.

boolean
otaCuiCuisineCodes

OpenTravel CUI (Main Cuisine) codes. Look codes up at https://wink.travel/developers/taxonomy.

Array<string>
otaResCategoryCodes

OpenTravel RES (Restaurant Category) codes.

Array<string>
meetingRoom

Meeting room size and format. Set on meeting_rooms.

object
capacity

How many people the room holds. 0 means not recorded.

integer format: int32
areaSquareMeters

Floor area in square meters. 0 means not recorded.

number format: float
heightMeters

Ceiling height in meters. 0 means not recorded.

number format: float
widthMeters

Width in meters. 0 means not recorded.

number format: float
lengthMeters

Length in meters. 0 means not recorded.

number format: float
irregular

Whether the room has an irregular shape. False also covers “never recorded”.

boolean
access

The kind of access to the room, e.g. private or public. Untranslated text as the property entered it.

string
level

The level of the facility the room is on, as the property entered it.

string
otaMrfFormatCode

OpenTravel MRF (Meeting Room Format) code.

string
dedicated

Whether the room is dedicated to meetings rather than shared with other uses. False also covers “never recorded”.

boolean
attraction

Attraction category. Set on attractions.

object
otaAccCategoryCode

OpenTravel ACC (Attraction Category) code.

string
place

Place category. Set on places.

object
otaRefCategoryCode

OpenTravel REF (Reference Point Category) code.

string
meetingRooms

Meeting rooms. Present with CONTENT_SCOPE_MEETING_ROOM.

Array<object>

A non-room inventory item: restaurant, spa, meeting room, activity, attraction, place or add-on.

These share a shape deliberately. They differ in what they mean, not in what they carry, and one message keeps the contract small and lets a client render any of them with the same code. Where a type needs fields the others do not, those arrive as new field numbers on this message rather than a new message – the facts only one type has sit in the venue_details oneof below, one message per type.

At most one of restaurant, meetingRoom, attraction, place is set (protobuf oneof venue_details).

object
id

Stable identifier for this item.

string
name

Item name in the requested language.

string
descriptions

Localized descriptions, in English plus your requested language.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
multimedias

Images and videos.

Array<object>

One published image or video.

Key anything you cache on entity_id, the asset’s Cloudinary public id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
entityId

The asset’s Cloudinary public id: the stable identity of this image or video, and the key to use for your own cache. It can be used to build delivery URLs yourself, e.g. https://res.cloudinary.com/<cloud>/image/upload/<transformations>/<entity_id>; prefer the ready-made urls where they are present, since URLs can change.

string
kind

MEDIA_TYPE_IMAGE or MEDIA_TYPE_VIDEO.

string
Allowed values: MULTIMEDIA_KIND_UNSPECIFIED MULTIMEDIA_KIND_IMAGE MULTIMEDIA_KIND_VIDEO
source

Where the asset came from, e.g. the property’s own upload or a syndicated source.

string
sort

Display order within its gallery, ascending.

integer format: int32
angle

Camera angle or shot description, when the property supplied one.

string
width

Intrinsic width in pixels.

integer format: int32
height

Intrinsic height in pixels.

integer format: int32
descriptions

Localized captions.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
lifestyleType

The lifestyle this asset is meant to illustrate, when tagged.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
urls

Ready-to-use delivery URLs, one per variant. Which variants are populated depends on whether the asset is an image, a Cloudinary video or an externally-hosted one — see MediaUrlSet.

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
otaPicCategory

OpenTravel PIC (Picture Category) code, e.g. “2” = Lobby view, “6” = Guest room. What the asset depicts, which is what you want when laying out a gallery rather than dumping it in sort order. Empty when the property never categorised the asset. Look codes up at https://wink.travel/developers/taxonomy.

string
sort

Display order within its collection, ascending.

integer format: int32
onPremises

Whether the item is on the property’s premises.

boolean
geoLocation

Where the item is, when it differs from the property.

Bare latitude and longitude, not GeoJSON. Absent, not zeroed, when the item sits at the property – see PartnerContentContractMeasurementTest for how that absence is verified rather than assumed.

object
longitude

Degrees east of the prime meridian, -180 to 180.

number format: double
latitude

Degrees north of the equator, -90 to 90.

number format: double
address

Postal address, when the item has its own.

object
address1

Street line 1.

string
address2

Street line 2, when the property supplies one.

string
state

State, province or region.

string
postalCode

Postal or ZIP code.

string
city

City name.

string
countryCode

ISO 3166-1 alpha-2 country code, e.g. “TH”.

string
country

Country name in the requested language.

string
fullAddress

The full address pre-formatted for display, newline-free.

string
lifestyleType

The lifestyle this item suits, when tagged. Singular, not a list: the platform records exactly one per item.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
otaRsiAmenities

OpenTravel RSI (Restaurant Service/Amenity) codes. Populated only for restaurants.

Array<string>
otaSpaAmenities

OpenTravel SPA (Spa Feature) codes. Populated only for spas.

Array<string>
otaMrcAmenities

OpenTravel MRC (Meeting Room Code) codes. Populated only for meeting_rooms.

Array<string>
otaRecAmenities

OpenTravel REC (Recreation) codes. Populated only for activities.

Array<string>
otaPrxProximityCode

OpenTravel PRX (Proximity) code, e.g. “1” = On premises, “3” = Nearby. Five values, so do NOT read it as a boolean – on_premises above is the two-way answer if that is all you need.

string
otaAqcMinAgeAppropriateCode

OpenTravel AQC (Age Qualifying) code, e.g. “3” = Under 2, “8” = Child, “1” = Over 21. An age CATEGORY, not a numeric minimum age – parsing it as a number yields nonsense for most values.

string
otaSecSecurityFeatures

OpenTravel SEC (Security Feature) codes.

Array<string>
otaPhyAccessibilityFeatures

OpenTravel PHY (Accessibility Feature) codes.

Array<string>
opens

Opening time, local to the property, “HH:mm”. Empty when the venue records none (spas, activities and places often do not).

string
closes

Closing time, local to the property, “HH:mm”. Empty when the venue records none.

string
daysOfWeek

The days the venue is open. Unset when the venue records none, and ALSO unset when the venue has no days selected: the platform stores “no days selected” to mean every day, so that case is published as “not stated” rather than as a message with every day false (which would read as “never open”). When set, at least one day is true.

object
monday

Open on Monday.

boolean
tuesday

Open on Tuesday.

boolean
wednesday

Open on Wednesday.

boolean
thursday

Open on Thursday.

boolean
friday

Open on Friday.

boolean
saturday

Open on Saturday.

boolean
sunday

Open on Sunday.

boolean
reservationRequired

Whether guests must reserve in advance. The platform stores this as a plain yes/no with no “not stated” state, so a venue that never answered arrives as false, exactly like one that answered no. Do not read false as “walk-ins are welcome”. The field is declared optional so a future release can leave it unset for a venue that has not said; today it is always set.

boolean
restaurant

Restaurant seating and service. Set on restaurants.

object
maxSeatingCapacity

Total seating capacity. Unset when the property has not recorded it.

integer format: int32
maxSingleParty

The largest party that can be seated together. Unset when the property has not recorded it.

integer format: int32
offerBreakfast

Whether breakfast is served. False also covers “never recorded”.

boolean
offerLunch

Whether lunch is served. False also covers “never recorded”.

boolean
offerDinner

Whether dinner is served. False also covers “never recorded”.

boolean
offerBrunch

Whether brunch is served. False also covers “never recorded”.

boolean
otaCuiCuisineCodes

OpenTravel CUI (Main Cuisine) codes. Look codes up at https://wink.travel/developers/taxonomy.

Array<string>
otaResCategoryCodes

OpenTravel RES (Restaurant Category) codes.

Array<string>
meetingRoom

Meeting room size and format. Set on meeting_rooms.

object
capacity

How many people the room holds. 0 means not recorded.

integer format: int32
areaSquareMeters

Floor area in square meters. 0 means not recorded.

number format: float
heightMeters

Ceiling height in meters. 0 means not recorded.

number format: float
widthMeters

Width in meters. 0 means not recorded.

number format: float
lengthMeters

Length in meters. 0 means not recorded.

number format: float
irregular

Whether the room has an irregular shape. False also covers “never recorded”.

boolean
access

The kind of access to the room, e.g. private or public. Untranslated text as the property entered it.

string
level

The level of the facility the room is on, as the property entered it.

string
otaMrfFormatCode

OpenTravel MRF (Meeting Room Format) code.

string
dedicated

Whether the room is dedicated to meetings rather than shared with other uses. False also covers “never recorded”.

boolean
attraction

Attraction category. Set on attractions.

object
otaAccCategoryCode

OpenTravel ACC (Attraction Category) code.

string
place

Place category. Set on places.

object
otaRefCategoryCode

OpenTravel REF (Reference Point Category) code.

string
activities

Activities. Present with CONTENT_SCOPE_ACTIVITY.

Array<object>

A non-room inventory item: restaurant, spa, meeting room, activity, attraction, place or add-on.

These share a shape deliberately. They differ in what they mean, not in what they carry, and one message keeps the contract small and lets a client render any of them with the same code. Where a type needs fields the others do not, those arrive as new field numbers on this message rather than a new message – the facts only one type has sit in the venue_details oneof below, one message per type.

At most one of restaurant, meetingRoom, attraction, place is set (protobuf oneof venue_details).

object
id

Stable identifier for this item.

string
name

Item name in the requested language.

string
descriptions

Localized descriptions, in English plus your requested language.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
multimedias

Images and videos.

Array<object>

One published image or video.

Key anything you cache on entity_id, the asset’s Cloudinary public id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
entityId

The asset’s Cloudinary public id: the stable identity of this image or video, and the key to use for your own cache. It can be used to build delivery URLs yourself, e.g. https://res.cloudinary.com/<cloud>/image/upload/<transformations>/<entity_id>; prefer the ready-made urls where they are present, since URLs can change.

string
kind

MEDIA_TYPE_IMAGE or MEDIA_TYPE_VIDEO.

string
Allowed values: MULTIMEDIA_KIND_UNSPECIFIED MULTIMEDIA_KIND_IMAGE MULTIMEDIA_KIND_VIDEO
source

Where the asset came from, e.g. the property’s own upload or a syndicated source.

string
sort

Display order within its gallery, ascending.

integer format: int32
angle

Camera angle or shot description, when the property supplied one.

string
width

Intrinsic width in pixels.

integer format: int32
height

Intrinsic height in pixels.

integer format: int32
descriptions

Localized captions.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
lifestyleType

The lifestyle this asset is meant to illustrate, when tagged.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
urls

Ready-to-use delivery URLs, one per variant. Which variants are populated depends on whether the asset is an image, a Cloudinary video or an externally-hosted one — see MediaUrlSet.

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
otaPicCategory

OpenTravel PIC (Picture Category) code, e.g. “2” = Lobby view, “6” = Guest room. What the asset depicts, which is what you want when laying out a gallery rather than dumping it in sort order. Empty when the property never categorised the asset. Look codes up at https://wink.travel/developers/taxonomy.

string
sort

Display order within its collection, ascending.

integer format: int32
onPremises

Whether the item is on the property’s premises.

boolean
geoLocation

Where the item is, when it differs from the property.

Bare latitude and longitude, not GeoJSON. Absent, not zeroed, when the item sits at the property – see PartnerContentContractMeasurementTest for how that absence is verified rather than assumed.

object
longitude

Degrees east of the prime meridian, -180 to 180.

number format: double
latitude

Degrees north of the equator, -90 to 90.

number format: double
address

Postal address, when the item has its own.

object
address1

Street line 1.

string
address2

Street line 2, when the property supplies one.

string
state

State, province or region.

string
postalCode

Postal or ZIP code.

string
city

City name.

string
countryCode

ISO 3166-1 alpha-2 country code, e.g. “TH”.

string
country

Country name in the requested language.

string
fullAddress

The full address pre-formatted for display, newline-free.

string
lifestyleType

The lifestyle this item suits, when tagged. Singular, not a list: the platform records exactly one per item.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
otaRsiAmenities

OpenTravel RSI (Restaurant Service/Amenity) codes. Populated only for restaurants.

Array<string>
otaSpaAmenities

OpenTravel SPA (Spa Feature) codes. Populated only for spas.

Array<string>
otaMrcAmenities

OpenTravel MRC (Meeting Room Code) codes. Populated only for meeting_rooms.

Array<string>
otaRecAmenities

OpenTravel REC (Recreation) codes. Populated only for activities.

Array<string>
otaPrxProximityCode

OpenTravel PRX (Proximity) code, e.g. “1” = On premises, “3” = Nearby. Five values, so do NOT read it as a boolean – on_premises above is the two-way answer if that is all you need.

string
otaAqcMinAgeAppropriateCode

OpenTravel AQC (Age Qualifying) code, e.g. “3” = Under 2, “8” = Child, “1” = Over 21. An age CATEGORY, not a numeric minimum age – parsing it as a number yields nonsense for most values.

string
otaSecSecurityFeatures

OpenTravel SEC (Security Feature) codes.

Array<string>
otaPhyAccessibilityFeatures

OpenTravel PHY (Accessibility Feature) codes.

Array<string>
opens

Opening time, local to the property, “HH:mm”. Empty when the venue records none (spas, activities and places often do not).

string
closes

Closing time, local to the property, “HH:mm”. Empty when the venue records none.

string
daysOfWeek

The days the venue is open. Unset when the venue records none, and ALSO unset when the venue has no days selected: the platform stores “no days selected” to mean every day, so that case is published as “not stated” rather than as a message with every day false (which would read as “never open”). When set, at least one day is true.

object
monday

Open on Monday.

boolean
tuesday

Open on Tuesday.

boolean
wednesday

Open on Wednesday.

boolean
thursday

Open on Thursday.

boolean
friday

Open on Friday.

boolean
saturday

Open on Saturday.

boolean
sunday

Open on Sunday.

boolean
reservationRequired

Whether guests must reserve in advance. The platform stores this as a plain yes/no with no “not stated” state, so a venue that never answered arrives as false, exactly like one that answered no. Do not read false as “walk-ins are welcome”. The field is declared optional so a future release can leave it unset for a venue that has not said; today it is always set.

boolean
restaurant

Restaurant seating and service. Set on restaurants.

object
maxSeatingCapacity

Total seating capacity. Unset when the property has not recorded it.

integer format: int32
maxSingleParty

The largest party that can be seated together. Unset when the property has not recorded it.

integer format: int32
offerBreakfast

Whether breakfast is served. False also covers “never recorded”.

boolean
offerLunch

Whether lunch is served. False also covers “never recorded”.

boolean
offerDinner

Whether dinner is served. False also covers “never recorded”.

boolean
offerBrunch

Whether brunch is served. False also covers “never recorded”.

boolean
otaCuiCuisineCodes

OpenTravel CUI (Main Cuisine) codes. Look codes up at https://wink.travel/developers/taxonomy.

Array<string>
otaResCategoryCodes

OpenTravel RES (Restaurant Category) codes.

Array<string>
meetingRoom

Meeting room size and format. Set on meeting_rooms.

object
capacity

How many people the room holds. 0 means not recorded.

integer format: int32
areaSquareMeters

Floor area in square meters. 0 means not recorded.

number format: float
heightMeters

Ceiling height in meters. 0 means not recorded.

number format: float
widthMeters

Width in meters. 0 means not recorded.

number format: float
lengthMeters

Length in meters. 0 means not recorded.

number format: float
irregular

Whether the room has an irregular shape. False also covers “never recorded”.

boolean
access

The kind of access to the room, e.g. private or public. Untranslated text as the property entered it.

string
level

The level of the facility the room is on, as the property entered it.

string
otaMrfFormatCode

OpenTravel MRF (Meeting Room Format) code.

string
dedicated

Whether the room is dedicated to meetings rather than shared with other uses. False also covers “never recorded”.

boolean
attraction

Attraction category. Set on attractions.

object
otaAccCategoryCode

OpenTravel ACC (Attraction Category) code.

string
place

Place category. Set on places.

object
otaRefCategoryCode

OpenTravel REF (Reference Point Category) code.

string
attractions

Attractions. Present with CONTENT_SCOPE_ATTRACTION.

Array<object>

A non-room inventory item: restaurant, spa, meeting room, activity, attraction, place or add-on.

These share a shape deliberately. They differ in what they mean, not in what they carry, and one message keeps the contract small and lets a client render any of them with the same code. Where a type needs fields the others do not, those arrive as new field numbers on this message rather than a new message – the facts only one type has sit in the venue_details oneof below, one message per type.

At most one of restaurant, meetingRoom, attraction, place is set (protobuf oneof venue_details).

object
id

Stable identifier for this item.

string
name

Item name in the requested language.

string
descriptions

Localized descriptions, in English plus your requested language.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
multimedias

Images and videos.

Array<object>

One published image or video.

Key anything you cache on entity_id, the asset’s Cloudinary public id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
entityId

The asset’s Cloudinary public id: the stable identity of this image or video, and the key to use for your own cache. It can be used to build delivery URLs yourself, e.g. https://res.cloudinary.com/<cloud>/image/upload/<transformations>/<entity_id>; prefer the ready-made urls where they are present, since URLs can change.

string
kind

MEDIA_TYPE_IMAGE or MEDIA_TYPE_VIDEO.

string
Allowed values: MULTIMEDIA_KIND_UNSPECIFIED MULTIMEDIA_KIND_IMAGE MULTIMEDIA_KIND_VIDEO
source

Where the asset came from, e.g. the property’s own upload or a syndicated source.

string
sort

Display order within its gallery, ascending.

integer format: int32
angle

Camera angle or shot description, when the property supplied one.

string
width

Intrinsic width in pixels.

integer format: int32
height

Intrinsic height in pixels.

integer format: int32
descriptions

Localized captions.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
lifestyleType

The lifestyle this asset is meant to illustrate, when tagged.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
urls

Ready-to-use delivery URLs, one per variant. Which variants are populated depends on whether the asset is an image, a Cloudinary video or an externally-hosted one — see MediaUrlSet.

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
otaPicCategory

OpenTravel PIC (Picture Category) code, e.g. “2” = Lobby view, “6” = Guest room. What the asset depicts, which is what you want when laying out a gallery rather than dumping it in sort order. Empty when the property never categorised the asset. Look codes up at https://wink.travel/developers/taxonomy.

string
sort

Display order within its collection, ascending.

integer format: int32
onPremises

Whether the item is on the property’s premises.

boolean
geoLocation

Where the item is, when it differs from the property.

Bare latitude and longitude, not GeoJSON. Absent, not zeroed, when the item sits at the property – see PartnerContentContractMeasurementTest for how that absence is verified rather than assumed.

object
longitude

Degrees east of the prime meridian, -180 to 180.

number format: double
latitude

Degrees north of the equator, -90 to 90.

number format: double
address

Postal address, when the item has its own.

object
address1

Street line 1.

string
address2

Street line 2, when the property supplies one.

string
state

State, province or region.

string
postalCode

Postal or ZIP code.

string
city

City name.

string
countryCode

ISO 3166-1 alpha-2 country code, e.g. “TH”.

string
country

Country name in the requested language.

string
fullAddress

The full address pre-formatted for display, newline-free.

string
lifestyleType

The lifestyle this item suits, when tagged. Singular, not a list: the platform records exactly one per item.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
otaRsiAmenities

OpenTravel RSI (Restaurant Service/Amenity) codes. Populated only for restaurants.

Array<string>
otaSpaAmenities

OpenTravel SPA (Spa Feature) codes. Populated only for spas.

Array<string>
otaMrcAmenities

OpenTravel MRC (Meeting Room Code) codes. Populated only for meeting_rooms.

Array<string>
otaRecAmenities

OpenTravel REC (Recreation) codes. Populated only for activities.

Array<string>
otaPrxProximityCode

OpenTravel PRX (Proximity) code, e.g. “1” = On premises, “3” = Nearby. Five values, so do NOT read it as a boolean – on_premises above is the two-way answer if that is all you need.

string
otaAqcMinAgeAppropriateCode

OpenTravel AQC (Age Qualifying) code, e.g. “3” = Under 2, “8” = Child, “1” = Over 21. An age CATEGORY, not a numeric minimum age – parsing it as a number yields nonsense for most values.

string
otaSecSecurityFeatures

OpenTravel SEC (Security Feature) codes.

Array<string>
otaPhyAccessibilityFeatures

OpenTravel PHY (Accessibility Feature) codes.

Array<string>
opens

Opening time, local to the property, “HH:mm”. Empty when the venue records none (spas, activities and places often do not).

string
closes

Closing time, local to the property, “HH:mm”. Empty when the venue records none.

string
daysOfWeek

The days the venue is open. Unset when the venue records none, and ALSO unset when the venue has no days selected: the platform stores “no days selected” to mean every day, so that case is published as “not stated” rather than as a message with every day false (which would read as “never open”). When set, at least one day is true.

object
monday

Open on Monday.

boolean
tuesday

Open on Tuesday.

boolean
wednesday

Open on Wednesday.

boolean
thursday

Open on Thursday.

boolean
friday

Open on Friday.

boolean
saturday

Open on Saturday.

boolean
sunday

Open on Sunday.

boolean
reservationRequired

Whether guests must reserve in advance. The platform stores this as a plain yes/no with no “not stated” state, so a venue that never answered arrives as false, exactly like one that answered no. Do not read false as “walk-ins are welcome”. The field is declared optional so a future release can leave it unset for a venue that has not said; today it is always set.

boolean
restaurant

Restaurant seating and service. Set on restaurants.

object
maxSeatingCapacity

Total seating capacity. Unset when the property has not recorded it.

integer format: int32
maxSingleParty

The largest party that can be seated together. Unset when the property has not recorded it.

integer format: int32
offerBreakfast

Whether breakfast is served. False also covers “never recorded”.

boolean
offerLunch

Whether lunch is served. False also covers “never recorded”.

boolean
offerDinner

Whether dinner is served. False also covers “never recorded”.

boolean
offerBrunch

Whether brunch is served. False also covers “never recorded”.

boolean
otaCuiCuisineCodes

OpenTravel CUI (Main Cuisine) codes. Look codes up at https://wink.travel/developers/taxonomy.

Array<string>
otaResCategoryCodes

OpenTravel RES (Restaurant Category) codes.

Array<string>
meetingRoom

Meeting room size and format. Set on meeting_rooms.

object
capacity

How many people the room holds. 0 means not recorded.

integer format: int32
areaSquareMeters

Floor area in square meters. 0 means not recorded.

number format: float
heightMeters

Ceiling height in meters. 0 means not recorded.

number format: float
widthMeters

Width in meters. 0 means not recorded.

number format: float
lengthMeters

Length in meters. 0 means not recorded.

number format: float
irregular

Whether the room has an irregular shape. False also covers “never recorded”.

boolean
access

The kind of access to the room, e.g. private or public. Untranslated text as the property entered it.

string
level

The level of the facility the room is on, as the property entered it.

string
otaMrfFormatCode

OpenTravel MRF (Meeting Room Format) code.

string
dedicated

Whether the room is dedicated to meetings rather than shared with other uses. False also covers “never recorded”.

boolean
attraction

Attraction category. Set on attractions.

object
otaAccCategoryCode

OpenTravel ACC (Attraction Category) code.

string
place

Place category. Set on places.

object
otaRefCategoryCode

OpenTravel REF (Reference Point Category) code.

string
places

Places of interest. Present with CONTENT_SCOPE_PLACE.

Array<object>

A non-room inventory item: restaurant, spa, meeting room, activity, attraction, place or add-on.

These share a shape deliberately. They differ in what they mean, not in what they carry, and one message keeps the contract small and lets a client render any of them with the same code. Where a type needs fields the others do not, those arrive as new field numbers on this message rather than a new message – the facts only one type has sit in the venue_details oneof below, one message per type.

At most one of restaurant, meetingRoom, attraction, place is set (protobuf oneof venue_details).

object
id

Stable identifier for this item.

string
name

Item name in the requested language.

string
descriptions

Localized descriptions, in English plus your requested language.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
multimedias

Images and videos.

Array<object>

One published image or video.

Key anything you cache on entity_id, the asset’s Cloudinary public id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
entityId

The asset’s Cloudinary public id: the stable identity of this image or video, and the key to use for your own cache. It can be used to build delivery URLs yourself, e.g. https://res.cloudinary.com/<cloud>/image/upload/<transformations>/<entity_id>; prefer the ready-made urls where they are present, since URLs can change.

string
kind

MEDIA_TYPE_IMAGE or MEDIA_TYPE_VIDEO.

string
Allowed values: MULTIMEDIA_KIND_UNSPECIFIED MULTIMEDIA_KIND_IMAGE MULTIMEDIA_KIND_VIDEO
source

Where the asset came from, e.g. the property’s own upload or a syndicated source.

string
sort

Display order within its gallery, ascending.

integer format: int32
angle

Camera angle or shot description, when the property supplied one.

string
width

Intrinsic width in pixels.

integer format: int32
height

Intrinsic height in pixels.

integer format: int32
descriptions

Localized captions.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
lifestyleType

The lifestyle this asset is meant to illustrate, when tagged.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
urls

Ready-to-use delivery URLs, one per variant. Which variants are populated depends on whether the asset is an image, a Cloudinary video or an externally-hosted one — see MediaUrlSet.

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
otaPicCategory

OpenTravel PIC (Picture Category) code, e.g. “2” = Lobby view, “6” = Guest room. What the asset depicts, which is what you want when laying out a gallery rather than dumping it in sort order. Empty when the property never categorised the asset. Look codes up at https://wink.travel/developers/taxonomy.

string
sort

Display order within its collection, ascending.

integer format: int32
onPremises

Whether the item is on the property’s premises.

boolean
geoLocation

Where the item is, when it differs from the property.

Bare latitude and longitude, not GeoJSON. Absent, not zeroed, when the item sits at the property – see PartnerContentContractMeasurementTest for how that absence is verified rather than assumed.

object
longitude

Degrees east of the prime meridian, -180 to 180.

number format: double
latitude

Degrees north of the equator, -90 to 90.

number format: double
address

Postal address, when the item has its own.

object
address1

Street line 1.

string
address2

Street line 2, when the property supplies one.

string
state

State, province or region.

string
postalCode

Postal or ZIP code.

string
city

City name.

string
countryCode

ISO 3166-1 alpha-2 country code, e.g. “TH”.

string
country

Country name in the requested language.

string
fullAddress

The full address pre-formatted for display, newline-free.

string
lifestyleType

The lifestyle this item suits, when tagged. Singular, not a list: the platform records exactly one per item.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
otaRsiAmenities

OpenTravel RSI (Restaurant Service/Amenity) codes. Populated only for restaurants.

Array<string>
otaSpaAmenities

OpenTravel SPA (Spa Feature) codes. Populated only for spas.

Array<string>
otaMrcAmenities

OpenTravel MRC (Meeting Room Code) codes. Populated only for meeting_rooms.

Array<string>
otaRecAmenities

OpenTravel REC (Recreation) codes. Populated only for activities.

Array<string>
otaPrxProximityCode

OpenTravel PRX (Proximity) code, e.g. “1” = On premises, “3” = Nearby. Five values, so do NOT read it as a boolean – on_premises above is the two-way answer if that is all you need.

string
otaAqcMinAgeAppropriateCode

OpenTravel AQC (Age Qualifying) code, e.g. “3” = Under 2, “8” = Child, “1” = Over 21. An age CATEGORY, not a numeric minimum age – parsing it as a number yields nonsense for most values.

string
otaSecSecurityFeatures

OpenTravel SEC (Security Feature) codes.

Array<string>
otaPhyAccessibilityFeatures

OpenTravel PHY (Accessibility Feature) codes.

Array<string>
opens

Opening time, local to the property, “HH:mm”. Empty when the venue records none (spas, activities and places often do not).

string
closes

Closing time, local to the property, “HH:mm”. Empty when the venue records none.

string
daysOfWeek

The days the venue is open. Unset when the venue records none, and ALSO unset when the venue has no days selected: the platform stores “no days selected” to mean every day, so that case is published as “not stated” rather than as a message with every day false (which would read as “never open”). When set, at least one day is true.

object
monday

Open on Monday.

boolean
tuesday

Open on Tuesday.

boolean
wednesday

Open on Wednesday.

boolean
thursday

Open on Thursday.

boolean
friday

Open on Friday.

boolean
saturday

Open on Saturday.

boolean
sunday

Open on Sunday.

boolean
reservationRequired

Whether guests must reserve in advance. The platform stores this as a plain yes/no with no “not stated” state, so a venue that never answered arrives as false, exactly like one that answered no. Do not read false as “walk-ins are welcome”. The field is declared optional so a future release can leave it unset for a venue that has not said; today it is always set.

boolean
restaurant

Restaurant seating and service. Set on restaurants.

object
maxSeatingCapacity

Total seating capacity. Unset when the property has not recorded it.

integer format: int32
maxSingleParty

The largest party that can be seated together. Unset when the property has not recorded it.

integer format: int32
offerBreakfast

Whether breakfast is served. False also covers “never recorded”.

boolean
offerLunch

Whether lunch is served. False also covers “never recorded”.

boolean
offerDinner

Whether dinner is served. False also covers “never recorded”.

boolean
offerBrunch

Whether brunch is served. False also covers “never recorded”.

boolean
otaCuiCuisineCodes

OpenTravel CUI (Main Cuisine) codes. Look codes up at https://wink.travel/developers/taxonomy.

Array<string>
otaResCategoryCodes

OpenTravel RES (Restaurant Category) codes.

Array<string>
meetingRoom

Meeting room size and format. Set on meeting_rooms.

object
capacity

How many people the room holds. 0 means not recorded.

integer format: int32
areaSquareMeters

Floor area in square meters. 0 means not recorded.

number format: float
heightMeters

Ceiling height in meters. 0 means not recorded.

number format: float
widthMeters

Width in meters. 0 means not recorded.

number format: float
lengthMeters

Length in meters. 0 means not recorded.

number format: float
irregular

Whether the room has an irregular shape. False also covers “never recorded”.

boolean
access

The kind of access to the room, e.g. private or public. Untranslated text as the property entered it.

string
level

The level of the facility the room is on, as the property entered it.

string
otaMrfFormatCode

OpenTravel MRF (Meeting Room Format) code.

string
dedicated

Whether the room is dedicated to meetings rather than shared with other uses. False also covers “never recorded”.

boolean
attraction

Attraction category. Set on attractions.

object
otaAccCategoryCode

OpenTravel ACC (Attraction Category) code.

string
place

Place category. Set on places.

object
otaRefCategoryCode

OpenTravel REF (Reference Point Category) code.

string
cancellationPolicies

Cancellation policies referenced by RoomRate.cancellation_policy_id. Present with CONTENT_SCOPE_CANCELLATION_POLICY.

Array<object>

A cancellation policy: the deadline, and what is charged on each side of it.

Join to a pricing result through RoomRate.cancellation_policy_id. The pricing surface already tells you whether a rate is refundable and until when; this tells you the terms behind that answer.

A policy has no name and no descriptions — it is a set of rules, not prose, and the platform stores no localized text for one. Render it from the fields below; policy_code is the short label to show when you have room for two characters and not a sentence.

The charge fields are enum NAMES, not free text, and the set of names is stable. Treat an unrecognised value as “charge applies, terms unknown” rather than as an error: new members are added to these ladders over time and an unknown one must not break your rendering.

object
id

Stable policy identifier.

string
refundable

Whether the stay can be cancelled without charge before the deadline. The single field to branch on.

boolean
policyCode

Two-character summary: “R” refundable, “NR” non-refundable.

string
freeCancellationDaysBefore

Days before arrival by which a free cancellation must be made. Zero means the deadline falls ON the arrival day — read advance_cancellation_free_of_charge for the hour, which is the only place that distinction survives. Absent on a non-refundable policy, which has no free window to count down.

integer format: int32
advanceCancellationFreeOfCharge

The free-cancellation window as the property set it, e.g. “SEVEN_DAYS_BEFORE_ARRIVAL” or “UNTIL_EIGHTEEN_HUNDRED_HOURS_ON_DAY_OF_ARRIVAL”. The two day-of-arrival values both report free_cancellation_days_before = 0 and differ only here.

string
refundableCancellationCharge

What a refundable policy charges when the free window has closed, e.g. “FIFTY_PERCENT”.

string
noShowCharge

What is charged when the guest does not arrive at all, e.g. “SAME_AS_CANCELLATION_FEE”.

string
nonRefundableCancellationCharge

What a non-refundable policy charges on cancellation, e.g. “SEVENTY_PERCENT”.

string
nonRefundableDeadline

The point after which a non-refundable policy charges more, e.g. “SEVEN_DAYS_BEFORE_ARRIVAL”.

string
nonRefundableAfterDeadlineCancellationCharge

What a non-refundable policy charges once non_refundable_deadline has passed, e.g. “ONE_HUNDRED_PERCENT”.

string
perks

Perks referenced by RoomRate.perk_ids. Present with CONTENT_SCOPE_PERK.

Array<object>

A perk bundled with a rate.

Lives here rather than in partner_content.proto because Search returns a deduplicated dictionary of these alongside its rates (PropertySearchResult.perks): inlining the perk on every rate would repeat a handful of distinct perks across every rate of every room type of every property in a search result. Inventory does NOT return the dictionary (PropertyInventory.perks is deprecated and empty); resolve its perk_ids through Content.

descriptions carries the display name and body together — Description has both.

object
id

Stable perk identifier. Matches an entry in RoomRate.perk_ids.

string
descriptions

Localized name and description, in English plus your requested language.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
guaranteed

Whether the perk is guaranteed rather than subject to availability.

boolean
level

Perk tier; higher is more valuable.

integer format: int32
sort

Display order, ascending.

integer format: int32
roomTypes

Room types the property sells, ONCE each — not repeated per rate. Present when you request CONTENT_SCOPE_ROOM_TYPE. RoomTypeOffers.room_type_id on the pricing surfaces points here.

Array<object>

A bookable room type. Returned once per property in PropertyContent.room_types, never inline on a rate; RoomTypeOffers.room_type_id points here. Only room types reachable from a master rate you can see are ever returned by a property-scoped call.

object
id

Stable room type identifier. Matches RoomPrice.room_type_id on the pricing endpoints, which you can use to group several rates for the same room.

string
name

Room name in the requested language.

string
descriptions

Localized descriptions, in English plus your requested language.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
multimedias

Room images and videos.

Array<object>

One published image or video.

Key anything you cache on entity_id, the asset’s Cloudinary public id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
entityId

The asset’s Cloudinary public id: the stable identity of this image or video, and the key to use for your own cache. It can be used to build delivery URLs yourself, e.g. https://res.cloudinary.com/<cloud>/image/upload/<transformations>/<entity_id>; prefer the ready-made urls where they are present, since URLs can change.

string
kind

MEDIA_TYPE_IMAGE or MEDIA_TYPE_VIDEO.

string
Allowed values: MULTIMEDIA_KIND_UNSPECIFIED MULTIMEDIA_KIND_IMAGE MULTIMEDIA_KIND_VIDEO
source

Where the asset came from, e.g. the property’s own upload or a syndicated source.

string
sort

Display order within its gallery, ascending.

integer format: int32
angle

Camera angle or shot description, when the property supplied one.

string
width

Intrinsic width in pixels.

integer format: int32
height

Intrinsic height in pixels.

integer format: int32
descriptions

Localized captions.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
lifestyleType

The lifestyle this asset is meant to illustrate, when tagged.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
urls

Ready-to-use delivery URLs, one per variant. Which variants are populated depends on whether the asset is an image, a Cloudinary video or an externally-hosted one — see MediaUrlSet.

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
otaPicCategory

OpenTravel PIC (Picture Category) code, e.g. “2” = Lobby view, “6” = Guest room. What the asset depicts, which is what you want when laying out a gallery rather than dumping it in sort order. Empty when the property never categorised the asset. Look codes up at https://wink.travel/developers/taxonomy.

string
sort

Display order within the property, ascending.

integer format: int32
maxOccupancy

Total guests, adults plus children.

integer format: int32
minOccupancy

Minimum guests required.

integer format: int32
maxAdultOccupancy

Maximum adults.

integer format: int32
maxChildOccupancy

Maximum children.

integer format: int32
quantity

Rooms of this type at the property.

integer format: int32
size

Floor area in square metres.

number format: double
nonSmoking

Whether the room is non-smoking.

boolean
otaSegRoomCategory

OpenTravel SEG (Segment Category) code, e.g. “4” = Deluxe, “16” = Standard. Look codes up at https://wink.travel/developers/taxonomy.

string
otaRvtRoomViewCode

OpenTravel RVT (Room View Type) code, e.g. “11” = Ocean view, “16” = Garden view.

string
otaRmaAmenities

OpenTravel RMA (Room Amenity) codes, e.g. “2” = Air conditioning, “7” = Balcony.

Array<string>
otaPhyAccessibilityFeatures

OpenTravel PHY (Accessibility Feature) codes, e.g. “110” = Roll-in shower available.

Array<string>
otaRltRoomLocationCode

OpenTravel RLT (Room Location Type) code, e.g. “1” = Away from elevator, “8” = High floor.

string
otaGriRoomClassificationCode

OpenTravel GRI (Guest Room Info) code, e.g. “44” = Bungalow, “45” = Villa, “82” = Standard.

string
otaArcRoomArchitectureCode

OpenTravel ARC (Architectural Style) code, e.g. “7” = Modern, “11” = Victorian.

string
bedConfigurations

The bed layouts this room can be booked in, each with a stable id.

Pass the id of the one the guest chose as BookingRoomRequest.bedroom_configuration_id. A room with one layout still returns it; send the id anyway rather than relying on the default, which is “whichever the property happens to list first”.

Array<object>

One bookable bed layout for a room type.

Suppliers routinely put an entire room description in name (“Suite - 1 Bedroom, 1 Double Bed, Non-Smoking, Balcony…”), so render from bedrooms when you want to show what a guest actually gets. Wink’s own booking confirmations stopped trusting name for exactly that reason.

object
id

Stable identifier for this layout. THIS is what BookingRoomRequest.bedroom_configuration_id wants.

string
name

The property’s own label for the layout, e.g. “Master Bedroom”. Untranslated, and frequently verbose.

string
bedrooms

The bedrooms in this layout, and the beds in each.

Array<object>

One bedroom within a layout.

object
type

Which bedroom this is within the layout.

string
Allowed values: BEDROOM_TYPE_UNSPECIFIED BEDROOM_TYPE_MASTER BEDROOM_TYPE_QUEEN BEDROOM_TYPE_JUNIOR BEDROOM_TYPE_DORMITORY BEDROOM_TYPE_BEDROOM_1 BEDROOM_TYPE_BEDROOM_2 BEDROOM_TYPE_BEDROOM_3 BEDROOM_TYPE_BEDROOM_4 BEDROOM_TYPE_BEDROOM_5 BEDROOM_TYPE_BEDROOM_6 BEDROOM_TYPE_BEDROOM_7 BEDROOM_TYPE_BEDROOM_8 BEDROOM_TYPE_BEDROOM_9 BEDROOM_TYPE_BEDROOM_10
beds

The beds in this bedroom.

Array<object>

A quantity of one bed type.

object
otaBedTypeCode

OpenTravel BED (Bed Type) code, e.g. “3” = King, “5” = Queen, “8” = Twin. Look codes up at https://wink.travel/developers/taxonomy.

string
quantity

How many beds of this type, at least one.

integer format: int32
bathroomCount

Number of bathrooms. A room that does not say defaults to 1.

integer format: int32
otaSecSecurityFeatures

OpenTravel SEC (Security Feature) codes. Codes, not display names, like ota_phy_accessibility_features; look them up at https://wink.travel/developers/taxonomy.

Array<string>
livingRoomCount

Number of living rooms. A room that does not say defaults to 1.

integer format: int32
maxRollaways

Rollaway beds the room accepts, 0 when none.

integer format: int32
maxCribs

Cribs the room accepts, 0 when none.

integer format: int32
includedAdultOccupancy

Adults the room’s price already covers, before any extra-adult charge.

integer format: int32
includedChildOccupancy

Children the room’s price already covers, before any extra-child charge.

integer format: int32
floor

Floor the room is on, as the property states it. Empty when not stated.

string
roomGender

Gender assignment, for gender-segregated rooms such as hostel dorms.

string
Allowed values: ROOM_GENDER_UNSPECIFIED ROOM_GENDER_MALE ROOM_GENDER_FEMALE ROOM_GENDER_MALE_AND_FEMALE
sharedRoom

Whether the room is shared with other guests, as in a dorm bed.

boolean
ratePlans

Rate plans, ONCE each — not repeated per rate. Present when you request CONTENT_SCOPE_RATE_PLAN. RoomRate.rate_plan_id on the pricing surfaces points here.

Array<object>

A rate plan and what it includes. Returned once per property in PropertyContent.rate_plans, never inline on a rate; RoomRate.rate_plan_id points here. Only rate plans reachable from a master rate you can see are ever returned by a property-scoped call.

A rate plan has no localized descriptions — name is a single untranslated label the property chose, and language_code on your request does not affect it. What a rate plan actually carries is what it INCLUDES, which is the meal booleans below.

object
id

Stable rate plan identifier. Matches RoomRate.rate_plan_id on the pricing endpoints.

string
name

Rate plan name as the property wrote it, e.g. “Best Available Rate”. Untranslated.

string
prepaid

Whether the rate must be paid in full at booking rather than at the property.

boolean
breakfast

Breakfast is included in the rate.

boolean
brunch

Brunch is included in the rate.

boolean
lunch

Lunch is included in the rate.

boolean
dinner

Dinner is included in the rate.

boolean
allInclusive

Everything is included except alcohol.

boolean
allInclusivePlusAlcohol

Everything is included, alcohol as well.

boolean
cancellationPolicyId

The cancellation policy governing this rate plan, when it sets one. Join to PropertyContent.cancellation_policies or fetch it with GetCancellationPolicy.

string
recognitions

Awards, certifications and third-party ratings the property holds. Present with CONTENT_SCOPE_RECOGNITION; empty when the property holds none, so check included_scopes to tell that from “not requested”. These are the property’s own recognitions, not guest reviews — those are ListReviews. Only recognitions the provider has authorised the property to publish are returned.

Array<object>

One award, certification or third-party rating a property holds.

object
identifier

Stable identifier of this recognition on the property.

string
category

What kind of recognition this is, as the platform names it (for example AWARD). Treat an unrecognized value as “some category this client does not know about yet” rather than an error.

string
type

The recognition’s type within its category (for example STAR_RATING). Same open-set rule as category.

string
provider

Who granted it, for example Michelin.

string
rating

The rating received, on the provider’s scale; read it together with max_rating and rating_symbol.

number format: float
maxRating

The top of the provider’s scale. Unset when the provider’s scale is not known.

number format: float
date

When it was received, ISO-8601 “YYYY-MM-DD”. Empty when unknown.

string
officialAppointment

True when the provider has given the property official permission to use the rating in publications and marketing. Always true here: a recognition without that permission is not returned.

boolean
ratingSymbol

The symbol the rating is expressed in, for example * or STAR. Empty when none.

string
greenIndexScores

Aggregate Green Index (sustainability) scores. Present with CONTENT_SCOPE_GREEN_INDEX, and unset when the property has not answered the index even if you asked: aggregate_greendex_rating in details is just the single overall number.

object
propertyId

The property these scores belong to.

string
highScore

The highest possible score across all questions.

integer format: int32
totalScore

The score earned across all answered questions.

integer format: int32
aggregateScore

total_score over high_score, between 0 and 1.

number format: float
scoresByCategory

The same three figures for each question category.

Array<object>

One Green Index question category’s share of the score.

object
category

The category, for example ENERGY or WATER. Open set: treat an unrecognized value as a category this client does not know about yet.

string
highScore

The highest possible score in this category.

integer format: int32
totalScore

The score earned in this category.

integer format: int32
aggregateScore

total_score over high_score, between 0 and 1.

number format: float
addOns

The property’s add-ons as STATIC content: what you need to render an add-on card, never its price. Present with CONTENT_SCOPE_ADD_ON; empty when the property has none you can sell, so check included_scopes to tell that from “not requested”.

JOIN: AncillaryOffer.add_on_id on the priced offers, and every id in RoomRate.add_on_ids, equal AddOnContent.id here. Unpublished and switched-off add-ons, and add-ons under a venue that is switched off, are not returned here and carry no priced offer either, so every priced add-on resolves.

This is the property’s own description of what it sells, like restaurants: it is not filtered by your sales channel, so a returned add-on is not necessarily one your channel can sell. Whether it is comes from the priced offers, which only carry add-ons you can.

14 held add_ons as a repeated InventoryItemContent before it was removed without being reserved, and a reintroduced field must not reuse a retired number, so this one is 23.

Array<object>

One add-on’s static content: enough to render an add-on card, and nothing priced.

The priced half is AncillaryOffer on the Inventory surfaces, which names this add-on by add_on_id. Prices are deliberately not here: they depend on the stay and on your channel, and content is the part that does not.

object
id

Stable identifier. Equals AncillaryOffer.add_on_id and each entry of RoomRate.add_on_ids.

string
name

The add-on’s name, as the property wrote it. Untranslated; the localized text is in descriptions.

string
descriptions

Localized name and description, in English plus your requested language.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
multimedias

Images and videos.

Array<object>

One published image or video.

Key anything you cache on entity_id, the asset’s Cloudinary public id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
entityId

The asset’s Cloudinary public id: the stable identity of this image or video, and the key to use for your own cache. It can be used to build delivery URLs yourself, e.g. https://res.cloudinary.com/<cloud>/image/upload/<transformations>/<entity_id>; prefer the ready-made urls where they are present, since URLs can change.

string
kind

MEDIA_TYPE_IMAGE or MEDIA_TYPE_VIDEO.

string
Allowed values: MULTIMEDIA_KIND_UNSPECIFIED MULTIMEDIA_KIND_IMAGE MULTIMEDIA_KIND_VIDEO
source

Where the asset came from, e.g. the property’s own upload or a syndicated source.

string
sort

Display order within its gallery, ascending.

integer format: int32
angle

Camera angle or shot description, when the property supplied one.

string
width

Intrinsic width in pixels.

integer format: int32
height

Intrinsic height in pixels.

integer format: int32
descriptions

Localized captions.

Array<object>

A short piece of localized text.

The API returns descriptions already filtered to the language on your request, so you will normally see exactly one entry per collection. language_code is still present so you can tell which language you got when the requested one was unavailable and the property’s default was substituted.

object
name

Short label for this description.

string
description

The description body.

string
languageCode

ISO 639-1 language code of name and description.

string
lifestyleType

The lifestyle this asset is meant to illustrate, when tagged.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_TYPE_HEALTH_FITNESS LIFESTYLE_TYPE_RELAX LIFESTYLE_TYPE_ADULT_ONLY LIFESTYLE_TYPE_ADVENTURE LIFESTYLE_TYPE_BUSINESS LIFESTYLE_TYPE_LGBT LIFESTYLE_TYPE_SINGLE_PARENT LIFESTYLE_TYPE_SOLO_FEMALE LIFESTYLE_TYPE_BEAUTY LIFESTYLE_TYPE_FOODIE LIFESTYLE_TYPE_FAMILY LIFESTYLE_TYPE_ROMANCE LIFESTYLE_TYPE_COUPLE LIFESTYLE_TYPE_SOLO LIFESTYLE_TYPE_BACKPACKER LIFESTYLE_TYPE_SHOPPING LIFESTYLE_TYPE_SPORTS LIFESTYLE_TYPE_MOUNTAIN LIFESTYLE_TYPE_BEACH LIFESTYLE_TYPE_CITY LIFESTYLE_TYPE_COUNTRY LIFESTYLE_TYPE_CULTURE LIFESTYLE_TYPE_ECO
urls

Ready-to-use delivery URLs, one per variant. Which variants are populated depends on whether the asset is an image, a Cloudinary video or an externally-hosted one — see MediaUrlSet.

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
otaPicCategory

OpenTravel PIC (Picture Category) code, e.g. “2” = Lobby view, “6” = Guest room. What the asset depicts, which is what you want when laying out a gallery rather than dumping it in sort order. Empty when the property never categorised the asset. Look codes up at https://wink.travel/developers/taxonomy.

string
category

What the add-on is attached to: ADD_ON for a property-level add-on, otherwise the kind of item it belongs under (RESTAURANT, SPA, MEETING_ROOM, ACTIVITY, ATTRACTION, PLACE, GUEST_ROOM). Open set: treat an unrecognized value as a kind this client does not know about yet.

string
sort

Display order among the property’s add-ons, ascending.

integer format: int32
mandatory

True when the property requires this add-on wherever it applies. See AncillaryOffer.mandatory for what that means when booking.

boolean
dateRanges

Date periods the add-on is restricted to. EMPTY MEANS NO DATE-RANGE RESTRICTION. Other availability rules (days of week, opening hours, time slots) are not published here; the priced offers are what is bookable.

Array<object>

A period an add-on is available in.

object
startDate

First date of the period, ISO-8601 (YYYY-MM-DD).

string
endDate

Last date of the period, ISO-8601 (YYYY-MM-DD).

string
roomTypeIds

Room types the add-on is restricted to, as RoomTypeOffers.room_type_id. EMPTY MEANS EVERY ROOM TYPE.

Array<string>
ratePlanIds

Rate plans the add-on is restricted to, as RoomRate.rate_plan_id. EMPTY MEANS EVERY RATE PLAN.

Array<string>
counts

How many of each ancillary entity this property has. ALWAYS present, whatever you included, and the reason the default response is useful on its own: it tells you which scopes are worth requesting for this property before paying for the round trip. A zero means the property has none, which is information — an empty restaurants list would not distinguish that from “you did not ask”.

object
restaurants

Restaurants on and off the premises.

integer format: int32
spas

Spas.

integer format: int32
meetingRooms

Meeting and event rooms.

integer format: int32
activities

Activities.

integer format: int32
attractions

Attractions.

integer format: int32
places

Places of interest.

integer format: int32
addOns

Purchasable add-ons.

integer format: int32
cacheToken

Opaque token identifying THIS response for THIS property. Store it and send it back in known_versions to skip re-fetching content that has not changed. Present on CONTENT_STATUS_OK and CONTENT_STATUS_NOT_MODIFIED.

Derived from the same hash as content_version, so it covers the request as well as the property: your sales channel, language_code, include, max_media_per_entity and media formats all shape the content it is a hash of. Two callers holding the same property will hold different tokens if they asked different questions.

Treat it as bytes. It is not a timestamp, not a hash you should reproduce, and its format may change without notice — a token we no longer recognise simply yields a full response, never an error.

string

Example

{
"properties": [
{
"status": "CONTENT_STATUS_UNSPECIFIED",
"includedScopes": [
"CONTENT_SCOPE_UNSPECIFIED"
],
"property": {
"images": [
{
"kind": "MULTIMEDIA_KIND_UNSPECIFIED",
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"videos": [
{
"kind": "MULTIMEDIA_KIND_UNSPECIFIED",
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
]
},
"details": {
"lifestyleTypes": [
"LIFESTYLE_TYPE_UNSPECIFIED"
]
},
"restaurants": [
{
"multimedias": [
{
"kind": "MULTIMEDIA_KIND_UNSPECIFIED",
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"spas": [
{
"multimedias": [
{
"kind": "MULTIMEDIA_KIND_UNSPECIFIED",
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"meetingRooms": [
{
"multimedias": [
{
"kind": "MULTIMEDIA_KIND_UNSPECIFIED",
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"activities": [
{
"multimedias": [
{
"kind": "MULTIMEDIA_KIND_UNSPECIFIED",
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"attractions": [
{
"multimedias": [
{
"kind": "MULTIMEDIA_KIND_UNSPECIFIED",
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"places": [
{
"multimedias": [
{
"kind": "MULTIMEDIA_KIND_UNSPECIFIED",
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"roomTypes": [
{
"multimedias": [
{
"kind": "MULTIMEDIA_KIND_UNSPECIFIED",
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
],
"bedConfigurations": [
{
"bedrooms": [
{
"type": "BEDROOM_TYPE_UNSPECIFIED"
}
]
}
],
"roomGender": "ROOM_GENDER_UNSPECIFIED"
}
],
"addOns": [
{
"multimedias": [
{
"kind": "MULTIMEDIA_KIND_UNSPECIFIED",
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
]
}
]
}
]
}