Discover and retrieve bookable listings
Listings API V1 (2.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 media[]. 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.
listingId (Listing.id, as returned in /v1/listings and taken as the path parameter on GET /v1/listings/{listingId}) identifies a venue or a standalone event. It is 3 segments: {VenueGroupId}|{RmsSlug}|{ResourceId}. For a hybrid entity the event-side row uses the EventExt's own resource id (different RmsSlug + ResourceId) so the two rows are unambiguous.
compositeId (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 listingId never appears where a compositeId is expected, or vice versa.