API Reference Complete reference for ResytechClient, ResytechApi, and all TypeScript types in resytech.js.
The iframe-based booking widget. Creates a full-screen overlay with the Resytech checkout UI.
const client = new ResytechClient (config: ResytechClientConfig);
interface ResytechClientConfig {
locationId : string ; // Required. Your Resytech location UUID.
baseUrl : string ; // Required. Base URL of your booking platform.
theme ?: {
primaryColor ?: string ; // Primary theme color.
fontFamily ?: string ; // Font family override.
};
debug ?: boolean ; // Enable console logging.
}
Method Signature Description showUIshowUI(options?: Partial<CheckoutRequest>): voidOpen the checkout overlay. Optionally pre-fill activity, equipment, date, and time. closeclose(): voidClose the checkout overlay and clean up the iframe. onon(event: string, callback: (data: any) => void): voidSubscribe to an event. offoff(event: string, callback: (data: any) => void): voidUnsubscribe from an event. updateConfigupdateConfig(config: Partial<ResytechClientConfig>): voidUpdate client configuration at runtime. destroydestroy(): voidClose the overlay, remove message listeners, and clear all event subscriptions.
Passed to showUI() to pre-fill booking parameters:
Field Type Required Description locationstringAuto Location UUID (set from config) activitystringNo Activity UUID to pre-select equipmentstring | EquipmentSelection[]No Equipment selections to pre-fill the cart with. Each array entry includes the equipment UUID, quantity, and optional add-ons. As a shorthand for a single equipment with quantity 1 and no add-ons, you can pass the equipment UUID as a string. datestringNo Pre-selected date durationMinsnumberNo Duration in minutes timeSlotStartstringNo Time slot start time timeSlotEndstringNo Time slot end time timeSlotPricenumberNo Time slot price
Field Type Required Description equipmentUuidstringYes Equipment UUID quantitynumberYes How many of this equipment to add to the cart addonsAddonSelection[]No Add-ons to attach to this equipment
Field Type Required Description addonUuidstringYes Add-on UUID. Must belong to the parent equipment. quantitynumberYes How many of this add-on to attach
Pre-fill the cart with two single kayaks (each with a dry-bag add-on) and one tandem kayak, then jump straight to the chosen time slot:
client. showUI ({
activity: 'kayak-activity-uuid' ,
equipment: [
{
equipmentUuid: 'single-kayak-uuid' ,
quantity: 2 ,
addons: [
{ addonUuid: 'dry-bag-uuid' , quantity: 2 }
]
},
{
equipmentUuid: 'tandem-kayak-uuid' ,
quantity: 1
}
],
date: '2025-07-15' ,
durationMins: 120 ,
timeSlotStart: '2025-07-15T10:00:00' ,
timeSlotEnd: '2025-07-15T12:00:00' ,
timeSlotPrice: 89.99
});
Event Payload Description checkout:openCheckoutRequestFired when the checkout overlay opens. checkout:readyundefinedFired when the iframe has loaded and is visible. checkout:complete{ confirmationCode, price, ...data }Fired when a booking is successfully completed. checkout:closeundefinedFired when the checkout overlay is closed. checkout:return{ returnUrl }Fired when the customer clicks the post-purchase Continue button. giftcard:complete{ giftCardCode, amount }Fired when a gift card purchase succeeds. giftcard:closeundefinedFired when the gift card success view is dismissed. membership:complete{ membershipNumber, planName }Fired when a membership purchase succeeds. membership:closeundefinedFired when the membership success view is dismissed. voucher:complete{ orderId, quantity, total }Fired when an Activity Voucher purchase succeeds. A redemption is a booking and fires checkout:complete.
client. on ( 'checkout:complete' , ( data ) => {
console. log ( 'Booking confirmed:' , data.confirmationCode);
});
Add these to any HTML element to create click-to-book triggers. The ResytechClient automatically binds click handlers to elements with data-resytech-activity-id, data-resytech-equipment-id, data-resytech-equipment, data-resytech-gift-card, or data-resytech-voucher.
Attribute Description data-resytech-activity-idActivity UUID. Opens checkout pre-filtered to this activity. data-resytech-equipment-idEquipment UUID for a single equipment selection (quantity defaults to 1). data-resytech-equipment-quantityQuantity for the equipment in data-resytech-equipment-id (parsed as integer). data-resytech-addonsJSON array of AddonSelection to attach to the equipment in data-resytech-equipment-id. data-resytech-equipmentJSON array of EquipmentSelection. Use this for multi-equipment carts; overrides the three equipment-id / -quantity / addons attributes when present. data-resytech-datePre-selected date. data-resytech-durationDuration in minutes (parsed as integer). data-resytech-time-startTime slot start time. data-resytech-time-endTime slot end time. data-resytech-priceTime slot price (parsed as float). data-resytech-lock-schedule"true" hides the "Choose another date/time" crumb.data-resytech-presentationmodal or drawer for this button.data-resytech-gift-cardOpens gift card mode. Bare attribute, or a JSON GiftCardSelection. data-resytech-voucherOpens an Activity Voucher flow. A bare value is the offer slug; JSON VoucherSelection for {"code": …} or pre-fills.
< button
data-resytech-activity-id = "abc-123"
data-resytech-date = "2025-07-04"
data-resytech-duration = "60" >
Book Now
</ button >
The programmatic API client. Organizes methods into controller namespaces.
const api = new ResytechApi (config ?: Partial < ResytechApiConfig > );
interface ResytechApiConfig {
baseUrl : string ; // Default: 'https://api.bookingui.com/v1'
cmsBaseUrl : string ; // Default: 'https://crm-intake.resytech.com/v1'
debug ?: boolean ; // Default: false
timeout ?: number ; // Default: 30000 (ms)
headers ?: Record < string , string >; // Custom headers for all requests
}
Method Signature Description setAuthTokensetAuthToken(token: string): voidSet the Bearer token on all controllers. Called automatically after initialization.initialize(). clearAuthTokenclearAuthToken(): voidRemove the auth token from all controllers. getAuthTokengetAuthToken(): string | nullGet the current auth token. isAuthenticatedisAuthenticated(): booleanCheck if an auth token is set. setCustomHeaderssetCustomHeaders(headers: Record<string, string>): voidSet custom headers on all controllers. getConfiggetConfig(): ResytechApiConfigGet a copy of the current configuration. setDebugsetDebug(debug: boolean): voidEnable or disable debug logging on all controllers.
Access methods through controller namespaces on the ResytechApi instance.
Method Signature Returns Description initializeinitialize(request: InitializationRequest)Promise<InitializationResponse>Initialize a session. Returns activities, auth token, operator info. Auto-sets auth token and blog location GUID.
Field Type Required Description identifierstringNo Unique session identifier
Field Type Description successbooleanWhether the request succeeded messagestringResponse message statusCodenumberHTTP status code activitiesInitializationActivity[]List of activities for the location buiAccessTokenstringBearer token for subsequent API calls operatorOperatorOperator/company details locationGuidstringLocation UUID checkoutSettingsCheckoutSettingsCheckout UI configuration hasSmsWorkflowbooleanWhether SMS workflows are enabled isTestModebooleanWhether the location is in test mode
Method Signature Returns Description getActivitygetActivity(uuid: string)Promise<ActivityResponse>Get full details for a specific activity.
Field Type Description successbooleanWhether the request succeeded activityActivityFull activity object
Method Signature Returns Description getActivityCalendargetActivityCalendar(request: ActivityCalendarRequest)Promise<CalendarResponse>Get availability calendar for an activity. getCartCalendargetCartCalendar(request: ActivityCalendarRequest)Promise<CalendarResponse>Get availability calendar for items in cart.
Field Type Required Description activitystringYes Activity UUID monthnumberYes Month (1-12) yearnumberYes Year includePricesbooleanNo Include daily pricing durationstringNo Duration UUID filter startTimestringNo Start time filter equipmentClientShoppingCartEquipment[]No Equipment selection durationMinsnumberNo Dynamic duration in minutes cartIdstringNo Existing cart ID
Field Type Description successbooleanWhether the request succeeded calendarCalendarMonthCalendar month data
Method Signature Returns Description getActivityTimeSlotsgetActivityTimeSlots(request: TimeSlotRequest)Promise<ActivityTimeSlotsResponse>Get time slots for a specific activity on a date. getLocationTimeSlotsgetLocationTimeSlots(request: TimeSlotRequest)Promise<LocationTimeSlotsResponse>Get time slots for all activities at the location. getCartTimeSlotsgetCartTimeSlots(request: TimeSlotRequest)Promise<ActivityTimeSlotsResponse>Get time slots for items in cart.
Field Type Required Description activitystringNo Activity UUID (recommended for activity-specific slots) datestringYes Date string durationstringNo Duration UUID durationMinsnumberNo Dynamic duration in minutes equipmentClientShoppingCartEquipment[]No Equipment selection isPrivateTourbooleanNo Filter for private tour availability ignoreEarlyCutoffbooleanNo Ignore early cutoff restrictions
Field Type Description successbooleanWhether the request succeeded timeSlotsActivityTimeSlot[]Available time slots
Field Type Description successbooleanWhether the request succeeded resultsLocationAllActivityTimeSlots[]Slots grouped by activity
Method Signature Returns Description getEligibleAddonsgetEligibleAddons(request: GetEligibleAddonsRequest)Promise<GetEligibleAddonsResponse>Get addons available for the selected activity, date, and time.
Field Type Required Description activitystringYes Activity UUID datestringYes Date string timestringYes Time string durationstringNo Duration UUID dynamicDurationMinutesnumberNo Dynamic duration in minutes equipmentClientShoppingCartEquipment[]No Equipment selection
Field Type Description successbooleanWhether the request succeeded addonsEligibleAddon[]List of eligible addons
Method Signature Returns Description createOrUpdateCartcreateOrUpdateCart(request: CreateOrUpdateCartRequest)Promise<CreateOrUpdateShoppingCartResponse>Create or update a shopping cart. updateCustomerupdateCustomer(request: UpdateShoppingCartCustomerRequest)Promise<ApiResponseBase>Update customer info on the cart. applyCouponapplyCoupon(request: ApplyCouponRequest)Promise<ApplyCouponResponse>Apply a coupon code. removeCouponremoveCoupon(request?: ApplyCouponRequest)Promise<ApplyCouponResponse>Remove an applied coupon. applyGiftCardapplyGiftCard(request: ApplyGiftCardRequest)Promise<ApplyGiftCardResponse>Apply a gift card. removeGiftCardremoveGiftCard(request?: ApplyGiftCardRequest)Promise<ApplyGiftCardResponse>Remove an applied gift card. updateVouchersupdateVouchers(request: UpdateCartVouchersRequest)Promise<CreateOrUpdateShoppingCartResponse>Apply, add or remove Activity Voucher codes. The only call that changes a cart's vouchers. See Activity Vouchers (on Cart) . getTripProtectionPreviewgetTripProtectionPreview(request: TripProtectionPreviewRequest)Promise<TripProtectionPreviewResponse>Preview trip protection pricing.
Field Type Required Description cartClientShoppingCartYes Cart data cartIdstringNo Existing cart ID (for updates)
Field Type Required Description activitystringYes Activity UUID durationstringYes Duration UUID datestringYes Booking date timeSlotStartstringYes Time slot start timeSlotEndstringYes Time slot end equipmentClientShoppingCartEquipment[]No Selected equipment customerClientShoppingCartCustomerNo Customer info downPaymentRequestedbooleanNo Request down payment option isPrivateTourbooleanNo Book as private tour (needs allowPrivateTours; forced on with privateToursOnly) partySizenumberNo Tours: actual number of people, kept apart from equipment seats (the capacity reservation; full vehicle on a private Per Person tour) durationMinsnumberNo Dynamic duration in minutes tripProtectionSelectedbooleanNo Include trip protection
Field Type Required Description equipmentUuidstringYes Equipment UUID quantitynumberYes Number of equipment units seatsnumberYes Number of seats/guests addonsClientShoppingCartEquipmentAddon[]No Selected addons
Field Type Required Description addonUuidstringYes Addon UUID quantitynumberYes Addon quantity equipmentUuidstringYes Parent equipment UUID
Field Type Required Description fullNamestringNo Customer full name emailstringNo Customer email countryCodestringNo Phone country code countrystringNo Country phonestringNo Phone number
Field Type Required Description customerClientShoppingCartCustomerYes Customer data cartIdstringNo Cart ID
Field Type Required Description couponCodestringNo Coupon code to apply cartIdstringNo Cart ID
Field Type Required Description giftCardCodestringNo Gift card code to apply cartIdstringNo Cart ID
Field Type Required Description cartIdstringNo Cart ID
Field Type Description successbooleanWhether the request succeeded errorCodeShoppingCartErrorCodeError code (if failed) cartIdstringCart identifier removalsShoppingCartRemoval[]Items removed due to constraints cartServerShoppingCartOverviewCart summary clientSecretstringStripe client secret for payment operatorAccountIdstringStripe connected account ID
Field Type Description successbooleanWhether the request succeeded errorCodeGiftCardErrorCodeError code (if failed) availableBalancenumberRemaining gift card balance
Field Type Description successbooleanWhether the request succeeded availablebooleanWhether trip protection is available pricenumberTrip protection price titlestringDisplay title descriptionstringDisplay description coverageTypenumberCoverage type identifier coverageAmountnumberCoverage amount
Method Signature Returns Description checkoutcheckout(request: CheckoutRequest)Promise<CheckoutResponse>Process checkout for a shopping cart.
Field Type Required Description cartClientShoppingCartYes Full cart data (must include customer email) customFieldsCustomFieldAnswer[]No Answers to custom fields demographicsDemographicValue[]No Demographic selections stripeConfirmationTokenstringNo Stripe confirmation token handledNextActionstringNo Stripe next action result agreementsstring[]No Accepted agreement UUIDs smsOptInbooleanNo SMS opt-in consent cartIdstringNo Existing cart ID fingerprintstringNo Device fingerprint forwarded to fraud checks voucherCheckoutbooleanNo true when the cart has Activity Vouchers appliedexpectedVoucherDueNownumberNo The dueNow shown on the voucher-covered cart; rejected if coverage changed
Field Type Required Description uuidstringYes Custom field UUID answerstringNo Answer value
Field Type Required Description demographicUuidstringYes Demographic UUID uuidstringYes Value UUID valuenumberYes Count/value
Field Type Description successbooleanWhether the request succeeded cartServerShoppingCartOverviewFinal cart state cartActionCreateOrUpdateShoppingCartResponseCart action result confirmationstringBooking confirmation code clientSecretstringStripe client secret (if payment required) paymentIntentIdstringStripe payment intent ID
Method Signature Returns Description getInvoicegetInvoice(invoiceUuid: string)Promise<GetInvoiceResponse>Get invoice details. payInvoicepayInvoice(invoiceUuid: string, request: PayInvoiceRequest)Promise<PayInvoiceResponse>Pay an invoice.
Field Type Required Description agreementsstring[]No Accepted agreement UUIDs stripeConfirmationTokenstringNo Stripe confirmation token handledNextActionstringNo Stripe next action result
Field Type Description successbooleanWhether the request succeeded invoiceServerInvoiceInvoice details ({ uuid, dueNowCents }) cartServerShoppingCartOverviewAssociated cart overview activitystringActivity name datestringBooking date startstringStart time endstringEnd time endDatestringEnd date (if multi-day)
Field Type Description successbooleanWhether the request succeeded clientSecretstringStripe client secret confirmationstringPayment confirmation code
Method Signature Returns Description getWaivergetWaiver(locationUuid: string, waiverId: string)Promise<GetWaiverResponse>Get waiver definition and fields. getReservationgetReservation(request: GetReservationRequest)Promise<GetReservationResponse>Look up a reservation for waiver signing. submitWaiversubmitWaiver(request: SubmitWaiverRequest)Promise<SubmitWaiverResponse>Submit a completed waiver.
Field Type Required Description lidstringYes Location ID widstringYes Waiver ID typestringNo Lookup type valuestringNo Lookup value
Field Type Required Description waiverIdstringYes Waiver UUID locationIdstringYes Location UUID waiverNamestringNo Waiver name reservationIdstringYes Reservation UUID reservationConfirmationNumberstringYes Confirmation number fieldsany[]Yes Completed field values submittedAtstringYes ISO timestamp dataHashstringYes Integrity hash bfpstringYes Browser fingerprint
Field Type Description successbooleanWhether the request succeeded waiverWaiverWaiver definition
Field Type Description successbooleanWhether the request succeeded idstringReservation UUID datestringBooking date customerNamestringCustomer name customerEmailstringCustomer email customerPhonestringCustomer phone statusstringReservation status confirmationNumberstringConfirmation code
Field Type Description successbooleanWhether the request succeeded submissionIdstringSubmission UUID submittedAtDateSubmission timestamp confirmationNumberstringConfirmation code
Method Signature Returns Description getSurveygetSurvey(token: string)Promise<GetPublicSurveyResponse>Get a survey by access token. submitSurveysubmitSurvey(request: SubmitSurveyRequest)Promise<SubmitSurveyResponse>Submit survey responses.
Field Type Required Description tokenstringNo Survey access token responsesRecord<string, any>No Question responses (keyed by question ID) namestringNo Respondent name emailstringNo Respondent email
Field Type Description successbooleanWhether the request succeeded surveyPublicSurveySurvey definition bookingContextPublicBookingContextAssociated booking info brandingBrandingOperator branding
Field Type Description successbooleanWhether the request succeeded thankYouMessagestringCustom thank you message
Method Signature Returns Description getSettingsgetSettings()Promise<GetGiftCardPurchaseSettingsResponse>Get gift card purchase configuration. purchasepurchase(request: PurchaseGiftCardRequest)Promise<PurchaseGiftCardResponse>Purchase a gift card.
Field Type Required Description amountnumberYes Gift card amount in cents purchaserNamestringNo Purchaser name purchaserEmailstringNo Purchaser email purchaserPhonestringNo Purchaser phone purchaserPhoneCountryCodestringNo Phone country code recipientNamestringNo Recipient name recipientEmailstringNo Recipient email customMessagestringNo Gift message stripeConfirmationTokenstringNo Stripe confirmation token handledNextActionstringNo Stripe next action result
Field Type Description successbooleanWhether the request succeeded isAvailablebooleanWhether gift card purchases are enabled allowFlatAmountsbooleanWhether preset amounts are available flatAmountsnumber[]Preset amount options allowVariableAmountsbooleanWhether custom amounts are allowed variableMinAmountnumberMinimum custom amount variableMaxAmountnumberMaximum custom amount requireRecipientEmailbooleanWhether recipient email is required allowCustomMessagebooleanWhether custom messages are allowed expirationDaysnumberDays until gift card expires
Field Type Description successbooleanWhether the request succeeded clientSecretstringStripe client secret paymentIntentIdstringStripe payment intent ID giftCardCodestringGenerated gift card code giftCardAmountnumberGift card value expiresAtDateExpiration date recipientEmailstringRecipient email
Activity Voucher offers and single-call purchase. Full walkthrough: Activity Voucher Purchasing .
Method Signature Returns Description getOffergetOffer(slug: string, quantity?: number)Promise<GetVoucherOfferResponse>Server-authoritative quote for quantity vouchers of an offer. newRequestIdentitynewRequestIdentity(){ requestId, accessToken }Mint the idempotent purchase identity. Also available as a static. purchasepurchase(request: PurchaseVoucherOrderRequest)Promise<PurchaseVoucherResponse>Create, pay and issue in one call; resume 3DS; poll; or probe a saved attempt.
All voucher responses extend ApiResponseBase with:
Field Type Description dataTThe payload, on success errorCodeVoucherErrorCodeString domain code on failure, e.g. QuoteChanged, SoldOut, OrderExpired, PaymentRequired
Field Type Required Description requestIdstringYes From newRequestIdentity() accessTokenstringYes From newRequestIdentity() offerIdstringYes From the quote revisionIdstringYes From the quote quantitynumberYes Vouchers to buy expectedTotalnumberYes The quote's pricing.grandTotal purchaserNamestringYes purchaserEmailstringYes recipientNamestringNo Gift recipient recipientEmailstringNo Gift recipient acceptTermsbooleanYes Must be true stripeConfirmationTokenstringNo Required to create a new order handledNextActionstringNo PaymentIntent id after 3DS, or to poll
VoucherResponse<VoucherOfferQuote> — data has offerId, revisionId, slug, timeZone, settings (VoucherOfferSettings), pricing (VoucherPurchasePricing), activity (VoucherActivityDisplay).
VoucherResponse<VoucherPurchaseResult> — data has action (success / next_action / processing / payment_error), order (VoucherOrder), clientSecret, paymentIntentId, message.
Activity Voucher code inspection and interrupted-checkout recovery. Applying codes is api.cart.updateVouchers; completing the booking is api.checkout.checkout with voucherCheckout: true. Full walkthrough: Activity Voucher Redemption .
Method Signature Returns Description normalizeCodenormalizeCode(value: string)string | nullCanonical AV + 32 hex form, or null if it cannot be a code. Also available as a static. inspectinspect(code: string, cartId?: string)Promise<InspectVoucherResponse>Terms and masked suffix for a code, without applying it. checkoutStatuscheckoutStatus(cartId: string)Promise<VoucherCheckoutStatusResponse>State of an in-flight voucher checkout for a cart. closeCheckoutcloseCheckout(cartId: string)Promise<VoucherCheckoutStatusResponse>Abandon an unfinished voucher checkout once the server confirms no booking exists.
VoucherResponse<VoucherInspection> — data has id, suffix, settings (VoucherOfferSettings), timeZone.
VoucherResponse<VoucherCheckoutStatus> — data has state (unknown / resume / resolving / resolved / confirmed), confirmation, paymentIntentId, stripeAccountId.
Field Type Required Description cartClientShoppingCartYes Current cart cartIdstringNo Cart ID voucherCodesstring[]Yes Codes to apply now (may be empty) retainedVoucherIdsstring[]No Ids of already-applied vouchers to keep
The blog controller uses the CMS API (cmsBaseUrl), not the BookingUI API. No auth token is required, but a location GUID must be set. It is set automatically after initialization.initialize().
Method Signature Returns Description getPostsgetPosts(page?: number, pageSize?: number, locationGuid?: string)Promise<GetBlogPostListResponse>Get paginated published blog posts. Default: page 1, 20 per page (max 50). getPostgetPost(slug: string, locationGuid?: string)Promise<GetBlogPostResponse>Get a single blog post by slug (includes full content). getCategoriesgetCategories(locationGuid?: string)Promise<GetBlogCategoryListResponse>Get all blog categories. getPostsByCategorygetPostsByCategory(categorySlug: string, page?: number, pageSize?: number, locationGuid?: string)Promise<GetBlogPostListResponse>Get posts filtered by category slug. setLocationGuidsetLocationGuid(locationGuid: string): voidvoidManually set the location GUID.
Field Type Description successbooleanWhether the request succeeded postsBlogPost[]Array of blog posts totalCountnumberTotal number of matching posts pagenumberCurrent page number pageSizenumberItems per page
Field Type Description successbooleanWhether the request succeeded postBlogPostBlog post with full content
Field Type Description successbooleanWhether the request succeeded categoriesBlogCategory[]Array of categories
Method Signature Returns Description checkcheck()Promise<boolean>Perform a HEAD request to /health. Returns true if healthy, false otherwise.
Field Type Description uuidstringUnique identifier namestringActivity name basePricenumberOperator-entered base price — not computed; ignores modifiers, durations, and equipment (see note under InitializationActivity) priceFloornumber?Truthful "from" price: min upcoming open departure incl. cheapest equipment, pricing modifiers applied. Absent when no floor is available — fall back to basePrice or hide the "from" price descriptionstringFull description cancellationPolicystringCancellation policy text detailsstringAdditional details mediaMedia[]Photos and videos durationsDuration[]Available durations equipmentEquipment[]Available equipment manifestManifestGuest limits and demographics firstAvailableDateDateEarliest bookable date allowEquipmentMixingbooleanCan mix equipment types maxEquipmentPerBookingnumberMax equipment per booking customFieldsCustomField[]Custom checkout fields agreementsActivityAgreement[]Required agreements typenumberActivity type identifier priceTypenumber0 Per Booking, 1 Per Person, 2 Per Equipment, 3 Per GroupincludedGuestsnumberPer Group: guests covered by the group price additionalGuestPricenumberPer Group: rate per guest above includedGuests allowPrivateToursbooleanSupports private tours privateToursOnlybooleanEvery booking is private; isPrivateTour is forced on dynamicDurationSettingsActivityDynamicDurationSettingDynamic duration config schedulingActivitySchedulingScheduling restrictions tripProtectionTripProtectionTrip protection config
Simplified activity returned from initialization (before full activity fetch).
Field Type Description uuidstringUnique identifier namestringActivity name taglinestringShort tagline descriptionstringDescription equipmentEquipment[]Available equipment mediaMedia[]Photos and videos startingAtPricenumberOperator-entered base price — not computed; ignores modifiers, durations, and equipment (see note below) priceFloornumber?Truthful "from" price: min upcoming open departure incl. cheapest equipment, pricing modifiers applied. Absent when no floor is available — prefer it over startingAtPrice when present manifestManifestGuest limits firstAvailableDateDateEarliest bookable date durationsDuration[]Available durations typenumberActivity type dynamicDurationSettingsActivityDynamicDurationSettingDynamic duration config
startingAtPrice / basePrice vs priceFloor — these are not two versions of the same number. startingAtPrice (and basePrice on Activity) is the operator-entered base price for the activity, copied verbatim from their configuration: it is not computed, and it ignores durations, pricing modifiers, equipment prices, and availability, so it can differ substantially from what a customer can actually book. priceFloor is server-computed: the minimum bookable total (cheapest open departure over the coming months, pricing modifiers applied, plus the cheapest available equipment). For "from $X" display, use priceFloor when present and fall back to startingAtPrice only when it is absent (no floor computed yet, or no open departures in the lookahead window).
Field Type Description uuidstringUnique identifier quantitynumberAvailable quantity namestringEquipment name descriptionstringDescription detailsstringAdditional details mediaMedia[]Photos capacitynumberMax capacity per unit addonsAddon[]Available addons amenitiesAmenity[]Amenities propertiesEquipmentProperty[]Custom properties
Field Type Description uuidstringUnique identifier ordernumberDisplay order typenumberMedia type (0 = image, etc.) uristringFull-size URL thumbnailUristringThumbnail URL
Field Type Description uuidstringUnique identifier minutesnumberDuration in minutes pricenumberPre-modifier list price priceFloornumber?Truthful "from" price for this duration (min upcoming open departure incl. cheapest equipment, pricing modifiers applied). Absent when no floor is available
Field Type Description namestringAddon name descriptionstringDescription uuidstringUnique identifier pricenumberPrice
Field Type Description namestringAddon name descriptionstringDescription quantitynumberAvailable quantity mediaUristringImage URL uuidstringUnique identifier pricenumberPrice
Field Type Description idstringUnique identifier namestringAmenity name descriptionstringDescription iconTypenumberIcon type identifier iconstringIcon value assignmentCountnumberNumber of assignments
Field Type Description idstringUnique identifier namestringProperty name iconTypenumberIcon type identifier iconstringIcon value descriptionstringDescription valuestringProperty value featuredbooleanShow as featured
Field Type Description guestLimitnumberMaximum guests per booking ageRestrictionnumberMinimum age guestMinimumnumberMinimum guests per booking demographicsDemographic[]Guest demographic categories
Field Type Description uuidstringUnique identifier titlestringDisplay title (e.g., "Adults", "Children") descriptionstringDescription
Field Type Description uuidstringUnique identifier companyNamestringCompany name locationNamestringLocation name addressLine1stringStreet address addressLine2stringAddress line 2 citystringCity statestringState/province postalCodestringZIP/postal code operatorAccountIdstringStripe account ID contactEmailstringContact email contactPhonestringContact phone websitestringWebsite URL
Field Type Description monthnumberMonth (1-12) yearnumberYear daysActivityCalendarDay[]Day-by-day availability
Field Type Description datestringDate string isAvailablebooleanWhether the date has availability pricenumberPrice (if includePrices was set) isEstimatedPricebooleanWhether the price is an estimate blackoutMessagestringReason for unavailability
Field Type Description startDateDateSlot start (full datetime) endDateDateSlot end (full datetime) durationMinutesnumberSlot length in minutes pricenumberSlot price isAvailablebooleanWhether this slot can be booked remainingSeatsnumberSeats still available canBookPrivateTourbooleanPrivate tour available for this slot blackoutMessagestringReason a slot is unavailable due to a location blackout (location blackouts only — activity blackouts do not populate this)
Field Type Description uuidstringActivity UUID slotsActivityTimeSlot[]Available slots nextAvailableDatestringNext date with availability
Field Type Description feesFee[]Taxes and fees lineItemsCartLineItem[]Line items subtotalnumberSubtotal totalnumberTotal feesTotalnumberTotal fees discountTotalnumberTotal discounts paidnumberAmount already paid balancenumberRemaining balance couponCodestringApplied coupon code giftCardCodestringApplied gift card code giftCardAmountAppliednumberGift card amount used giftCardBalancenumberRemaining gift card balance voucherAmountAppliednumberPrepaid value covered by applied Activity Vouchers vouchersVoucherSummary[]Applied Activity Vouchers (id, suffix, name, quantity, prepaidAmount, coverage[]) amountDuenumbertotal net of gift-card and voucher tenderdueNownumberAmount due now dueLaternumberAmount due later tripProtectionSelectedbooleanTrip protection included tripProtectionPricenumberTrip protection price tipAmountnumberCustomer-selected tip equipmentServerShoppingCartEquipment[]Equipment in cart
Field Type Description amountnumberFee amount uuidstringFee UUID namestringFee name typeTaxesAndFeesType0 = Tax, 1 = Fee
Field Type Description namestringLine item name pricenumberLine item price typestringLine item type
Field Type Description typeShoppingCartRemovalTypeRemoval reason code (0-9) uuidstringRemoved item UUID maxQuantitynumberMaximum allowed quantity
Field Type Description uuidstringInvoice UUID dueNowCentsnumberAmount due in cents
Field Type Description idstringWaiver UUID namestringWaiver name fieldsanyField definitions contactEmailstringContact email logoUristringLogo image URL appendLogobooleanShow logo on waiver requiresBookingbooleanRequires reservation lookup themeWaiverThemeColor theme
Field Type Description primarystringPrimary color secondarystringSecondary color accentstringAccent color backgroundstringBackground color paperstringPaper/card color textstringText color textMutedstringMuted text color borderstringBorder color errorstringError color successstringSuccess color warningstringWarning color
Field Type Description uuidstringUnique identifier typenumberField type identifier labelstringDisplay label requiredbooleanWhether the field is required
Field Type Description uuidstringUnique identifier titlestringAgreement title bodystringAgreement body text requiredbooleanMust be accepted enabledbooleanCurrently active
Field Type Description enabledbooleanDynamic duration enabled minimumHoursnumberMinimum bookable hours maximumHoursnumberMaximum bookable hours incrementMinutesnumberDuration increment in minutes baseHourlyRatenumberHourly rate createdAtDateCreated timestamp updatedAtDateUpdated timestamp
Field Type Description dateTypenumberScheduling type identifier dateRangeDateOnlyRangeAvailable date range specificDatesstring[]Specific available dates earlyCutoffValuenumberEarly cutoff value futureCutoffDaysnumberHow far ahead bookings are allowed earlyCutoffTypenumberEarly cutoff type identifier
Field Type Description lowerBoundstringStart date upperBoundstringEnd date lowerBoundIsInclusivebooleanStart is inclusive upperBoundIsInclusivebooleanEnd is inclusive lowerBoundInfinitebooleanNo start boundary upperBoundInfinitebooleanNo end boundary isEmptybooleanRange is empty
Field Type Description enabledbooleanTrip protection enabled pricingTypenumberPricing type identifier flatAmountnumberFlat price amount percentAmountnumberPercentage amount coverageTypenumberCoverage type identifier coverageAmountnumberCoverage amount customTitlestringCustom display title customDescriptionstringCustom description
Field Type Description uuidstringUnique identifier titlestringPost title slugstringURL-friendly identifier excerptstringShort excerpt contentstring | nullFull JSON content (version 2 block format) featuredImageUristringFeatured image URL featuredImageThumbnailUristringFeatured image thumbnail URL statusstringPublication status metaTitlestring | nullSEO meta title metaDescriptionstring | nullSEO meta description authorstringAuthor name publishedAtDate | nullPublication date createdAtDateCreated timestamp updatedAtDateLast updated timestamp categoriesBlogCategory[]Assigned categories
Field Type Description uuidstringUnique identifier namestringCategory name slugstringURL-friendly identifier descriptionstringCategory description createdAtDateCreated timestamp
Field Type Description idstringSurvey ID namestringSurvey name descriptionstringSurvey description questionsSurveyQuestion[]Survey questions thankYouMessagestringMessage shown after submission
Field Type Description idstringQuestion ID typestringQuestion type (text, rating, choice, etc.) labelstringQuestion text requiredbooleanWhether the question is required ordernumberDisplay order maxStarsnumberMax stars for rating questions optionsSurveyQuestionOption[]Options for choice questions
Field Type Description idstringOption ID labelstringOption text ordernumberDisplay order
Field Type Description customerNamestringCustomer name customerEmailstringCustomer email confirmationCodestringBooking confirmation code bookingDatestringBooking date
Field Type Description companyNamestringCompany name logoUrlstringLogo URL locationNamestringLocation name primaryColorstringPrimary color secondaryColorstringSecondary color accentColorstringAccent color backgroundColorstringBackground color cardBackgroundColorstringCard background color cardTextColorstringCard text color headerTextColorstringHeader text color
Field Type Description pageTitlestringPage title returnUrlstringPost-checkout redirect URL successMessagestringSuccess message showActivitySelectorbooleanShow activity selector autoRedirectToFirstActivitybooleanAuto-redirect if single activity allowGuestCheckoutbooleanAllow guest checkout autoSelectSingleEquipmentbooleanAuto-select if single equipment durationTitleTextstringDuration step title dateTitleTextstringDate step title timeSlotTitleTextstringTime slot step title popupWindowTitlestringPopup window title activityPageThemeActivityPageThemeConfigActivity page theme customCssstringCustom CSS customJavaScriptstringCustom JavaScript purchaseCompleteJavaScriptstringPost-purchase JavaScript gaTrackingIdstringGoogle Analytics ID fbPixelIdstringFacebook Pixel ID activitiesCustomOrderActivityOrderItem[]Custom activity ordering equipmentCustomOrderEquipmentOrderItem[]Custom equipment ordering
Value Name Description 0None No error 1Success Validation passed 2ActivityInvalid Activity does not exist or is not bookable 3EquipmentInvalid Equipment does not exist on this activity 4DurationInvalid Duration does not exist on this activity 5AddonInvalid Add-on does not exist on this equipment 6EquipmentNoLongerAvailable Equipment is no longer available for the slot 7EquipmentCountNoLongerAvailable Requested equipment quantity exceeds what is left 8AddonCountNoLongerAvailable Requested add-on quantity exceeds what is left 9AddonNotAvailable Add-on is blacked out for the selected date/time 10DateNoLongerAvailable Date is no longer available 11TimeNoLongerAvailable Time slot is no longer available 12DownPaymentNotAllowed Down payment requested but not offered 13CustomerRequired Customer information required 14CustomerNameInvalid Customer name failed validation 15CustomerPhoneInvalid Customer phone failed validation 16CustomerEmailInvalid Customer email failed validation 17CustomFieldRequired A required custom field is missing 18CustomFieldInvalid A custom field answer failed validation 19MissingDemographic A required demographic count is missing 20DemographicOverMax Demographic count exceeds the maximum 21DemographicUnderMin Demographic count is below the minimum 22MissingAgreement A required agreement was not accepted 23CheckoutSessionError Checkout session problem 24CouponCodeInvalid Coupon code is invalid 25GiftCardInvalid Gift card is invalid 26MinimumParticipantsNotMet Party is below the activity minimum 27DemographicInvalid Unknown demographic 28TripProtectionRequired Trip protection is mandatory but not selected 29VoucherInvalid An Activity Voucher code is unknown, used, expired, or does not cover this selection
Value Name Description 0None No error 1InvalidCode Gift card code is invalid 2Expired Gift card has expired 3NoBalance Gift card has no remaining balance 4InsufficientBalance Gift card balance is too low 5AlreadyApplied Gift card is already applied 6NotFound Gift card not found 7Disabled Gift cards are disabled 8LocationMismatch Gift card belongs to a different location 9GeneralError Unspecified error
Value Name Description 0None No removal 1EquipmentUnavailable Equipment no longer available 2EquipmentQuantityReduced Quantity reduced to max available 3AddonUnavailable Addon no longer available 4AddonQuantityReduced Addon quantity reduced 5SeatReduction Seats reduced to max available 6DurationUnavailable Duration no longer available 7TimeSlotUnavailable Time slot no longer available 8DateUnavailable Date no longer available 9ActivityUnavailable Activity no longer available
Value Name Description 0Tax Tax line item 1Fee Fee line item
All API responses extend this base interface:
interface ApiResponseBase {
success : boolean ; // Whether the request succeeded
message : string ; // Human-readable message
statusCode : number ; // HTTP status code (0 for network errors)
action : string ; // API endpoint/action
isNetworkError : boolean ; // True if the error was a network/timeout issue
}