Patch configuration
const url = 'https://api.wink.travel/api/managing-entity/d2c8f3a9-4b1e-4c7a-9d3f-5b8a2e6c1d04/studio/transactional-url/7c9a2e5f-3d8b-4a1c-b6e2-8f0d1c4a9b3e/configuration';const options = { method: 'PATCH', headers: { 'Wink-Version': '2.0', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"customizationIdentifier":"8f2d4a9c-1e7b-4f3d-a5c8-9d1b6e2c0a47","facebookAppId":"198273987219","keywords":["luxury"],"name":"The Siam Residences, Bangkok","twitterAccount":"@thesiamresidences"}'};
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/configuration \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Wink-Version: 2.0' \ --data '{ "customizationIdentifier": "8f2d4a9c-1e7b-4f3d-a5c8-9d1b6e2c0a47", "facebookAppId": "198273987219", "keywords": [ "luxury" ], "name": "The Siam Residences, Bangkok", "twitterAccount": "@thesiamresidences" }'Updates only the configuration section (name, customization, keywords, Twitter account, Facebook app id); every other section is left untouched. 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”Configuration section
Request payload for updating the configuration section of a transactional URL.
object
Customization configuration identifier (controls the visual theme and styling); omit to use the owner’s default (primary) customization
Example
8f2d4a9c-1e7b-4f3d-a5c8-9d1b6e2c0a47Facebook App ID for OpenGraph metadata when the link is shared
Example
198273987219Display name for this transactional URL (internal reference)
Example
The Siam Residences, BangkokTwitter account handle for OpenGraph metadata when the link is shared
Example
@thesiamresidencesExample
{ "customizationIdentifier": "8f2d4a9c-1e7b-4f3d-a5c8-9d1b6e2c0a47", "facebookAppId": "198273987219", "keywords": [ "luxury" ], "name": "The Siam Residences, Bangkok", "twitterAccount": "@thesiamresidences"}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"}