05_VACATION_TOURS

Graphical reference view with linked API documentation.

Vacation Tours API (v1)

Structured multi-day vacation packages with day-by-day itineraries. Visibility is controlled per tour (all_tenants, owner_tenant_only, selected_tenants). The storefront and API only return published tours that are visible for the resolved tenant.

Tenant resolution

Use the same rules as GET /api/v1/tenant/capabilities: tenant_id, tenant (id or slug), X-Tenant header, authenticated user’s tenant, or host-based lookup.

enabled_products must include tours for the tenant or catalog responses may be empty / capabilities will show vacation_tours.enabled: false.

Payments (dedicated tenant gateway mapping)

Tour checkout uses only tenant_payment_gateways rows whose event_type is vacation_tour. That is a separate mapping from hotels (hotel_booking), activities (activity), cars, flights, and POS: there is no fallback—if no vacation_tour row is configured, tour payment methods will not appear until you add one.

In Tenant Admin → Payment Gateways (or Super Admin with a tenant selected), add one or more gateways under Vacation tour so tours can run with their own credentials, defaults, and limits even when other products use different providers.

  • List gateways for the browser: GET /api/payment-gateways/available?event_type=vacation_tour&tenant_id={id}&amount={tour_base_price}&currency={ISO} (same endpoint as other products; amount / currency optional filters).
  • Booking with payment (optional): include payment_gateway_id (a tenant_payment_gateways.id for that tenant and event_type = vacation_tour) and payment_data (same shape as activity booking, e.g. Stripe payment_method_id after client tokenization). Successful charges create a payment_transactions row with event_type=vacation_tour and reference_type=vacation_tour_booking.

List tours

GET /api/v1/vacation-tours

Query Description
q Search in title, destination, summary
destination Substring match on tour destination or any itinerary day overnight_location
min_days, max_days Duration filter
max_price Maximum base_price
per_page 1–50 (default 20)

Tour locations (search UI)

GET /api/v1/vacation-tours/locations

Returns sorted, case-insensitively unique labels for destination and itinerary overnight_location across all published tours visible to the resolved tenant (same rules as the list endpoint). Intended for storefront datalists and filters—no separate hard-coded list.

Response shape: { "data": { "locations": ["…"], "count": N } }.

Tour detail

GET /api/v1/vacation-tours/{slug}

Returns itinerary days and long description when the tour is visible to the tenant.

Create booking / quote request

POST /api/v1/vacation-tours/{slug}/bookings

Throttled (30/min per IP). JSON or form body:

Field Rules
booking_kind request (quote) or book (booking intent)
lead_name required, max 120
lead_email required, email
lead_phone optional
requested_start_date optional, date, not in the past
adults required, 1–50
children optional, 0–50
special_requests optional, max 5000

Response 201 with reference_code (e.g. VT-…). Authenticated Sanctum users get user_id stamped when present.

Admin workflows (status pendingconfirmed / declined / etc.) are handled in Super Admin and Tenant Admin under Vacation Tour Bookings.