Skip to content

List media across multiple hotels

POST
/wink.partner.v1.Media/ListMedia
curl --request POST \
--url https://partner.wink.travel/wink.partner.v1.Media/ListMedia \
--header 'Content-Type: application/json' \
--data '{ "managingEntityIdentifier": "example", "hotelIdentifiers": [ "example" ], "mediaTypes": [ "MEDIA_TYPE_UNSPECIFIED" ], "inventoryTypes": [ "MEDIA_INVENTORY_SCOPE_UNSPECIFIED" ], "inventoryIdentifier": "example", "categories": [ "example" ], "language": "example", "perHotelLimit": "example" }'

List media across multiple hotels

Batch gallery retrieval across up to 20 hotels in one call — built for a nightly or hourly sync job rather than a page render. A bad hotel identifier never fails the whole batch: each entry carries its own status (OK, NOT_IN_CHANNEL, NOT_FOUND) instead.

Billed 1 unit per hotel whose media is returned — that is, per entry with status OK. A NOT_IN_CHANNEL or NOT_FOUND entry costs nothing.

Media typeapplication/json
object
managingEntityIdentifier

Your Wink account identifier. Every call is scoped to one account, and your token must hold INVENTORY:READ on it.

hotelIdentifiers

Hotels to retrieve media for, 1 to 20 entries. Required.

Array
mediaTypes

Restrict results to these media types, applied to every hotel in the batch. Leave empty for both images and videos.

Array<string>
Allowed values: MEDIA_TYPE_UNSPECIFIED IMAGE VIDEO AUDIO RAW
inventoryTypes

Restrict results to these galleries, applied to every hotel in the batch. Leave empty for every gallery.

Array<string>
Allowed values: MEDIA_INVENTORY_SCOPE_UNSPECIFIED MEDIA_PROPERTY MEDIA_GUEST_ROOM MEDIA_RESTAURANT MEDIA_SPA MEDIA_MEETING_ROOM MEDIA_ADD_ON
inventoryIdentifier

Restrict results to a single inventory item’s gallery, applied to every hotel in the batch.

categories

Restrict results to these OTA PIC photo-category codes, applied to every hotel in the batch.

Array
language

Language to prune captions to, applied to every hotel in the batch. Falls back to English.

perHotelLimit

Maximum assets returned per hotel, max 200. Defaults to 50 when unset (0).

The RPC completed with gRPC status OK.

Media typeapplication/json
object
hotels

One entry per hotel identifier in the request, same order. Always as many entries as you requested — a batch never fails as a whole for one bad hotel identifier.

Array<object>

One hotel’s outcome within a batch ListMedia response.

object
hotelIdentifier

Hotel identifier, echoed from the request.

hotelName

Hotel name. Unset unless status is OK.

status

Whether this hotel’s media was retrieved, and if not, why.

string
Allowed values: HOTEL_MEDIA_STATUS_UNSPECIFIED OK NOT_IN_CHANNEL NOT_FOUND
totalAssets

Total published assets matching the filter, before per_hotel_limit truncation. 0 unless status is OK.

assets

Media assets for this hotel, truncated to the request’s per_hotel_limit. Empty unless status is OK.

Array<object>

One published media asset (image or video) belonging to a hotel or one of its bookable inventory items.

object
mediaIdentifier

Stable media identifier — key your integration on this, not on any URL. It survives the platform’s media reorganization, which rewrites the underlying storage path (and therefore every delivery URL) without changing this identifier.

hotelIdentifier

Hotel this asset belongs to.

inventoryType

Which gallery this asset belongs to.

string
Allowed values: MEDIA_INVENTORY_SCOPE_UNSPECIFIED MEDIA_PROPERTY MEDIA_GUEST_ROOM MEDIA_RESTAURANT MEDIA_SPA MEDIA_MEETING_ROOM MEDIA_ADD_ON
inventoryIdentifier

Identifier of the owning inventory item (room type, restaurant, spa, meeting room, add-on). Unset when inventory_type is PROPERTY.

inventoryName

Display name of the owning inventory item, or the hotel name when inventory_type is PROPERTY.

mediaType

Whether this asset is an image or video.

string
Allowed values: MEDIA_TYPE_UNSPECIFIED IMAGE VIDEO AUDIO RAW
source

Hosting platform this asset is served from.

string
Allowed values: MEDIA_SOURCE_UNSPECIFIED YOUTUBE CLOUDINARY
category

OTA PIC photo-category code.

sort

Display order within the owning gallery. Lower sorts first.

width

Media width in pixels. 0 when unavailable (e.g. YouTube).

height

Media height in pixels. 0 when unavailable (e.g. YouTube).

caption

Caption/alt text pruned to the requested language, falling back to English. Unset when no description is set.

attribution

Photographer/source attribution credits, if any.

Array<object>

Photographer/source attribution for one media asset.

object
url

URL to the contributor’s profile, if any.

name

Name of the contributor. Required whenever an attribution entry is present.

lifestyleType

Lifestyle association for this asset, if any. LIFESTYLE_TYPE_UNSPECIFIED means none is set — this field is genuinely optional, unlike a request-side type selector.

string
Allowed values: LIFESTYLE_TYPE_UNSPECIFIED LIFESTYLE_HEALTH_FITNESS LIFESTYLE_RELAX LIFESTYLE_ADULT_ONLY LIFESTYLE_ADVENTURE LIFESTYLE_BUSINESS LIFESTYLE_LGBT LIFESTYLE_SINGLE_PARENT LIFESTYLE_SOLO_FEMALE LIFESTYLE_BEAUTY LIFESTYLE_FOODIE LIFESTYLE_FAMILY LIFESTYLE_ROMANCE LIFESTYLE_COUPLE LIFESTYLE_SOLO LIFESTYLE_BACKPACKER LIFESTYLE_SHOPPING LIFESTYLE_SPORTS LIFESTYLE_MOUNTAIN LIFESTYLE_BEACH LIFESTYLE_CITY LIFESTYLE_COUNTRY LIFESTYLE_CULTURE LIFESTYLE_ECO
urls

Fixed set of ready-to-use delivery-URL variants for this asset.

object
original

IMAGE only: unscaled, best-quality delivery URL.

object
url

Ready-to-use delivery URL for this variant.

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.

format

Delivery format label for this variant.

large

IMAGE only: large variant, max width 1920px.

object
url

Ready-to-use delivery URL for this variant.

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.

format

Delivery format label for this variant.

medium

IMAGE only: medium variant, max width 1024px.

object
url

Ready-to-use delivery URL for this variant.

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.

format

Delivery format label for this variant.

thumbnail

IMAGE or VIDEO (Cloudinary): thumbnail variant, max width 320px. For video this is a jpg frame extracted from the video.

object
url

Ready-to-use delivery URL for this variant.

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.

format

Delivery format label for this variant.

stream

VIDEO (Cloudinary) only: mp4 streaming delivery URL, unscaled.

object
url

Ready-to-use delivery URL for this variant.

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.

format

Delivery format label for this variant.

preview

VIDEO (Cloudinary) only: mp4 preview variant, max width 1280px.

object
url

Ready-to-use delivery URL for this variant.

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.

format

Delivery format label for this variant.

poster

VIDEO (Cloudinary) only: poster frame, a jpg still extracted from the video at medium width.

object
url

Ready-to-use delivery URL for this variant.

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.

format

Delivery format label for this variant.

externalUrl

VIDEO (YouTube) only: pass-through to the YouTube watch URL. Wink generates no variants for externally-hosted media.

Example
{
"hotels": [
{
"status": "HOTEL_MEDIA_STATUS_UNSPECIFIED",
"assets": [
{
"inventoryType": "MEDIA_INVENTORY_SCOPE_UNSPECIFIED",
"mediaType": "MEDIA_TYPE_UNSPECIFIED",
"source": "MEDIA_SOURCE_UNSPECIFIED",
"lifestyleType": "LIFESTYLE_TYPE_UNSPECIFIED"
}
]
}
]
}