Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
version: 0.0.0
description: 'This page documents the operations supported by the PassiveLogic HTTP API, covering authentication, user management, and
GraphQL API access.'
title: PassiveLogic REST Quantum Sync API
tags:
- description: Routes related to quantum sync
name: Quantum Sync
paths:
/api/v0.19/quantumsync:
get:
tags:
- Quantum Sync
security:
- Basic Auth - login: []
- XSRF header: []
- DEPRECATED - PL API Key: []
- PL API Key: []
summary: QuantumSync API over websockets
operationId: getApiV0.19Quantumsync
description: '# Custom QuantumSync/ShadowClient API:
## QuantumSync QuantumSyncRequestTypes:
### `start`: authenticates and specifies an initial context. note: the id for start and updateContext is used to key a Dictionary[String:AnyRootedQuantumGraph]
ex)
```json
{
"type": "start",
"id": "site",
"appType":"BuildingStudio"
"payload": {
"authToken": "REDACTED",
"ID": "ACAF9E07-5031-4BC2-A8C5-D2C6598D83DE",
"from": "Site",
"include": [
"Site",
"Building",
"Floor",
"Zone"
]
}
}
```
### `updateContext`: change the current context / graph in memory.
note: the previous graph/context can be returned from memory by using updateContext id: .
Up to 5 contexts can be loaded before prevention (error) or deleteContext message needed to free up loaded count to load a new context.
ex)
```json
{
"type": "updateContext",
"id": "building",
"payload": {
"ID": "ACAF9E07-5031-4BC2-A8C5-D2C6598D83DE",
"from": "Building",
"include": [
"Site",
"Floor",
"Zone",
"Image",
"Surface",
"Adjacency",
"System",
"Quanta",
"Manufacturer",
"Equipment",
"Property",
"Location"
]
}
}
```
### `deleteContext`: delete/clear the context out of memory.
ex)
```json
{
"type": "deleteContext",
"id": "building",
"payload": {}
}
```
### `sync`: create/update/delete QuantumObjects via a FlatGraphDiff as the payload.
Executing concurrent sync''s is not allowed. If there is a sync already processing and another sync is requested before the response of the first sync is sent, then the 2nd symc will return an error saying there is a sync currently processing, and to wait until its finished before requesting another sync.
ex)
```json
{
"type": "sync",
"id": "F5B6BC51-B991-440C-8ACB-B55C65FD7C24",
"payload": {
"added": [],
"updated": [
{
"description": null,
"ID": "80187B0B-CEEB-488A-A9B7-06784CFB0464",
"longitude": null,
"locationPropertyID": null,
"elevation": null,
"latitude": null,
"address": null,
"timeZone": null,
"siteIDs": [
"7E7E04B4-8F32-4585-839D-E0EFC7BB3544"
],
"weatherSourceIDs": [],
"locked": false,
"authGroupID": "A1EBEC59-D887-473F-A5C5-7CBD4ADB2556",
"__typename": "Location",
"name": "foo"
}
],
"removed": []
}
}
```
### `syncEphemeral`: create/update/delete QuantumObjects via a FlatGraphDiff as the payload, do not write them to the database,
and discard them at the end of the websocket session.
ex)
```json
{
"type": "syncEphemeral",
"id": "F5B6BC51-B991-440C-8ACB-B55C65FD7C24",
"payload": {
"added": [],
"updated": [
{
"description": null,
"ID": "80187B0B-CEEB-488A-A9B7-06784CFB0464",
"longitude": null,
"locationPropertyID": null,
"elevation": null,
"latitude": null,
"address": null,
"timeZone": null,
"siteIDs": [
"7E7E04B4-8F32-4585-839D-E0EFC7BB3544"
],
"weatherSourceIDs": [],
"locked": false,
"authGroupID": "A1EBEC59-D887-473F-A5C5-7CBD4ADB2556",
"__typename": "Location",
"name": "foo"
}
],
"removed": []
}
}
```
### `propertyHistory`: Get history data for a property & listen for updates.
ex)
```json
{
"type": "propertyHistory",
"id": "propertyHistory1",
"payload": {
"propertyIDs": ["E585C3B8-F1E5-40D0-83A7-658B248DF103"],
"startAt": "2024-01-01T00:00:00Z",
"endAt": "2024-01-01T01:00:00Z",
"resample": {
"interval": {
"to": "minutely",
"reduceUsing": "avg",
"fillUsing": "interpolate"
},
"pollIntervalSec": 60
}
}
### `propertyHistoryStop`: Stop listening for property history updates
ex)
```json
{
"type": "propertyHistoryStop",
"id": "propertyHistory1"
}
```
### `writeHistory`: Write historical data to a property
ex)
```json
{
"type": "writeHistory",
"id": "writeHistory",
"payload": {
"histories": [
{
"propertyID": "E585C3B8-F1E5-40D0-83A7-658B248DF103",
"time": "2024-01-01T00:00:00Z",
"value": 5.0
}
]
}
}
```'
/api/datasync:
get:
summary: QuantumSync API Legacy Route. Use /api/quantumsync instead
operationId: getApiDatasync
deprecated: true
description: Refer to the /api/quantumsync route documentation for full details. This route will be removed in the next major version.
tags:
- Quantum Sync
security:
- Basic Auth - login: []
- XSRF header: []
- DEPRECATED - PL API Key: []
- PL API Key: []
/api/v0.19/datasync:
get:
operationId: getApiV0.19Datasync
security:
- Basic Auth - login: []
- XSRF header: []
- DEPRECATED - PL API Key: []
- PL API Key: []
summary: QuantumSync API Legacy Route. Use /api/v0.19/quantumsync instead
deprecated: true
description: Refer to the /api/v0.19/quantumsync route documentation for full details. This route will be removed in the next major version.
tags:
- Quantum Sync
/api/v0.20/quantumsync:
get:
summary: QuantumSync API over websockets
operationId: getApiV0.20Quantumsync
security:
- Basic Auth - login: []
- XSRF header: []
- DEPRECATED - PL API Key: []
- PL API Key: []
description: '# Custom QuantumSync/ShadowClient API:
## QuantumSync QuantumSyncRequestTypes:
### `start`: authenticates and specifies an initial context. note: the id for start and updateContext is used to key a Dictionary[String:AnyRootedQuantumGraph]
ex)
```json
{
"type": "start",
"id": "site",
"appType":"BuildingStudio"
"payload": {
"authToken": "REDACTED",
"ID": "ACAF9E07-5031-4BC2-A8C5-D2C6598D83DE",
"from": "Site",
"include": [
"Site",
"Building",
"Floor",
"Zone"
]
}
}
```
### `updateContext`: change the current context / graph in memory.
note: the previous graph/context can be returned from memory by using updateContext id: .
Up to 5 contexts can be loaded before prevention (error) or deleteContext message needed to free up loaded count to load a new context.
ex)
```json
{
"type": "updateContext",
"id": "building",
"payload": {
"ID": "ACAF9E07-5031-4BC2-A8C5-D2C6598D83DE",
"from": "Building",
"include": [
"Site",
"Floor",
"Zone",
"Image",
"Surface",
"Adjacency",
"System",
"Quanta",
"Manufacturer",
"Equipment",
"Property",
"Location"
]
}
}
```
### `deleteContext`: delete/clear the context out of memory.
ex)
```json
{
"type": "deleteContext",
"id": "building",
"payload": {}
}
```
### `sync`: create/update/delete QuantumObjects via a FlatGraphDiff as the payload.
Executing concurrent sync''s is not allowed. If there is a sync already processing and another sync is requested before the response of the first sync is sent, then the 2nd symc will return an error saying there is a sync currently processing, and to wait until its finished before requesting another sync.
ex)
```json
{
"type": "sync",
"id": "F5B6BC51-B991-440C-8ACB-B55C65FD7C24",
"payload": {
"added": [],
"updated": [
{
"description": null,
"ID": "80187B0B-CEEB-488A-A9B7-06784CFB0464",
"longitude": null,
"locationPropertyID": null,
"elevation": null,
"latitude": null,
"address": null,
"timeZone": null,
"siteIDs": [
"7E7E04B4-8F32-4585-839D-E0EFC7BB3544"
],
"weatherSourceIDs": [],
"locked": false,
"authGroupID": "A1EBEC59-D887-473F-A5C5-7CBD4ADB2556",
"__typename": "Location",
"name": "foo"
}
],
"removed": []
}
}
```
### `syncEphemeral`: create/update/delete QuantumObjects via a FlatGraphDiff as the payload, do not write them to the database,
and discard them at the end of the websocket session.
ex)
```json
{
"type": "syncEphemeral",
"id": "F5B6BC51-B991-440C-8ACB-B55C65FD7C24",
"payload": {
"added": [],
"updated": [
{
"description": null,
"ID": "80187B0B-CEEB-488A-A9B7-06784CFB0464",
"longitude": null,
"locationPropertyID": null,
"elevation": null,
"latitude": null,
"address": null,
"timeZone": null,
"siteIDs": [
"7E7E04B4-8F32-4585-839D-E0EFC7BB3544"
],
"weatherSourceIDs": [],
"locked": false,
"authGroupID": "A1EBEC59-D887-473F-A5C5-7CBD4ADB2556",
"__typename": "Location",
"name": "foo"
}
],
"removed": []
}
}
```
### `propertyHistory`: Get history data for a property & listen for updates.
ex)
```json
{
"type": "propertyHistory",
"id": "propertyHistory1",
"payload": {
"propertyIDs": ["E585C3B8-F1E5-40D0-83A7-658B248DF103"],
"startAt": "2024-01-01T00:00:00Z",
"endAt": "2024-01-01T01:00:00Z",
"resample": {
"interval": {
"to": "minutely",
"reduceUsing": "avg",
"fillUsing": "interpolate"
},
"pollIntervalSec": 60
}
}
### `propertyHistoryStop`: Stop listening for property history updates
ex)
```json
{
"type": "propertyHistoryStop",
"id": "propertyHistory1"
}
```
### `writeHistory`: Write historical data to a property
ex)
```json
{
"type": "writeHistory",
"id": "writeHistory",
"payload": {
"histories": [
{
"propertyID": "E585C3B8-F1E5-40D0-83A7-658B248DF103",
"time": "2024-01-01T00:00:00Z",
"value": 5.0
}
]
}
}
```'
tags:
- Quantum Sync
/api/v0.20/datasync:
get:
summary: QuantumSync API Legacy Route. Use /api/v0.20/quantumsync instead
operationId: getApiV0.20Datasync
tags:
- Quantum Sync
description: Refer to the /api/v0.20/quantumsync route documentation for full details. This route will be removed in the next major version.
deprecated: true
security:
- Basic Auth - login: []
- XSRF header: []
- DEPRECATED - PL API Key: []
- PL API Key: []
/api/quantumsync:
get:
description: '# Custom QuantumSync/ShadowClient API:
## QuantumSync QuantumSyncRequestTypes:
### `start`: authenticates and specifies an initial context. note: the id for start and updateContext is used to key a Dictionary[String:AnyRootedQuantumGraph]
ex)
```json
{
"type": "start",
"id": "site",
"appType":"BuildingStudio"
"payload": {
"authToken": "REDACTED",
"ID": "ACAF9E07-5031-4BC2-A8C5-D2C6598D83DE",
"from": "Site",
"include": [
"Site",
"Building",
"Floor",
"Zone"
]
}
}
```
### `updateContext`: change the current context / graph in memory.
note: the previous graph/context can be returned from memory by using updateContext id: .
Up to 5 contexts can be loaded before prevention (error) or deleteContext message needed to free up loaded count to load a new context.
ex)
```json
{
"type": "updateContext",
"id": "building",
"payload": {
"ID": "ACAF9E07-5031-4BC2-A8C5-D2C6598D83DE",
"from": "Building",
"include": [
"Site",
"Floor",
"Zone",
"Image",
"Surface",
"Adjacency",
"System",
"Quanta",
"Manufacturer",
"Equipment",
"Property",
"Location"
]
}
}
```
### `deleteContext`: delete/clear the context out of memory.
ex)
```json
{
"type": "deleteContext",
"id": "building",
"payload": {}
}
```
### `sync`: create/update/delete QuantumObjects via a FlatGraphDiff as the payload.
Executing concurrent sync''s is not allowed. If there is a sync already processing and another sync is requested before the response of the first sync is sent, then the 2nd symc will return an error saying there is a sync currently processing, and to wait until its finished before requesting another sync.
ex)
```json
{
"type": "sync",
"id": "F5B6BC51-B991-440C-8ACB-B55C65FD7C24",
"payload": {
"added": [],
"updated": [
{
"description": null,
"ID": "80187B0B-CEEB-488A-A9B7-06784CFB0464",
"longitude": null,
"locationPropertyID": null,
"elevation": null,
"latitude": null,
"address": null,
"timeZone": null,
"siteIDs": [
"7E7E04B4-8F32-4585-839D-E0EFC7BB3544"
],
"weatherSourceIDs": [],
"locked": false,
"authGroupID": "A1EBEC59-D887-473F-A5C5-7CBD4ADB2556",
"__typename": "Location",
"name": "foo"
}
],
"removed": []
}
}
```
### `syncEphemeral`: create/update/delete QuantumObjects via a FlatGraphDiff as the payload, do not write them to the database,
and discard them at the end of the websocket session.
ex)
```json
{
"type": "syncEphemeral",
"id": "F5B6BC51-B991-440C-8ACB-B55C65FD7C24",
"payload": {
"added": [],
"updated": [
{
"description": null,
"ID": "80187B0B-CEEB-488A-A9B7-06784CFB0464",
"longitude": null,
"locationPropertyID": null,
"elevation": null,
"latitude": null,
"address": null,
"timeZone": null,
"siteIDs": [
"7E7E04B4-8F32-4585-839D-E0EFC7BB3544"
],
"weatherSourceIDs": [],
"locked": false,
"authGroupID": "A1EBEC59-D887-473F-A5C5-7CBD4ADB2556",
"__typename": "Location",
"name": "foo"
}
],
"removed": []
}
}
```
### `propertyHistory`: Get history data for a property & listen for updates.
ex)
```json
{
"type": "propertyHistory",
"id": "propertyHistory1",
"payload": {
"propertyIDs": ["E585C3B8-F1E5-40D0-83A7-658B248DF103"],
"startAt": "2024-01-01T00:00:00Z",
"endAt": "2024-01-01T01:00:00Z",
"resample": {
"interval": {
"to": "minutely",
"reduceUsing": "avg",
"fillUsing": "interpolate"
},
"pollIntervalSec": 60
}
}
### `propertyHistoryStop`: Stop listening for property history updates
ex)
```json
{
"type": "propertyHistoryStop",
"id": "propertyHistory1"
}
```
### `writeHistory`: Write historical data to a property
ex)
```json
{
"type": "writeHistory",
"id": "writeHistory",
"payload": {
"histories": [
{
"propertyID": "E585C3B8-F1E5-40D0-83A7-658B248DF103",
"time": "2024-01-01T00:00:00Z",
"value": 5.0
}
]
}
}
```'
summary: QuantumSync API over websockets
operationId: getApiQuantumsync
security:
- Basic Auth - login: []
- XSRF header: []
- DEPRECATED - PL API Key: []
- PL API Key: []
tags:
- Quantum Sync
components:
securitySchemes:
XSRF_header:
in: header
description: Authentication using an XSRF protected JWT
name: X-PL-AUTH
type: apiKey
Basic_Auth_-_login:
description: Basic authentication used only at login.
scheme: basic
type: http
PL_API_Key:
in: header
description: PL API Key in header
name: PL-API-KEY
type: apiKey
DEPRECATED_-_PL_API_Key:
in: header
description: DEPRECATED - PL API Key in Bearer header
name: 'Authorization: PL-API-KEY'
type: apiKey