SeatpanoDocs

Integration recipes

Filter a listing on section click

map.on("select", ({ section }) => showOnly(section));
map.on("deselect", () => showAll());

Highlight the map from a listing card

card.querySelector("button").onclick = () => map.select(card.dataset.section);

Inventory-aware shading

Fetch availability from the API server-side or client-side, then:

const { sections } = await fetch(`${apiBase}/v1/venues/${venue}/availability?event=${event}`,
  { headers: { "X-Api-Key": key } }).then((r) => r.json());
map.setAvailability(sections); // null → show everything

Event configuration comes from the event

A Bulls game, a Blackhawks game and a concert are different products with different renders, polygons and surfaces. Pass the product for the page's event and the map will not show a dropdown:

Seatpano.load({ …, product: event.venueConfiguration /* "bulls" | "blackhawks" | "events-180" | "events-360" */ });

Omit product only on pages with no event context; the SDK then shows an in-map dropdown as a fallback.

"View 3D" behaviours

Deep links

Read section from your URL on load and call map.select(section) after the ready event. Write it back inside your select handler.

Replacing an existing 3D Digital Venue embed

The event model is intentionally close: DVM.loadModule("map_viewer", …)Seatpano.load(…); DVM click with nodes[0].idselect with section; enter/leavehover. Section ids are the same venue section keys.