githubEdit

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 /products

  • GET /products/{productId}

Available extras are returned in the product response as:

  • option.extras[] for booking-level extras

  • unit.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 /availability

  • POST /availability/calendar

  • POST /availability/batch

  • POST /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:

  • id

  • quantity

If an extra quantity exceeds configured limits, the API responds with:

  • EXTRAS_QTY_LIMIT for booking-level extras

  • EXTRAS_UNIT_QTY_LIMIT for 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 retail in minor units on availability extras[]

  • include retail in minor units on booking extraItems[]

  • use customRetailOptions as suggested values if provided

  • enforce restrictions.minCustomRetail and restrictions.maxCustomRetail

If a custom retail extra is used incorrectly, the API responds with:

  • EXTRAS_RETAIL_REQUIRED

  • EXTRAS_RETAIL_BELOW_MINIMUM

  • EXTRAS_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 /bookings

  • PATCH /bookings/{uuid}

Use extraItems[] to reserve extras on bookings:

  • booking-level extras: set extraItems[] on the booking object

  • unit-level extras: set extraItems[] inside each unitItems[] object

When extraItems is present it must be an array.

For the normal case, each extraItems[] object contains:

  • extraId

  • optional uuid

  • optional 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

Unit

Option (Custom Retail Extra)

AvailabilityRequest

The same extras[] selector fragment also applies to AvailabilityCalendarRequest, AvailabilityBatchRequest, and AvailabilityCalendarBatchRequest.

AvailabilityRequest (Custom Retail Extra)

BookingWriteRequest

BookingWriteRequest (Custom Retail Extra)

BookingUnitItemWriteRequest

Booking

Booking (Custom Retail Extra)

BookingUnitItem

Last updated