Patch multimedia and theme
const url = 'https://api.wink.travel/api/managing-entity/d2c8f3a9-4b1e-4c7a-9d3f-5b8a2e6c1d04/studio/transactional-url/7c9a2e5f-3d8b-4a1c-b6e2-8f0d1c4a9b3e/multimedia-theme';const options = { method: 'PATCH', headers: { 'Wink-Version': '2.0', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"multimedias":[{"angle":null,"attribution":[],"category":"2","descriptions":[{"description":"Elegant lobby of The Siam Residences","language":"en","title":"Lobby Entrance"}],"height":1600,"identifier":"the-siam-residences/lobby-entrance","isLandscape":true,"lifestyleType":null,"multimediaIdentifier":"3c6b1a5d-8e2f-4a0b-9c7d-6e4f0a8b2c51","published":true,"sort":10,"source":"CLOUDINARY","type":"IMAGE","width":2560}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://api.wink.travel/api/managing-entity/d2c8f3a9-4b1e-4c7a-9d3f-5b8a2e6c1d04/studio/transactional-url/7c9a2e5f-3d8b-4a1c-b6e2-8f0d1c4a9b3e/multimedia-theme \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Wink-Version: 2.0' \ --data '{ "multimedias": [ { "angle": null, "attribution": [], "category": "2", "descriptions": [ { "description": "Elegant lobby of The Siam Residences", "language": "en", "title": "Lobby Entrance" } ], "height": 1600, "identifier": "the-siam-residences/lobby-entrance", "isLandscape": true, "lifestyleType": null, "multimediaIdentifier": "3c6b1a5d-8e2f-4a0b-9c7d-6e4f0a8b2c51", "published": true, "sort": 10, "source": "CLOUDINARY", "type": "IMAGE", "width": 2560 } ] }'Replaces only the selected images and the theme (null theme means no theme). Send the link’s current version as If-Match for optimistic concurrency (a stale version is rejected with 409). Requires MARKETING:WRITE.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Managing entity identifier (the owner of the transactional URL)
Example
d2c8f3a9-4b1e-4c7a-9d3f-5b8a2e6c1d04Transactional URL identifier to update
Example
7c9a2e5f-3d8b-4a1c-b6e2-8f0d1c4a9b3eHeader Parameters
Section titled “Header Parameters”The link’s last-seen version, for optimistic concurrency. Optional; a stale value is rejected with 409. Accepts a bare version (3), a quoted entity-tag (“3”), W/“3”, or *.
Request Bodyrequired
Section titled “Request Bodyrequired”Multimedia and theme section
Request payload for updating the multimedia and theme of a transactional URL.
object
Hero images to display on the transactional URL card
object
Media angle
Example
-90Whether image has attribution properties
object
Name of contributor
Example
Samuel AdamsURL to contributor
Example
https://maps.google.com/maps/contrib/111628493169070103594Example
{ "name": "Samuel Adams", "url": "https://maps.google.com/maps/contrib/111628493169070103594"}Localized media captions to give user some context about where this media was taken.
Foundation class for storing multi-language content (names and descriptions) with content change detection throughout the Wink Platform.
object
Whether it was user or system generated.
Example
SYSTEMLonger text description
Example
This is a longer description in the specified language.Indicate which language this description is written in.
Example
enThe md5 hash of the name, description and language.
Example
d41d8cd98f00b204e9800998ecf8427eUse as title or short text description
Example
An example titleExample
{ "creator": "USER", "description": "Spacious suite with floor-to-ceiling windows overlooking the Chao Phraya River, featuring a king-size bed, private balcony, and marble bathroom.", "language": "en", "md5ContentHash": "a3f1c8e2d74b60912a5c3e9b1d7f4e82", "name": "Deluxe River View Suite"}Media height in pixels.
Example
1600Use this identifier to communicate with Cloudinary.
Example
cloudinary-image-1True if media width is greater or equal to height
Example
trueAssociate this media with a specific lifestyle type. A user searching and filtering inventory based on lifestyles can be shown relevant media first.
Example
LIFESTYLE_HEALTH_FITNESSDocument identifier
Example
3c6b1a5d-8e2f-4a0b-9c7d-6e4f0a8b2c51Instead of deleting the media, choose to un-publish it instead for later re-use. Could be you keep seasonal images of the property.
Example
trueSort allows you to control how you want to sort this record in a list of media records.
Example
10Currently ONLY using Cloudinary to store all image / video assets.
Example
CLOUDINARYWhether Cloudinary media is a VIDEO or IMAGE.
Example
IMAGEMedia width in pixels.
Example
2560Example
{ "angle": null, "attribution": [], "category": "2", "descriptions": [ { "description": "Elegant lobby of The Siam Residences", "language": "en", "title": "Lobby Entrance" } ], "height": 1600, "identifier": "the-siam-residences/lobby-entrance", "isLandscape": true, "lifestyleType": null, "multimediaIdentifier": "3c6b1a5d-8e2f-4a0b-9c7d-6e4f0a8b2c51", "published": true, "sort": 10, "source": "CLOUDINARY", "type": "IMAGE", "width": 2560}Visual theme controlling the appearance of the transactional URL’s banner; null for no theme
Example
{ "multimedias": [ { "angle": null, "attribution": [], "category": "2", "descriptions": [ { "description": "Elegant lobby of The Siam Residences", "language": "en", "title": "Lobby Entrance" } ], "height": 1600, "identifier": "the-siam-residences/lobby-entrance", "isLandscape": true, "lifestyleType": null, "multimediaIdentifier": "3c6b1a5d-8e2f-4a0b-9c7d-6e4f0a8b2c51", "published": true, "sort": 10, "source": "CLOUDINARY", "type": "IMAGE", "width": 2560 } ]}Responses
Section titled “Responses”Updated transactional URL
A transactional URL: a hotel link an affiliate shares or embeds as a card
object
When true, renders selected images as an animated GIF (requires at least 2 images)
Animation frame delay in milliseconds (-1 = no animation)
Datetime this record was first created
Customization configuration identifier (controls the visual theme and styling)
Rate plan this link focuses on; requires defaultRoomTypeIdentifier
Room type this link focuses on; null for a hotel-level link
Localized link title and description (one entry per language/locale)
object
Whether it was user or system generated.
Longer text description
Indicate which language this description is written in.
The md5 hash of the name, description and language.
Use as title or short text description
Facebook App ID for OpenGraph metadata when the link is shared
Unique identifier for this record.
Datetime this record was last updated
Hero images to display on the transactional URL card
object
Media angle
Whether image has attribution properties
object
Name of contributor
URL to contributor
Supported OTA specification PIC code. See OTA geoname data
Localized media captions to give user some context about where this media was taken.
Foundation class for storing multi-language content (names and descriptions) with content change detection throughout the Wink Platform.
object
Whether it was user or system generated.
Longer text description
Indicate which language this description is written in.
The md5 hash of the name, description and language.
Use as title or short text description
Media height in pixels.
Use this identifier to communicate with Cloudinary.
True if media width is greater or equal to height
Associate this media with a specific lifestyle type. A user searching and filtering inventory based on lifestyles can be shown relevant media first.
Document identifier
Instead of deleting the media, choose to un-publish it instead for later re-use. Could be you keep seasonal images of the property.
Sort allows you to control how you want to sort this record in a list of media records.
Currently ONLY using Cloudinary to store all image / video assets.
Whether Cloudinary media is a VIDEO or IMAGE.
Media width in pixels.
Display name for this transactional URL (internal reference, not shown to end users)
Managing entity (owner) of this transactional URL
How this link was created. MANAGED_SOCIAL links are generated for social posts and cannot be removed
Current status of this transactional URL (ACTIVE, INACTIVE or REMOVED)
Property or supplier identifier (the entity whose inventory is promoted)
Visual theme controlling the appearance of the transactional URL’s banner
Twitter account handle for OpenGraph metadata when the link is shared
Unique identifier that generates the transactional URL slug (e.g., share.wink.travel/HBDG87f2)
User (account) identifier; absent for links migrated from the retired sellable item entity, which has no creator user
Optimistic-locking version. Echo this value back as an If-Match request header on a conditional update; the server responds 409 if the record changed in the meantime. Null when this projection has no backing versioned document, in which case no conditional update is possible.
Example
{ "animate": false, "animateDelay": 500, "createdDate": "2026-01-14T09:30:00", "customizationIdentifier": "8f2d4a9c-1e7b-4f3d-a5c8-9d1b6e2c0a47", "defaultRatePlanIdentifier": "9a3c6e1d-2b8f-4d7a-b5e0-4c1f8a2d6e93", "defaultRoomTypeIdentifier": "5b7e2c1a-9d4f-4e8b-a3c6-1f0d2e9b8a74", "descriptions": [ { "creator": "USER", "description": "Spacious suite with floor-to-ceiling windows overlooking the Chao Phraya River, featuring a king-size bed, private balcony, and marble bathroom.", "language": "en", "md5ContentHash": "a3f1c8e2d74b60912a5c3e9b1d7f4e82", "name": "Deluxe River View Suite" } ], "facebookAppId": "198273987219", "id": "b7e4c1a2-3f5d-4e8a-9c21-6f0b5d8e3a47", "keywords": [ "luxury" ], "lastUpdate": "2026-02-03T16:45:12", "multimedias": [ { "angle": null, "attribution": [], "category": "2", "descriptions": [ { "description": "Elegant lobby of The Siam Residences", "language": "en", "title": "Lobby Entrance" } ], "height": 1600, "identifier": "the-siam-residences/lobby-entrance", "isLandscape": true, "lifestyleType": null, "multimediaIdentifier": "3c6b1a5d-8e2f-4a0b-9c7d-6e4f0a8b2c51", "published": true, "sort": 10, "source": "CLOUDINARY", "type": "IMAGE", "width": 2560 } ], "name": "The Siam Residences, Bangkok", "ownerIdentifier": "d2c8f3a9-4b1e-4c7a-9d3f-5b8a2e6c1d04", "source": "USER", "supplierIdentifier": "7c9a2e5f-3d8b-4a1c-b6e2-8f0d1c4a9b3e", "twitterAccount": "@thesiamresidences", "uniqueId": "HBDG87f2", "userIdentifier": "4a1d7c2e-5f9b-4e3a-b8c1-6d2f8a0e3c5b", "version": 3}Bad Request — missing or invalid request parameter or body
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Unauthorized — authentication is required or the session has expired
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Forbidden — authenticated but lacking the required permission or scope
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Not Found — the requested resource does not exist
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Method Not Allowed — the HTTP verb is not supported on this endpoint
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Conflict — the resource was modified by someone else since you read it; re-read it and retry with the new version
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Unsupported Media Type — use application/json
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Internal Server Error — an unexpected failure occurred on the server
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}Service Unavailable — a downstream dependency is unreachable
object
object
Example generated
{ "detail": "example", "instance": "https://example.com", "properties": { "additionalProperty": "example" }, "status": 1, "title": "example", "type": "https://example.com"}