Query Parameters
Intent shortcuts
Every FloorPlan intent is addressable straight from the URL: the intent name is the query key, its arguments are the value. The set of keys grows automatically with the SDK's intent schema — these all work today:
| Description | Example |
|---|---|
| Select a booth by name or external id. | ?selectBooth=A-12 |
| Select an exhibitor. | ?selectExhibitor=Acme |
| Open whatever a slug names (booth, session, …). | ?select=biogreen-ag |
| Select a category. | ?selectCategory=food |
Open a list panel (bookmarks, sessions, …). | ?showList=bookmarks |
| Launch a tour by id. | ?selectTour=t-1 |
| Switch the UI language. | ?changeLanguage=fr |
| Enter the route-building mode. | ?startBuildRoute |
| Build a route through waypoints, first to last. | ?selectRoute[0]=A-12&selectRoute[1]=B-30 |
| The same route over accessible segments only. | ?selectAccessibleRoute[0]=A-12&selectAccessibleRoute[1]=B-30 |
| Show a pathway, highlighting entities along it. | ?showPathway[0]=p-1&showPathway[1][0]=ext-1 |
Place the visitor position; true focuses on it. | ?selectCurrentPosition[0][x]=100&selectCurrentPosition[0][y]=200&selectCurrentPosition[1]=true |
| Set the map-chrome visibility. | ?setVisibility[header]=false |
Several intents combine in one URL and play in order (?changeLanguage=fr&selectBooth=A-12). Multi-argument intents use the bracketed form (?intents[0][name]=…&intents[0][args][0]=…), which also allows repeating the same intent.
?changeLanguage= reports a language the plan does not ship as an SDK error. Point links at a language the plan actually has, or set disableRuntimeAlerts in the embed options.
camera
The initial camera position, in the schema-typed form (numbers are validated; an invalid field is ignored rather than breaking the load):
| Description | Example |
|---|---|
| Center in projected "x, y". | ?camera[x]=13595.17&camera[y]=6878.86 |
| Center in WGS84 "lat, lng". | ?camera[lat]=52.322&camera[lng]=9.8144 |
| Floor/level name. | ?camera[floor]=2 |
| Map rotation (0–360 degrees). | ?camera[bearing]=180 |
| Camera animation duration in ms. | ?camera[zoomTime]=3000 |
Fields combine freely in one URL. The same shape is available at runtime as the setCamera intent and the FloorPlan.setCamera() method.
visibility
The initial visibility of the map chrome, in the schema-typed form (booleans are validated; an invalid field is ignored rather than breaking the load):
| Description | Example |
|---|---|
| Header with logos and the free/demo badge. | ?visibility[header]=false |
| Map controls. | ?visibility[controls]=false |
| Floor selector. | ?visibility[levels]=false |
| Overlay panel — search, lists, etc. | ?visibility[overlay]=false |
| Search-filter buttons row. | ?visibility[searchButtons]=true |
searchButtons follows overlay when omitted. An explicit true keeps the buttons while the overlay is hidden — clicking one opens the overlay on demand: ?visibility[overlay]=false&visibility[searchButtons]=true (also combines with the deprecated ?noOverlay=true: ?noOverlay=true&visibility[searchButtons]=true).
Fields combine freely in one URL; every omitted element resets to visible. The same shape is available at runtime as the setVisibility intent and the FloorPlan.setVisibility() method.
?visibility[overlay]=false (NoOverlay) hides:
- Menu
- Search results
- Exhibitor detail view
- Booth detail view
- Bookmarks
- Visited list
- Language selector
- Category browser
- Wayfinding / directions panel
- Filter panel
- Sessions (with its filters)
- Speakers (with its filters)
- Tours
- Tour points
- Route planner
- Event detail view
- Speaker detail view
filters
The initial search filters, in the schema-typed form (values are plain names, matched case-insensitively; an unknown name is ignored with a console warning):
| Description | Example |
|---|---|
| Pre-select categories and open the category filter panel. | ?filters[categories][0]=food |
| Pre-select a single POI type (activates its filter button). | ?filters[poiType]=cafe |
| Pre-select several POI types. | ?filters[poiTypes][0]=cafe&filters[poiTypes][1]=wc |
| Open the exhibitors list. | ?filters[exhibitors]=true |
Categories and POI types are mutually exclusive — when both are given, the categories win. The legacy ?categories=, ?poiType=, ?poiTypes= and ?exhibitors=true keys keep working as aliases and remain the form the floor plan writes back to the URL as the visitor changes filters.
layer
Sets the floor shown on load, matched by the floor's short label — the abbreviation shown in the floor selector (case-insensitive).
| Description | Example |
|---|---|
| Show the "Level 1" floor on load. | ?layer=L1 |
Search text
| Description | Example |
|---|---|
| Displays matching entities. | ?abc |
| Displays entity details. | ?biogreen-ag |
bookmarks
| Description | Example |
|---|---|
| Open the bookmarks list. | ?bookmarks |
disableBookmarked
| Description | Example |
|---|---|
| Disables the ability to add to bookmarks. | ?disableBookmarked=true |
language
| Description | Example |
|---|---|
| Opens the language selector. | ?language |
route
Colon-separated list of route points.
route:<Entity name>:<Entity name>
| Description | Example |
|---|---|
| Displays the route. | ?route:42-23:101-12 |
| Displays the accessible route. | ?route:42-23:101-12:true |
heatmap
Heatmap mode, in the schema-typed form: a non-empty heatmap[…] engages the mode unless heatmap[enabled]=false, so ?heatmap[variant]=yah alone is enough. variant picks the dataset (booths — booth/exhibitor view stats, the default — or yah for "You are here" QR-code scans); kiosk=true narrows the yah variant to kiosk positions. Heatmap mode freezes the page URL for the whole session. The access token t stays a separate parameter.
| Description | Example |
|---|---|
| Booth-visit heatmap. | ?heatmap[enabled]=true&t=TOKEN |
| Heatmap view for "You are here" QR codes. | ?heatmap[variant]=yah&t=TOKEN |
| Heatmap mode for kiosks. | ?heatmap[variant]=yah&heatmap[kiosk]=true&t=TOKEN |
The legacy aliases keep working:
| Description | Example |
|---|---|
| Shows the heatmap. | ?heatmap=true&t=TOKEN |
| Heatmap view for "You are here" QR codes. | ?heatmap=true&type=yah&t=TOKEN |
| Heatmap mode for kiosks. | ?heatmap=true&type=yah&subtype=kiosk&t=TOKEN |
blue-dot
blue-dot=<X>,<Y>,<Z>
| Description | Example |
|---|---|
| Sets the blue-dot coordinates. | ?blue-dot=8022.44384765625,8423.1962890625,1 |
consent
| Description | Example |
|---|---|
| Applies a granted consent — no prompt, analytics on. | ?consent=granted |
| Applies a denied consent — no prompt, analytics off. | ?consent=denied |
Without the parameter the decision is the visitor's (ask): visitors in GDPR regions get the consent prompt.
hideHeaderLogo
| Description | Example |
|---|---|
| Hides the header logo and the ExpoFP logo. | ?hideHeaderLogo=true |
hideLogoInBooth
| Description | Example |
|---|---|
| Hides booth logos. | ?hideLogoInBooth=true |
disableFeatured
| Description | Example |
|---|---|
| Disables the featured view. | ?disableFeatured=true |
disableGps
| Description | Example |
|---|---|
| Disables GPS. | ?disableGps=true |
monochrome
| Description | Example |
|---|---|
| Sets the monochrome view. | ?monochrome=true |
kiosk
Kiosk mode has two independent inputs: the mode toggle and the anchor (where the device stands and how its camera is framed), in the schema-typed form:
| Description | Example |
|---|---|
| Enables kiosk mode. | ?kiosk=1 |
| Disables kiosk mode. | ?kiosk=0 |
| Anchor position in plan coordinates. | ?kiosk[x]=6517.5&kiosk[y]=3826 |
| Anchor floor and heading. | ?kiosk[z]=1&kiosk[heading]=90 |
| Per-device UI scale and icon size. | ?kiosk[uiScale]=1.2&kiosk[iconSizePercent]=120 |
The anchor node is also settable from the manifest or embed options (config.kiosk); a kiosk saved on the device itself (the ?setkiosk flow) wins over it.
A separate, narrower channel carries the anchor position between devices: the QR code a kiosk shows for a route appends kiosk_x, kiosk_y and kiosk_z, so the phone that scans it can resolve the route's starting point. Those three keep working. The other kiosk_* keys are retired — the QR stopped emitting them long ago, and the schema-typed ?kiosk[…] form above is the way to set an anchor.
A scanned route QR leaves the phone in kiosk mode
Opening a link that carries kiosk_x/kiosk_y/kiosk_z puts the receiving device into kiosk mode, and the device remembers it — later visits to the same plan start in kiosk mode too, with no parameter present. To take a phone back out, set localStorage['kiosk'] = '0' on it, or open ?kiosk=0.
TIP
On a device without an address bar, type kiosk=1 or kiosk=0 into the search field and press Enter to toggle the mode.
exhibitors
| Description | Example |
|---|---|
| List filtered by exhibitor display names (comma-separated). | ?exhibitors=BioCycle Africa,UrbanQuest Design |
Values match by exact display name — every exhibitor bearing a listed name is included. Because the list is comma-separated, a name that itself contains a comma cannot be addressed through this parameter.
viewermode
Seeds a sticky per-browser preference: the choice is stored under the efp-viewerMode localStorage key (a legacy ___viewer_mode value is still honored) and persists across loads. ?viewermode=0 clears the stored preference rather than forcing the mode off — a viewerMode set by the embedding page still applies.
| Description | Example |
|---|---|
Enables viewer mode (true also accepted). | ?viewermode=1 |
Clears the stored preference (false also accepted). | ?viewermode=0 |
previewMode
Preview mode hides booth prices and buy/reserve actions. Like viewermode, the value seeds a sticky per-browser preference — stored under the efp-previewMode localStorage key (a legacy ___preview_mode value is still honored); ?previewMode=false clears it.
| Description | Example |
|---|---|
| Enables preview mode. | ?previewMode=true |
| Clears the stored preference. | ?previewMode=false |
uiscale
Scales the floor plan UI. Accepts 0.8–1.4 (a comma decimal like ?uiscale=1,2 works too); values outside that range are ignored. The value seeds a sticky per-browser preference stored under the efp-uiScale localStorage key (a legacy ___ui-scale value is still honored).
| Description | Example |
|---|---|
| Renders the UI at 120%. | ?uiscale=1.2 |
resetuiscale
| Description | Example |
|---|---|
| Clears the stored UI-scale preference. | ?resetuiscale |
debug
TIP
Alternatively, you can type debug=1 into the search field to enable it or debug=0 to disable it, and then press Enter.
The choice is stored under the efp-debugMode localStorage key, the parameter is removed from the address bar, and the page reloads once to apply it.
| Description | Example |
|---|---|
| Enables debug mode. | ?debug=1 |
| Disables debug mode. | ?debug=0 |
setkiosk
| Description | Example |
|---|---|
| Kiosk creation and configuration mode. | ?setkiosk |
Deprecated parameters
These are accepted but scheduled for removal — migrate your links when convenient. When a link carries both forms, the canonical one wins:
| Deprecated | Use instead |
|---|---|
?noOverlay=true | ?visibility[overlay]=false (false → [overlay]=true) |
?allowConsent=true | ?consent=granted (?allowConsent=false → ?consent=denied) |
?agenda | ?showList=sessions |
?allowConsent also remains accepted in the event data and in the load() options. ?agenda is the sessions panel's old spelling — the rename to sessions (Oct 2025) left no URL alias, so the key did nothing until this translation; the mobile SDKs emit it. A booth slugged agenda is no longer reachable as ?agenda.
Legacy grammar
The compact deep-link forms the plan has always spoken. They are frozen — no new keys or forms are added — and most have a canonical equivalent. Use the canonical form in new links.
They carry no removal date, and for a reason worth knowing: the plan still writes these forms into the address bar as the visitor navigates (open the bookmarks panel and the URL becomes ?bookmarks). They stay the address-bar spelling until the URL writer itself moves over.
| Legacy | Canonical |
|---|---|
?<slug> | ?select=<slug> |
?bookmarks, ?visited, ?sessions, ?exhibitors, ?speakers, ?tours, ?language | ?showList=<panel> |
?tour=<id> | ?selectTour=<id> |
?route:<to>:<from>:false | ?selectRoute[0]=<from>&selectRoute[1]=<to> |
?route:<to>:<from>:true | ?selectAccessibleRoute[0]=<from>&…[1]=<to> |
?planner=a:b | ?openPlanner[items][0]=a&openPlanner[items][1]=b |
?planner&source=bookmarks | ?openPlanner[fromBookmarks]=true |
?categories=, ?poiType=, ?poiTypes= | ?filters[categories][0]=… |
The route form does not translate key for key
- The order is reversed. Legacy is
route:<to>:<from>;selectRoutetakes waypoints first to last, so a mechanical swap reverses the route. - A route with no FROM (
?route:A-12, the start filled in from the kiosk anchor) has no canonical form —selectRouteneeds both ends. &title=is lost:selectRoutehas no title argument.
No canonical form exists for ?kiosk=1|0 (kiosk mode — ?kiosk[x]/[y] is the anchor, an independent input), ?exhibitors=a,b (multi-select; ?selectExhibitor takes one), the one-shots ?blue-dot=, ?viewermode=, ?previewMode=, ?uiscale=, ?resetuiscale, or the ?debug / ?setkiosk commands.
visibility rebuilds, noOverlay does not
?visibility[…] sets the whole map chrome at once: every element it omits resets to visible. So ?visibility[overlay]=false on a plan that also hides, say, the header brings that header back. List every element you want hidden — ?visibility[overlay]=false&visibility[header]=false — rather than translating ?noOverlay=true key for key.