githubEdit

Promotions / Offers

Adds the ability to apply offer codes, automatic public offers, comparisons, and combination discounts

To use this capability, add octo/offers to your Octo-Capabilities header.

This capability depends on octo/pricing.

Related capabilities:

  • octo/cart is required for offerCombinations on order responses.

  • octo/gifts is required for gift offer endpoints/fields.

  • octo/extras is required for offer fields on extraItems.

All routes below are under the /octo prefix.

The offers capability lets you apply promotion codes to bookings/gifts, automatically apply eligible public offers, return upsell comparisons, and return discounted product combinations.

Combination Product Discovery

This capability extends product routes documented in Products:

  • GET /products

  • GET /products/{productId}

When offerCode is a combination code (combination_<...>), product scope is expanded to include the combination target product, so you can fetch product/options/availability for that target using the same code.

Offer Object

The same offer object is used in:

  • offers[] and offer on availability responses

  • offer and offers[] on booking/gift/extra-item responses

  • offer in offerCombinations[]

List Supplier Offers

get

List supplier promotions serialized as offer objects.

Responses
chevron-right
200

Successful response

application/json

From capability octo/offers.

idstring · uuidRequired

Unique identifier for this resource.

Example: 89fe0192-ddcd-430a-b285-e1396a4725d2
tagsstring[]Optional

List of tag values.

Example: ["vip","partner"]
titlestringOptional

Public title of the offer.

Example: Summer Promotion
labelstringOptional

Discount label shown to customers.

Example: Save 20%
codestringOptional

Offer code identifier.

Example: SUMMER25
descriptionstring · nullableOptional

Offer description shown to the customer.

Example: 20% off selected departures this month.
netDiscountstring · enum · nullableOptional

How the discount is applied to net pricing.

Example: FULLPossible values:
usablebooleanOptional

Whether the offer is currently usable in the given context.

Example: true
unusableReasonstring · nullableOptional

Reason the offer cannot be applied in the current context.

Example: Offer is not valid for the selected date.
get
/offers
200

Successful response

Pricing Field Added By Offers

Offers adds offerDiscount to pricing fragments emitted through pricing serializers, including:

  • availability pricing / pricingFrom

  • availability unitPricing[] / unitPricingFrom[]

  • booking/gift/order pricing

  • unit item / purchase item / extra item pricing

Get Available Offers

This capability extends availability routes documented in Availability:

  • POST /availability

  • POST /availability/calendar

  • POST /availability/batch

  • POST /availability/calendar/batch

Response Additions Per Availability Object

If no offerCode is sent, new booking/gift flows auto-select the first eligible public offer.

Discount Booking

Offer code can be sent on these booking write routes:

  • POST /bookings

  • PATCH /bookings/{uuid}

  • POST /bookings/{uuid}/confirm

Base booking schema: Bookings.

It can also be sent inside order payloads on:

  • bookings[].offerCode in POST /orders, PATCH /orders/:orderId, PATCH /orders/:orderId/preview, POST /orders/:orderId/confirm

Booking Response Additions

These fields are present on any serialized booking response, including:

  • GET /bookings/{uuid}

  • GET /bookings

  • booking write responses

  • bookings embedded in serialized order responses

Product Comparisons

Comparisons are exposed on serialized booking objects from base booking routes (see Bookings).

offerComparisons[] is returned on booking objects (including booking responses embedded in order responses).

Comparisons are returned only for persisted, active, standalone, non-combination bookings; otherwise the field is [].

Product Combinations

Combinations are exposed on serialized order objects from base cart routes (see Multi-Booking Cart).

Combinations are returned on order objects as offerCombinations[] (requires octo/cart). They are also present on other order responses that serialize an order (POST/PATCH /orders, GET /orders, etc.).

To apply a combination, create/update a booking with the returned offerCode and matching productId/optionId.

Gift Offers

Requires octo/gifts.

Offer code can be sent on:

  • POST /gifts

  • PATCH /gifts/{uuid}

  • PATCH /gifts/{uuid}/preview

  • POST /gifts/{uuid}/confirm

  • gifts[].offerCode in order create/update payloads

These fields are present on:

  • GET /gifts/{uuid}

  • GET /gifts

  • gift write responses

  • gifts embedded in serialized order responses

  • offerCode

  • offerTitle

  • offerComparisons (always [])

  • offerIsCombination (always false)

  • offer

  • offers[]

  • pricing.offerDiscount

Base gift schema: Gift Vouchers.

Extra Item Offers

Requires octo/extras.

Each serialized extra item (booking.extraItems[] and booking.unitItems[].extraItems[]) includes:

  • offerCode

  • offerTitle

  • offerComparisons (always [])

  • offerIsCombination (always false)

  • offer

  • offers[]

  • pricing.offerDiscount

List Supplier Offers

get

List supplier promotions serialized as offer objects.

Responses
chevron-right
200

Successful response

application/json

From capability octo/offers.

idstring · uuidRequired

Unique identifier for this resource.

Example: 89fe0192-ddcd-430a-b285-e1396a4725d2
tagsstring[]Optional

List of tag values.

Example: ["vip","partner"]
titlestringOptional

Public title of the offer.

Example: Summer Promotion
labelstringOptional

Discount label shown to customers.

Example: Save 20%
codestringOptional

Offer code identifier.

Example: SUMMER25
descriptionstring · nullableOptional

Offer description shown to the customer.

Example: 20% off selected departures this month.
netDiscountstring · enum · nullableOptional

How the discount is applied to net pricing.

Example: FULLPossible values:
usablebooleanOptional

Whether the offer is currently usable in the given context.

Example: true
unusableReasonstring · nullableOptional

Reason the offer cannot be applied in the current context.

Example: Offer is not valid for the selected date.
get
/offers
200

Successful response

Returns paginated supplier promotions serialized as the offer object above.

GET /offers returns supplier promotions sorted by position. Usability in this endpoint is not availability-specific; contextual usability is returned on availability/booking/gift/extra responses.

Schema Additions (JSON)

These are additive fragments showing only fields introduced by this capability.

Availability

AvailabilityBatchRequest

AvailabilityBatchRow

AvailabilityCalendar

AvailabilityCalendarBatchRequest

AvailabilityCalendarBatchRow

AvailabilityCalendarRequest

AvailabilityRequest

Booking

BookingUnitItem

BookingWriteRequest

ExtraPricing

Gift

GiftCreateRequest

Money

Offer

Order

OrderUpdateRequest

PackageAvailability

Pricing

UnitPricing

Last updated