Extras
Extras are upsell items that can be added to bookings and unit items
To use this capability, add octo/extras to your Octo-Capabilities header.
Extras are upsell items that can be configured either on the booking (option-level) or per unit item (unit-level). An extra might be a lunch package, fast track entrance, souvenir photo, or another optional add-on.
Product Extras
This capability extends product routes documented in Products:
GET /productsGET /products/{productId}
Available extras are returned in the product response as:
option.extras[]for booking-level extrasunit.extras[]for unit-level extras
When combined with octo/pricing and octo/content, extra objects also include pricing and content fields.
Extra IDs are returned as extra_<uuid> in responses. For request payloads, both extra_<uuid> and raw UUID values are accepted.
For item-based products, item objects still include extras, but it is always an empty array.
Extra Availability
This capability extends availability routes documented in Availability:
POST /availabilityPOST /availability/calendarPOST /availability/batchPOST /availability/calendar/batch
Extras do not require availability by themselves, but you can include extra quantities in availability queries to calculate total pricing.
For the normal case, availability requests use extras[] items with:
idquantity
If an extra quantity exceeds configured limits, the API responds with:
EXTRAS_QTY_LIMITfor booking-level extrasEXTRAS_UNIT_QTY_LIMITfor unit-level extras
When used with octo/pricing, availability pricing includes both extra pricing breakdowns and totals.
extraPricingFrom is used instead of extraPricing on "from" payloads.
Custom Retail Extras
A small number of extras may use reseller-supplied pricing. These extras are identified by customRetail: true on the extra object.
For custom retail extras:
include
retailin minor units on availabilityextras[]include
retailin minor units on bookingextraItems[]use
customRetailOptionsas suggested values if providedenforce
restrictions.minCustomRetailandrestrictions.maxCustomRetail
If a custom retail extra is used incorrectly, the API responds with:
EXTRAS_RETAIL_REQUIREDEXTRAS_RETAIL_BELOW_MINIMUMEXTRAS_RETAIL_ABOVE_MAXIMUM
When octo/pricing is also enabled and a currency is selected, custom retail amounts are returned in that currency's minor units.
Booking Reservation
This capability extends booking write routes documented in Bookings:
POST /bookingsPATCH /bookings/{uuid}
Use extraItems[] to reserve extras on bookings:
booking-level extras: set
extraItems[]on the booking objectunit-level extras: set
extraItems[]inside eachunitItems[]object
When extraItems is present it must be an array.
For the normal case, each extraItems[] object contains:
extraIdoptional
uuidoptional
resellerReference
Send one extraItems[] object per reserved extra. If the same extra is reserved multiple times, repeat the same extraId in multiple array entries.
For custom retail extras, include retail on each extraItems[] object.
Booking and unit item responses both include extraItems[] with the same object schema.
When using the octo/pricing capability, booking and unit-item pricing totals include the sum of attached extra items. For purchase unit items, extraItems is always an empty array.
Schema Additions (JSON)
These are additive fragments showing only fields introduced by this capability.
Option
OptionUnit
UnitOption (Custom Retail Extra)
Option (Custom Retail Extra)AvailabilityRequest
AvailabilityRequestThe same extras[] selector fragment also applies to AvailabilityCalendarRequest, AvailabilityBatchRequest, and AvailabilityCalendarBatchRequest.
AvailabilityRequest (Custom Retail Extra)
AvailabilityRequest (Custom Retail Extra)BookingWriteRequest
BookingWriteRequestBookingWriteRequest (Custom Retail Extra)
BookingWriteRequest (Custom Retail Extra)BookingUnitItemWriteRequest
BookingUnitItemWriteRequestBooking
BookingBooking (Custom Retail Extra)
Booking (Custom Retail Extra)BookingUnitItem
BookingUnitItemLast updated