Skip to main content

Query signature

building(siteId: String!, id: String, name: String, nameMatch: NameMatch): [Building!]!
All root queries require siteId to scope to your site. See multi-tenant scoping. Examples below omit siteId for brevity.

Arguments

ArgumentTypeDescription
siteIdString!Required. Scopes the query to a specific site
idStringFilter to a specific building
nameStringFilter by name. Case-insensitive substring match by default
nameMatchNameMatchCONTAINS (default) or EXACT

Return fields

FieldTypeDescription
uriString!Full entity URI
idID!Building identifier
nameString!Building name
typeString!Brick class (always Building)
ifcIdStringIFC model element ID. Links to the BIM model
locations[Location!]!Direct child locations. Accepts name, nameMatch, is, recursive filters
equipment[Equipment!]!Direct equipment in this building. Accepts name, nameMatch, is, recursive filters
zones[Zone!]!Direct zones. Accepts name, nameMatch, is, recursive filters
systems[System!]!Direct systems. Accepts name, nameMatch, is, recursive filters
points[Point!]!Direct points. Accepts name, nameMatch, is, recursive filters
properties[EntityProperty!]!Static metadata as structured objects (name, value, unit)

Name matching: CONTAINS vs EXACT

The name argument supports two matching modes via nameMatch:
ModeBehaviorExampleMatches
CONTAINS (default)Case-insensitive substringname: "Pool"”One Pool Street”, “Pool House”
EXACTExact string matchname: "One Pool Street", nameMatch: EXACT”One Pool Street” only
When to use which:
ScenarioUseWhy
Exploring / discovering entitiesCONTAINSDon’t know exact names yet, so cast a wide net
AI agent searching a buildingCONTAINSFuzzy, forgiving, finds partial matches
Linking from another system by nameEXACTNeed the precise entity, no false positives
Following up after a discovery queryEXACTAlready found the name, now pin it down
You almost never need to specify nameMatch. CONTAINS is the default and works for most queries. Only use EXACT when you need precision and already know the full name.

Examples

List all buildings

{ building { id name type } }
{
  "data": {
    "building": [
      { "id": "B001", "name": "One Pool Street", "type": "Building" }
    ]
  }
}

Find a building by name (CONTAINS, default)

{ building(name: "Pool") { id name } }
Returns all buildings whose name contains “Pool” (case-insensitive). No need to specify nameMatch since CONTAINS is the default.
{
  "data": {
    "building": [
      { "id": "B001", "name": "One Pool Street" }
    ]
  }
}

Find a building by exact name (EXACT)

{ building(name: "One Pool Street", nameMatch: EXACT) { id name } }
Returns only buildings with this exact name, with no substring matching.

Get a specific building

{
  building(id: "B001") {
    name
    equipment { id name type }
  }
}

Spatial tree (wings, floors, zones)

{
  building(id: "B001") {
    name
    locations {
      name
      type
      locations {
        name
        type
      }
    }
  }
}
{
  "data": {
    "building": {
      "name": "One Pool Street",
      "locations": [
        {
          "name": "Tower East",
          "type": "Wing",
          "locations": [
            { "name": "Level 01", "type": "Floor" },
            { "name": "Lobby 1", "type": "HVAC_Zone" },
            { "name": "Research Hub", "type": "HVAC_Zone" }
          ]
        },
        {
          "name": "Tower West",
          "type": "Wing",
          "locations": [
            { "name": "Level 01", "type": "Floor" },
            { "name": "Library", "type": "HVAC_Zone" },
            { "name": "Common Room", "type": "HVAC_Zone" }
          ]
        }
      ]
    }
  }
}

Find locations by name

{
  building(id: "B001") {
    locations(name: "Tower East", nameMatch: EXACT) {
      name
      type
      equipment { name type }
    }
  }
}

Only floors (by Brick class)

{
  building(id: "B001") {
    locations(is: "Floor") {
      name
    }
  }
}

All equipment in a building (recursive)

{
  building(id: "B001") {
    equipment(recursive: true) {
      name
      type
      location { name }
    }
  }
}
Use recursive: true to get equipment at all levels of the spatial hierarchy, not just directly placed on the building.

All points in a building (recursive)

{
  building(id: "B001") {
    points(recursive: true, is: "Temperature_Sensor") {
      name
      type
      unit
    }
  }
}
Combines recursive: true with is to find every temperature sensor in the entire building.

Nested field filters

All nested collection fields (locations, equipment, zones, systems, points) support name, nameMatch, is, and recursive parameters:
{
  building(id: "B001") {
    # Filter locations by name and class
    locations(name: "Tower", is: "Wing") {
      name
      type
      # Nested locations also support the same filters
      equipment(is: "AHU", recursive: true) {
        name
        type
      }
    }
  }
}