Skip to main content

Query 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 those are already scoped).
All root queries require siteId. 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 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 (e.g., ["Zone_Air_Temperature_Sensor", "Temperature_Sensor", "Sensor", "Point"])
unitStringEngineering unit (DEG_C, DEG_F, PA, CFM, etc.)
equipmentIdString!ID of the parent equipment (string ID). Use the equipment field for the full object
timeseriesIdStringTimeseries UUID. Pass this value as a timeseriesIds entry to the timeseries REST API. null if the point is not connected to a time series source
currentValuePointValueLatest reading (last 5 minutes). Returns null if timeseriesId is null or no recent data. Only resolved when requested, so no performance cost if omitted
equipmentEquipmentThe full equipment object this point belongs to
locationLocationPhysical location of this point
properties[EntityProperty!]!Static metadata as structured objects (name, value, unit)
For the latest reading, use currentValue { value timestamp quality } on the Point type. For historical time-range data, use the timeseries REST API with the point’s timeseriesId.

Examples

Find points by name

{
  point(name: "SupplyTemp") {
    name
    type
    unit
    equipment { name }
  }
}

Temperature sensors on VAVs: the cross-cutting query

The most powerful query pattern. No UUIDs needed. Combine locationName, equipmentIs, and is on the point root query to query across the entire building graph:
{
  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 → points in one request.

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" }
      }
    ]
  }
}

All temperature sensors (semantic resolution)

is: "Temperature_Sensor" resolves the full Brick hierarchy. Supply air, return air, zone, outside air, chilled water, and hot water temperature sensors are all included:
{
  point(is: "Temperature_Sensor") {
    name
    type
    unit
    equipment { name type }
  }
}

Points on a specific piece of equipment

{
  equipment(id: "TE01-XX-AHU-001") {
    name
    points {
      name
      type
      unit
    }
  }
}

Damper commands across all AHUs

{
  point(equipmentIs: "AHU", is: "Damper_Position_Command") {
    name
    type
    equipment { name }
  }
}

CO2 sensors building-wide

{
  point(is: "CO2_Sensor") {
    name
    type
    unit
    equipment { name type }
    location { name }
  }
}

Combining equipmentIs without locationName

You can use equipmentIs alone to find points across all equipment of a type:
{
  point(equipmentIs: "VAV", is: "Temperature_Sensor") {
    name
    type
    unit
    equipment { name }
    location { name }
  }
}
Returns 50+ zone temperature sensors across all VAVs in the building.

Filter points by property

{
  point(hasProperty: "bacnetObjectType") {
    name
    type
    properties { name value unit }
    equipment { name }
  }
}

equipmentId vs equipment field

Every point has an equipmentId (the parent equipment’s string ID) and an equipment field (the full Equipment object). Use equipmentId when you just need the ID. Use equipment when you need the full object with its fields:
{
  point(is: "Temperature_Sensor") {
    name
    equipmentId            # Just the ID string
    equipment { name type } # Full equipment object
  }
}