This documentation is based on live tests against a real TR7 system.
ws://<TR7_IP>:81/api
Important: The endpoint is
/api, not just/.
Local API access uses the installator account, not your Exalus cloud account:
{
"TransactionId": "uuid-v4",
"Resource": "/users/user/login",
"Method": 3,
"Data": {
"EMail": "installator@installator",
"Password": "<SERIAL_UPPERCASE><PIN>"
}
}Password format: serial number in uppercase + PIN, no spaces.
Example: serial TR7ABC + PIN 1234 → password TR7ABC1234
Success response:
{
"Resource": "/users/user/login",
"Data": null,
"Status": 0,
"Method": 3,
"TransactionId": "..."
}Status: 0 = success.
{
"TransactionId": "uuid-v4",
"Resource": "/path/to/resource",
"Method": 0,
"Data": {}
}| Value | Meaning |
|---|---|
0 |
GET |
1 |
POST |
2 |
PUT |
3 |
LOGIN |
{
"Resource": "/path/to/resource",
"Data": {},
"Status": 0,
"Method": 0,
"TransactionId": "..."
}| Value | Meaning |
|---|---|
0 |
Success |
4 |
Error / invalid (e.g. STOP when nothing is moving) |
{
"TransactionId": "uuid-v4",
"Resource": "/devices/channels/states",
"Method": 0,
"Data": {}
}There is no direct response with a device list. Instead the server pushes multiple asynchronous messages, one per device-attribute combination:
{
"Resource": "/info/devices/device/state/changed",
"Data": {
"DeviceGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"DataType": "BlindPosition",
"state": {
"Position": 50,
"RawPosition": 512,
"Channel": 1,
"StateReliability": 1
}
},
"Status": 0,
"Method": 0,
"TransactionId": "..."
}Each device emits multiple messages with different DataType values:
{
"DataType": "BlindPosition",
"state": {
"Position": 50, // 0 = closed, 100 = open
"RawPosition": 512, // Raw encoder value
"Channel": 1,
"StateReliability": 1 // 0=Unknown, 1=Reliable, 2=Estimated
}
}{
"DataType": "SignalStrength",
"state": {
"Value": 85
}
}{
"DataType": "BlindOpenCloseTime",
"state": {
"UpTime": 30, // Seconds to open fully
"DownTime": 32 // Seconds to close fully
}
}Blind calibration data.
Device configuration state.
{
"TransactionId": "uuid-v4",
"Resource": "/devices/device/control",
"Method": 1,
"Data": {
"DeviceGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Command": "Open",
"Channel": 1
}
}{
"TransactionId": "uuid-v4",
"Resource": "/devices/device/control",
"Method": 1,
"Data": {
"DeviceGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Command": "Close",
"Channel": 1
}
}{
"TransactionId": "uuid-v4",
"Resource": "/devices/device/control",
"Method": 1,
"Data": {
"DeviceGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Command": "Position",
"Position": 50,
"Channel": 1
}
}{
"TransactionId": "uuid-v4",
"Resource": "/devices/device/stop",
"Method": 1,
"Data": {
"DeviceGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Channel": 1
}
}Status: 0 = success (blind was moving)
Status: 4 = nothing to stop
After any command the server automatically pushes position updates:
{
"Resource": "/info/devices/device/state/changed",
"Data": {
"DeviceGuid": "...",
"DataType": "BlindPosition",
"state": { "Position": 75 }
}
}- Endpoint is
/api— not/. - Installator account required — cloud credentials do not work locally.
- No direct device list — state arrives as a stream of async messages.
- Multiple
DataTypemessages per device — position, signal, timing, etc. Status: 0means success — different semantics from HTTP status codes.- Some devices send no
BlindPosition— they may be a different device type.