All command messages must be published to the queue resource/commands with a valid JWT token.
Responses are delivered on secom/mobileapp/<app-unique-id>. Use a unique correlationId to pair requests and responses.
Transport: MQTT (pub/sub). The alarm panel publishes commands to broker queues.
Message Envelope (Common Schema)
Command Request (Envelope)
{
"messageType": "commandMessage",
"appId": "your-app-id",
"brand": "EBS",
"jwtToken": "jwt-token",
"userId": 20199,
"organizationId": "123456",
"command": "<command-name>",
"correlationId": "<unique-id>",
"parameters": { /* command-specific */ }
}
- Publish to:
resource/commands
- Security:
jwtToken must be valid; sensitive fields (e.g., pinCode) must be AES‑256 encrypted inside parameters.
Command Response (Envelope)
{
"messageType": "commandResponse",
"correlationId": "<same-as-request>",
"result": "<success|failed|not send|send_no_ack|unauthorized>",
"reason": "<human-readable reason - optional>",
"data": {
/* command-specific payload */
}
}
- Result codes
success – command accepted and processed; see data.
failed – command delivered but panel or backend reported failure.
not send – validation/authz failed; command not sent to panel.
send_no_ack – published but no ACK from panel within timeout.
unauthorized – JWT invalid/expired or user lacks access.
Error Response Templates (Examples)
Missing User / Access Check Skipped
{
"messageType": "commandResponse",
"correlationId": "<id>",
"result": "not send",
"reason": "UserId is missing, could not check access authorization to resourceId!",
"data": {
"command": "<command>",
"resourceId": 34
}
}
Unauthorized
{
"messageType": "commandResponse",
"correlationId": "<id>",
"result": "unauthorized",
"reason": "User not authorized to access alarm panel!",
"data": {
"command": "<command>",
"resourceId": 34
}
}
Panel Disabled
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "not send",
"reason": "Panel is disabled!",
"data": {
"command": "arm",
"resourceId": 35,
"userId": 20199
}
}
Panel Not Found
{
"messageType": "commandResponse",
"correlationId": "2",
"result": "not send",
"reason": "Panel not found!",
"data": {
"command": "arm",
"resourceId": 35,
"userId": 20199
}
}
Command Failed
{
"messageType": "commandResponse",
"correlationId": "2",
"result": "failed",
"reason": "Command not allowed",
"data": {
"command": "arm",
"partition": 1,
"resourceId": 34,
"brand": "EBS",
"model": "CPX-230NWB",
"networkId": "654527"
}
}
Command Not Permitted
{
"messageType": "commandResponse",
"correlationId": "2",
"result": "unauthorized",
"reason": "Command not permitted",
"data": {
"command": "arm",
"partition": 1,
"resourceId": 34,
"brand": "EBS",
"model": "CPX-230NWB",
"networkId": "654527"
}
}
Generic Error
{
"messageType": "commandResponse",
"correlationId": "2",
"result": "unknown",
"reason": "Exception-message-here",
"data": {
"command": "arm",
"resourceId": 35,
"userId": 20199
}
}
Command Not Found
{
"messageType": "commandResponse",
"correlationId": "3",
"result": "failed",
"reason": "Command not found!",
"parameters": {
"command": "panel-arm"
}
}
Transmission Failed
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "send_no_ack",
"reason": "Command transmission failed, try again after a while"
}
Partition Not Found
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "partitionNotFound",
"reason": "The partition you want to change its status is not available",
"data": {
"command": "arm",
"partition": 5,
"resourceId": 486,
"brand": "EBS",
"model": "CPX-230NWB",
"networkId": "702716"
}
}
User Not Allowed
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "notAuthorizedForPartition",
"reason": "You do not have permission to perform operations in this partition.",
"data": {
"command": "arm",
"partition": 1,
"resourceId": 486,
"brand": "EBS",
"model": "CPX-230NWB",
"networkId": "702716"
}
}
Command - Response Pairs
Below are command-specific requests and their successful responses. For failures, refer to the Error Response Templates above.
1. Arm
Arms the alarm panel for a given partition.
Request
{
"messageType": "commandMessage",
"appId": "replace-with-your-app’s-unique-id",
"brand": "EBS",
"jwtToken": "replace-with-your-token",
"userId": 20199,
"organizationId": "123456",
"command": "arm",
"correlationId": "1",
"parameters": {
"resourceId": 34,
"partition": 1,
"pinCode": "AES-256 encrypted pin code"
}
}
Success Response
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "success",
"data": {
"command": "arm",
"partition": 1,
"resourceId": 34,
"brand": "EBS",
"model": "CPX-230NWB",
"networkId": "654527"
}
}
2. Stay Arm
Arms the alarm panel in Stay/Indoor mode.
Request
{
"messageType": "commandMessage",
"appId": "replace-with-your-app’s-unique-id",
"brand": "EBS",
"jwtToken": "replace-with-your-token",
"userId": 20199,
"organizationId": "123456",
"command": "armStay",
"correlationId": "2",
"parameters": {
"resourceId": 35,
"partition": 1,
"pinCode": "AES-256 encrypted pin code"
}
}
Success Response
{
"messageType": "commandResponse",
"correlationId": "3",
"result": "success",
"data": {
"command": "armStay",
"partition": 1,
"resourceId": 35,
"brand": "EBS",
"model": "CPX-300W",
"networkId": "1065885"
}
}
3. Sleep Arm
Arms the alarm panel in Sleep/Night mode.
Request
{
"messageType": "commandMessage",
"appId": "replace-with-your-app’s-unique-id",
"brand": "EBS",
"jwtToken": "replace-with-your-token",
"userId": 20199,
"organizationId": "123456",
"command": "armSleep",
"correlationId": "1",
"parameters": {
"resourceId": 35,
"partition": 1,
"pinCode": "AES-256 encrypted pin code"
}
}
Success Response
{
"messageType": "commandResponse",
"correlationId": "2",
"result": "success",
"data": {
"command": "armSleep",
"partition": 1,
"resourceId": 35,
"brand": "EBS",
"model": "CPX-300W",
"networkId": "1065885"
}
}
4. Disarm
Disarms the alarm panel for a given partition.
Request
{
"messageType": "commandMessage",
"appId": "replace-with-your-app’s-unique-id",
"brand": "EBS",
"jwtToken": "replace-with-your-token",
"userId": 20199,
"organizationId": "123456",
"command": "disarm",
"correlationId": "1",
"parameters": {
"resourceId": 34,
"partition": 1,
"pinCode": "AES-256 encrypted pin code"
}
}
Success Response
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "success",
"data": {
"command": "disarm",
"partition": 1,
"resourceId": 34,
"brand": "EBS",
"model": "CPX-230NWB",
"networkId": "654527"
}
}
5. Arm Zone
Arms a specific zone.
Request
{
"messageType": "commandMessage",
"appId": "replace-with-your-app’s-unique-id",
"brand": "EBS",
"jwtToken": "replace-with-your-token",
"userId": 20199,
"organizationId": "123456",
"command": "armZone",
"correlationId": "5",
"parameters": {
"resourceId": 34,
"partition": 1,
"zone": 12,
"pinCode": "AES-256 encrypted pin code"
}
}
Success Response
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "success",
"data": {
"command": "armZone",
"zone": 12,
"resourceId": 50,
"brand": "EBS",
"model": "CPX-300W",
"networkId": "1065885"
}
}
Spesific Error Response
{
"messageType": "commandResponse",
"correlationId": "5",
"result": "not send",
"reason": "No sensors assigned to alarm panel",
"data": {
"resourceId": 34,
"partition": 1,
"zone": 12
}
}
6. Disarm Zone
Disarms a specific zone.
Request
{
"messageType": "commandMessage",
"appId": "replace-with-your-app’s-unique-id",
"brand": "EBS",
"jwtToken": "replace-with-your-token",
"userId": 20199,
"command": "disarmZone",
"organizationId": "123456",
"correlationId": "2",
"parameters": {
"resourceId": 34,
"partition": 1,
"zone": 12,
"pinCode": "AES-256 encrypted pin code"
}
}
Success Response
{
"messageType": "commandResponse",
"correlationId": "3",
"result": "success",
"data": {
"command": "disarmZone",
"partition": 1,
"resourceId": 50,
"brand": "EBS",
"model": "CPX-300W",
"networkId": "1065885"
}
}
Spesific Error Response
{
"messageType": "commandResponse",
"correlationId": "2",
"result": "not send",
"reason": "No sensors assigned to alarm panel",
"data": {
"resourceId": 34,
"partition": 1,
"zone": 12
}
}
7. Zone Bypass
Bypasses (ignores) a zone.
Request
{
"messageType": "commandMessage",
"appId": "replace-with-your-app’s-unique-id",
"brand": "EBS",
"jwtToken": "replace-with-your-token",
"userId": 146011,
"organizationId": "123456",
"command": "zonesBypass",
"correlationId": "1",
"parameters": {
"resourceId": 178,
"zones": [10,11,12],
"pinCode": "AES-256 encrypted pin code"
}
}
Success Response
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "success",
"data": {
"command": "zonesBypass",
"resourceId": 178,
"zones": [10,11,12],
"brand": "EBS",
"model": "CPX230",
"networkId": "1065885"
}
}
8. Zone Unbypass
Removes bypass state from a zone.
Request
{
"messageType": "commandMessage",
"appId": "replace-with-your-app’s-unique-id",
"brand": "EBS",
"jwtToken": "replace-with-your-token",
"userId": 146011,
"organizationId": "123456",
"command": "zonesUnbypass",
"correlationId": "1",
"parameters": {
"resourceId": 178,
"zones": [10,11,12],
"pinCode": "AES-256 encrypted pin code"
}
}
Success Response
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "success",
"data": {
"command": "zonesUnbypass",
"zones": [10,11,12],
"resourceId": 178,
"brand": "EBS",
"model": "CPX230",
"networkId": "1065885"
}
}
9. Set Output
Controls panel outputs (e.g., relays, DOs).
Request
{
"messageType": "commandMessage",
"appId": "replace-with-your-app’s-unique-id",
"brand": "EBS",
"jwtToken": "replace-with-your-token",
"userId": 146011,
"organizationId": "123456",
"command": "setOutput",
"correlationId": "1",
"parameters": {
"resourceId": 178,
"output": 1,
"status": 1,
"duration": 5,
"pinCode": "AES-256 encrypted pin code"
}
}
Success Response
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "success",
"data": {
"command": "setOutput",
"resourceId": 178,
"brand": "EBS",
"model": "CPX230",
"networkId": "1065885"
}
}
10. Get Status
Retrieves the status of the alarm panel.
Request
{
"messageType": "commandMessage",
"appId": "replace-with-your-app’s-unique-id",
"brand": "EBS",
"jwtToken": "replace-with-your-token",
"userId": 146011,
"organizationId": "123456",
"command": "getStatus",
"correlationId": "1",
"parameters": {
"resourceId": 178,
"pinCode": "AES-256 encrypted pin code"
}
}
Success Response 1
All properties don’t have any true value
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "success",
"data": {
"command": "getStatus",
"isReadyForArm": false,
"currentPartitionAlarms": [],
"zoneAlarmHistory": [],
"remoteControllerAlarm": false,
"tamperKeypad": [],
"zoneTampers": [],
"keypadTampers": [],
"alarmingZones": [],
"lockedZones": [],
"armedPartitions": [],
"alarmingOutputs": [],
"batteryVoltage": 10.657,
"powerSupplyVoltage": 17.028,
"silentAlarmHistory": [],
"zonesComFailures": [],
"zonesPowerFailures": [],
"partitionsStayAway": [],
"partitionsNight": [],
"resourceId": 178,
"brand": "EBS",
"model": "CPX230",
"networkId": "1065885"
}
}
Success Response 2
All properties have at least one true value
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "success",
"data": {
"command": "getStatus",
"isReadyForArm": true,
"currentPartitionAlarms": [
{
"partition": 2,
"value": true
}
],
"zoneAlarmHistory": [
{
"zone": 1,
"value": true
}
],
"remoteControllerAlarm": false,
"tamperKeypad": [
{
"keypad": 1,
"value": true
}
],
"zoneTampers": [
{
"zoneTamper": 1,
"value": true
}
],
"keypadTampers": [
{
"keypadTamper": 1,
"value": true
}
],
"alarmingZones": [
{
"zone": 1,
"value": true
}
],
"lockedZones": [
{
"zone": 1,
"value": true
}
],
"armedPartitions": [
{
"partition": 2,
"value": true
}
],
"alarmingOutputs": [
{
"output": 1,
"value": true
}
],
"batteryVoltage": 13.889,
"powerSupplyVoltage": 20.747,
"silentAlarmHistory": [
{
"zone": 1,
"value": true
}
],
"zonesComFailures": [
{
"zone": 1,
"value": true
}
],
"zonesPowerFailures": [
{
"zone": 1,
"value": true
}
],
"partitionsStayAway": [
{
"partition": 2,
"value": true
}
],
"partitionsNight": [
{
"partition": 2,
"value": true
}
],
"resourceId": 178,
"brand": "EBS",
"model": "CPX230",
"networkId": "1065885"
}
}
11. Get Failures
Retrieves active failures reported by the panel.
Request
{
"messageType": "commandMessage",
"appId": "replace-with-your-app’s-unique-id",
"brand": "EBS",
"jwtToken": "replace-with-your-token",
"userId": 146011,
"organizationId": "123456",
"command": "getFailures",
"correlationId": "1",
"parameters": {
"resourceId": 178,
"pinCode": "AES-256 encrypted pin code"
}
}
Success Response
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "success",
"reason": "send",
"data": {
"command": "getFailures",
"outFailures": [
{
"outNumber": 2,
"value": true
}
],
"powerOutFailures": [
{
"powerOut": 1,
"outName": "KPOUT",
"value": true
},
{
"powerOut": 2,
"outName": "AUX1",
"value": true
},
{
"powerOut": 3,
"outName": "AUX2",
"value": true
}
],
"powerInFailures": [
{
"powerIn": 1,
"inName": "MAINS",
"value": true
},
{
"powerIn": 2,
"inName": "BATTERY",
"value": true
}
],
"keypadCommFailures": [
{
"keypadNo": 1,
"value": true
},
{
"keypadNo": 2,
"value": true
}
],
"keypadPowerFailures": [
{
"keypadNo": 1,
"value": true
},
{
"keypadNo": 2,
"value": true
}
],
"otherFailures": [
{
"type": 1,
"name": "CLOCK_NOT_SYNC",
"value": true
},
{
"type": 2,
"name": "CONF_MEM_FAIL",
"value": true
}
],
"resourceId": 638,
"brand": "EBS",
"model": "CPX-300W",
"networkId": "1065885"
}
}
12. Initiate Connection
Instructs the panel to initiate a fresh connection.
Request
{
"messageType": "commandMessage",
"appId": "replace-with-your-app’s-unique-id",
"brand": "DSC",
"jwtToken": "replace-with-your-token",
"userId": 146011,
"organizationId": "123456",
"command": "initiateConnection",
"correlationId": "1",
"parameters": {
"resourceId": 178
}
}
Success Response
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "success",
"reason": "Kick-start SMS sent to alarm panel",
"data": {
"command": "initiateConnection",
"resourceId": 178,
"brand": "DSC",
"model": "NEO-2032",
"networkId": "123456"
}
}
Spesific Error Response
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "not sent",
"reason": "No GSM line number (MSISDN) defined for alarm panel",
"data": {
"command": "initiateConnection",
"resourceId": 178,
"userId": 20199
}
}
13. Set Pin Code
Updates the pin code for future operations.
Request
{
"messageType": "commandMessage",
"appId": "replace-with-your-app’s-unique-id",
"brand": "DSC",
"jwtToken": "",
"userId": 50678,
"organizationId": "50164",
"command": "setPinCode",
"correlationId": "1",
"parameters": {
"resourceId": 786,
"partition": 0,
"userType": "master/installer/regular",
"userIndex": 1,
"currentPinCode": "83T47L2ueJdAs0Rl80pdUQ==",
"newPinCode": "83T47L2ueJdAs0Rl80pdUQ=="
}
}
Success Response
{
"messageType": "commandResponse",
"correlationId": "1",
"result": "success",
"reason": "send",
"data": {
"command": "setPinCode",
"resourceId": 786,
"partitionNo": 0,
"userType": "master/installer/regular"
}
}
Keep error handling DRY: implement a shared mapper from result + reason to user‑facing messages.