Camera streaming
Stream endpoints for live and recorded video.
Every path on this page is plugin-scoped: {pluginInstalledId} is the id of the module instance you are talking to, from Plugins. A deployment can run more than one instance of the same module, and the id is what tells them apart.
2 endpoints. Every one needs Authorization: Bearer <access token>; see
Getting Started.
Permissions
The server authorises every call against the signed-in user's permission keys — the same keys the client is held to. For this module they are the Device* key family. See the Permission Keys reference.
Device snapshot get
| Method | Path | What it does |
|---|---|---|
POST | witness-stream/plugins/{pluginInstalledId}/device-snapshot-get | Device snapshot get |
POST witness-stream/plugins/{pluginInstalledId}/device-snapshot-get
Device snapshot get.
Payload
Request body
{
"deviceID": {
"deviceAttributes": [
{
"deviceID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"settingKey": "string",
"boolValue": true,
"doubleValue": 125.5,
"stringValue": "string"
}
],
"isNew": true,
"capabilities": [
42
],
"pluginAssociations": [
{
"pluginInstalledID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"pluginType": 42,
"remoteID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"properties": 42,
"orderIndex": 42
}
],
"pluginEntityItem": {
"pluginInstalledID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"pluginType": 42,
"remoteID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"properties": 42,
"orderIndex": 42
},
"deviceID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"dateTimeCreated": "2026-10-02T21:14:05Z",
"dateTimeUpdated": "2026-10-02T21:14:05Z",
"deviceType": "string",
"isDeleted": true,
"isDisabled": true,
"name": "Example",
"pluginInstanceID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"timeZone": "string"
},
"size": 42,
"snapshotFromTime": "2026-10-02T21:14:05Z"
}
Snapshots
| Method | Path | What it does |
|---|---|---|
POST | witness-stream/plugins/{pluginInstalledId}/snapshots | Device snapshot2 get |
POST witness-stream/plugins/{pluginInstalledId}/snapshots
Device snapshot2 get.
| Parameter | In | Required | Type |
|---|---|---|---|
size | query | no | int32 |
snapshotFromTime | query | no | date-time |
useCache | query | no | boolean |
Payload
Request body
{
"deviceAttributes": [
{
"deviceID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"settingKey": "string",
"boolValue": true,
"doubleValue": 125.5,
"stringValue": "string"
}
],
"isNew": true,
"capabilities": [
42
],
"pluginAssociations": [
{
"pluginInstalledID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"pluginType": 42,
"remoteID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"properties": 42,
"orderIndex": 42
}
],
"pluginEntityItem": {
"pluginInstalledID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"pluginType": 42,
"remoteID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"properties": 42,
"orderIndex": 42
},
"deviceID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"dateTimeCreated": "2026-10-02T21:14:05Z",
"dateTimeUpdated": "2026-10-02T21:14:05Z",
"deviceType": "string",
"isDeleted": true,
"isDisabled": true,
"name": "Example",
"pluginInstanceID": "3b7f5c2e-9a41-4d8b-bb0e-7c1a2d3e4f50",
"timeZone": "string"
}