Skip to content

Patch add-on eligibility

PATCH
/api/managing-entity/{managingEntityIdentifier}/extranet/add-on/{addOnIdentifier}/eligibility
curl --request PATCH \
--url https://api.wink.travel/api/managing-entity/d5b8a3c2-9e6f-4a1b-8d34-7c2e1f0a5b69/extranet/add-on/a3f7c2e1-8b4d-4c7a-a1e2-5f0b6d9e2c84/eligibility \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Wink-Version: 2.0' \
--data '{ "ratePlanIds": [ "example" ], "roomTypeIds": [ "example" ] }'

Incrementally updates only the eligibility section (room-type and rate-plan availability restrictions; empty means available to all) of an add-on. Draft-friendly. Send the add-on’s current version as If-Match for optimistic concurrency. Requires INVENTORY:WRITE.

managingEntityIdentifier
required
string format: uuid

Property (managing entity) identifier — the add-on must belong to this property.

Example

d5b8a3c2-9e6f-4a1b-8d34-7c2e1f0a5b69
addOnIdentifier
required
string

Add-on identifier to patch.

Example

a3f7c2e1-8b4d-4c7a-a1e2-5f0b6d9e2c84
If-Match
string

The add-on’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 *.

Wink-Version
string
default: 2.0.0
Allowed values: 2.0

Eligibility section: room-type / rate-plan availability restrictions (empty means available to all).

Media typeapplication/json

Request payload for patching the eligibility section of an add-on.

object
ratePlanIds

Rate plan identifiers this add-on is restricted to. EMPTY MEANS AVAILABLE TO ALL rate plans.

Array<string>
roomTypeIds

Room type identifiers this add-on is restricted to. EMPTY MEANS AVAILABLE TO ALL room types.

Array<string>

Example generated

{
"ratePlanIds": [
"example"
],
"roomTypeIds": [
"example"
]
}

Add-on eligibility patched successfully.

Media typeapplication/json

Lightweight representation of an add-on for use in search results and booking flows

object
active
required

Modify add-on availability with this flag.

boolean
default: true
applicableEnd

End month and day or date for which the add-on is available (seasonal availability).

string format: date
applicableStart

Start month and day or date for which the add-on is available (seasonal availability).

string format: date
basePrice

Base price of booking this add-on.

object
amount
required

Monetary amount value

number
currency
required

ISO 4217 currency code

string
>= 1 characters /^[A-Z]{3}$/
category

Level 1 taxonomy: property-level (ADD_ON) or a specific venue type. Null is treated as ADD_ON.

string | null
Allowed values: GUEST_ROOM ADD_ON MEETING_ROOM RESTAURANT SPA ATTRACTION PLACE ACTIVITY
categoryItemIds

Level 2 taxonomy: the ids of the specific venues of the category this add-on belongs to. EMPTY MEANS ALL items of the category. Only meaningful when category is venue-scoped.

Array<string> | null
closes

Closing time of the add-on (if applicable). Leave empty if always available.

string
commissionable
required

Indicate whether sales channels receive commission for selling this add-on.

boolean
default: true
createdDate

Datetime this record was first created

string | null format: date-time
dateRanges

Optional list of date ranges restricting add-on availability to specific periods. Empty means available on every date.

Array<object>
object
endDate
required

Retrieve data range ending with and including this end date

string format: date
startDate
required

Retrieve data range starting with and including this start date

string format: date
daysOfWeek

Indicates which days this add-on is open.

object
disabled

Convenience property to quickly determine if this existing object has any active days enabled.

boolean
fri

Set to true to enable Friday.

boolean
mon

Set to true to enable Monday.

boolean
sat

Set to true to enable Saturday.

boolean
sun

Set to true to enable Sunday.

boolean
thu

Set to true to enable Thursday.

boolean
tue

Set to true to enable Tuesday.

boolean
wed

Set to true to enable Wednesday.

boolean
descriptions

Localized descriptions describing this add-on.

Array<object>

Foundation class for storing multi-language content (names and descriptions) with content change detection throughout the Wink Platform.

object
creator

Whether it was user or system generated.

string
default: USER
Allowed values: SYSTEM USER
description
required

Longer text description

string
>= 1 characters <= 2147483647 characters
hashMismatch
boolean
language
required

Indicate which language this description is written in.

string
default: en >= 2 characters <= 2 characters /^[a-z]{2}(-[A-Z]{2})?$/
md5ContentHash

The md5 hash of the name, description and language.

string
name
required

Use as title or short text description

string
discountedPrice

If this add-on is sold at a discount, the discounted selling price.

object
amount
required

Monetary amount value

number
currency
required

ISO 4217 currency code

string
>= 1 characters /^[A-Z]{3}$/
featuredInd
required

Indicates whether this add-on is featured.

boolean
hotelIdentifier
required

Hotel identifier.

string format: uuid
>= 1 characters
id
required

Unique identifier for this record.

string format: uuid
>= 1 characters
lastUpdate

Datetime this record was last updated

string | null format: date-time
mandatory
required

Make this add-on mandatory for all guests by enabling this flag.

boolean
maxPax

Maximum group size this add-on can be booked for.

integer format: int32
minPax

Minimum group size this add-on can be booked for.

integer format: int32
multimedias

List of images / videos of this add-on.

Array<object>

Multimedia that contains less information than Multimedia object

object
angle

Media angle

string
attribution

Whether image has attribution properties

Array<object>
object
name
required

Name of contributor

string
>= 1 characters
url

URL to contributor

string format: uri
category

Supported OTA specification PIC code. See OTA geoname data

string
descriptions

Localized media captions to give user some context about where this media was taken.

Array<object>

Foundation class for storing multi-language content (names and descriptions) with content change detection throughout the Wink Platform.

object
creator

Whether it was user or system generated.

string
default: USER
Allowed values: SYSTEM USER
description
required

Longer text description

string
>= 1 characters <= 2147483647 characters
hashMismatch
boolean
language
required

Indicate which language this description is written in.

string
default: en >= 2 characters <= 2 characters /^[a-z]{2}(-[A-Z]{2})?$/
md5ContentHash

The md5 hash of the name, description and language.

string
name
required

Use as title or short text description

string
height
required

Media height in pixels.

integer format: int32
>= 1
identifier
required

Use this identifier to communicate with Cloudinary.

string
>= 1 characters
isLandscape

True if media width is greater or equal to height

boolean
lifestyleType

Associate this media with a specific lifestyle type. A user searching and filtering inventory based on lifestyles can be shown relevant media first.

string
Allowed values: 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
multimediaIdentifier
required

Document identifier

string format: uuid
>= 1 characters
published

Instead of deleting the media, choose to un-publish it instead for later re-use. Could be you keep seasonal images of the property.

boolean
sort
required

Sort allows you to control how you want to sort this record in a list of media records.

integer format: int32
default: 999
source
required

Currently ONLY using Cloudinary to store all image / video assets.

string
default: CLOUDINARY
Allowed values: YOUTUBE CLOUDINARY
type
required

Whether Cloudinary media is a VIDEO or IMAGE.

string
Allowed values: IMAGE VIDEO AUDIO RAW
width
required

Media width in pixels.

integer format: int32
>= 1
name
required

Internal name of the add-on.

string
>= 1 characters
opens

Opening time of the add-on (if applicable). Leave empty if always available.

string
pricingType

How this add-on should be priced.

string
Allowed values: PER_STAY PER_DAY PER_NIGHT PER_USE PER_HOUR PER_PERSON PER_PERSON_PER_NIGHT PER_PERSON_PER_HOUR PER_ADULT PER_ADULT_PER_NIGHT PER_ADULT_PER_HOUR PER_CHILD PER_CHILD_PER_NIGHT PER_CHILD_PER_HOUR
publishStatus

Publish lifecycle state: DRAFT (incomplete, not announced) or PUBLISHED (complete/live).

string
Allowed values: DRAFT PUBLISHED
ratePlanIds

Rate plan identifiers this add-on is restricted to. EMPTY MEANS AVAILABLE TO ALL rate plans.

Array<string>
requiresTimeSlot
required

Whether this add-on is an appointment that must be booked into a specific time slot. Independent of pricingType.

boolean
roomTypeIds

Room type identifiers this add-on is restricted to. EMPTY MEANS AVAILABLE TO ALL room types.

Array<string>
salesChannelIds

Sales channels this add-on is offered on. Empty means offered on none.

Array<string>
sort

Use this property to sort an add-on in a list of add-ons.

integer format: int32
version

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.

integer | null format: int64

Example

{
"active": true,
"applicableEnd": "1970-12-1",
"applicableStart": "1970-1-1",
"basePrice": {
"amount": 1250,
"currency": "USD"
},
"category": "ADD_ON",
"closes": "17:30",
"commissionable": true,
"createdDate": "2026-01-14T09:30:00",
"dateRanges": [
{
"endDate": "2020-12-31",
"startDate": "2020-12-24"
}
],
"daysOfWeek": {
"disabled": true,
"fri": true,
"mon": true,
"sat": true,
"sun": true,
"thu": true,
"tue": true,
"wed": true
},
"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"
}
],
"discountedPrice": {
"amount": 1250,
"currency": "USD"
},
"featuredInd": false,
"hotelIdentifier": "e2c7b4d3-1a8f-4e9c-b5d6-3a9f0e7c2b18",
"id": "b7e4c1a2-3f5d-4e8a-9c21-6f0b5d8e3a47",
"lastUpdate": "2026-02-03T16:45:12",
"mandatory": true,
"maxPax": 4,
"minPax": 1,
"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": "Airport Pickup",
"opens": "09:00",
"pricingType": "PER_USE",
"publishStatus": "PUBLISHED",
"requiresTimeSlot": false,
"sort": 1,
"version": 3
}

Bad Request — missing or invalid request parameter or body

Media typeapplication/problem+json
object
detail
string
instance
string format: uri
properties
object
key
additional properties
status
integer format: int32
title
string
type
string format: uri

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

Media typeapplication/problem+json
object
detail
string
instance
string format: uri
properties
object
key
additional properties
status
integer format: int32
title
string
type
string format: uri

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

Media typeapplication/problem+json
object
detail
string
instance
string format: uri
properties
object
key
additional properties
status
integer format: int32
title
string
type
string format: uri

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

Media typeapplication/problem+json
object
detail
string
instance
string format: uri
properties
object
key
additional properties
status
integer format: int32
title
string
type
string format: uri

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

Media typeapplication/problem+json
object
detail
string
instance
string format: uri
properties
object
key
additional properties
status
integer format: int32
title
string
type
string format: uri

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

Media typeapplication/problem+json
object
detail
string
instance
string format: uri
properties
object
key
additional properties
status
integer format: int32
title
string
type
string format: uri

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

Media typeapplication/problem+json
object
detail
string
instance
string format: uri
properties
object
key
additional properties
status
integer format: int32
title
string
type
string format: uri

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

Media typeapplication/problem+json
object
detail
string
instance
string format: uri
properties
object
key
additional properties
status
integer format: int32
title
string
type
string format: uri

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

Media typeapplication/problem+json
object
detail
string
instance
string format: uri
properties
object
key
additional properties
status
integer format: int32
title
string
type
string format: uri

Example generated

{
"detail": "example",
"instance": "https://example.com",
"properties": {
"additionalProperty": "example"
},
"status": 1,
"title": "example",
"type": "https://example.com"
}