Experience template

Use this template to sell for an attraction, activity, or experience provider. It checks out gift_card_value, the variable-value gift card, and the provider's own experiences are sold through the same quote and order routes. Fulfillment is email delivery after confirmed payment.

bash
bun run create:storefront -- \
  --template experience \
  --out ../my-experience-storefront

Customer journey

  1. Tell the experience story and explain how the gift is redeemed.
  2. Offer the provider's experiences and their live options, or suggested amounts within live catalog limits plus custom value.
  3. Display the authoritative Lifepeaks quote and total.
  4. Collect sender and recipient details through your backend.
  5. Redirect to Lifepeaks-hosted QuickPay.
  6. Reconcile the canonical order and wait for fulfilled email delivery.

Occasion-led labels can inspire buyers without implying that a specific session has been purchased.

Experiences in the catalog

GET /v2/products publishes the company's experiences alongside the value gift card. Each one is a gcv_ product carrying its name, description, formalities, images, categories, validity, and an options array of priced gcvo_ entries with quantity bounds and stock. Read them to build a browsing experience that matches what the provider actually offers, instead of inventing a package list in your frontend.

Two things the list decides for you. A provider that never configured gift-card amount limits sells no value card, so gift_card_value is simply absent and the experiences stand alone. An experience with a gift-card campaign running on it is withheld from the API entirely and is sold through the Lifepeaks order page until the campaign ends.

Selling an experience

An experience line names the product and the option the buyer picked, and never a price:

json
{"product_id": "gcv_4821", "product_option_id": "gcvo_9107", "quantity": 2}

Send it to POST /v2/quotes and then to POST /v2/orders, exactly as with a value line. One order may carry up to twenty experience lines, and it is paid once. One order buys one family, so a basket that mixes an experience with gift value is checked out as two orders.

Each line has its own gift-card document, and a fulfilled order carries a download per line. A line that bought several cards downloads all of them in that one document. See Endpoints — Quote and order lines.

Integration boundary

This template does not claim to sell admission, a dated ticket, a timeslot, participant capacity, a reservation, or event registration. It does not issue tickets.

Sell a dated ticket as an event, not as an experience. The API has an event_ticket family of its own — evt_<id> products with evto_<id> ticket options, real dates, real seat capacity and a per-seat fee — and that is what issues a ticket. Do not simulate one with gift_card_value or with a catalog experience. See Endpoints — An event and its tickets.

Keep schedules, capacity, waivers, and booking references in the experience provider's system. Do not convert a suggested amount, or a listed experience option, into a capacity promise.

Launch checks

  • Explain the redemption and booking steps after the recipient receives the gift card.
  • Avoid "ticket confirmed" or "booking complete" language.
  • Show experience prices from live options, never from a hardcoded list.
  • Test an option that sells out between the quote and the order, which is refused with 422.
  • Test quote expiry and an expired checkout-session renewal.
  • Test a multi-line order and download each line's gift-card PDF.
  • Test payment failure without delivery.
  • Test webhook replay and canonical-order reconciliation.

Review Headless checkout and the shared Starter templates production checklist before launch.