Skip to main content
All root queries require siteId to scope to your site. See multi-tenant scoping. Examples below omit siteId for brevity.

building

Query buildings in your account.

Signature

building(siteId: String!, id: String, name: String, nameMatch: NameMatch): [Building!]!

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 that 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)

Examples

List all buildings:
{ building { id name type } }
{
  "data": {
    "building": [
      { "id": "B001", "name": "One Pool Street", "type": "Building" }
    ]
  }
}
Find by name:
{ building(name: "Pool") { id name } }
{
  "data": {
    "building": [
      { "id": "B001", "name": "One Pool Street" }
    ]
  }
}
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" }
          ]
        }
      ]
    }
  }
}

equipment

Query building equipment with semantic class resolution.

Signature

equipment(
  siteId: String!,
  id: String,
  name: String,
  nameMatch: NameMatch,
  locationId: String,
  locationName: String,
  systemId: String,
  is: String,
  hasProperty: String,
  propertyValue: String
): [Equipment!]!

Arguments

ArgumentTypeDescription
siteIdString!Required. Scopes the query to a specific site
idStringFilter to a specific equipment
nameStringFilter by equipment name (case-insensitive substring by default)
nameMatchNameMatchCONTAINS (default) or EXACT
locationIdStringEquipment at or below this location (transitive)
locationNameStringEquipment at or below locations matching this name
systemIdStringEquipment belonging to this system
isStringBrick class name (resolves all subtypes)
hasPropertyStringOnly entities with this property defined
propertyValueStringExact match on the property value (requires hasProperty)

Return fields

FieldTypeDescription
uriString!Full entity URI
idID!Equipment identifier
nameString!Equipment name
typeString!Brick class (e.g., AHU, VAV, FCU)
typeHierarchy[String!]!Full class hierarchy from leaf to root (e.g., ["AHU", "HVAC_Equipment", "Equipment", "Entity", "Class"])
ifcIdStringIFC model element ID that links to the BIM model. null if not from IFC
points[Point!]!Sensors, setpoints, and commands. Accepts name, nameMatch, is filters
parts[Equipment!]!Sub-components of this equipment. Accepts name, nameMatch, is filters
partOfEquipmentParent equipment this is a component of
feeds[Equipment!]!Equipment this one feeds. Accepts name, nameMatch, is filters
fedBy[Equipment!]!Equipment that feeds this one. Accepts name, nameMatch, is filters
upstream[Equipment!]!Transitive upstream traversal. Accepts maxDepth, medium, is filters
downstream[Equipment!]!Transitive downstream traversal. Accepts maxDepth, medium, is filters
locationLocationPhysical location of this equipment
systems[System!]!Systems this equipment belongs to
properties[EntityProperty!]!Static metadata

Examples

Find by name:
{
  equipment(name: "AHU") {
    name
    type
    location { name }
  }
}
{
  "data": {
    "equipment": [
      { "name": "TE01-XX-AHU-001", "type": "AHU", "location": { "name": "Tower East" } },
      { "name": "TE01-XX-AHU-002", "type": "AHU", "location": { "name": "Tower East" } },
      { "name": "TW01-XX-AHU-001", "type": "AHU", "location": { "name": "Tower West" } },
      { "name": "TW01-XX-AHU-002", "type": "AHU", "location": { "name": "Tower West" } }
    ]
  }
}
All HVAC equipment:
{
  equipment(is: "HVAC_Equipment") {
    name
    type
  }
}
The is argument resolves the full Brick class hierarchy. HVAC_Equipment matches AHUs, VAVs, FCUs, pumps, fans, dampers, valves, and every HVAC subtype. Equipment by property:
{
  equipment(hasProperty: "controllerName", propertyValue: "PSW TE01-XX-MCC-001") {
    name
    type
    location { name }
  }
}
{
  "data": {
    "equipment": [
      { "name": "TE01-XX-AHU-001", "type": "AHU", "location": { "name": "Tower East" } },
      { "name": "TE01-L01-VAV-001", "type": "VAV", "location": { "name": "Lobby 1" } },
      { "name": "TE01-L01-VAV-002", "type": "VAV", "location": { "name": "North Stair 1" } }
    ]
  }
}

point

Query sensors, setpoints, and commands on equipment.

Signature

point(
  siteId: String!,
  id: String,
  name: String,
  nameMatch: NameMatch,
  equipmentId: String,
  locationId: String,
  locationName: String,
  zoneId: String,
  systemId: String,
  is: String,
  equipmentIs: String,
  hasProperty: String,
  propertyValue: String
): [Point!]!
Also available as a nested field on Equipment, Zone, Location, Building, and System types (without siteId, since they are already scoped).

Arguments

ArgumentTypeDescription
siteIdString!Required. Scopes the query to a specific site
idStringFilter to a specific point
nameStringFilter by point name (case-insensitive substring by default)
nameMatchNameMatchCONTAINS (default) or EXACT
equipmentIdStringPoints on this equipment
locationIdStringPoints at or below this location (transitive)
locationNameStringPoints at or below locations matching this name
zoneIdStringPoints in this zone
systemIdStringPoints on equipment in this system
isStringBrick class name (resolves all subtypes)
equipmentIsStringFilter by equipment Brick class (e.g., VAV). Combine with locationName for cross-cutting queries
hasPropertyStringOnly points with this property defined
propertyValueStringExact match on property value (requires hasProperty)

Return fields

FieldTypeDescription
uriString!Full entity URI
idID!Point identifier
nameString!Point name
typeString!Brick class (e.g., Zone_Air_Temperature_Sensor)
typeHierarchy[String!]!Full class hierarchy from leaf to root
unitStringEngineering unit (DEG_C, DEG_F, PA, CFM, etc.)
equipmentIdString!ID of the parent equipment
timeseriesIdStringTimeseries UUID for the timeseries REST API. null if not connected to a time series source
writableStringWhether the point is writable/commandable (e.g., "true" or "false"). null if writability is unknown
valueTypeStringData type of the point’s value (e.g., "float", "boolean", "integer", "string"). null if not specified
currentValuePointValueLatest reading (last 5 minutes). Returns null if no recent data. Only resolved when requested
equipmentEquipmentThe full equipment object this point belongs to
locationLocationPhysical location of this point
properties[EntityProperty!]!Static metadata

Examples

Cross-cutting query (locationName + equipmentIs + is):
{
  point(locationName: "Tower East", equipmentIs: "VAV", is: "Temperature_Sensor") {
    name
    type
    unit
    equipment { name type }
  }
}
This single query finds all temperature sensors on any VAV at or below any location matching “Tower East”. It joins locations, equipment, and points in one request. Find by name:
{
  point(name: "SupplyTemp") {
    name
    type
    unit
    equipment { name }
  }
}
Supply air temperatures on AHUs:
{
  point(locationName: "Tower West", equipmentIs: "AHU", is: "Supply_Air_Temperature_Sensor") {
    name
    type
    unit
    equipment { name }
  }
}
{
  "data": {
    "point": [
      {
        "name": "TW01-XX-AHU-001.SupplyAirTemp",
        "type": "Supply_Air_Temperature_Sensor",
        "unit": "DEG_C",
        "equipment": { "name": "TW01-XX-AHU-001" }
      },
      {
        "name": "TW01-XX-AHU-002.SupplyAirTemp",
        "type": "Supply_Air_Temperature_Sensor",
        "unit": "DEG_C",
        "equipment": { "name": "TW01-XX-AHU-002" }
      }
    ]
  }
}

location

Query the spatial hierarchy (wings, floors, rooms) and find what’s on each level.

Signature

location(siteId: String!, locationId: String!): Location
The location root query returns a single location by ID. For browsing the hierarchy, use locations nested on Building or Location.

Arguments

ArgumentTypeDescription
siteIdString!Required. Scopes the query to a specific site
locationIdString!Required. Location identifier

Return fields

FieldTypeDescription
uriString!Full entity URI
idID!Location identifier
nameString!Location name
typeString!Brick class (Wing, Floor, Room, etc.)
ifcIdStringIFC model element ID
properties[EntityProperty!]!Static metadata (name, value, unit)
locations[Location!]!Child locations. Accepts name, nameMatch, is, recursive filters
parentLocationParent location
equipment[Equipment!]!Equipment at this location. Accepts name, nameMatch, is, recursive filters
points[Point!]!Points at this location. Accepts name, nameMatch, is, recursive filters
zones[Zone!]!Zones within this location

Examples

Browse the spatial tree:
{
  building(id: "B001") {
    name
    locations {
      name
      type
      locations {
        name
        type
      }
    }
  }
}
{
  "data": {
    "building": {
      "name": "One Pool Street",
      "locations": [
        {
          "name": "Tower East",
          "type": "Wing",
          "locations": [
            { "name": "Tower East Ground Floor", "type": "Floor" },
            { "name": "Tower East Level 1", "type": "Floor" },
            { "name": "Tower East Level 2", "type": "Floor" }
          ]
        },
        {
          "name": "Tower West",
          "type": "Wing",
          "locations": [
            { "name": "Tower West Ground Floor", "type": "Floor" },
            { "name": "Tower West Level 1", "type": "Floor" },
            { "name": "Tower West Level 2", "type": "Floor" }
          ]
        }
      ]
    }
  }
}
Get a location with its equipment:
{
  location(locationId: "TW01") {
    name
    type
    properties { name value unit }
    equipment(is: "AHU") {
      name
      type
    }
    zones {
      name
      type
    }
  }
}
{
  "data": {
    "location": {
      "name": "Tower West Level 1",
      "type": "Floor",
      "properties": [
        { "name": "floorNumber", "value": "01", "unit": null }
      ],
      "equipment": [
        { "name": "TW01-XX-AHU-001", "type": "AHU" },
        { "name": "TW01-XX-AHU-002", "type": "AHU" }
      ],
      "zones": [
        { "name": "Atrium", "type": "Zone" },
        { "name": "Computer Engineering 1", "type": "Zone" },
        { "name": "Library", "type": "Zone" },
        { "name": "Teaching Space 1", "type": "Zone" }
      ]
    }
  }
}

zone

Query building zones and their sensor data.

Signature

zone(
  siteId: String!,
  id: String,
  name: String,
  nameMatch: NameMatch,
  locationId: String,
  is: String,
  hasProperty: String,
  propertyValue: String
): [Zone!]!

Arguments

ArgumentTypeDescription
siteIdString!Required. Scopes the query to a specific site
idStringFilter to a specific zone
nameStringFilter by zone name (case-insensitive substring by default)
nameMatchNameMatchCONTAINS (default) or EXACT
locationIdStringZones at or below this location (transitive)
isStringBrick class (e.g., HVAC_Zone)
hasPropertyStringOnly zones with this property defined
propertyValueStringExact match on property value (requires hasProperty)

Return fields

FieldTypeDescription
uriString!Full entity URI
idID!Zone identifier
nameString!Zone name
typeString!Brick class
typeHierarchy[String!]!Full class hierarchy from leaf to root
ifcIdStringIFC model element ID that links to the BIM model
locations[Location!]!Physical locations in this zone
fedBy[Equipment!]!Equipment that feeds this zone. Accepts name, nameMatch, is filters
upstream[Equipment!]!Transitive upstream equipment chain. Accepts maxDepth, medium, is filters
points[Point!]!Sensors in this zone. Accepts name, nameMatch, is filters
properties[EntityProperty!]!Static metadata

Examples

Find zones by name:
{
  zone(name: "Library") {
    name
    type
    locations { name }
    fedBy { name type }
  }
}
Zones with feeding equipment:
{
  zone(is: "HVAC_Zone") {
    name
    fedBy(is: "VAV") {
      name
      type
    }
  }
}

system

Query logical system groupings: chilled water loops, hot water loops, air systems.

Signature

system(
  siteId: String!,
  name: String,
  nameMatch: NameMatch,
  is: String,
  hasProperty: String,
  propertyValue: String
): [System!]!
Also available as a nested field on Building and Equipment (without siteId, since they are already scoped).

Arguments

ArgumentTypeDescription
siteIdString!Required. Scopes the query to a specific site
nameStringFilter by system name (case-insensitive substring by default)
nameMatchNameMatchCONTAINS (default) or EXACT
isStringBrick class (e.g., Chilled_Water_System)
hasPropertyStringOnly systems with this property defined
propertyValueStringExact match on property value (requires hasProperty)

Return fields

FieldTypeDescription
uriString!Full entity URI
idID!System identifier
nameString!System name
typeString!Brick class (e.g., Chilled_Water_System)
ifcIdStringIFC model element ID that links to the BIM model
equipment[Equipment!]!Equipment in this system. Accepts name, nameMatch, is, recursive filters
points[Point!]!Points associated with the system. Accepts name, nameMatch, is, recursive filters
properties[EntityProperty!]!Static metadata

Examples

Find systems by name:
{
  system(name: "Hot Water") {
    name
    type
    equipment { name type }
  }
}
{
  "data": {
    "system": [
      {
        "name": "Hot Water System",
        "type": "Hot_Water_System",
        "equipment": [
          { "name": "TE01-XX-HIU-001", "type": "Heat_Exchanger" },
          { "name": "TE01-XX-HWP-001", "type": "Hot_Water_Pump" },
          { "name": "TE01-XX-HWP-002", "type": "Hot_Water_Pump" }
        ]
      }
    ]
  }
}
Query a specific system type:
{
  system(is: "Chilled_Water_System") {
    name
    equipment {
      name
      type
      points(is: "Temperature_Sensor") {
        name
        type
        unit
      }
    }
  }
}
Returns every piece of equipment in the chilled water loop with its temperature sensors.

entityByIfcId

Cross-reference a BIM element to the knowledge graph using its IFC GlobalId.

Signature

entityByIfcId(siteId: String!, ifcId: String!): KgEntity

Arguments

ArgumentTypeDescription
siteIdString!Required. Scopes the query to a specific site
ifcIdString!Required. IFC GlobalId to look up

Return type

Returns a KgEntity union (Building | Equipment | Location | Zone | System). Use inline fragments to select fields based on the returned type. Returns null when the IFC GlobalId is not mapped to any Tacit entity.

Example

{
  entityByIfcId(siteId: "your-site-id", ifcId: "2JF4e6axWHqu3u0C1FZlmi") {
    ... on Equipment { id name type ifcId points { id name currentValue { value } } }
    ... on Location  { id name type ifcId }
    ... on Building  { id name type ifcId }
    ... on Zone      { id name type ifcId }
    ... on System    { id name type ifcId }
  }
}

Upstream and downstream traversal

The upstream and downstream fields follow feeds chains transitively to any depth. Available on Equipment and Zone types.

Arguments

ArgumentTypeDefaultDescription
maxDepthIntunlimitedMaximum hops to traverse
mediumStringallFilter by medium: AIR, CHILLED_WATER, HOT_WATER, CONDENSER_WATER
isStringallFilter results to a Brick class (resolves subtypes)

Return type

Both return [Equipment!]!, the list of all equipment found along the chain, filtered by the arguments.

Examples

Upstream from a zone (trace the full supply chain):
{
  zone(name: "Library") {
    name
    upstream {
      name
      type
    }
  }
}
{
  "data": {
    "zone": [{
      "name": "Library",
      "upstream": [
        { "name": "TW01-LBR-RPC-01", "type": "VAV" },
        { "name": "TW01-LBR-RPC-02", "type": "VAV" },
        { "name": "TW01-XX-AHU-001", "type": "AHU" },
        { "name": "TW01-XX-AHU-002", "type": "AHU" },
        { "name": "Tower West HIU System", "type": "Heat_Exchanger" }
      ]
    }]
  }
}
Filtered downstream (only zones affected by a piece of equipment):
{
  equipment(id: "tower-east-hiu") {
    name
    downstream(is: "HVAC_Zone") {
      name
      points(is: "Zone_Air_Temperature_Sensor") {
        timeseriesId
      }
    }
  }
}
Upstream by medium (trace where an AHU gets its hot water):
{
  equipment(id: "TE01-XX-AHU-001") {
    name
    upstream(medium: "HOT_WATER") {
      name
      type
    }
  }
}
{
  "data": {
    "equipment": [
      {
        "name": "TE01-XX-AHU-001",
        "upstream": [
          { "name": "HIU System", "type": "Heat_Exchanger" }
        ]
      }
    ]
  }
}