Skip to main content

Update Booking Option

Rename a way of booking, change how it is priced, or change the party size it takes.

Endpointโ€‹

PATCH /v1/experiences/{id}/booking-options/{optionId}

Authenticationโ€‹

Requires an API key with the experiences:write scope. There is no separate booking-options scope.

Path Parametersโ€‹

ParameterTypeDescription
idintegerExperience ID
optionIdintegerBooking option ID

Request Bodyโ€‹

Every field is optional. Only send what you want to change.

FieldTypeDescription
namestringWhat the shop calls this way of booking. 1 to 120 characters
price_structurestringparticipant (a price per person) or group (one price for the whole party)
exclusivebooleantrue when booking this takes the whole session
min_peopleintegerSmallest party this option takes, at least 1. Send null to clear it
max_peopleintegerLargest party this option takes, at least 1. Send null to clear it
default_groups_capacityintegerHow many groups one session sells under this option, at least 1. Send null to go back to the experience's own number
unit_namestringWhat each group is under this option, for example canoe. Up to 40 characters. Send null to follow the experience's unit_name again
unit_name_pluralstringThe plural, when the worked-out one is wrong. Up to 40 characters
duration_valuenumberThis option's own length, greater than zero
duration_unitstringminutes, hours or days

An empty body returns the option unchanged.

To move an option up or down the list, use Reorder booking options. To stop offering it, use Archive or restore.

Example Requestโ€‹

curl -X PATCH "https://app.equipdash.com/api/v1/experiences/1234567/booking-options/4322" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Private session (up to 6)",
"max_people": 6
}'

Responseโ€‹

Success (200 OK)โ€‹

{
"data": {
"id": 4322,
"experience_id": 1234567,
"name": "Private session (up to 6)",
"price_structure": "group",
"exclusive": true,
"unit_name": null,
"unit_name_plural": null,
"min_people": 1,
"max_people": 6,
"default_groups_capacity": null,
"duration": {
"value": 90,
"unit": "minutes"
},
"sort_order": 1,
"archived": false,
"archived_at": null,
"created_at": "2026-01-15T10:05:00+00:00",
"updated_at": "2026-02-01T10:00:00+00:00"
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-02-01T10:00:00+00:00"
}
}

Errorsโ€‹

StatusCodeDescription
401authentication_requiredNo API key provided
401invalid_api_keyInvalid API key
403insufficient_scopeAPI key lacks experiences:write scope
403forbiddenExperience belongs to a different supplier
404resource_not_foundExperience does not exist, or the option does not belong to it
422validation_errorInvalid request body

Validation Rulesโ€‹

The rules match Create booking option, and they are checked against the option as it will be after your change. Raising min_people past the max_people already on the option is refused even when you only sent one of them.

Messages from those rules come back under the field name in error.details, whatever the field actually at fault was.

Notesโ€‹

  • Renaming an option never rewrites what an existing booking says. Each booking line keeps the label as it read when the booking was taken.