githubEdit

Memberships

Exposes Ventrata membership capabilities to OCTO.

This capability allows member benefits to be redeemed when making new bookings.

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

All paths below are public /octo routes.

Member Login

First, provide a member login entry point in your interface (for example a "Member Login" button) and collect one of the following identifiers:

  • Email We send a verification code to the customer's email, and you repeat that code in a follow-up request to verify identity.

  • Mobile We send a verification code to the customer's mobile number, and you repeat that code in a follow-up request to verify identity.

  • Reference If a booking exists, we ask for the customer's last name to verify identity.

Membership Lookup

post

Looks up memberships by email, mobile, or reference. The first request may return verified: false and a message prompting verification. Repeat with verification to receive memberships.

Body

From capability octo/memberships. Provide one lookup identifier (email, mobile, or reference). On follow-up requests include verification.

anyOptional
or
anyOptional
or
anyOptional
Responses
chevron-right
200

Successful response

application/json

From capability octo/memberships.

verifiedbooleanRequired

Whether membership verification is complete for this lookup.

Example: true
messagestring · nullableOptional

Verification guidance message for follow-up lookup requests.

Example: A verification email has been sent to [email protected]
post
/memberships/lookup
200

Successful response

Request Body / Query Parameters

You should send either email, mobile, or reference. If using reference, it must be at least 3 characters.

See the lookup operation above for request/response schemas.

The response returns 400 Bad Request if no memberships are found. Otherwise, it returns a message with "verified": false; prompt for the verification code and repeat the request with that value.

For reference, the verification value is the guest's last name. For email and mobile, the verification value is a 6-digit code sent to the provided email address or mobile number.

Once you repeat the request, including the verification field with the verification code, it will verify the member and return a list of memberships that they have.

If multiple memberships are returned, provide an interface to pick one, using title and/or contact to differentiate between them.

Membership Object For Requests

After lookup, include a membership object on membership-aware requests (or membership[...] query parameters for GET endpoints).

membership[id] is required.

Also include one of membership[email], membership[mobile], or membership[reference], together with membership[verification].

If using membership[mobile], include membership[country].

Product Benefits

Memberships can have multiple benefits. Once you have logged in and selected a membership, include a membership object in each request.

Product benefits are returned on base product routes:

  • GET /products/{productId}

  • GET /products

Call the product endpoint and include the membership object as query parameters.

You should repeat the same identifier (email, mobile or reference) and verification from the login step, and include id to specify which membership to apply.

Base product schema: Products.

Memberships with product benefits add additional units to the list. You can identify units that belong to a membership benefit via the membershipBenefit object, which is otherwise null.

If you're rendering this on a page showing the available units to choose from, we recommend grouping units by membershipBenefit.id and displaying those units in a highlighted box.

Units with "membershipBenefit": null should go at the end as they are now, these are the regular units that weren't made available with the membership.

Include these units in the unitItems array as normal, ensuring you also include the membership object in the booking request.

When a membership unit benefit has limits, unit.restrictions.maxQuantity will be reduced to the lowest effective limit.

List Membership Bookings

get

Lists bookings linked to a selected membership. Include membership[id], membership[verification], and one of membership[email], membership[mobile], or membership[reference].

Query parameters
membership[id]string · uuidRequired

Membership identifier returned by /memberships/lookup.

Example: 89fe0192-ddcd-430a-b285-e1396a4725d2
membership[verification]stringRequired

Verification token from lookup (OTP for email/mobile, or guest name for reference).

Example: 123456
membership[email]string · emailOptional

Membership email used during lookup.

Example: [email protected]
membership[mobile]stringOptional

Membership mobile number used during lookup.

Example: +12025550123
membership[country]stringOptional

ISO 3166-1 alpha-2 country code used to parse membership[mobile].

Example: US
membership[reference]stringOptional

Membership reference used during lookup.

Example: REF-2026-001
Responses
chevron-right
200

Successful response

application/json
activebooleanOptional

Whether active is enabled.

Example: true
aliasstring · nullableOptional

Alias value.

Example: booking-alias-001
availabilityIdstring · nullableOptional

Availability identifier (local date or local date-time).

Example: 2026-05-14T09:00:00-04:00
availabilityLocalDateEndstring · nullableOptional

Availability local date end value.

Example: 2026-05-21
availabilityLocalDateStartstring · nullableOptional

Availability local date start value.

Example: 2026-05-14
cancellablebooleanOptional

Whether cancellable is enabled.

Example: true
confirmablebooleanOptional

Whether confirmable is enabled.

Example: true
currencystringOptional

ISO 4217 currency code.

Example: USD
deliveryMethodsstring[]Optional

Delivery methods available on this booking. VOUCHER means use booking.voucher; TICKET means use booking.unitItems[].ticket.

Example: ["VOUCHER","TICKET"]
emailReceiptbooleanOptional

Whether email receipt is enabled.

Example: true
freesalebooleanOptional

Whether freesale is enabled.

Example: true
idstring · uuidRead-onlyOptional

Unique identifier for this resource.

Example: 89fe0192-ddcd-430a-b285-e1396a4725d2
invoicePdfUrlstring · nullableOptional

Invoice pdf url URL.

Example: https://www.city-sightseeing.com
localDateTimeEndstring · date-timeOptional

Local date time end timestamp in ISO 8601 format.

Example: 2026-05-14T13:00:00Z
localDateTimeStartstring · date-timeOptional

Local date time start timestamp in ISO 8601 format.

Example: 2026-05-14T13:00:00Z
notesstring · nullableOptional

Notes value.

Example: Vegetarian meal requested
optionIdstringRequired

Option identifier.

Example: 94cdd032-3d32-416d-b0a4-abf8b7495b8b
originalRebookingUuidstring · nullableOptional

UUID value for this resource.

Example: 89fe0192-ddcd-430a-b285-e1396a4725d2
productIdstringOptional

Product identifier.

Example: e7cc8bb4-8d1c-4848-8824-5dbedb718681
quotebooleanOptional

Whether quote is enabled.

Example: false
rebookingUuidstring · nullableOptional

UUID value for this resource.

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

List of required contact field values.

Example: ["fullName","emailAddress"]
resellerReferencestring · nullableOptional

Reseller reference value.

Example: RES-BOOK-10045
settlementMethodstringOptional

Settlement method value.

Example: DIRECT
statusstring · enumRequired

Current status value.

Example: ON_HOLDPossible values:
supplierReferencestringOptional

Human-readable supplier reference to share with the guest and store for support and billing reconciliation.

Example: SUP-BOOK-7782
tagsstring[]Optional

List of tag values.

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

Whether test mode is enabled.

Example: false
updatablebooleanOptional

Whether updatable is enabled.

Example: true
utcConfirmedAtstring · date-time · nullableOptional

Utc confirmed at timestamp in ISO 8601 format.

Example: 2026-05-14T13:00:00Z
utcCreatedAtstring · date-timeOptional

Utc created at timestamp in ISO 8601 format.

Example: 2026-05-14T13:00:00Z
utcExpiresAtstring · date-time · nullableOptional

Utc expires at timestamp in ISO 8601 format.

Example: 2026-05-14T13:00:00Z
utcNoshowedAtstring · date-time · nullableOptional

Utc noshowed at timestamp in ISO 8601 format.

Example: 2026-05-14T13:00:00Z
utcRebookedAtstring · date-time · nullableOptional

Utc rebooked at timestamp in ISO 8601 format.

Example: 2026-05-14T13:00:00Z
utcRedeemedAtstring · date-time · nullableOptional

Utc redeemed at timestamp in ISO 8601 format.

Example: 2026-05-14T13:00:00Z
utcUpdatedAtstring · date-timeOptional

Utc updated at timestamp in ISO 8601 format.

Example: 2026-05-14T13:00:00Z
uuidstringRequired

User-submitted UUID field that can be used to uniquely reference this resource and provide idempotency against repeat requests with the same UUID.

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

List of visible contact field values.

Example: ["fullName","emailAddress"]
termsAcceptedboolean · nullableOptional

From capability octo/content.

Example: true
offerCodestring · nullableOptional

From capability octo/offers.

Example: SUMMER25
offerIsCombinationbooleanOptional

From capability octo/offers.

Example: true
offerTitlestring · nullableOptional

From capability octo/offers.

Example: Summer Promotion
packageIncludeIdstring · nullableOptional

From capability octo/packages.

Example: package_include_id-example
packageUnitItemUuidstring · nullableOptional

From capability octo/packages.

Example: 89fe0192-ddcd-430a-b285-e1396a4725d2
packageUuidstring · nullableOptional

From capability octo/packages.

Example: 89fe0192-ddcd-430a-b285-e1396a4725d2
dropoffNotesstring · nullableOptional

From capability octo/pickups.

Example: Drop-off at Fisherman's Wharf.
dropoffPointIdstring · nullableOptional

From capability octo/pickups.

Example: dropoff_fishermans_wharf
pickupHotelstring · nullableOptional

From capability octo/pickups.

Example: Hilton Union Square
pickupHotelRoomstring · nullableOptional

From capability octo/pickups.

Example: 1208
pickupNotesstring · nullableOptional

From capability octo/pickups.

Example: Meet the guide by the hotel lobby.
pickupPointIdstring · nullableOptional

From capability octo/pickups.

Example: pickup_union_square
rentalDurationIdstring · nullableOptional

From capability octo/rentals.

Example: rental_duration_2h
orderIdstring · nullableOptional

From capability octo/cart.

Example: ord_20260514_9f3c21
orderInvoicePdfUrlstring · nullableOptional

From capability octo/cart.

Example: https://www.city-sightseeing.com
orderReferencestring · nullableOptional

From capability octo/cart.

Example: ORDER-2026-0514-1001
primarybooleanOptional

From capability octo/cart.

Example: true
checkedInbooleanOptional

From capability octo/checkin.

Example: true
checkinAvailablebooleanOptional

From capability octo/checkin.

Example: true
checkinUrlstring · nullableOptional

From capability octo/checkin.

Example: https://checkin.city-sightseeing.com/booking/89fe0192
returnUrlstring · nullableOptional

From capability octo/cardPayments.

Example: https://checkout.city-sightseeing.com/return
appendMembershipValiditybooleanOptional

From capability octo/memberships.

Example: true
identityIdstring · nullableOptional

From capability octo/identities.

Example: identity_customer_001
get
/memberships/bookings
200

Successful response

Returns bookings linked to the selected membership.

Query Parameters

The membership object is required on this endpoint. Include membership[id], one lookup identifier (membership[email], membership[mobile] or membership[reference]), and membership[verification].

Offers Benefits

Memberships also provide discounts on availability when using the octo/offers capability.

When this is used alongside octo/offers, a membershipBenefit field is added to the offer object:

offer.membershipBenefit uses the same fields as unit.membershipBenefit (id, title, description).

No additional action is required to select this offer. It is applied automatically, just like an entered offerCode or a public promotion. If offer.membershipBenefit is set, display membershipBenefit.title/description in place of offer.title/description wherever you show offer text.

Booking / Order

Finally, when creating the booking or order (if you're using the octo/cart capability), include the membership object as in the steps above.

Membership-related request fields are included on the operations in this section.

This will associate the booking to the membership and automatically apply any benefits available.

Membership-related response fields are returned on the same operations.

When bookings are nested inside an order response, the membership summary is returned on the order object (order.membership) and omitted from each nested booking item.

Schema Additions (JSON)

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

AvailabilityBatchRequest

AvailabilityCalendarBatchRequest

AvailabilityCalendarRequest

AvailabilityRequest

Booking

BookingWriteRequest

Gift

GiftCreateRequest

Offer

Order

OrderCreateRequest

OrderUpdateRequest

Product

Unit

Last updated