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_ADD_ON CONTENT_SCOPE_CANCELLATION_POLICY CONTENT_SCOPE_PERK CONTENT_SCOPE_ROOM_TYPE CONTENT_SCOPE_RATE_PLAN
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 property’s version 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

Version covering ALL static content for this property. The SAME value the pricing endpoints return on a search result as last_update. Store it with your cached copy; re-fetch when a search shows a different one. Present on CONTENT_STATUS_OK and CONTENT_STATUS_NOT_MODIFIED.

This is about the PROPERTY, so it is comparable across surfaces — but for that same reason it says nothing about your channel, language or include set. 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_ADD_ON CONTENT_SCOPE_CANCELLATION_POLICY CONTENT_SCOPE_PERK CONTENT_SCOPE_ROOM_TYPE CONTENT_SCOPE_RATE_PLAN
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 media_id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
mediaId

Stable identifier for this asset. Use this as your cache key.

string
entityId

Identifier of the inventory item this asset belongs to (the property, a guest room, and so on). Named entity_id rather than identifier to match the *_id convention the rest of this surface uses, and because “identifier” said nothing about WHOSE identifier it is.

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 media_id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
mediaId

Stable identifier for this asset. Use this as your cache key.

string
entityId

Identifier of the inventory item this asset belongs to (the property, a guest room, and so on). Named entity_id rather than identifier to match the *_id convention the rest of this surface uses, and because “identifier” said nothing about WHOSE identifier it is.

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 and contacts. 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
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.

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 media_id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
mediaId

Stable identifier for this asset. Use this as your cache key.

string
entityId

Identifier of the inventory item this asset belongs to (the property, a guest room, and so on). Named entity_id rather than identifier to match the *_id convention the rest of this surface uses, and because “identifier” said nothing about WHOSE identifier it is.

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>
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.

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 media_id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
mediaId

Stable identifier for this asset. Use this as your cache key.

string
entityId

Identifier of the inventory item this asset belongs to (the property, a guest room, and so on). Named entity_id rather than identifier to match the *_id convention the rest of this surface uses, and because “identifier” said nothing about WHOSE identifier it is.

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>
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.

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 media_id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
mediaId

Stable identifier for this asset. Use this as your cache key.

string
entityId

Identifier of the inventory item this asset belongs to (the property, a guest room, and so on). Named entity_id rather than identifier to match the *_id convention the rest of this surface uses, and because “identifier” said nothing about WHOSE identifier it is.

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>
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.

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 media_id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
mediaId

Stable identifier for this asset. Use this as your cache key.

string
entityId

Identifier of the inventory item this asset belongs to (the property, a guest room, and so on). Named entity_id rather than identifier to match the *_id convention the rest of this surface uses, and because “identifier” said nothing about WHOSE identifier it is.

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>
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.

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 media_id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
mediaId

Stable identifier for this asset. Use this as your cache key.

string
entityId

Identifier of the inventory item this asset belongs to (the property, a guest room, and so on). Named entity_id rather than identifier to match the *_id convention the rest of this surface uses, and because “identifier” said nothing about WHOSE identifier it is.

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>
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.

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 media_id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
mediaId

Stable identifier for this asset. Use this as your cache key.

string
entityId

Identifier of the inventory item this asset belongs to (the property, a guest room, and so on). Named entity_id rather than identifier to match the *_id convention the rest of this surface uses, and because “identifier” said nothing about WHOSE identifier it is.

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>
addOns

Purchasable add-ons. Present with CONTENT_SCOPE_ADD_ON.

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.

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 media_id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
mediaId

Stable identifier for this asset. Use this as your cache key.

string
entityId

Identifier of the inventory item this asset belongs to (the property, a guest room, and so on). Named entity_id rather than identifier to match the *_id convention the rest of this surface uses, and because “identifier” said nothing about WHOSE identifier it is.

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>
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 the PRICING surfaces return a deduplicated dictionary of these alongside their rates: RoomRate.perk_ids would otherwise be unresolvable without a second call, and 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.

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 media_id. It is stable for the life of the asset; URLs are not — they carry transformation and delivery parameters that change without notice.

object
mediaId

Stable identifier for this asset. Use this as your cache key.

string
entityId

Identifier of the inventory item this asset belongs to (the property, a guest room, and so on). Named entity_id rather than identifier to match the *_id convention the rest of this surface uses, and because “identifier” said nothing about WHOSE identifier it is.

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
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
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.

Unlike content_version, this covers the request as well as the property: your sales channel, language_code, include and max_media_per_entity all feed it. Two callers holding the same property at the same version will hold different tokens if they asked different questions, which is why the token is per-response and the version is per-property.

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"
}
],
"addOns": [
{
"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"
}
]
}
]
}
]
}
]
}