Core concepts
Every SDK is built on the same four nouns, nested in a fixed hierarchy.
| Noun | What it is |
|---|---|
| Tour | One captured space, and the unit of sharing. Owns everything below it. |
| Floor | A level within the tour, ordered by number. May carry a floor-plan document. |
| Room | A space on a floor, with a RoomType. |
| Scan | A single panorama, with a pose in the floor plan and a processing status. |
Fetching a tour by id returns the whole tree in one response, so you rarely walk it request by request:
const tour = await NTController.tours.get(tourId);
for (const floor of tour.floors) {
for (const room of floor.rooms) {
console.log(room.name, room.scans.length);
}
}
Scan status
A scan is created before its images exist. panoramaURL, panoramaLowResURL
and thumbnailURL are all null until processing reaches FINISHED, so filter
on status before rendering rather than checking each URL.
| Status | Meaning |
|---|---|
EMPTY | Created, nothing uploaded yet |
QUEUED | Uploaded and waiting to be processed |
PROCESSING | Being processed |
FINISHED | Ready — image URLs are populated |
FAILED | Processing failed; no images will be produced |
const viewable = room.scans.filter(scan => scan.status === "FINISHED");
Visibility and slugs
A tour is PRIVATE by default: it is readable only with a token scoped to its
organisation. Setting visibility to PUBLIC mints a slug, and a tour with a
slug can be read without an authenticated user.
const updated = await NTController.tours.update(tourId, { visibility: "PUBLIC" });
// updated.slug is now set
Setting it back to PRIVATE revokes the slug, and every link built from it stops
resolving. Read slug from the update response rather than assuming its value —
making a tour public again does not necessarily reissue the same one.
Identifiers
Tours, floors, rooms and scans each carry an id assigned by the API. Tours,
rooms and scans additionally carry a localId assigned by the capture device.
Address everything by id; localId exists to link a room to its outline in the
floor-plan document.
A note on naming
The product calls these tours, and so does every SDK surface. A few
underlying API paths and exported type names still say property — the same
entity under its earlier name. PropertyItem is a tour; PropertyListItem is a
tour in a listing.