Coupon codes
Validate a code the guest entered with Validate coupon code:value+discountTypetell you how to present the discount (percentage vs fixed amount).experienceIds, when present, scopes the coupon to specific experiences - apply it only to matching cart items.- An invalid or expired code returns an error status; show the guest a clear “code not valid” message.
couponCode in the checkout calls - on the cart item (data[].couponCode) for item-scoped coupons or at the top level of the book-bulk payload for cart-wide ones. The payment intent call accepts the same fields, so the discounted total flows into totalNetAmount before the guest pays - validate first, then price.
Access codes
Access codes gate exclusive listings (listings withisExclusive: true are backed by access-code-protected experiences). The guest enters a code; you check it with Validate access code:
accessCode in the cart item (data[].accessCode) when booking - book-bulk enforces it server-side, so skipping this fails the booking for gated experiences.
Credit codes
Credits are prepaid/stored-value codes applied at booking time viadata[].appliedCreditCodes in the book-bulk payload:
appliedValue is how much of the credit to consume against this item, and sequence controls the order when several codes apply (they’re processed ascending). There is no public validation endpoint for credit codes - the values are validated at booking time.
Where discounts show up
The discounted total appears in the payment intent’stotalNetAmount and the booking’s amount. To show a running total as the guest applies codes, call Create a payment intent with "getOnlyTotalNetAmount": true - it prices the cart (including promotion fields) without initializing a payment.