Discover and retrieve bookable listings
Listings API V1 (1.0.0)
The Listings API V1 is a venue-aggregated discovery interface.
The response root carries meta and listings[]. Each entry in listings[] is a ListingGroup — one per operator (venue-group / chain), carrying a groupName and an items[] array.
Each item represents a single venue (or a standalone event when no venue is known): it carries the venue name, a location, and a capabilities[] array. Each entry in capabilities[] is a Listing with exactly one capability (table_reservation or event_ticket), and carries its own photos[]. A venue that also hosts a ticketed event therefore yields a single item with two capabilities — one for the venue, one for the event.
All bookable units (venue products, event ticket types, future capability types) are unified under a single bookableProducts[] array. Every entry is a single Bookable shape; capability-specific fields are nullable and the parent Listing's capability sets the context.
Temporal information (venue opening hours, event occurrences, blackout dates) is unified under a single availabilityOccurrence[] field of CalendarRules. Both capabilities use the same shape.
Pre-order assets (packages, menus) are unified under a single preorders container — applicable to either capability when the listing supports pre-orders.
Listing.id (venue or event, as returned in /v1/listings) is 3 segments: {VenueGroupId}|{RmsSlug}|{ResourceId}. For a hybrid entity the event-side row uses the EventExt's CompositeId (different RmsSlug + ResourceId) so the two rows are unambiguous.
Bookable.compositeId (a specific bookable product/ticket type — used in bookableProducts[], and as the compositeId in /v1/availabilities and /v1/orders) is 4 segments: {VenueGroupId}|{RmsSlug}|{ResourceId}|{AdditionalId}. These are two different identifiers for two different things, not two interchangeable formats for the same one — a Listing.id never appears where a Bookable.compositeId is expected, or vice versa.