Skip to content

Integrations: configuration or development?

If you already run a facility-management system, a BMS historian, or a monitoring platform, and you want that data to show up on the building graph — for most cases this is configuration, not a development project.

The rest of this section is written for that reader: someone who is not building a module and does not want to. (If you are building one, start at Getting started instead.)

Three levels, and what each actually costs

What you doWho does itEffort
1. Post data over HTTPYour system sends values keyed by a room identifier to one endpoint. No SDK, no package, no module.Whoever maintains the source systemHours. One endpoint, one payload shape.
2. No-code flow builderWire it in n8n with our Building OS nodes: schedule, retry, transform, branch — all in the tool's UI.An operations engineerHours, and no code at all.
3. Your own module on the SDKOnly when you need your own screen inside the platform and your own logic behind it.A developer teamDays, plus a release cycle.

The common case is level 1. "Our tickets and our sensor readings should appear on the plan, coloured by status" is one endpoint per data set. Nobody writes platform code — not you, not us.

Level 3 exists because some partners genuinely want to ship a product surface of their own inside Building OS. It is not the price of admission for getting your data in.

Which level do you need?

  • "I want our rent status / occupancy / CO₂ per room to colour the floor plan."Level 1, Into the twin.
  • "Our monitoring system streams pressure and temperature readings and I want them live on the twin."Level 1 (telemetry), same page.
  • "Same thing, but I'd rather not write a cron job or a retry loop."Level 2, same contract, driven from n8n. (Readings can also arrive over MQTT — see Into the twin.)
  • "When a ticket changes state in your system, our system should hear about it."Out of the twin — read it before you plan, because outbound is thinner than inbound today and that page says exactly where the edges are.
  • "Tickets should exist in both systems and stay in step."Both ways, which is mostly about deciding which side owns the record before you write anything.
  • "I want our own workspace, with our own screens, inside Building OS."Level 3: Your first module.

What "one endpoint" looks like

A data layer is one value per room, on top of the building graph. Create the layer once, then upload values as often as you like:

bash
# 1. Create the layer (once)
curl -X POST "$TV_API/api/v1/buildings/$BUILDING_ID/data-layers" \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"key":"fm-open-tickets","name":"Открытые заявки","valueType":"NUMBER"}'

# 2. Upload values (as often as you like) — keys are room identifiers
curl -X PUT "$TV_API/api/v1/buildings/$BUILDING_ID/data-layers/$LAYER_ID/values" \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"keyBy":"externalId","values":{"3lPQxG$0v9zRZ1mB7kYtE2":4,"1aBcDe$FgHiJkLmNoPqRs":0}}'

That is the whole integration for a "how many open tickets per room" layer. The full contract — value types, bulk limits, what comes back — is on Into the twin.

Where the line falls

We doYou do
The building graph: rooms, storeys, equipment, and their identifiers.Decide which of your records maps to which room.
The endpoints, their auth, their validation, their storage.Call them, on your own schedule, from your own system.
Rendering the layer on the 2D plan and the BIM model.Choose the value type and (optionally) the legend.
Issue the credentials and the sandbox.Keep the credentials in your secret manager.

You do not need our people on the call to add a layer, and you do not need to wait for a platform release. Once you hold a credential and a buildingId, everything on these pages is available to you.

In this section

  • Into the twin — pushing data in: layers keyed by room, and time series from sensors.
  • Out of the twin — webhooks, the live event socket, and an honest account of what is not yet deliverable outward.
  • Both ways — syncing tickets, and deciding which side owns the record.
  • Identity — how a row in your database finds the right room. This is where integrations actually break.
  • Getting access — credentials, a sandbox, and what is gated today.

Built on the Tango Vision platform. Questions? developers@tango.vision