Skip to main content

Methods

Use the interactive API test page to run the player in an iframe and try send, set, and subscriptions against the bundled seenic-external-api.js.

  • Methods are sent via api.send(type, payload) and return a Promise when the iframe responds. Use await api.send(...) to wait until the method has completed.
  • Settings are applied via api.set(type, payload) and affect how the API interprets IDs in subsequent methods.

Unit ID mapping (set)

setUnitList

Use: api.set(type, payload) — sets API execution settings. Not a one-off call: it configures the player so you can use your own internal unit IDs everywhere.

Call api.set('setUnitList', payload) with a mapping object: each key is your website's unit ID, each value is the corresponding Seenic unit ID.

payload: { [websiteUnitId: string]: string }  // your ID → Seenic unit ID

After this, in all other methods (locateUnit, openUnitCard, setFilteredUnits, etc.) you can pass your website unit IDs; the player will resolve them to Seenic unit IDs using this mapping.

Example:

// Map your internal IDs to Seenic unit IDs
api.set("setUnitList", {
"my-unit-101": "seenic-abc-123",
"my-unit-102": "seenic-def-456",
});

// Now you can use your own IDs in methods (await to know when the player has finished)
await api.send("locateUnit", { unitId: "my-unit-101" });
await api.send("openUnitCard", { unitId: "my-unit-102" });

Call setUnitList once after the player is ready (e.g. after a ready or similar event), or whenever the mapping changes.


Data & lists

getMarkersList()

Returns all markers that are inside the player as a JSON object list.

Example:

const markersList = await api.send("getMarkersList");
console.log("Markers in player:", markersList);
// Use markersList to build your own UI or filter logic

getTourData

Returns all tour data: Cycles, Views, Points, etc. Use the result to pass IDs into setPoint, setCycleView, and setCycle.

Example:

const tourData = await api.send("getTourData");
// tourData contains cycles, views, points — use their IDs in navigation
const firstPointId = tourData?.points?.[0]?.id;
if (firstPointId != null) {
await api.send("setPoint", { pointId: firstPointId });
// Camera is now at the point
}

Events from iframe

onMarkerClick

Event sent from the iframe when the user clicks a marker. Subscribe with api.subscribe('on_marker_click', handler).

Payload: { id, type, formularesult, unitId }

Example:

api.subscribe("on_marker_click", async (payload) => {
console.log("Marker clicked:", payload.id, payload.unitId);
await api.send("openUnitCard", { unitId: payload.unitId });
// openUnitCard has completed; card is visible
});

Filtering

setFilteredUnits(payload)

Accepts a JSON object list of filtered units that should be shown inside the player.

Example:

// Show only these units in the player (e.g. after user applies filters)
const filteredUnits = [
{ id: "seenic-unit-1" /* ... */ },
{ id: "seenic-unit-2" /* ... */ },
];
await api.send("setFilteredUnits", { units: filteredUnits });
// Filter applied; only these units are shown

setFilteredMarkers()

(TODO) Accepts a list of filtered markers to show inside the player.


locateUnit(unitId)

Accepts a Unit ID (any variant: Scenic, PMS, etc.) and locates the marker with this unit ID in the scene.

Example:

// If you use setUnitList, pass your website unit ID
await api.send("locateUnit", { unitId: "my-unit-101" });
// Or pass a Seenic unit ID directly — await so you know when the camera has moved
await api.send("locateUnit", { unitId: "123" });

locateMarker(markerId)

Accepts a Seenic Marker ID and locates the marker on the 3D part with a marker blinking effect.

Example:

const markersList = await api.send("getMarkersList");
const firstMarkerId = markersList?.[0]?.id;
if (firstMarkerId) {
await api.send("locateMarker", { markerId: firstMarkerId });
// Marker located and blinking
}

setPoint(pointId)

Accepts a point ID collected from getTourData() and sets the camera/view to that point inside the player.

Example:

const tourData = await api.send("getTourData");
const pointId = tourData?.points?.[0]?.id;
await api.send("setPoint", { pointId });

setCycleView(cycleId, viewId)

Sets the active Cycle and View (IDs from getTourData()).

Example:

await api.send("setCycleView", { cycleId: 1, viewId: 2 });
// Cycle and view are now active

setCycle(cycleId)

Sets the active Cycle on the standard view (cycle ID from getTourData()).

Example:

await api.send("setCycle", { cycleId: 1 });
// Cycle is now active

UI & overlay

openUnitCard(unitId)

Opens the Unit Card inside the player for the given unit ID.

Example:

await api.send("openUnitCard", { unitId: "my-unit-101" });
// Unit card is open

hideInteractiveElements()

Hides selectables and markers (pure 3D overview mode).

Example:

await api.send("hideInteractiveElements");
// Interactive elements are hidden (pure 3D overview). To show again, reload or use player controls.

captureScreenshot

Makes a screenshot of the 3D scene without interactive elements and triggers a download.

Example:

await api.send("captureScreenshot");
// Screenshot taken and download started

getScreenshot

Makes a screenshot of the 3D scene without interactive elements and returns it as a base64-encoded string (instead of downloading a file).

Response: { base64: string }

Example:

const { base64 } = await api.send("getScreenshot");
// base64 is a base64-encoded image string (you can store it or upload it)

setFullscreenMode(value)

Enables or disables fullscreen mode.

Example:

await api.send("setFullscreenMode", { value: true });
// Now in fullscreen
await api.send("setFullscreenMode", { value: false });
// Fullscreen exited

setDollhouseMode(value)

Enables or disables dollhouse view/mode.

Example:

await api.send("setDollhouseMode", { value: true });
// Dollhouse mode on
await api.send("setDollhouseMode", { value: false });
// Dollhouse mode off

Zoom

zoomIn(value)

Zooms the scene in.

Example:

await api.send("zoomIn", { value: 1.2 });
// Zoom applied

zoomOut(value)

Zooms the scene out.

Example:

await api.send("zoomOut", { value: 0.8 });
// Zoom applied

Camera

setCameraPose(pose)

Sets the camera pose.

Example:

await api.send("setCameraPose", {
pose: {
position: { x: 0, y: 0, z: 10 },
rotation: { x: 0, y: 0, z: 0 },
// structure depends on the player implementation
},
});
// Camera pose updated

App state

getAppState()

Returns the global app state.

Example:

const state = await api.send("getAppState");
console.log("Current app state:", state);
// state is ready to use

subscribeToAppState(handler)

Runs a custom handler on the global app state on every heartbeat. Subscribe via api.subscribe('subscribeToAppState', handler) so the iframe sends state updates to your handler.

Example:

const unsubscribe = api.subscribe("subscribeToAppState", (data) => {
console.log("App state update:", data);
});
// Call unsubscribe() when you no longer need updates

Location & mode

setLocation(locationId)

Switches to the location view/mode for the given location ID.

Example:

await api.send("setLocation", { locationId: "loc-123" });
// Now in location view/mode for the given location

Spinner

show_spinner

Shows the loading spinner. No payload.

Example:

await api.send("show_spinner");
// Spinner is visible

hide_spinner

Hides the loading spinner. No payload.

Example:

await api.send("hide_spinner");
// Spinner is hidden

set_spinner_state

Sets spinner state.

Payload: { floor: number, frame: number, zoom: number }

Example:

await api.send("set_spinner_state", { floor: 2, frame: 27, zoom: 1.5 });
// Spinner state updated