> ## Documentation Index
> Fetch the complete documentation index at: https://docs.way.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a listing

> Returns a single listing with its experience details, resource groups, price tiers, integrations, and cancellation policies. Use `kind` in the response to tell time-based experiences (`experience`) from resource-group collections (`resource`).



## OpenAPI

````yaml get /v3/listings/{listingId}
openapi: 3.0.0
info:
  title: Way Partner API
  description: >-
    REST API for Way partners: list experiences, check availability, run
    checkout, and manage bookings.
  version: '1.0'
servers:
  - url: https://api.letsway.com
    description: Production.
  - url: https://api.staging.letsway.com
    description: Staging.
security: []
tags:
  - name: Listings
    description: 'Retrieve the listings a brand offers: experiences, events, and resources.'
  - name: Availability
    description: Dates, sessions, and price tiers for scheduling a booking.
  - name: Carts & Checkout
    description: >-
      Payment intents and booking creation. The cart ID is a client-generated
      UUID; there is no create-cart endpoint.
  - name: Bookings
    description: Retrieve, cancel, and reschedule bookings.
  - name: Experiences
    description: Experience details, settings, custom questions, reviews, and hosts.
  - name: Brand Configuration
    description: Brand settings, taxonomy, terms, and promotion code validation.
  - name: Waitlists
    description: Waitlists for sold-out sessions and invitation handling.
  - name: Integrations
    description: Configured integrations, analytics, and room-charge validation.
  - name: Organizations
    description: Organization-level access across brands.
paths:
  /v3/listings/{listingId}:
    get:
      tags:
        - Listings
      summary: Get a listing
      description: >-
        Returns a single listing with its experience details, resource groups,
        price tiers, integrations, and cancellation policies. Use `kind` in the
        response to tell time-based experiences (`experience`) from
        resource-group collections (`resource`).
      operationId: ListingV3PublicController_getListingById
      parameters:
        - $ref: '#/components/parameters/listingIdPath'
        - $ref: '#/components/parameters/languageQuery_2'
        - $ref: '#/components/parameters/versionQuery_3'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetListingV3PublicResponse'
              example:
                data:
                  addOns:
                    - listingAddOnId: 1df45513-6f59-4b12-b9ea-66605de087f4
                      addOnId: b76c7cb0-1270-4919-88c4-881a19890174
                      label: Signed Cookbook
                      price: 150
                      quantity: null
                      description: >-
                        Start your day with a guided flow class overlooking the
                        water.
                      status: available
                      hostCommission: 0
                      hostCommissionType: no-commission
                      picture: null
                      limit: null
                      limitType: null
                      order: null
                      taxes: []
                  agenda: null
                  bookingAvailabilityMode: group
                  brandId: f2ce0a06-7997-4626-9532-65ac70f3a19c
                  providerBrandId: null
                  cancellationPolicyId: null
                  category:
                    id: c80c38ad-7379-42b0-ae92-bc26de382a0b
                    brandId: f2ce0a06-7997-4626-9532-65ac70f3a19c
                    name: Family
                  currency: USD
                  description: >-
                    <p>Set sail along the coast at golden hour - a two-hour
                    cruise with drinks and canapés included.</p>.
                  displayCapacity: null
                  eventDates: []
                  eventStartTimes: []
                  experienceId: c99f70ee-1c0e-4534-a31a-96d5d966cc4b
                  healthAndSafety: ''
                  hidePrice: false
                  hostedBy: null
                  limitedTime: null
                  id: d9fa9229-9132-415d-bc04-513062ee3bcd
                  included: []
                  isBookable: true
                  isExclusive: false
                  isMapped: false
                  isUnlisted: false
                  kind: experience
                  location:
                    id: 0e4e5db1-de94-41f8-9713-5074f9f0645a
                    name: Austin, TX, USA
                    latitude: 30.267153
                    longitude: -97.7430608
                    timezone: America/Chicago
                    additionalInfo: ''
                  maximumAllowedToBook: null
                  maxParticipantCount: 10
                  medias:
                    - id: 0a4cd3a1-d099-4916-90ea-7e5012c06598
                      kind: cover
                      type: image
                      links:
                        - type: image
                          url: >-
                            https://images.letsway.com/staging/tr:w-original/https://storage.googleapis.com/kouto-api-media/2026/6/accbde4c0064e535c67fd874a3b95d235d72465ed862dca1.jpg
                          resolution: original
                        - type: image
                          url: >-
                            https://images.letsway.com/staging/tr:w-original/https://storage.googleapis.com/kouto-api-media/2026/6/accbde4c0064e535c67fd874a3b95d235d72465ed862dca1.jpg
                          resolution: '384'
                        - type: image
                          url: >-
                            https://images.letsway.com/staging/tr:w-original/https://storage.googleapis.com/kouto-api-media/2026/6/accbde4c0064e535c67fd874a3b95d235d72465ed862dca1.jpg
                          resolution: '480'
                        - type: image
                          url: >-
                            https://images.letsway.com/staging/tr:w-original/https://storage.googleapis.com/kouto-api-media/2026/6/accbde4c0064e535c67fd874a3b95d235d72465ed862dca1.jpg
                          resolution: '640'
                        - type: image
                          url: >-
                            https://images.letsway.com/staging/tr:w-original/https://storage.googleapis.com/kouto-api-media/2026/6/accbde4c0064e535c67fd874a3b95d235d72465ed862dca1.jpg
                          resolution: '750'
                        - type: image
                          url: >-
                            https://images.letsway.com/staging/tr:w-original/https://storage.googleapis.com/kouto-api-media/2026/6/accbde4c0064e535c67fd874a3b95d235d72465ed862dca1.jpg
                          resolution: '1080'
                        - type: image
                          url: >-
                            https://images.letsway.com/staging/tr:w-original/https://storage.googleapis.com/kouto-api-media/2026/6/accbde4c0064e535c67fd874a3b95d235d72465ed862dca1.jpg
                          resolution: original
                      altText: null
                  menu: null
                  minimumRequiredToBook: null
                  partySize: null
                  paymentMethods:
                    - credit-card
                    - room-charge
                    - member-number
                  productLine: reserve
                  reschedulePolicyId: null
                  resourceGroupCollectionId: null
                  resourceGroups: []
                  slug: sunset-sailing-tour-a54f004c
                  startingPrice: 100
                  summary: A two-hour coastal cruise with drinks at golden hour.
                  taxes: []
                  title: Sunset Sailing Tour
                  vibes:
                    - id: f047e2cb-1fb5-4374-8f3e-4bfcc6d7284e
                      brandId: f2ce0a06-7997-4626-9532-65ac70f3a19c
                      name: Winter
                    - id: da568b2b-24c4-4b4a-9ac5-7010986368d3
                      brandId: f2ce0a06-7997-4626-9532-65ac70f3a19c
                      name: Summer
                  integrationMeta: []
                  shouldValidateComplimentaryBooking: {}
                  waitlistId: null
      security:
        - Brand-API-Key: []
        - Organization-API-Key: []
components:
  parameters:
    listingIdPath:
      name: listingId
      in: path
      schema:
        type: string
      required: true
      description: The listing's ID.
      example: 1f4877f4-a082-4a05-9cbf-fa129b28f01c
    languageQuery_2:
      name: language
      in: query
      schema:
        type: string
      description: Locale for translated content; defaults to the brand's language.
      required: false
    versionQuery_3:
      name: version
      in: query
      schema:
        default: published
        type: string
        enum:
          - latest
          - published
      description: >-
        Which content version to return: the published version (default) or the
        latest draft.
      required: false
  schemas:
    GetListingV3PublicResponse:
      type: object
      properties:
        addOns:
          type: array
          items:
            type: object
            properties:
              listingAddOnId:
                type: string
                format: uuid
                description: >-
                  Unique identifier of the association between the add-on and
                  this listing.
                example: 1df45513-6f59-4b12-b9ea-66605de087f4
              addOnId:
                type: string
                format: uuid
                description: >-
                  Unique identifier of the underlying add-on in the brand's
                  catalog.
                example: b76c7cb0-1270-4919-88c4-881a19890174
              label:
                type: string
                description: Display name of the add-on.
                example: Signed Cookbook
              price:
                type: number
                description: Price of one unit of the add-on, in the brand's currency.
                example: 150
              quantity:
                type: number
                nullable: true
                description: >-
                  Maximum purchasable quantity, interpreted according to
                  limitType. Mirrors limit; null when unlimited.
                example: 2
              description:
                type: string
                nullable: true
                description: Description of the add-on shown to guests. May be null.
                example: Start your day with a guided flow class overlooking the water.
              status:
                type: string
                enum:
                  - available
                  - unavailable
                nullable: true
                description: >-
                  Availability status of the add-on. The public listing
                  endpoints only return add-ons with status available.
                example: available
              hostCommission:
                type: number
                nullable: true
                description: >-
                  Commission the experience host earns per sale of this add-on,
                  interpreted according to hostCommissionType. 0 when the host
                  earns no commission.
                example: 0
              hostCommissionType:
                type: string
                enum:
                  - percent
                  - flat-rate
                  - per-participant
                  - no-commission
                nullable: true
                description: >-
                  How the host commission is calculated: percent of the add-on
                  price, a flat rate, an amount per participant, or no
                  commission.
                example: no-commission
              picture:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    description: Unique identifier of the image media asset.
                    example: 3f8b2a11-5c04-4c2d-9a7e-2b1d64f0c9aa
                  uri:
                    type: object
                    properties:
                      360w:
                        type: string
                        description: URL of the 360px-wide rendition.
                        example: >-
                          https://images.letsway.com/staging/tr:w-360/https://storage.googleapis.com/kouto-api-media/2025/7/bd087bea3caf5bd5f28f9449b77738abfee1f19c69bf7cad.jpg
                      720w:
                        type: string
                        description: URL of the 720px-wide rendition.
                        example: >-
                          https://images.letsway.com/staging/tr:w-720/https://storage.googleapis.com/kouto-api-media/2025/7/bd087bea3caf5bd5f28f9449b77738abfee1f19c69bf7cad.jpg
                      1080w:
                        type: string
                        description: URL of the 1080px-wide rendition.
                        example: >-
                          https://images.letsway.com/staging/tr:w-1080/https://storage.googleapis.com/kouto-api-media/2025/7/bd087bea3caf5bd5f28f9449b77738abfee1f19c69bf7cad.jpg
                      original:
                        type: string
                        description: URL of the original, unresized image.
                        example: >-
                          https://storage.googleapis.com/kouto-api-media/2025/7/bd087bea3caf5bd5f28f9449b77738abfee1f19c69bf7cad.jpg
                    required:
                      - 360w
                      - 720w
                      - 1080w
                      - original
                    description: Image URLs keyed by rendition width.
                required:
                  - id
                  - uri
                nullable: true
                description: >-
                  Image for the add-on, provided in several pre-sized
                  renditions. Null when the add-on has no image.
              limit:
                type: number
                nullable: true
                description: >-
                  Maximum quantity of this add-on that can be purchased, applied
                  per participant or per booking according to limitType. Null
                  when unlimited.
                example: 2
              limitType:
                type: string
                enum:
                  - PER_PARTICIPANT
                  - PER_BOOKING
                nullable: true
                description: Whether limit applies per participant or per booking.
                example: PER_BOOKING
              order:
                type: number
                nullable: true
                description: >-
                  Sort position of the add-on among the listing's add-ons. Lower
                  values appear first.
                example: 1
              taxes:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                      format: uuid
                      description: Unique identifier of the tax or fee.
                      example: 7c9e1b0a-2d64-4f3b-8a15-90de2c47a611
                    name:
                      type: string
                      nullable: true
                      description: Display name of the tax or fee.
                      example: Sales Tax
                    percentage:
                      type: number
                      nullable: true
                      description: >-
                        Tax rate as a percentage of the taxed amount. Null for
                        flat-amount taxes.
                      example: 8.25
                    amount:
                      type: number
                      nullable: true
                      description: >-
                        Flat tax or fee amount in the brand's currency. Null for
                        percentage-based taxes.
                      example: 5
                    includedInPrice:
                      type: boolean
                      description: >-
                        Whether the tax is already included in the displayed
                        price rather than added on top at checkout.
                      example: false
                    isHostTax:
                      type: boolean
                      nullable: true
                      description: >-
                        Whether the collected tax amount is distributed to the
                        experience host rather than retained by the brand.
                      example: false
                    order:
                      type: integer
                      minimum: 0
                      nullable: true
                      description: >-
                        Application order used when computing compounding taxes.
                        Lower values are applied first.
                      example: 0
                    showInAdvertisedPrice:
                      type: boolean
                      nullable: true
                      description: >-
                        Whether this tax is included in the advertised price
                        shown on the storefront.
                      example: false
                    appliesTo:
                      type: array
                      items:
                        type: string
                        format: uuid
                      nullable: true
                      description: >-
                        IDs of other taxes or fees this percentage tax compounds
                        on, meaning its base includes those amounts in addition
                        to the subtotal. Empty when the tax applies to the
                        subtotal only.
                  required:
                    - id
                    - includedInPrice
                description: Taxes and fees applied to the add-on's price.
            required:
              - listingAddOnId
              - addOnId
              - label
              - price
              - status
              - taxes
            nullable: true
          description: >-
            Optional extras guests can purchase with the booking, such as
            merchandise or upgrades. Only add-ons currently available for sale
            are returned.
        agenda:
          type: string
          nullable: true
          description: >-
            Agenda or schedule content shown on the listing page. Sourced from
            the listing's resource group collection; null for experience-based
            listings.
          example: <p>6:00 PM - Welcome reception</p><p>7:00 PM - Dinner service</p>
        bookingAvailabilityMode:
          type: string
          enum:
            - private
            - group
            - non-restricted
          nullable: true
          description: >-
            How the listing's sessions can be booked: private (a booking
            reserves the session for one party), group (parties share group
            sessions), or non-restricted (both private and shared bookings are
            allowed). Null for resource collections, where the mode is set per
            resource.
          example: group
        brandId:
          type: string
          format: uuid
          nullable: true
          description: Unique identifier of the brand whose storefront serves this listing.
          example: f2ce0a06-7997-4626-9532-65ac70f3a19c
        providerBrandId:
          type: string
          format: uuid
          nullable: true
          description: >-
            For promoted (cross-brand) listings, the ID of the brand that owns
            and fulfills the listing. Null when the listing belongs to the
            serving brand itself.
          example: 8b31c9de-4a67-4a0f-9c25-6f1e0b72d4c3
        cancellationPolicyId:
          type: string
          format: uuid
          nullable: true
          description: >-
            ID of the cancellation policy attached to the listing. Null when no
            cancellation policy is configured.
          example: 5a2e7c19-83b4-4f60-9d02-cf1b6a84e957
        category:
          type: object
          properties:
            id:
              type: string
              format: uuid
              description: Unique identifier of the category.
              example: c80c38ad-7379-42b0-ae92-bc26de382a0b
            brandId:
              type: string
              format: uuid
              description: ID of the brand that defines the category.
              example: f2ce0a06-7997-4626-9532-65ac70f3a19c
            name:
              type: string
              description: Display name of the category.
              example: Family
          required:
            - id
            - brandId
            - name
          nullable: true
          description: >-
            The brand-defined category the listing belongs to. Null when the
            listing is uncategorized.
        currency:
          type: string
          nullable: true
          description: >-
            ISO 4217 currency code for the listing's monetary amounts. Null for
            resource collections, where currency is returned per resource.
          example: USD
        customCallToAction:
          type: string
          nullable: true
          description: >-
            Custom label for the listing's booking call-to-action button. Null
            when the storefront default is used.
          example: Reserve Now
        description:
          type: string
          nullable: true
          description: Full listing description shown on the listing page, as HTML.
          example: >-
            <p>Set sail along the coast at golden hour - a two-hour cruise with
            drinks and canapés included.</p>
        displayCapacity:
          type: number
          nullable: true
          description: >-
            Display-only capacity shown to guests (for example, how many people
            a resource accommodates). Does not affect booking limits.
          example: 8
        eventDates:
          type: array
          items:
            type: string
            pattern: ^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$
          description: >-
            Calendar dates (YYYY-MM-DD) on which the event takes place.
            Populated for event listings backed by a collection; empty
            otherwise.
        eventStartTimes:
          type: array
          items:
            type: string
            pattern: ^([0-1]\d|2[0-3])(?::([0-5]\d)){1,2}$
          description: >-
            Session start times for the event's dates, as 24-hour time strings.
            Populated for event listings backed by a collection; empty
            otherwise.
        experienceId:
          type: string
          format: uuid
          nullable: true
          description: >-
            ID of the experience backing this listing. Present for
            experience-based listings; null for resource collections, where each
            resource has its own experience ID.
          example: c99f70ee-1c0e-4534-a31a-96d5d966cc4b
        healthAndSafety:
          type: string
          nullable: true
          description: >-
            Health and safety information shown to guests. May be empty; null
            for resource collections.
          example: ''
        hidePrice:
          type: boolean
          description: Whether the storefront should hide the listing's price from guests.
          example: false
        hostedBy:
          type: object
          properties:
            id:
              type: string
              format: uuid
              description: Unique identifier of the host's user account.
              example: 1c0340e2-ff93-41b1-b0ad-2c91720319a6
            firstName:
              type: string
              description: The host's first name.
              example: Maria
            lastName:
              type: string
              description: The host's last name.
              example: Alvarez
            description:
              type: string
              nullable: true
              description: The host's bio shown on the listing page. May be null.
              example: Award-winning chef with 15 years of farm-to-table experience.
            profilePicture:
              type: object
              properties:
                id:
                  type: string
                  format: uuid
                  description: Unique identifier of the profile photo media asset.
                  example: 9d5f6c2b-7e18-4a3d-b0c4-52e9a1f7d386
                uri:
                  type: object
                  properties:
                    360w:
                      type: string
                      description: URL of the 360px-wide rendition.
                      example: >-
                        https://images.letsway.com/staging/tr:w-360/https://storage.googleapis.com/kouto-api-media/2025/7/bd087bea3caf5bd5f28f9449b77738abfee1f19c69bf7cad.jpg
                    720w:
                      type: string
                      description: URL of the 720px-wide rendition.
                      example: >-
                        https://images.letsway.com/staging/tr:w-720/https://storage.googleapis.com/kouto-api-media/2025/7/bd087bea3caf5bd5f28f9449b77738abfee1f19c69bf7cad.jpg
                    1080w:
                      type: string
                      description: URL of the 1080px-wide rendition.
                      example: >-
                        https://images.letsway.com/staging/tr:w-1080/https://storage.googleapis.com/kouto-api-media/2025/7/bd087bea3caf5bd5f28f9449b77738abfee1f19c69bf7cad.jpg
                    original:
                      type: string
                      description: URL of the original, unresized photo.
                      example: >-
                        https://storage.googleapis.com/kouto-api-media/2025/7/bd087bea3caf5bd5f28f9449b77738abfee1f19c69bf7cad.jpg
                  required:
                    - 360w
                    - 720w
                    - 1080w
                    - original
                  description: Profile photo URLs keyed by rendition width.
              required:
                - id
                - uri
              nullable: true
              description: >-
                The host's profile photo, provided in several pre-sized
                renditions. Null when the host has no photo.
          required:
            - id
            - firstName
            - lastName
          nullable: true
          description: >-
            The host who leads the experience. Present only for host
            product-line listings; null otherwise.
        limitedTime:
          type: object
          properties:
            id:
              type: string
              description: Unique identifier of the limited-time configuration.
              example: e4b7a930-6f2c-4d81-a5b9-3c07d8e21f64
            ticketSalesOpenAt:
              oneOf:
                - type: string
                  format: date-time
                - type: string
                  format: date-time
              nullable: true
              description: >-
                When ticket sales open, as an ISO 8601 timestamp. Null when no
                opening time is set.
              example: '2026-08-01T15:00:00.000Z'
            ticketSalesCloseAt:
              oneOf:
                - type: string
                  format: date-time
                - type: string
                  format: date-time
              nullable: true
              description: >-
                When ticket sales close, as an ISO 8601 timestamp. Null when no
                closing time is set.
              example: '2026-08-31T23:59:00.000Z'
            active:
              type: boolean
              description: Whether the limited-time sales window is currently enabled.
              example: true
          required:
            - id
            - ticketSalesOpenAt
            - ticketSalesCloseAt
            - active
          nullable: true
          description: >-
            Limited-time ticket sales window for the listing. Null when ticket
            sales are not time-restricted.
        id:
          type: string
          format: uuid
          description: Unique identifier of the listing.
          example: d9fa9229-9132-415d-bc04-513062ee3bcd
        included:
          type: array
          items:
            type: string
          description: >-
            Items included with the booking, shown as the "What's included" list
            on the listing page. Empty for resource collections, where
            inclusions are returned per resource group.
        isBookable:
          type: boolean
          description: Whether the listing can currently be booked online.
          example: true
        isExclusive:
          type: boolean
          description: Whether booking the listing requires an access code.
          example: false
        isMapped:
          type: boolean
          description: >-
            Whether the listing's resources are laid out on an interactive venue
            map guests can pick from. Only true for resource collections with a
            map enabled.
          example: false
        isUnlisted:
          type: boolean
          description: >-
            Whether the listing is unlisted: hidden from public browse pages and
            reachable only via a direct link.
          example: false
        kind:
          type: string
          enum:
            - experience
            - resource
            - event
            - auction
          description: >-
            The type of listing: experience (time-based sessions with guests),
            resource (a bookable resource collection such as cabanas), event, or
            auction.
          example: experience
        location:
          type: object
          properties:
            id:
              type: string
              format: uuid
              description: Unique identifier of the location.
              example: 0e4e5db1-de94-41f8-9713-5074f9f0645a
            name:
              type: string
              description: Human-readable place name or address of the location.
              example: Austin, TX, USA
            latitude:
              type: number
              description: Latitude of the location, in decimal degrees.
              example: 30.267153
            longitude:
              type: number
              description: Longitude of the location, in decimal degrees.
              example: -97.7430608
            timezone:
              type: string
              description: >-
                IANA time zone identifier of the location; session times are
                local to this zone.
              example: America/Chicago
            additionalInfo:
              type: string
              nullable: true
              description: >-
                Extra arrival or meeting-point details shown to guests. May be
                empty.
              example: ''
          required:
            - id
            - name
            - latitude
            - longitude
            - timezone
          nullable: true
          description: Where the listing takes place. Null when no location is set.
        maximumAllowedToBook:
          type: number
          nullable: true
          description: >-
            Maximum number of participants allowed in a single booking. Null
            when not restricted; null for resource collections, where limits are
            returned per resource.
          example: 6
        maxParticipantCount:
          type: number
          nullable: true
          description: >-
            Maximum total number of participants a session can hold. Null for
            resource collections, where capacity is returned per resource.
          example: 10
        medias:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                description: Unique identifier of the media asset.
                example: 0a4cd3a1-d099-4916-90ea-7e5012c06598
              kind:
                type: string
                enum:
                  - gallery
                  - cover
                  - map
                  - description
                description: >-
                  Where the media is used on the listing page: cover (hero
                  image), gallery, map (venue map image), or description
                  (embedded in the description).
                example: cover
              type:
                type: string
                enum:
                  - image
                  - video
                description: Whether the media asset is an image or a video.
                example: image
              links:
                type: array
                items:
                  type: object
                  properties:
                    type:
                      type: string
                      enum:
                        - image
                        - video
                      description: Whether this rendition is an image or a video.
                      example: image
                    url:
                      type: string
                      format: uri
                      description: URL of this rendition.
                      example: >-
                        https://images.letsway.com/staging/tr:w-original/https://storage.googleapis.com/kouto-api-media/2026/6/accbde4c0064e535c67fd874a3b95d235d72465ed862dca1.jpg
                    resolution:
                      type: string
                      enum:
                        - original
                        - adaptative
                        - '240'
                        - '360'
                        - '480'
                        - '540'
                        - '640'
                        - '720'
                        - '1080'
                        - '384'
                        - '480'
                        - '640'
                        - '750'
                        - '1080'
                      description: >-
                        Resolution of this rendition: a pixel width for sized
                        image renditions, original for the unprocessed source
                        file, or adaptative for an adaptive-bitrate video
                        stream.
                      example: original
                  required:
                    - type
                    - url
                    - resolution
                description: Available renditions of the asset at different resolutions.
              altText:
                type: string
                nullable: true
                description: >-
                  Alternative text for the media, for accessibility. Null when
                  not set.
                example: Guests sailing across the bay at sunset
            required:
              - id
              - kind
              - type
              - links
          description: Images and videos attached to the listing.
        menu:
          type: string
          nullable: true
          description: >-
            Menu content shown on the listing page. Sourced from the listing's
            resource group collection; null for experience-based listings.
          example: <p>Three-course tasting menu with seasonal ingredients.</p>
        minimumRequiredToBook:
          type: number
          minimum: 0
          nullable: true
          description: >-
            Minimum number of participants required in a single booking. Null
            when not restricted; null for resource collections, where limits are
            returned per resource.
          example: 2
        partySize:
          type: number
          nullable: true
          description: >-
            Maximum number of participants a single party can include in one
            booking. Never exceeds maxParticipantCount; null when not
            restricted.
          example: 4
        paymentMethods:
          type: array
          items:
            type: string
            enum:
              - credit-card
              - room-charge
              - member-number
              - loyalty
              - kicc
              - cash
              - pay-later
              - pay-upon-arrival
            example: credit-card
          nullable: true
          description: >-
            Payment methods accepted at checkout for this listing, such as
            credit-card, room-charge, or member-number. Empty for resource
            collections, where payment methods are returned per resource.
        productLine:
          type: string
          enum:
            - activate
            - host
            - reserve
          description: >-
            The Way product line the listing is sold under: activate, host, or
            reserve. Host listings are led by a host and include hostedBy
            details.
          example: reserve
        reschedulePolicyId:
          type: string
          format: uuid
          nullable: true
          description: >-
            ID of the reschedule policy attached to the listing. Null when no
            reschedule policy is configured.
          example: b6f04d2a-91c7-4e35-8d6b-07a3c5e18f29
        resourceGroupCollectionId:
          type: string
          format: uuid
          nullable: true
          description: >-
            ID of the resource group collection backing this listing. Present
            only for resource collections; null for experience-based listings.
          example: 2f7d81c4-a9b3-4e06-b8d1-53c60e9a742f
        resourceGroups:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                description: Unique identifier of the resource group.
                example: 6a1d34f8-2c9b-4e57-a0d3-81f5b26c497e
              resourceGroupCollectionId:
                type: string
                format: uuid
                description: ID of the resource group collection this group belongs to.
                example: 2f7d81c4-a9b3-4e06-b8d1-53c60e9a742f
              title:
                type: string
                nullable: true
                description: Display name of the resource group.
                example: Poolside Cabanas
              description:
                type: string
                nullable: true
                description: Description of the resource group shown to guests.
                example: >-
                  Shaded cabanas steps from the main pool, each with seating for
                  up to six.
              integrationMeta:
                type: array
                items:
                  type: object
                  properties:
                    type:
                      type: string
                      enum:
                        - adobeAnalytics
                        - alice
                        - gtmAnalytics
                        - ga4Analytics
                        - infor
                        - kicc
                        - mews
                        - opera
                        - revinate
                        - simphony
                        - stayntouch
                        - tealiumAnalytics
                      description: The integration this metadata entry applies to.
                      example: opera
                    key:
                      type: string
                      enum:
                        - transactionCode
                        - integrationAddOn
                        - tenderId
                        - locRef
                        - rvcRef
                        - menuId
                        - menuItemId
                        - mewsTaxCodes
                      description: >-
                        The integration-specific setting this entry configures,
                        such as a PMS transaction code or POS menu item
                        reference.
                      example: transactionCode
                    value:
                      oneOf:
                        - type: object
                          additionalProperties: {}
                        - type: array
                          items:
                            type: string
                      description: >-
                        Value for the key. Its shape depends on the key:
                        transactionCode uses an object with code and
                        description, while mewsTaxCodes uses an array of
                        strings.
                  required:
                    - type
                    - key
                    - value
                nullable: true
                description: >-
                  Integration-specific metadata entries that map the resource
                  group to external systems such as a PMS, POS, or analytics
                  provider.
              medias:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                      format: uuid
                      description: Unique identifier of the media asset.
                      example: 0a4cd3a1-d099-4916-90ea-7e5012c06598
                    kind:
                      type: string
                      enum:
                        - gallery
                        - cover
                        - map
                        - description
                      description: >-
                        Where the media is used: cover (hero image), gallery,
                        map (venue map image), or description (embedded in the
                        description).
                      example: gallery
                    type:
                      type: string
                      enum:
                        - image
                        - video
                      description: Whether the media asset is an image or a video.
                      example: image
                    links:
                      type: array
                      items:
                        type: object
                        properties:
                          type:
                            type: string
                            enum:
                              - image
                              - video
                            description: Whether this rendition is an image or a video.
                            example: image
                          url:
                            type: string
                            format: uri
                            description: URL of this rendition.
                            example: >-
                              https://storage.googleapis.com/kouto-api-media/2025/7/bd087bea3caf5bd5f28f9449b77738abfee1f19c69bf7cad.jpg
                          resolution:
                            type: string
                            enum:
                              - original
                              - adaptative
                              - '240'
                              - '360'
                              - '480'
                              - '540'
                              - '640'
                              - '720'
                              - '1080'
                              - '384'
                              - '480'
                              - '640'
                              - '750'
                              - '1080'
                            description: >-
                              Resolution of this rendition: a pixel width for
                              sized image renditions, original for the
                              unprocessed source file, or adaptative for an
                              adaptive-bitrate video stream.
                            example: original
                        required:
                          - type
                          - url
                          - resolution
                      description: >-
                        Available renditions of the asset at different
                        resolutions.
                    altText:
                      type: string
                      nullable: true
                      description: >-
                        Alternative text for the media, for accessibility. Null
                        when not set.
                      example: Cabana with white curtains beside the pool
                  required:
                    - id
                    - kind
                    - type
                    - links
                description: Images and videos attached to the resource group.
              defaultShape:
                type: object
                properties:
                  type:
                    type: string
                    enum:
                      - circle
                      - rectangle
                      - table
                    description: 'Shape drawn on the venue map: circle, rectangle, or table.'
                    example: rectangle
                  width:
                    type: number
                    description: >-
                      Width of the shape on the venue map, in map coordinate
                      units.
                    example: 50
                  height:
                    type: number
                    description: >-
                      Height of the shape on the venue map, in map coordinate
                      units.
                    example: 50
                  color:
                    type: string
                    description: >-
                      Color used to render the shape on the venue map, as a hex
                      code.
                    example: '#F4A261'
                required:
                  - type
                  - width
                  - height
                  - color
                nullable: true
                description: >-
                  Default shape used to render this group's resources on the
                  interactive venue map. Null when no default is set.
              experiences:
                type: array
                items:
                  type: object
                  properties:
                    bookingAvailabilityMode:
                      type: string
                      enum:
                        - private
                        - group
                        - non-restricted
                      nullable: true
                      description: >-
                        How this resource's sessions can be booked: private (a
                        booking reserves the session for one party), group
                        (parties share sessions), or non-restricted (both).
                      example: private
                    currency:
                      type: string
                      nullable: true
                      description: >-
                        ISO 4217 currency code for this resource's monetary
                        amounts.
                      example: USD
                    description:
                      type: string
                      nullable: true
                      description: Description of the resource shown to guests.
                      example: >-
                        Corner cabana with a private mini fridge and ceiling
                        fan.
                    displayCapacity:
                      type: number
                      nullable: true
                      description: >-
                        Display-only capacity shown to guests for this resource.
                        Does not affect booking limits.
                      example: 6
                    healthAndSafety:
                      type: string
                      nullable: true
                      description: >-
                        Health and safety information for this resource. May be
                        empty or null.
                      example: Life vests available at the towel stand.
                    id:
                      type: string
                      format: uuid
                      description: >-
                        ID of the experience backing this resource. Use it when
                        fetching sessions or availability for the resource.
                      example: c99f70ee-1c0e-4534-a31a-96d5d966cc4b
                    headline:
                      type: string
                      nullable: true
                      description: Short marketing headline for the resource. May be null.
                      example: Your private oasis by the pool
                    maximumAllowedToBook:
                      type: number
                      nullable: true
                      description: >-
                        Maximum number of participants allowed in a single
                        booking of this resource. Null when not restricted.
                      example: 6
                    maxParticipantCount:
                      type: number
                      nullable: true
                      description: >-
                        Maximum total number of participants a session of this
                        resource can hold.
                      example: 6
                    minimumRequiredToBook:
                      type: number
                      nullable: true
                      description: >-
                        Minimum number of participants required in a single
                        booking of this resource. Null when not restricted.
                      example: 2
                    partySize:
                      type: number
                      nullable: true
                      description: >-
                        Maximum number of participants a single party can
                        include in one booking of this resource. Never exceeds
                        maxParticipantCount; null when not restricted.
                      example: 4
                    paymentMethods:
                      type: array
                      items:
                        type: string
                        enum:
                          - credit-card
                          - room-charge
                          - member-number
                          - loyalty
                          - kicc
                          - cash
                          - pay-later
                          - pay-upon-arrival
                      nullable: true
                      description: >-
                        Payment methods accepted at checkout for this resource,
                        such as credit-card, room-charge, or member-number.
                    position:
                      type: object
                      properties:
                        x:
                          type: number
                          description: >-
                            Horizontal position of the resource on the venue
                            map, in map coordinate units.
                          example: 120
                        'y':
                          type: number
                          description: >-
                            Vertical position of the resource on the venue map,
                            in map coordinate units.
                          example: 245
                      required:
                        - x
                        - 'y'
                      nullable: true
                      description: >-
                        Placement of the resource on the interactive venue map.
                        Null when the resource is not placed on a map.
                    shape:
                      type: object
                      properties:
                        type:
                          type: string
                          enum:
                            - circle
                            - rectangle
                            - table
                          description: >-
                            Shape drawn on the venue map: circle, rectangle, or
                            table.
                          example: circle
                        width:
                          type: number
                          description: >-
                            Width of the shape on the venue map, in map
                            coordinate units.
                          example: 50
                        height:
                          type: number
                          description: >-
                            Height of the shape on the venue map, in map
                            coordinate units.
                          example: 50
                        color:
                          type: string
                          description: >-
                            Color used to render the shape on the venue map, as
                            a hex code.
                          example: '#2A9D8F'
                      required:
                        - type
                        - width
                        - height
                        - color
                      nullable: true
                      description: >-
                        Shape used to render this specific resource on the venue
                        map. Falls back to the group's defaultShape when null.
                    taxes:
                      type: array
                      items:
                        type: object
                        properties:
                          id:
                            type: string
                            format: uuid
                            description: Unique identifier of the tax or fee.
                            example: 7c9e1b0a-2d64-4f3b-8a15-90de2c47a611
                          name:
                            type: string
                            nullable: true
                            description: Display name of the tax or fee.
                            example: Resort Fee
                          percentage:
                            type: number
                            nullable: true
                            description: >-
                              Tax rate as a percentage of the taxed amount. Null
                              for flat-amount taxes.
                            example: 8.25
                          amount:
                            type: number
                            nullable: true
                            description: >-
                              Flat tax or fee amount in the brand's currency.
                              Null for percentage-based taxes.
                            example: 25
                          includedInPrice:
                            type: boolean
                            description: >-
                              Whether the tax is already included in the
                              displayed price rather than added on top at
                              checkout.
                            example: false
                          isHostTax:
                            type: boolean
                            nullable: true
                            description: >-
                              Whether the collected tax amount is distributed to
                              the experience host rather than retained by the
                              brand.
                            example: false
                          order:
                            type: integer
                            minimum: 0
                            nullable: true
                            description: >-
                              Application order used when computing compounding
                              taxes. Lower values are applied first.
                            example: 0
                          showInAdvertisedPrice:
                            type: boolean
                            nullable: true
                            description: >-
                              Whether this tax is included in the advertised
                              price shown on the storefront.
                            example: false
                          appliesTo:
                            type: array
                            items:
                              type: string
                              format: uuid
                            nullable: true
                            description: >-
                              IDs of other taxes or fees this percentage tax
                              compounds on, meaning its base includes those
                              amounts in addition to the subtotal. Empty when
                              the tax applies to the subtotal only.
                        required:
                          - id
                          - includedInPrice
                      description: Taxes and fees applied to bookings of this resource.
                    title:
                      type: string
                      nullable: true
                      description: Display name of the resource.
                      example: Cabana 3
                    number:
                      type: string
                      nullable: true
                      description: >-
                        The resource's unit number or letter within its group,
                        assigned according to the group's numberPattern.
                      example: '3'
                    integrationMeta:
                      type: array
                      items:
                        type: object
                        properties:
                          type:
                            type: string
                            enum:
                              - adobeAnalytics
                              - alice
                              - gtmAnalytics
                              - ga4Analytics
                              - infor
                              - kicc
                              - mews
                              - opera
                              - revinate
                              - simphony
                              - stayntouch
                              - tealiumAnalytics
                            description: The integration this metadata entry applies to.
                            example: opera
                          key:
                            type: string
                            enum:
                              - transactionCode
                              - integrationAddOn
                              - tenderId
                              - locRef
                              - rvcRef
                              - menuId
                              - menuItemId
                              - mewsTaxCodes
                            description: >-
                              The integration-specific setting this entry
                              configures, such as a PMS transaction code or POS
                              menu item reference.
                            example: transactionCode
                          value:
                            oneOf:
                              - type: object
                                additionalProperties: {}
                              - type: array
                                items:
                                  type: string
                            description: >-
                              Value for the key. Its shape depends on the key:
                              transactionCode uses an object with code and
                              description, while mewsTaxCodes uses an array of
                              strings.
                        required:
                          - type
                          - key
                          - value
                      nullable: true
                      description: >-
                        Integration-specific metadata entries that map this
                        resource to external systems such as a PMS, POS, or
                        analytics provider.
                    shouldValidateComplimentaryBooking:
                      type: object
                      properties:
                        roomCharge:
                          type: boolean
                          description: >-
                            Whether room-charge bookings must be validated
                            against the property management system.
                          example: true
                        memberCharge:
                          type: boolean
                          description: >-
                            Whether member-charge bookings must be validated
                            against the membership system.
                          example: false
                      nullable: true
                      description: >-
                        Controls whether complimentary (no-charge) bookings of
                        this resource paid via room charge or member charge are
                        validated against the brand's property management or
                        membership system. Null when the brand-level default
                        applies.
                  required:
                    - bookingAvailabilityMode
                    - id
                    - taxes
                description: >-
                  The individual bookable resources (units) in this group. Each
                  resource is backed by its own experience carrying pricing,
                  capacity, payment, and venue-map placement details.
              included:
                type: array
                items:
                  type: string
                description: >-
                  Items included with bookings of this resource group, shown as
                  the "What's included" list.
              numberPattern:
                type: string
                enum:
                  - numeric
                  - alphabetic
                description: >-
                  How resources in the group are numbered: numeric (1, 2, 3) or
                  alphabetic (A, B, C).
                example: numeric
              order:
                type: number
                nullable: true
                description: >-
                  Sort position of the group within the collection. Lower values
                  appear first.
                example: 1
            required:
              - id
              - resourceGroupCollectionId
              - medias
              - experiences
              - included
              - numberPattern
          description: >-
            The resource groups in the listing's collection, each grouping
            similar bookable units (for example, a cabana type). Empty for
            experience-based listings.
        slug:
          type: string
          nullable: true
          description: >-
            URL-friendly identifier derived from the listing's title, used to
            build storefront listing URLs.
          example: sunset-sailing-tour-a54f004c
        startingPrice:
          type: number
          nullable: true
          description: >-
            Lowest price the listing can be booked for, in the brand's currency.
            Typically shown as the "from" price.
          example: 100
        summary:
          type: string
          nullable: true
          description: Short plain-text summary of the listing, used on cards and previews.
          example: A two-hour coastal cruise with drinks at golden hour.
        taxes:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                description: Unique identifier of the tax or fee.
                example: 7c9e1b0a-2d64-4f3b-8a15-90de2c47a611
              name:
                type: string
                nullable: true
                description: Display name of the tax or fee.
                example: Sales Tax
              percentage:
                type: number
                nullable: true
                description: >-
                  Tax rate as a percentage of the taxed amount. Null for
                  flat-amount taxes.
                example: 8.25
              amount:
                type: number
                nullable: true
                description: >-
                  Flat tax or fee amount in the brand's currency. Null for
                  percentage-based taxes.
                example: 5
              includedInPrice:
                type: boolean
                description: >-
                  Whether the tax is already included in the displayed price
                  rather than added on top at checkout.
                example: false
              isHostTax:
                type: boolean
                nullable: true
                description: >-
                  Whether the collected tax amount is distributed to the
                  experience host rather than retained by the brand.
                example: false
              order:
                type: integer
                minimum: 0
                nullable: true
                description: >-
                  Application order used when computing compounding taxes. Lower
                  values are applied first.
                example: 0
              showInAdvertisedPrice:
                type: boolean
                nullable: true
                description: >-
                  Whether this tax is included in the advertised price shown on
                  the storefront.
                example: false
              appliesTo:
                type: array
                items:
                  type: string
                  format: uuid
                nullable: true
                description: >-
                  IDs of other taxes or fees this percentage tax compounds on,
                  meaning its base includes those amounts in addition to the
                  subtotal. Empty when the tax applies to the subtotal only.
            required:
              - id
              - includedInPrice
          description: >-
            Taxes and fees applied to the listing's bookings. Empty for resource
            collections, where taxes are returned per resource.
        title:
          type: string
          nullable: true
          description: The listing's display title.
          example: Sunset Sailing Tour
        vibes:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                description: Unique identifier of the vibe.
                example: f047e2cb-1fb5-4374-8f3e-4bfcc6d7284e
              brandId:
                type: string
                format: uuid
                description: ID of the brand that defines the vibe.
                example: f2ce0a06-7997-4626-9532-65ac70f3a19c
              name:
                type: string
                description: Display name of the vibe.
                example: Winter
            required:
              - id
              - brandId
              - name
          description: >-
            Brand-defined vibe tags used to filter and merchandise listings on
            the storefront.
        integrationMeta:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                enum:
                  - adobeAnalytics
                  - alice
                  - gtmAnalytics
                  - ga4Analytics
                  - infor
                  - kicc
                  - mews
                  - opera
                  - revinate
                  - simphony
                  - stayntouch
                  - tealiumAnalytics
                description: The integration this metadata entry applies to.
                example: opera
              key:
                type: string
                enum:
                  - transactionCode
                  - integrationAddOn
                  - tenderId
                  - locRef
                  - rvcRef
                  - menuId
                  - menuItemId
                  - mewsTaxCodes
                description: >-
                  The integration-specific setting this entry configures, such
                  as a PMS transaction code or POS menu item reference.
                example: transactionCode
              value:
                oneOf:
                  - type: object
                    additionalProperties: {}
                  - type: array
                    items:
                      type: string
                description: >-
                  Value for the key. Its shape depends on the key:
                  transactionCode uses an object with code and description,
                  while mewsTaxCodes uses an array of strings.
            required:
              - type
              - key
              - value
          nullable: true
          description: >-
            Integration-specific metadata entries that map the listing's
            experience to external systems such as a PMS, POS, or analytics
            provider. Null for resource collections, where metadata is returned
            per resource group and resource.
        shouldValidateComplimentaryBooking:
          type: object
          properties:
            roomCharge:
              type: boolean
              description: >-
                Whether room-charge bookings must be validated against the
                property management system.
              example: true
            memberCharge:
              type: boolean
              description: >-
                Whether member-charge bookings must be validated against the
                membership system.
              example: false
          nullable: true
          description: >-
            Controls whether complimentary (no-charge) bookings paid via room
            charge or member charge are validated against the brand's property
            management or membership system. Null for resource collections,
            where the setting is returned per resource.
        waitlistId:
          type: string
          format: uuid
          nullable: true
          description: >-
            ID of the waitlist configured for the listing's resource group
            collection. Present only for resource collections; null when no
            waitlist is configured.
          example: 4d8a6b2e-1f93-4c07-ae5d-b7204c9e83f1
      required:
        - addOns
        - bookingAvailabilityMode
        - brandId
        - eventDates
        - eventStartTimes
        - hidePrice
        - id
        - included
        - isBookable
        - isExclusive
        - isMapped
        - isUnlisted
        - kind
        - medias
        - productLine
        - resourceGroups
        - taxes
        - vibes
  securitySchemes:
    Brand-API-Key:
      type: http
      scheme: bearer
      description: >-
        Your brand's secret API key, e.g. `Bearer
        way_sk_live_bhEqcn0i1fRoUEHBPjJkQA`. Older `Way-Brand-Id` +
        `Way-Secret-Key` credentials still work: see [Legacy
        authentication](/legacy-authentication).
    Organization-API-Key:
      type: http
      scheme: bearer
      description: >-
        Your organization's secret API key, e.g. `Bearer
        way_sk_live_ohEqcn0i1fRoUEHBPjJkQA`. Older `Way-Organization-Id` +
        `Way-Secret-Key` credentials still work: see [Legacy
        authentication](/legacy-authentication).

````