SynLink Web HTTP(S) API

Table Of Contents

Overview

Control SynLink PDUs with the SynLink Web API (Application Programming Interface).

Examples within this guide use the curl command on Linux OS Ubuntu 18.04. curl is available for download via sudo apt install curl on Linux OS's that support Apt Package Manager. Testing the API is possible with Postman on Mac, Windows, or Linux Operating Systems. Endpoints Post bodys and output responses use JSON (Javascript Object Notation).

Libraries

NodeJS API Wrapper tools available via NPM

npm install synlink-pdu

Python API Wrapper tools available via PIP

pip install synlinkpy

Authentication

Session Based

Session Based Authentication involves using the /login route to generate a session token.

Sending a Post Request to /login with username and password will return a User Object and a session token inside the Token header

Example Request For Session Token

> curl 192.168.1.100/login -i -d '{"username":"admin","password":"admin"}'

HTTP/1.1 200 OK
Content-Type: application/json
Token: 4jDv3lag56ADoih2bzd
Set-Cookie: SPID=4jDv3lag56ADoih2bzd; path=/
Connection: close

{"username":"admin","id":"1","lastLogin":1325659007,"created":1617325133,"roleId":1,"role":{"id":1,"name":"Administrator","description":"All Permissions. At minimum need one administrator role at any time. Not Editable.","permissions":{"viewInletStats":true,"modifyInletStats":true,"viewBankStats":true,"modifyBankStats":true,"viewEventActions":true,"modifyEventActions":true,"viewNetworkSettings":true,"modifyNetworkSettings":true,"modifyLcdSettings":true,"modifyPortSettings":true,"modifyFirmwareVersion":true,"viewUsersList":true,"modifyUsers":true,"allowFactoryReset":true,"allowPduRestart":true,"modifyGlobalDeviceSettings":true,"viewGlobalDeviceSettings":true,"viewPortInfo":true,"viewOutletGroups":true,"modifyOutletGroups":true,"viewOutlets":["1-16777225","2-16777225","3-16777225","4-16777225","5-16777225","6-16777225","7-16777225","8-16777225"],"modifyOutlets":["1-16777225","2-16777225","3-16777225","4-16777225","5-16777225","6-16777225","7-16777225","8-16777225"]}}}

Personal Access Token Based

Personal Access Token authentication involves manually creating a personal access token and using it in each request to the SynLink HTTP API.

To create a personal access token via the web interface. Navigate to Settings-> Manage Users. Click on the user you would like to create a personal access token for. Click on the button named "Create Personal Access Token".

Example Request with Personal Access Token

Assuming your personal access token is 2bCDp4lqfKEFl8r6l4s, we could use it as shown below.

curl -H "Authorization: Bearer 2bCDp4lqfKEFl8r6l4s" http://192.168.1.100/api/device

Basic HTTP Authentication

Looking to have backwards compatibility with NetBooter products? Enable HTTP Basic Authentication

In the context of an HTTP transaction, basic access authentication is a method for an HTTP user agent (e.g. a web browser) to provide a user name and password when making a request. In basic HTTP authentication, a request contains a header field in the form of Authorization: Basic ;

Default: Basic HTTP Authentication denied.

Navigate to Network -> Web (/network/web) to enable basic authentication.

basic-http-auth

WebSocket

Access live stream of power/energy data from a WebSocket Connection.

Authentication SynLink WebSocket must be sent a session token after successfull connection to begin sending data.

Authentication Object to Send to Begin Data Stream

{cookie: "4jDv3lag56ADoih2bzd"}

Examples

The following examples uses personal access token (PAT) authentication which can be configured as instructed in the authentication section of this manual. These examples assumes the IP address if 192.168.1.100, and the PAT is rKKHIKivalp6ihp6e09.

Turn an outlet OFF or ON

To modify an outlet's state or setting, all you need is the outlet number. Options for state are: "ON", "OFF", "REBOOT".

curl 'http://192.168.1.100/api/outlets/1' \
  --request "PUT" \
  --header 'Authorization: Bearer rKKHIKivalp6ihp6e09' \
  --data '{ "state":"ON" }'

Power cycle an outlet

To modify an outlet's state or setting, all you need is the outlet number. Options for state are: "ON", "OFF", "REBOOT".

curl 'http://192.168.1.100/api/outlets/1' \
  --request "PUT" \
  --header 'Authorization: Bearer rKKHIKivalp6ihp6e09' \
  --data '{ "state":"REBOOT" }'

Get inlet power consumption information

Inlet consumption information can be found with endpoint /api/inlets. This will return an array of inlets. For standard inlet PDU configurations, a single inlet object will be found inside this array. If the PDU is configured as an ATS pdu, or a dual circuit PDU, there will be two inlets.

curl 'http://192.168.1.100/api/inlets' \
  --header 'Authorization: Bearer rKKHIKivalp6ihp6e09'
[
  {
    "inletType": "single",
    "inletPlug": "IEC-320 C20",
    "inletPhase": "Single Phase",
    "inletName": "Example New Inlet Name",
    "id": "I1-1000016",
    "inletLineConfiguration": "L-N",
    "inletCurrentRms": 0,
    "inletVoltageRms": 114.69999694824219,
    "inletLineFrequency": 60.13800048828125,
    "inletPowerFactor": 1,
    "inletActivePower": 0,
    "inletApparentPower": 0,
    "inletEnergyAccumulation": 0
  }
]

Get outlet current consumption information

curl 'http://192.168.1.100/api/outlets' \
  --header 'Authorization: Bearer rKKHIKivalp6ihp6e09'
[
  {
    "outletName": "Example outlet Name 1",
    "id": "1-1200568",
    "outletIndex": 1,
    "bankId": 1200568,
    "receptacle": "NEMA 5-20R",
    "customRebootTimeEnabled": false,
    "customRebootTime": 5,
    "circuitVoltage": 114.69999694824219,
    "rebootStatus": "none",
    "currentRms": 0,
    "state": "OFF",
    "voltageDetection": false,
    "relayHealth": "OK",
    "pwrOnState": "ON"
  },
  ...
]

Set up Web Hook for Event Trigger

Set Up Web Hook Action

Setting up Web Hook Post Requests can be done via the Web Interface of the SynLink PDU. Navigate to the section via the side header called "Automation". Once on this page, click the button "Create New Action". You can also get to the section with url /events/actions/new. Under Action Type click "HTTP Post Request. You may include optional stats to send with the HTTP Request (such as Inlet Data, Circuit Data, Outlet Data, and more).

Link Action to Event

After creating an action, link the action to a particular event. Navigate to the "Automation" page once again and click on "Create New event". Or go to url events/triggers/new. Under event type choose a given event (such as inlet current thresholds, or any number of triggers.). Under the "Add Action" section include the previously created action.

Once the given event is triggered, a Post Request will be sent accordingly. The data structure for the contents of the web hook can be found in the web hook section of this documentation.

Example Web Hook JSON

{
  "eventCode": 15,
  "eventName": "Example Inlet Max Current",
  "enclosureSerialNumber": "1000016",
  "valueExceedingThreshold": 12.09,
  "inlets": [
    {
      "inletType": "single",
      "inletPlug": "IEC-320 C20",
      "inletPhase": "Single Phase",
      "inletName": "Example New Inlet Name",
      "id": "I1-1000016",
      "inletLineConfiguration": "L-N",
      "inletCurrentRms": 12.09,
      "inletVoltageRms": 114.69999694824219,
      "inletLineFrequency": 60.13800048828125,
      "inletPowerFactor": 1,
      "inletActivePower": 0,
      "inletApparentPower": 0,
      "inletEnergyAccumulation": 0
    }
  ]
}

Endpoints

 

Device

Device Object shows top level information about PDU power, energy, sensors, and etc. Attributes will differ depending on it's models.

Device Object

Key Type Description
numBanks number Number of banks: a section of outlets on a specific circuit
numOutlets number Number of outlets total
numInlets number Number of inlets. Either 1 or 2
inletPlug string Inlet Plug receptacle/plug. If multiple inlets, both are same plug type
outletPwrMeasurementsSupported boolean When true, each outlet can measure current draw in amps
outletSwitchingSupported boolean When true, each outlet can switch on or off with a relay
enclosureSerialNumber string Unique ID for PDU Enclosure.
modelNumber string Specific PDU model number
inletConfig string Either "standard", "dualcircuit", or "ats"
formFactor string Either "0U", "1U", or "2U"
controllerSerialNumber number Serial Number of SynLink Controller Module
controllerFirmwareVersion string Firmware version for controller
controllerHardwareVersion string Hardware version for controller
phase string Either "Single Phase", "Three Phase Delta", or "Three Phase Wye"
circuitBreakerProtection boolean True if circuit breaker protection exists
uptime number Number of seconds the PDU has been on.
time string Time in ISO8601 String Format.
{
  "numBanks": 3,
  "numOutlets": 36,
  "numInlets": 1,
  "inletPlug": "L21-30P",
  "outletPwrMeasurementsSupported": true,
  "outletSwitchingSupported": true,
  "enclosureSerialNumber": 1024122712,
  "modelNumber": "SP-3001CA-HA",
  "inletConfig": "standard",
  "formFactor": "0U",
  "controllerSerialNumber": 1360604425,
  "controllerFirmwareVersion": "1.0.3",
  "phase": "Single Phase",
  "controllerHardwareVersion": "1.0.0",
  "circuitBreakerProtection": true,
  "uptime": 19284619
}

Get Device Info

Retrieve PDU device information.

GET    /api/device      Returns object describing top level device information

Example Request

curl 'http://192.168.1.100/api/device' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k'

Response Body

{
  "numBanks": 3,
  "numOutlets": 36,
  "numInlets": 1,
  "inletPlug": "L21-30P",
  "outletPwrMeasurementsSupported": true,
  "outletSwitchingSupported": true,
  "enclosureSerialNumber": "1024122712",
  "modelNumber": "SP-3001CA-HA",
  "inletConfig": "standard",
  "formFactor": "0U",
  "controllerSerialNumber": "1921218731",
  "controllerFirmwareVersion": "0.1.2",
  "controllerHardwareVersion": "1.0.1",
  "circuitBreakerProtection": true,
  "uptime": 19284619
}

Inlets

Inlets show information about inlet configuration and energy consumption if relevant.

Inlet Object

{
  "id": "17374353",
  "inletType": "single",
  "inletPlug": "NEMA L6-20P",
  "inletName": "NEMA L6-20P Inlet",
  "inletEnergyAccumulation": 89.03,
  "inletPhase": "Single Phase"
}
Key Type Description
id string Unique identifier for Inlet
inletType string Describes configuration of specific Inlet Object. Either "single", "dual", or "ats".
inletPlug string Connector type for Inlet
inletName string User defined name for inlet
inletEnergyAccumulation number kWH value to show energy consumption for inlet plug. If multiple inlets, value will stay same for all inlets.
inletPhase number Either "Single Phase", or "Three Phase"

Inlet Object - 3 Phase Attributes

The following attributes will be included if the PDU is a 3 phase PDU

{
  "inletPowerFactor": 0.8,
  "threePhaseBalance": "80%",
  "inletLines": [
    {
      "currentRms": 1.31,
      "id": "L1-17374353",
      "line": "L1"
    },  
    {
      "currentRms": 2.41,
      "id": "L2-17374353",
      "line": "L2"
    },
    {
      "currentRms": 1.31,
      "id": "L3-17374353",
      "line": "L3"
    }
  ]
}
Key Type Description
inletPowerFactor number Power factor value for inlet plug
threePhaseBalance string Percentage unbalance for 3 phase circuit
inletLines array Contains 3 line objects, each with "currentRMS" in amps, unique "id", and "line" it is associated with.

Inlet Object - Single Phase Attributes

For ATS inlets, the following attributes will exist in the inlet with atsInletActive = true.

{
  "inletCurrentRms": 4.2,
  "inletVoltageRms": 202.4,
  "inletLineFrequency": 59.9,
  "inletPowerFactor": 0.8,
  "inletActivePower": 11,             
  "inletApparentPower": 10,
  "inletLineConfiguration": "L-L",
}
Key Type Description
inletCurrentRms number Inlet current draw in amps
inletVoltageRms number Inlet voltage RMS in volts
inletLineFrequency number Inlet line frequency in hertz
inletPowerFactor number Power factor ratio
inletActivePower number Inlet Active Power in watts
inletApparentPower number Inlet Apparent Power in Volt-amperes (VA)
inletLineConfiguration string Line configuration for outlets connected to this inlet.

Inlet Object - ATS (Auto Transfer Switch) Attributes

The following attributes will appear if the PDU has ATS functionality.

{
  "atsInletId": "A",
  "atsInletActive": true,
  "atsInletReady": true,
}
Key Type Description
atsInletId string Either "A" or "B". Matches label on PDU.
atsInletActive boolean true if inlet is used to power outlets.
atsInletReady boolean true if inlet has voltage potential

List All Inlets

Returns a list of all outlets that within any connected banks. Only available if outletSwitchingSupported or outletMeteringSupported are true. Return a list of all inlets. Maximum 2 inlets possible. "ats" and "dual" for inletType configurations will have 2 inlets. inletType: "standard" will always have a single inlet.

GET    /api/inlets        Returns list of all inlets

Example Request

curl 'http://192.168.1.100/api/inlets' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k'

Response (Varies on configuration)

[
  {
    "id": "17374353",
    "inletType": "single",
    "inletPlug": "NEMA L21-30P",
    "inletName": "NEMA L6-20P Inlet",
    "inletLineConfiguration": "L-L",
    "inletEnergyAccumulation": 89,
    "inletCurrentRms": 4.2,
    "inletVoltageRms": 202.4,
    "inletLineFrequency": 59.9,
    "inletPowerFactor": 0.8,
    "inletActivePower": 11,             
    "inletApparentPower": 10
  }
]

Expected reponse is an array of Inlet Object(s)

Modify Inlet

Endpoint to modify Outlet information, including the relay state to turn outlet on and off.

PUT    /api/inlets/:inlet_id                   Modifies individual inlet

Request

Follows Authentication Scheme. All request parameters are optional, but at least one is required.

{
  "inletName": "Primary Line Input",
  "inletEnergyAccumulation": 0
}

inletName optional Name string up to 100 characters.

inletEnergyAccumulation optional Only value accepted is 0. 0 will reset energy accumulation back to 0. Resetting energy accumulation for any inlet will reset for all inlets.

Example Request

curl 'http://192.168.1.100/api/inlets/17374354' \
  --header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
  --data '{ "inletName":"Primary Line Input", "inletEnergyAccumulation": 0 }'

Response

Expected response is an updated Inlet Object. Varies with configuration.

{
  "id": "17374353",
  "inletType": "single",
  "inletPlug": "NEMA L6-20P",
  "inletName": "Primary Line Input",
  "inletLineConfiguration": "L-L",
  "inletEnergyAccumulation": 0,
  "inletCurrentRms": 4.2,
  "inletVoltageRms": 202.4,
  "inletLineFrequency": 59.9,
  "inletPowerFactor": 0.8,
  "inletActivePower": 11,        
  "inletApparentPower": 10
}

Banks

Banks are representation of groups of outlets. Banks are often referred to as circuits as well. Each bank has it's own energy measurement capabilities. Individual Outlet Current Measurements or/and individual Outlet Switching are optional additions. Otherwise energy information can be found in Inlets

Bank Object

{
  "id": "286331153",
  "inletId": "I1-1000016",
  "firmwareVersion": "010100",
  "hardwareVersion": "010105",
  "outletSwitchingSupported": true,
  "outletMeteringSupported": true,
  "currentRms": 0.807,
  "voltageRms": 119.900,
  "lineFrequency": 60.138,
  "powerFactor": 0.810,
  "activePower": 0.009,
  "apparentPower": 0.930,
  "energyAccumulation": 42.21,
  "bankName": "Bank 1",
  "bankLines": "L1-L2",
  "circuitBreakerClosed": true,
  "hasCircuitBreakerProtection": true
}
Key Type Description
id string Unique identifier for the bank
inletId string ID of inlet which the bank is behind
firmwareVersion string Version for bank firmware
hardwareVersion string Version for hardware for bank
outletSwitchingSupported boolean true if bank outlets support individual outlet switching
outletMeteringSupported boolean true if bank outlets support individual outlet current metering
currentRms number The instantaneous current measured at the inlet in Amps
voltageRms number Instantaneous voltage reading at inlet and all outlets in volts
lineFrequency number Line Frequency measurement valid from 45-65 GHz
powerFactor number Power Factor reading. Value is signed value representing polarity of power factor
activePower number Active Power measured in KW (kiloWatts). Power consumed by electrical resistance
apparentPower number Power which is actually consumed or utilized
energyAccumulation number Number of kilowatt hours accumulated. Can be used as billing unit for energy delivered
bankName string User defined name for Bank
bankLines string Specific Lines or line configuration which this bank is utilizing
circuitBreakerClosed boolean State of circuit breakers. true if circuit breaker is closed and providing power correctly.

List All Banks

Returns a list of all banks that the SynLink Controller has connected to.

GET /api/banks    Returns all banks

Example Request

curl 'http://192.168.1.100/api/banks' \
  --header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k'

Response

Expected response is an array of Bank Objects

[
  {
    "id": 286331153,
    "firmwareVersion": "1.0.1",
    "hardwareVersion": "1.0.0",
    "outletSwitchingSupported": true,
    "outletMeteringSupported": true,
    "currentRms": 0.807,
    "voltageRms": 119.900,
    "lineFrequency": 60.138,
    "powerFactor": 0.810,
    "activePower": -0.009,
    "apparentPower": 0.930,
    "energyAccumulation": 42,
    "bankName": "Bank 1",
    "bankLines": "L1-L2",
    "circuitBreakerClosed": true,
    "hasCircuitBreakerProtection": true
  },
  ...
]

Modify Bank Info

The only value changeable for banks is a custom name field for banks.

PUT    /api/banks/:bank_id                       Modifies individual bank

Request

Follows Authentication Scheme.

{
  "bankName": "Critical Equipment Bank"
}

bankName required Name string up to 100 characters.

Example Request
curl 'http://192.168.1.100/api/banks/286331153' \
  -H 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
  --data '{"bankName":"Critical Equipment Bank"}'

Response

Expected response is newly modified Bank Object

{
  "id": 286331153,
  "firmwareVersion": "1.0.0",
  "hardwareVersion": "1.0.1",
  "outletSwitchingSupported": true,
  "outletMeteringSupported": true,
  "currentRms": 0.807,
  "voltageRms": 119.900,
  "lineFrequency": 60.138,
  "powerFactor": 0.810,
  "activePower": -0.009,
  "apparentPower": 0.930,
  "energyAccumulation": 42,
  "bankName": "Bank 1",
  "bankLines": "L1-L2",
  "circuitBreakerClosed": true,
  "hasCircuitBreakerProtection": true
}

Outlets

Outlets are representations of each individual outlet on the PDU. They show information related to outlets. They are only available of PDU has banks which support either Outlet Switching and/or Outlet Current Metering

 

Outlet Object

{
  "id": "1-16777225",
  "outletName": "Outlet 1",
  "pwrOnState": "ON",
  "outletIndex": 1,
  "receptacle": "NEMA 5-20R",
  "customRebootTimeEnabled": false,
  "customRebootTime": 5,
  "circuitVoltage": 116.80,
  "currentRms": 0.16,
  "state": "ON",
  "bankId": 16777225,
  "voltageDetection": true,
  "rebootStatus": "pendingOff",
  "relayHealth": "OK"
}
Key Type Description
id string Unique identifier for the Outlet.
outletName string User defined outlet name
pwrOnState string Initial State of outlet on boot. Value is either "ON", "OFF", or "PREV"
outletIndex number Which number outlet amongst total outlets
receptacle string Connector type for outlet receptacle. Value is either "nema 5-15", "nema 5-20", "IEC 320 C13", or "IEC 320 C19"
customRebootTimeEnabled boolean true if the time for reboot looks at customRebootTime instead of global reboot time
customRebootTime number Number of seconds for outlet reboot time if customRebootTimeEnabled is true
circuitVoltage number Voltage RMS of the circuit that the outlet is connected to.
currentRms number Key will exist if current_monitoring_supported value is true. return number value in amps for current load for outlet.
state string "ON", "OFF" are the available options. Only exists of outlet current metering supported
bankId number Unique identifier for bank that outlet is associated with
rebootStatus string If outlet has been set to cycle/reboot, this value will be: pendingOff or pendingOn. Otherwise it will be none
voltageDetection boolean Is true if there is voltage detected on outlet. If state not equal to voltageDetection then there is potential hardware issues with the relay
relayHealth string Either "OK" or "Failed". Compares state and voltageDetection and returns "OK" if they are equal

   

List All Outlets

Returns a list of all outlets that within any connected banks. Only available if outletSwitchingSupported or outletMeteringSupported are true.

GET    /api/outlets        Returns list of all outlets

Example Request

curl 'http://192.168.1.100/api/outlets' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k'

Response

Expected response is an array of Outlet Objects

[
  {
    "id": "1-286331153",
    "outletName": "Outlet 1",
    "pwrOnState": "PREV",
    "outletIndex": 1,
    "receptacle": "IEC 60320 C19",
    "currentRms": 1.1,
    "state": "ON",
    "bankId": "286331153",
    "customRebootTimeEnabled": false,
    "customRebootTime": 12,
    "rebootStatus": "none",
    "voltageDetection": true,
    "relayHealth": "OK"
  },
  {
    "id": "2-286331153",
    "outletName": "Outlet 2",
    "pwrOnState": "PREV",
    "outletIndex": 2,
    "receptacle": "IEC 60320 C19",
    "currentRms": 1.1,
    "state": "ON",
    "bankId": "286331153",
    "customRebootTimeEnabled": false,
    "customRebootTime": 12,
    "rebootStatus": "none",
    "voltageDetection": true,
    "relayHealth": "OK"
  },
  ...
]

Modify Outlet

Endpoint to modify Outlet information, including the relay state to turn outlet on and off.

PUT    /api/outlets/:outlet_id                   Modifies individual outlet

Request

Follows Authentication Scheme. All request parameters are optional, but at least one is required.

{
  "outletName": "NAS Server 1",
  "pwrOnState": "off",
  "state": "ON",
  "customRebootTimeEnabled": true,
  "customRebootTime": 10
}

outletName optional Name string up to 100 characters.

pwrOnState optional Power on State is the state of the relay for the specific outlet when the PDU powers on from an off/powerless state. Acceptable strings are "ON", "OFF", "PREV". "PREV" will set the relay to the state of the PDU when last lost power.

state optional State represents the relay status. Acceptable strings are "ON", "OFF", and "REBOOT".

customRebootTimeEnabled optional Setting to true will configure PDU to use customRebootTime when rebooting outlet.

customRebootTime optional Number of seconds outlet will be off when rebooting and customRebootTimeEnabled is true

Example Request

curl 'http://192.168.1.100/api/outlets/1-858993459' \
  --header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
  --data '{ "outletName":"NAS Server 1", "pwrOnState":"off", "state":"on" }'

Response

Expected response is an updated Outlet Object

{
  "id": "1-286331153",
  "outletName": "Nas Server 1",
  "pwrOnState": "OFF",
  "outletIndex": 1,
  "receptacle": "IEC 60320 C19",
  "currentRms": 1.1,
  "state": "ON",
  "bankId": "286331153",
  "customRebootTimeEnabled": false,
  "customRebootTime": 12,
  "voltageDetection": true,
  "relayHealth": "OK"
}

Groups

Groups are user created list of outlets. Outlets are designated by user. Groups can be used to manage sets of equipment together.

 

Group Object

{
  "groupName": "Modem/Router Equipment",
  "id": "1",
  "groupRebootSequenceDelay": 3,
  "outlets": [
    {
      "outletName": "Outlet 20",
      "id": "20-572662306",
      "pwrOnState": "PREV",
      "outletIndex": 8,
      "currentRms": 0,
      "state": "On",
      "bankId": 572662306,
      "watts": 0
    },
    {
      "outletName": "Outlet 21",
      "id": "21-572662306",
      "pwrOnState": "PREV",
      "outletIndex": 9,
      "currentRms": 4.20,
      "state": "On",
      "bankId": 572662306,
      "watts": 5.04
    },
    ...
  ]
}
Key Type Description
groupName string User defined name for group
id string Unique Identifier for Group
groupRebootSequenceDelay number When rebooting group of outlets, number of seconds to wait before each outlet turns on
outlets array Array of Outlet Objects

Get List of Groups

Returns a list of all groups that have been created.

GET    /api/groups       Returns list of all outlet groups

Example Request

curl 'http://192.168.1.100/api/groups' \
  --header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k'

Response

Expected response is an array of Group Objects

{
  "groupName": "Modem/Router Equipment",
  "id": "1",
  "groupRebootSequenceDelay": 3,
  "outlets": [
    {
      "outletName": "Outlet 20",
      "id": "20-572662306",
      "pwrOnState": "PREV",
      "outletIndex": 8,
      "currentRms": 0,
      "state": "On",
      "bankId": 572662306,
      "watts": 0
    },
    {
      "outletName": "Outlet 21",
      "id": "21-572662306",
      "pwrOnState": "PREV",
      "outletIndex": 9,
      "currentRms": 4.20,
      "state": "On",
      "bankId": 572662306,
      "watts": 5.04
    },
    ...
  ]
}

Create Group

POST   /api/groups         Creates a group of outlets.            

Request

Follows Authentication Scheme.

{
  "groupName": "Example Group 1", // required
  "outlets": ["2-858993459", "7-858993459"] // required
}

groupName required Name string up to 100 characters

outlets optional Outlets array of outlet UUIDs. Required at least 1.

groupRebootSequenceDelay optional Sequence delay in seconds. When group outlets reboot, they boot consecutively and with this sequence delay. Maximum group reboot sequence delay is 99 seconds.

Example Request

curl 'http://192.168.1.100/api/groups' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
--data '{"groupName":"Example Group 1","outlets":["2-858993459","7-858993459"]}'

Response

Expected response is the newly created Group Object with new group uuid.

{
  "groupName": "Modem/Router Equipment",
  "id": "2",
  "groupRebootSequenceDelay": 3,
  "outlets": [
    {
      "outletName": "Outlet 20",
      "id": "20-572662306",
      "pwrOnState": "PREV",
      "outletIndex": 8,
      "currentRms": 0,
      "state": "On",
      "bankId": 572662306,
      "watts": 0
    },
    {
      "outletName": "Outlet 21",
      "id": "21-572662306",
      "pwrOnState": "PREV",
      "outletIndex": 9,
      "currentRms": 4.20,
      "state": "On",
      "bankId": 572662306,
      "watts": 5.04
    },
    ...
  ]
}

Modify Group

PUT    /api/groups/:group_id           Modifies individual group

Request

Follows Authentication Scheme. To modify the outlets inside of group, update the outlet array of outlet UUIDs. :group_id is to be replaced by Group UUID

{
  "groupName": "Storage Equipment 2",
  "outlets": ["7-858993459", "8-858993459", "3-858993459"]
}
Example Request
curl 'http://192.168.1.100/api/groups/0u912084N12dM5b05GU' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
--data '{"groupName":"Storage Equipment 2","outlets":["7-858993459","8-858993459","2-858993459"]}'

Response

Expected response is a Group Object

{
  "groupName": "Modem/Router Equipment",
  "id": "2",
  "groupRebootSequenceDelay": 3,
  "outlets": [
    {
      "outletName": "Outlet 20",
      "id": "20-572662306",
      "pwrOnState": "PREV",
      "outletIndex": 8,
      "currentRms": 0,
      "state": "On",
      "bankId": 572662306,
      "watts": 0
    },
    {
      "outletName": "Outlet 21",
      "id": "21-572662306",
      "pwrOnState": "PREV",
      "outletIndex": 9,
      "currentRms": 4.203895392974451e-44,
      "state": "On",
      "bankId": 572662306,
      "watts": 5.048878302815963e-42
    }...
  ]
}

Switch Group Outlets

PUT /api/groups/:group_id Modify (switch) a group

Request

Follows Authentication Scheme. To change the outlet states, use the key value state, and it's options: "ON", "OFF", "REBOOT"

{
  "state": "OFF"
}
Example Request
curl 'http://192.168.1.100/api/groups/0u912084N12dM5b05GU' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
--data '{"state": "OFF"}'

Response

Expected response is a Group Object

{
  "groupName": "Modem/Router Equipment",
  "id": "2",
  "groupRebootSequenceDelay": 3,
  "outlets": [
    {
      "outletName": "Outlet 20",
      "id": "20-572662306",
      "pwrOnState": "PREV",
      "outletIndex": 8,
      "currentRms": 0,
      "state": "OFF",
      "bankId": 572662306,
      "watts": 0
    },
    {
      "outletName": "Outlet 21",
      "id": "21-572662306",
      "pwrOnState": "PREV",
      "outletIndex": 9,
      "currentRms": 4.203895392974451e-44,
      "state": "OFF",
      "bankId": 572662306,
      "watts": 5.048878302815963e-42
    }...
  ]
}

Remove a Group

DELETE /api/groups/:group_id    Permanently remove group.

Request

Follows Authentication Scheme :group_id should be replaced with Group UUID

{} // no request parameters
Example Request
curl -X DELETE 'http://192.168.1.100/api/groups/0u912084N12dM5b05GU' \
--header 'Cookie: SPID=j2d36cG2ciHKDDqFc3k'

Response

Expected Response is a 200 HTTP Response code for successful permanent deletion of group.  

200

Configuration

Configuration endpoint represents all network configuration, and other global configurations.

Configuration Object

{
  "hostName": "SynLink",
  "macAddr": "3A:D2:21:D3:82:45",
  "webPort": 80,
  "webSslPort": 443,
  "telnetPort": 23,
  "sshPort": 22,
  "ipAssign": "static",
  "globalRebootTime": 5,
  "webEnabled": true,
  "webSslEnabled": true,
  "webRedirectHttp": false,
  "customSslCertEnabled": false,
  "telnetEnabled": true,
  "sshEnabled": true,
  "subnetMask": "255.255.255.0",
  "gatewayIp": "192.168.1.1",
  "staticIp": "192.168.1.100",
  "primaryDns": "8.8.8.8",
  "secondaryDns": "8.8.4.4",
  "ntpEnabled": true,
  "ntpHost": "pool.ntp.org",
  "disableSshPassLogin": false,
  "disableSshKeyLogin": false,
  "usbFwupdateControlEnabled":false,
  "sshIdleTimeout": 0,
  "webIdleTimeout": 0,
  "webMaxUsers": 0,
  "deviceSequentialPowerUpDelay": 3,
  "webApiPasswordEnabled": false,
  "smtpServer": "",
  "smtpPort": 0,
  "smtpTlsEnabled": 0,
  "smtpAuthRequired": 0,
  "smtpUsername": "",
  "syslogServerIp": "",
  "enableRemoteUserLogging":false,
  "enableRemoteEventLogging":false,
  "smtpPassword": "",
  "snmpv12Enabled": true,
  "snmpv12ReadString": "public",
  "snmpv12WriteString": "private",
  "snmp3AuthPass": "examplepassword",
  "snmp3PrivacyPass": "exampleprivacypass",
  "snmp3TrapAuthProtocol": "SHA",
  "snmp3TrapPrivacyProtocol": "AES",
  "snmp3TrapSecurity": "authPriv",
  "deviceName": "SynLink PDU",
  "lcdOrientation": 90,
  "lcdScreensaverTimeout": 60,
  "lcdBacklightBrightness": 2,
  "lcdScreensaverType": "power_info",
  "lcdBackgroundColor": "black",
  "lcdOutletControlEnabled": true,
  "lcdNetworkControlEnabled": true,
  "lcdRebootControlEnabled":false,
  "lcdFlushControlEnabled":false,
  "portAMode": "sensor",
  "portAComBaud": 115200,
  "portAModemBaud": 115200,
  "usbComBaud": 115200,
  "usbModemBaud":115200,
  "usbFwupdateControlEnabled":false,
  "daylightsavings": true,
  "timezone": "GMT+8",
  "customSslCertExists": false,
  "customSslKeyExists": false
}

Device Settings

{
  "deviceName": "Name for device not host name",
  "globalRebootTime": 5
}
Key Type Description
deviceName string Name for this PDU. Separate from hostname
globalRebootTime number Number of seconds the outlet is flipped before flipping back on a power cycle

IP Settings

{
  "macAddr": "80:1F:12:41:ED:28",
  "ipAssign": "dhcp",
  "staticIp": "192.168.1.100",
  "subnetMask": "255.255.255.0",
  "gatewayIp": "192.168.1.1",
  "primaryDns": "8.8.8.8",
  "secondaryDns": "8.8.4.4",
  "hostName": "SP-3001CA-HA",
}
Key Type Description
macAddr string Mac address string for network interface card
ipAssign string Either "dhcp" or "static" are valid strings. DHCP assignment will show IP through dhcpAssignedIp. Static IP is set with staticIp
staticIp string IP Address that the PDU will respond to if ipAssign is set to "static"
subnetMask string Subnet Mask that divides IP address into network address and host address
gatewayIp string IP Address of device on network which sends local network traffic to other networks
primaryDns string IP Address of Primary DNS Server
secondaryDns string IP Address of Secondary DNS Server
hostName string Label assigned to network connected device

The following attributes only apply when "ip_assign" is set to dhcp and a DHCP address has been properly assigned.

{
  
  "dhcpAssignedIp":"192.168.1.101",
  "dhcpPrimaryDns":"8.8.8.8",
  "dhcpSecondaryDns":"8.8.4.4",
  "dhcpGatewayIp":"192.168.1.1",
  "dhcpSubnetMask":"255.255.255.0",
}
Key Type Description
dhcpAssignedIp string IP Address assigned by DHCP server. Only available is ipAssign is "dhcp"
dhcpPrimaryDns string Primary DNS assigned by DHCP server. Only available is ipAssign is "dhcp"
dhcpSecondaryDns string Secondary DNS by DHCP server. Only available is ipAssign is "dhcp"
dhcpGatewayIp string Gateway IP assigned by DHCP server. Only available is ipAssign is "dhcp"
dhcpSubnetMask string Subnet Mask assigned by DHCP server. Only available is ipAssign is "dhcp"

Web Settings

{
  "webEnabled": true,
  "webPort": 80,
  "webRedirectHttp": true,
  "webSslEnabled": true,
  "webSslPort": 443,
  "webApiPasswordEnabled": false,
  "customSslCertEnabled": false,
  "customSslCertExists": false,
  "customSslKeyExists": false
}
Key Type Description
webEnabled boolean Turns on or off Webserver
webPort number Port to reach Webserver. Default port is 80
webRedirectHttp boolean If true then any requests to http will be redirected to https
webSslEnabled boolean Enables web server on HTTPS. Uses webSslPort port
webSslPort number Port to reach HTTPS webserver. Default port is 443
webApiPasswordEnabled boolean Enable or disable username-password access with every HTTP call. WARNING: Insecure
customSslCertEnabled boolean Set to true to use custom ssl cert and key instead of default. Requires customSslCertExists and customSslKeyExists to be true
customSslCertExists boolean true if user has successfully uploaded an SSL Certificate
customSslKeyExists boolean true if user has successfully uploaded an SSL Key

SSH Settings

{
  "sshEnabled": true,
  "sshPort": 23,
  "disableSshPassLogin": false,
  "disableSshKeyLogin": false,
  "sshIdleTimeout": 0,
}
Key Type Description
sshEnabled boolean Turns on or off SSH Server
sshPort number Port to reach SSH Server. Default port is 22
disableSshPassLogin boolean Disable or enable password based logins
disableSshKeyLogin boolean Disable or enable key based logins
sshIdleTimeout number Number of seconds before SSH server auto disconnects from idle connection

Telnet Settings

{
  "telnetEnabled": true,
  "telnetPort": 23,
}
Key Type Description
telnetEnabled boolean Turns on or off Telnet Server
telnetPort number Port to reach Telnet Server. Default port is 23

SNMP Settings

{
  "snmpv12enabled": true,
  "snmpv12ReadString": "example_read_string",
  "snmpv12WriteString": "example_write_string",
  "snmpv3Enable": true,
  "snmpSysContact": "support@synaccess-net.com",
  "snmpSysName": "SP-3001CA-HA",
  "snmpSysLocation": "Rack #4",
  "snmp3AuthPass": "examplepassword",
  "snmp3PrivacyPass": "exampleprivacypass",
  "snmp3TrapAuthProtocol": "SHA",
  "snmp3TrapPrivacyProtocol": "AES",
  "snmp3TrapSecurity": "authPriv"

}
Key Type Description
snmpv12enabled boolean Enable or disables SNMP v1/v2c agent.
snmpv12ReadString string Passphrase for reading from agent SNMP 1/v2c
snmpv12WriteString string Passphrase for writing to agent SNMP 1/v2c
snmpSysContact string Primary contact for PDU SNMP node
snmpSysName string Assigned name for PDU SNMP node
snmpSysLocation string Physical location for PDU SNMP node
snmp3AuthPass string Auth Pass for SNMPv3 Traps. Minimum 8 characters
snmp3PrivacyPass string Privacy Pass for SNMPv3 Traps. Minimum 8 characters
snmp3TrapAuthProtocol string Type of auth protocol options: "MD5" or "SHA"
snmp3TrapPrivacyProtocol string Type of privacy protocol options: "DES" or "AES"
snmp3TrapSecurity string Options: "authPriv", "authNoPriv", "noAuthNoPriv"

SMTP Settings

{
  "smtpServer": "smtp.gmail.com",
  "smtpPort": 465,
  "smtpTlsEnabled": true,
  "smtpAuthRequired": true,
  "smtpUsername": "example_username",
  "smtpPassword": "example_password"
}
Key Type Description
smtpServer string IP/Domain name for SMTP server
smtpPort number Port to reach SMTP Server
smtpTlsEnabled boolean Enable or disable TLS Authentication
smtpAuthRequired boolean Enable or disable passing authentication with SMTP messages.
smtpUsername string Username for SMTP authentication
smtpPassword string Password for SMTP authentication

NTP & Time Settings

{
  "ntpEnabled": true,
  "ntpHost": "pool.ntp.org",
  "daylightsavings": false,
  "timeZone": "GMT+8"
}
Key Type Description
ntpEnabled boolean Turns on or off NTP time synchronization. Requires network connection
ntpHost string NTP Host URL/IP to reference for time synchronization
daylightsavings boolean Enable or disable day light savings adjustment
timezone string Format: GMTXXX where XXX is between -12 to +12 for timezone offsets from GMT. Ex: GMT+8 for PST

Remote Syslog Settings

{
  "syslogServerIp": "",
  "enableRemoteUserLogging":false,
  "enableRemoteEventLogging":false,
}
Key Type Description
syslogServerIp string Seting remote syslog server IP to send syslog messages
enableRemoteUserLogging boolean Enable or disable sending user activity logs to syslogServerIp
enableRemoteEventLogging boolean Enable or disable sending configured event triggers to syslogServerIp

LCD Front Panel Settings

{
  "lcdOrientation": 90,
  "lcdScreensaverTimeout": 60,
  "lcdBacklightBrightness": 2,
  "lcdScreensaverType": "power_info",
  "lcdBackgroundColor": "black",
  "lcdOutletControlEnabled": true,
  "lcdNetworkControlEnabled": true,
  "lcdRebootControlEnabled":false,
  "lcdFlushControlEnabled":false

}
Key Type Description
lcdOutletControlEnabled boolean Allow controlling of outlet relays (if applicable) through front panel LCD
lcdNetworkControlEnabled boolean Allow changing of IP assignment/Address through front panel LCD
lcdRebootControlEnabled boolean Allows user to reboot the control module from the LCD interface (outlet states are unchanged)
lcdFlushControlEnabled boolean Allows user to flush logs and issue a graceful shutdown
lcdOrientation number Degrees to rotate screen. Options are 0, 90, 180, or 270
lcdBacklightBrightness string Value between 0 and 7. 7 is brightest.
lcdScreensaverTimeout number Number of seconds before screensaver plays
lcdScreensaverType string Screensaver type. Options vary for each model.
lcdBackgroundColor string Options: black, navy, blue, teal, magenta, gray, maroon, purple, green, orange, navy, olive

Port Settings

Port A can switch between Modem Mode, COM mode, and Sensor Mode. This port cannot be multiple modes at the same time.

COM mode will allow a serial connection to the SynLink Command Line Interface.

Sensor mode allows useage with sensor accessories.

Modem mode provides out of band access to a connected serial device, such as a modem. For example: connect a modem's serial port to the Port A serial port set to modem mode. Then from the SynLink CLI, use command "modem connect". You will now be able to use the modem's serial port.

{
  "portAMode": "sensor",
  "portAComBaud": 115200,
  "portAModemBaud": 115200,
  "usbComBaud": 115200,
  "usbModemBaud":115200,
  "usbFwupdateControlEnabled":false
}
Key Type Description
portAMode string Options are: "sensor", "com", and "modem". COM will enable port for serial access. Modem will remote access to connected serial device.
portAModemBaud number Baud rate for RJ45 modem port for MODEM mode. Options are 1200, 2400, 4800, 9600, 19200, 38400, 57600 and 115200
portAComBaud number Baud rate for RJ45 modem port for COM mode. Options are 1200, 2400, 4800, 9600, 19200, 38400, 57600 and 115200
usbModemBaud number Baud rate for USB Port when a serial device is connected. Options are 1200, 2400, 4800, 9600, 19200, 38400, 57600 and 115200
usbComBaud number Baud rate for USB-serial port labeled "COM". Options are 1200, 2400, 4800, 9600, 19200, 38400, 57600 and 115200
usbFwupdateControlEnabled boolean Enable or Disable Power Sharing for Controller Power Redundancy

 

Modify Configurations

POST    /api/conf         Modifies configuration

Follows Authentication Scheme. Use any previously specified configuration values as a argument to modify configurations.

Example Request
curl 'http://192.168.1.100/api/conf' \
  -H 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
  --data '{"deviceName":"Closet PDU Primary"}'

Expected response is newly modified Conf Object

Sensors

SynLink PDUs support a variety of sensors. The most common being a temperature and humidity sensor.

Sensor Object

{
  "sensorPort": "B",
  "sensorName": "Temperature & Humidity Sensor",
  "sensorType": "temp_hum",
  "sensorId": "2" // temperature sensor ID's will correlate with their port. Smart IO Hubs will be unique per hub.
}
Key Type Description
sensorPort string "A" or "B" are the available options. Correspond with physical RJ45 ports.
sensorType string Specifies which type of sensor. Example: "temp_hum"
sensorName string Name for sensor. Not changeable.
sensorId string Unique identifier for sensor within a SynLink control module. Temperature/humidity sensors will be tied to the sensor port. Smart IO Hubs will be unique per hub.

Sensor Object - SPA-0010 Temperature & Humidity Attributes

If sensorType is "temp_hum" then the sensor object will have the following attributes.

{
  "sensorTempInC": 22.90574836730957,
  "sensorTempInF": 73.2303466796875,
  "sensorHumidity": 39.50677490234375,
}
Key Type Description
sensorTempInF number Temperature in fahrenheit
sensorTempInC number Temperature in celsius
sensorHumidity number Humidity as a relative percentage

Sensor Object - SPA-0140 Smart IO Hub Attributes

If sensorType is "dio_hub" then the sensor object will have the following attributes.

{
  "outputRelays": [
    {
      "outputRelayName": "Output Relay 1",
      "outputRelayDescription": "Output Relay 1",
      "rebootStatus": "none",
      "state": "OPEN",
      "index": 1
    }...
  ],
  "digitalInputs": [
    {
      "digitalInputName": "Digital Input 1",
      "digitalInputDescription": "Digital Input 1",
      "state": "HI",
      "index": 1
    }...
  ],
  "vdcOutputState": true,
  "userSwitchState": false
}
Key Type Description
outputRelays array Array of output relay objects. See Output Relay Object
digitalInputs array Array of digital input objects. See Digital Input Object
vdcOutputState boolean true is ENABLED, false is DISABLED. Changeable.
userSwitchState boolean true is ON, false is OFF. Read Only.

Output Relay Object

Key Type Description
outputRelayName string Unique ID for sensor within a SynLink PDU. Changeable.
outputRelayDescription string User editable description for Output Relay. Max 250 characters. Changeable.
state string "OPEN", "CLOSE". Changeable.
index number 1 through 6. Matches label on Smart IO Hub. Read Only.

Digital Input Object

Key Type Description
digitalInputName string Unique ID for sensor within a SynLink PDU
digitalInputDescription string User editable description for Digital Input. Max 250 characters
state string "HI", "LOW"
rebootStatus string "pendingHI", "pendingLOW", "none"
index number 1 through 6. Matches label on Smart IO Hub

 

List All Sensors

Returns list of all connected sensors.

GET /api/sensors    Returns all sensors

Example Request

curl 'http://192.168.1.100/api/sensors' \
  --header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k'

Response

Expected response is an array of Sensor Object(s).

[
  {
    "sensorId": "1",
    "sensorPort": "A",
    "sensorName": "Temperature & Humidity Sensor",
    "sensorDescription": "Temperature & Humidity Sensor",
    "sensorTempInC": 22.90574836730957,
    "sensorTempInF": 73.2303466796875,
    "sensorHumidity": 39.50677490234375,
    "sensorType": "temp_hum"
  },
  {
    "sensorId": "8279312",
    "sensorPort": "B",
    "sensorName": "Smart IO Hub",
    "sensorDescription": "Smart IO Hub",
    "sensorType": "dio_hub",
    "outputRelays": [
      {
        "outputRelayName": "Output Relay 1",
        "outputRelayDescription": "Output Relay 1",
        "rebootStatus": "none",
        "state": "OPEN",
        "index": 1
      }...
    ],
    "digitalInputs": [
      {
        "digitalInputName": "Digital Input 1",
        "digitalInputDescription": "Digital Input 1",
        "state": "HI",
        "index": 1
      }...
    ],
    "vdcOutputState": true,
    "userSwitchState": false
  }
]

 

Modify Smart IO Hub Sensor Settings or VDC Output State

PUT /api/sensors/:sensorId                Modify Sensor Settings/State

Request

Follows Authentication Scheme

:sensorId may be replaced with :sensorPort if desired. Endpoint only applies to SPA-0140 Smart IO Hub.

{
  "sensorName": "Lab bench #2 sensor hub",
  "sensorDescription": "Under desk on right side.",
  "vdcOutputState": true
}

sensorName Name string up to 100 characters.

sensorDesription Description string up to 250 characters.

vdcOutputState true is ENABLED, false is DISABLED.

Example Request

curl 'http://192.168.1.100/api/sensors/875552' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
--data '{"sensorName":"Lab bench #2 sensor hub","sensorDescription":"Under desk on right side."}'

Response

Expected response is a Sensor Object.

{
  "sensorId": "8279312",
  "sensorPort": "B",
  "sensorName": "Smart IO Hub",
  "sensorDescription": "Smart IO Hub",
  "sensorType": "dio_hub",
  "outputRelays": [
    {
      "outputRelayName": "Output Relay 1",
      "outputRelayDescription": "Output Relay 1",
      "rebootStatus": "none",
      "state": "OPEN",
      "index": 1
    }...
  ],
  "digitalInputs": [
    {
      "digitalInputName": "Digital Input 1",
      "digitalInputDescription": "Digital Input 1",
      "state": "HI",
      "index": 1
    }...
  ],
  "vdcOutputState": true,
  "userSwitchState": false
}

Modify Smart IO Hub Output Relay Settings/State

PUT /api/sensors/:sensorId/outputRelay/:outputRelayIndex    Modify Sensor Hub Output Relay State

Request

Follows Authentication Scheme

:sensorId may be replaced with :sensorPort if desired. Endpoint only applies to SPA-0140 Smart IO Hub.

{
  "outputRelayName": "Solenoid valve DC-4",
  "outputRelayDescription": "Solenoid valve #2. Green tag.",
  "state": "OPEN"
}

outputRelayName Name string up to 100 characters.

outputRelayDescription Description string up to 250 characters.

state Valid options are "OPEN" or "CLOSE". Case insensitive.

Example Request

curl 'http://192.168.1.100/api/sensors/875552/outputRelay/1' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
--data '{"outputRelayName":"Solenoid valve DC-4","outputRelayDescription":"Solenoid valve #2. Green tag.","state":"OPEN"}'

Response

Expected response is a Output Relay Object.

Modify Smart IO Hub Digital Input Settings

PUT /api/sensors/:sensorId/digitalInputs/:digitalInputIndex   Modify Sensor Hub Digital Input State

Request

Follows Authentication Scheme

:sensorId may be replaced with :sensorPort if desired. Endpoint only applies to SPA-0140 Smart IO Hub.

{
  "digitalInputName": "Leak Detection Lab Bench #2",
  "digitalInputDescription": "On the ground, near the power strip.",
}

digitalInputName Name string up to 100 characters.

digitalInputDescription Description string up to 250 characters.

Example Request

curl 'http://192.168.1.100/api/sensors/875552/digitalInputs/1' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
--data '{"digitalInputName":"Leak Detection Lab Bench #2","digitalInputDescription":"On the ground, near the power strip."}'

Response

Expected response is a Digital Input Object.

Events

Events are specific triggers that will run specified actions. An example event would be an outlet current draw being greater than 5 amps. With an example action of emailing support@synaccess-net.com.

Event Object

{
  "name": "16A Warning Threshold for Banks/Circuit Breaker",
  "id": 2,
  "enabled": true,
  "code": 31,
  "numTicksBeyond": 0,
  "triggered": false,
  "params": [
    "any",
    "16",
    "10"
  ],
  "actions": [
    1,
    2
  ]
}
Key Type Description
name string Name for event
id number Unique identifier
enabled boolean Enable or disable event trigger
code number Event Code. see Event Codes Table
params array Array of strings for associated to particular event code. See event codes table.
actions array Array of action ID's
triggered boolean Describes whether or not the trigger has met it's threshold
numTicksBeyond number Number of steps beyond the threshold. For example, 3 ticks beyond for max current is 3 seconds beyond

 

List All Events

GET    /api/events     Returns list of events

Example Request

  curl 'http://192.168.1.100/api/events' \
  --header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k'

Expected response is an array of Event Objects

Create New Event

POST /api/events      Create a new Event

Request

Follows Authentication Scheme

{
  "name": "Outlet #2 Amperage Threshold",
  "code": 45,
  "params": [
    "8-286331153",
    "5",
    "3"
  ],
  "actions": [
    2
  ]
}

name required Name string up to 100 characters

code required Event code for particular trigger. See Event Code Table.

params required for certain triggers See Event Code Table. Array of strings, maximum 3 parameters.

actions required Array of action ID's.

Example Request

curl 'http://192.168.1.100/api/events' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
--data '{"name":"Outlet #2 Amperage Threshold","code":"45","params":["8-286331153",5,3],"actions":[2]}'

Expected response is an Event Object

Modify Event

POST  /api/events/:event_id    Modifies specific event

Request

Follows Authentication Scheme

{
  "name": "Outlet #2 Amperage Threshold",
  "code": 45,
  "params": [
    "8-286331153",
    "5",
    "3"
  ],
  "actions": [
    2
  ]
}

Same request body as Creating New Events

Example Request

curl 'http://192.168.1.100/api/events/1' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
--data '{"name":"Outlet #2 Amperage Threshold","code":"45","params":["8-286331153","6","3"],"actions":[2]}'

Expected response is an Event Object

Delete Event Permanently

DELETE  /api/events/:event_id   Permanently remove event

Request

Follows Authentication Scheme

{} // no request parameters

Example Request

curl -X DELETE 'http://192.168.1.100/api/events/1' \
--header 'Cookie: SPID=j2d36cG2ciHKDDqFc3k'

Response

Expected response is a 200 HTTP response for success.

200

 

Event Codes Table

Code Name Parameter 1 Parameter 2 Parameter 3 Description
12 AutoPing Timeout Target IP Address # fails before action -- IP Address to Ping. Failure to ping creates trigger.
13 Inlet Line Max Current Threshold Inlet Line Amperage Threshold # secs past threshold Applies to 3 phase PDUs with line measurements. Amperage threshold in amps
14 Inlet Line Min Current Threshold Inlet Line Amperage Threshold # secs past threshold Applies to 3 phase PDUs with line measurements. Amperage threshold in amps
15 Inlet Max Current Threshold Inlet ID Amperage Threshold # secs past threshold Applies to single phase PDUs. Amperage threshold in amps
16 Inlet Min Current Threshold Inlet ID Amperage Threshold # secs past threshold Applies to single phase PDUs. Amperage threshold in amps
17 Inlet Max Voltage Threshold Inlet ID Voltage Threshold # secs past threshold Applies to single phase PDUs. Voltage threshold in volts
18 Inlet Min Voltage Threshold Inlet ID Voltage Threshold # secs past threshold Applies to single phase PDUs. Voltage threshold in volts
19 Inlet Max Line Frequency Threshold Inlet ID Line Frequency Threshold # secs past threshold Applies to single phase PDUs. Line frequency threshold in hertz
20 Inlet Max Line Frequency Threshold Inlet ID Line Frequency Threshold # secs past threshold Applies to single phase PDUs. Line frequency threshold in hertz
21 Inlet Min Power Factor Inlet ID Power Factor Threshold # secs past threshold Power Factor Threshold as a ratio
22 Inlet Active Energy Accumulation Max Inlet ID kWh Threshold -- --
24 Inlet Min Active Power Threshold Inlet ID Active Power Threshold # secs past threshold Active Power Threshold in watts
23 Inlet Max Active Power Threshold Inlet ID Active Power Threshold # secs past threshold Active Power Threshold in watts
25 Inlet Max Apparent Power Threshold Inlet ID Apparent Power Threshold # secs past threshold Apparent Power Threshold in volt-amperes (VA)
26 Inlet Min Apparent Power Threshold Inlet ID Apparent Power Threshold # secs past threshold Apparent Power Threshold in volt-amperes (VA)
29 Inlet 3 Phase Imbalance Inlet ID % Imbalance Threshold # secs past threshold --
30 Bank Circuit Breaker Trip Bank ID -- -- --
31 Bank Max Current Threshold Bank ID Amperage Threshold # secs past threshold Amperage threshold in amps
32 Bank Min Current Threshold Bank ID Amperage Threshold # secs past threshold Amperage threshold in amps
33 Bank Max Voltage Threshold Bank ID Voltage Threshold # secs past threshold Voltage threshold in volts
34 Bank Min Voltage Threshold Bank ID Voltage Threshold # secs past threshold Voltage threshold in volts
35 Bank Max Line Frequency Threshold Bank ID Line Frequency Threshold # secs past threshold Line Frequency threshold in hertz
36 Bank Min Line Frequency Threshold Bank ID Line Frequency Threshold # secs past threshold Line Frequency threshold in hertz
37 Bank Min Power Factor Bank ID Power Factor Threshold # secs past threshold
38 Bank Active Energy Accumulation Max Bank ID kWh Threshold --
39 Bank Max Active Power Threshold Bank ID Active Power Threshold # secs past threshold Active Power Threshold in watts
40 Bank Min Active Power Threshold Bank ID Active Power Threshold # secs past threshold Active Power Threshold in watts
41 Bank Max Apparent Power Threshold Bank ID Apparent Power Threshold # secs past threshold Apparent Power Threshold in volt-amperes (VA)
42 Bank Min Apparent Power Threshold Bank ID Apparent Power Threshold # secs past threshold Apparent Power Threshold in volt-amperes (VA)
45 Outlet Max Current Threshold Outlet ID Amperage Threshold # secs past threshold Applies to PDUs with Outlet Current Measurements. Amperage threshold in amps
46 Outlet Min Current Threshold Outlet ID Amperage Threshold # secs past threshold Applies to PDUs with Outlet Current Measurements. Amperage threshold in amps
49 Temperature Max Threshold Sensor ID Temperature Threshold # secs past threshold Requires attached temperature/humidity sensor. Temperature threshold in celsius
50 Temperature Min Threshold Sensor ID Temperature Threshold # secs past threshold Requires attached temperature/humidity sensor. Temperature threshold in celsius
51 Humidity Max Threshold Sensor ID Humidity Threshold # secs past threshold Requires attached temperature/humidity sensor. Humidity threshold as relative humidity %
52 Humidity Min Threshold Sensor ID Humidity Threshold # secs past threshold Requires attached temperature/humidity sensor. Humidity threshold as relative humidity %
53 Scheduled Daily Time Time to trigger -- -- Time of day in military time. example: 13:01
54 Scheduled Time Interval -- -- -- Triggers every X seconds forever
55 ATS Switched to Secondary -- -- -- Applies to ATS PDUs. Triggers when Primary ATS Inlet has lost power and switches to Secondary
56 ATS Switched to Primary -- -- -- Applies to ATS PDUs. Triggers when Primary ATS Inlet has recovered and switches from Secondary to Primary
57 Secondary Power Source Lost -- -- -- Applies to ATS PDUs. Triggers when Secondary ATS Inlet has lost power.
58 Secondary Power Source Restored -- -- -- Applies to ATS PDUs. Triggers when Secondary ATS Inlet has recovered power.
59 System Power Recovery Event Bank ID -- -- Fires when the given Bank has booted up after having no power. Will fire with circuit breaker trip for supported devices. For single inlet devices, choose any bank. For Dual circuit devices, Banks are linked with inlets.
60 Monthly Scheduled Event Day of Month Hour Of Day Minute of Hour Day of month as a number between 1 and 28, hour of day as 0-23, minute as 0-59
61 Weekly Scheduled Event Day of Week Hour of Day Minute of hour Day of week as 0-6, hour of day as 0-23, minute at 0-59
62 Digital Input State High Sensor Port (A or B) Digital Input Index (1-6) # secs past threshold Requires SPA-0140 Smart IO Hub. Triggers an event when a hub's digital input senses high for # secs past threshold
63 Digital Input State Low Sensor Port (A or B) Digital Input Index (1-6) # secs past threshold Requires SPA-0140 Smart IO Hub. Triggers an event when a hub's digital input senses low for # secs past threshold
64 User Switch Triggered Sensor Port (A or B) State triggered to -- Requires SPA-0140 Smart IO Hub. If state is triggered OFF, then when user switch is turned off, event is triggered
65 Sensor Connected/Disconnected Sensor Port (A or B) Connect/Disconnect --

Actions

Actions are operations that are triggered from an event. Examples include email notifications, outlet reboots, send snmp traps.

Action Object

{
  "name": "Reboot Router Outlet",
  "id": 3,
  "enabled": true,
  "code": 12,
  "params": [
    "4-286331153"
  ]
}
Key Type Description
name string Name for action
id number Unique identifier for action
enabled boolean Enable or disable execution of action after trigger.
code number Code for action. See Action Code Table
params array Array of strings. Corresponds to action code. See Action Code Table

 

List All Actions

GET     /api/actions               Grab list of all actions

Example Request

  curl 'http://192.168.1.100/api/events' \
  --header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k'

Expected response is a list of Action Object

Create New Action

POST /api/actions      Create a new Action

Request

Follows Authentication Scheme

{
  "name": "Reboot Router Outlet",
  "code": 12,
  "params": [
    "4-286331153"
  ]
}

name required Name string up to 100 characters

code required Action code for particular action. See Action Code Table.

params required for certain triggers See Action Code Table. Array of strings, maximum 3 parameters.

Example Request

curl 'http://192.168.1.100/api/actions' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
--data '{"name":"Reboot Router Outlet","code":12,"params":["4-286331153"]}'

Expected response is an Action Object

Modify Action

POST  /api/actions/:action_id    Modifies specific action

Follows Authentication Scheme

Same request body as Creating New Action

Example Request

curl 'http://192.168.1.100/api/actions/1' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k' \
--data '{"name":"Reboot Router Outlet","code":12,"params":["5-286331153"]}'

Expected response is an Action Object

Delete Action Permanently

DELETE  /api/actions/:action_id   Permanently remove action

Request

Follows Authentication Scheme

{} // no request parameters

Example Request

curl -X DELETE 'http://192.168.1.100/api/actions/1' \
--header 'Cookie: SPID=j2d36cG2ciHKDDqFc3k'

Expected response is a 200 HTTP response for success.

Action Code Table

Code Name Parameter 1 Parameter 2 Parameter 3 Description
11 Switch Outlet Outlet ID State to switch to -- State to switch to. either "ON" or "OFF"
12 Reboot Outlet Outlet ID -- --
15 Email Recipient Email Address -- -- Must have SMTP settings configured.
16 Switch Outlet Group Group ID State to switch to -- State to switch to. Either "ON" or "OFF"
17 Powercycle Outlet Group Group ID -- --
18 SNMPv2 Trap Notification Trap Manager Host Trap Community String --
19 SNMPv3 Trap Notification Trap Manager Host -- --
20 HTTP Post Request URL/IP Address Optional Power Stats -- Using URL requires proper DNS Configuration. Stat Options: "none", "inlets", "sensors", "outlets", and "circuits"
22 Switch Output Relay Output Relay Name State to switch to -- Only available on PDUs with Output Relay
23 Reboot Output Relay Output Relay Name -- -- Only available on PDUs with Output Relay
24 Switch Off Other PDU Outlet IP of Other PDU Outlet ID or Index Personal Access Token from Other PDU Performs action on "Other" PDU on the same network
25 Switch On Other PDU Outlet IP of Other PDU Outlet ID or Index Personal Access Token from Other PDU Performs action on "Other" PDU on the same network
26 Switch Off Other PDU Outlet Group IP of Other PDU Group ID or Index Personal Access Token from Other PDU Performs action on "Other" PDU on the same network
27 Switch On Other PDU Outlet Group IP of Other PDU Group ID or Index Personal Access Token from Other PDU Performs action on "Other" PDU on the same network
28 Reboot Other PDU Outlet IP of Other PDU Outlet ID or Index Personal Access Token from Other PDU Performs action on "Other" PDU on the same network
29 Reboot Other PDU Outlet Group IP of Other PDU Group ID or Index Personal Access Token from Other PDU Performs action on "Other" PDU on the same network
30 Switch Secondary Network Interface -- -- Requires USB-to-Ethernet Accessory to enable Secondary NIC
31 Reset kWh Meter -- -- Only available on PDUs with Energy Metering.
32 Smart IO Hub Relay Switch Sensor Port (A or B) Output Relay Index (1-6) Output Relay State (OPEN/CLOSE) Requires SPA-0140 Smart IO Hub. Switches a output relay.

KWH History

KWH History shows kwh measurements taken at the first of every month. It works independently of the "reset energy accumulator" measurements. Stores up to 12 months worth of data. KWH History is available for each individual bank.

KWH History Object

Key Type Description
bankName string Name for bank/circuit which the kWh measurements are associated with
inletId string ID for inlet which the kWh measurements are associated with
serialNumber number Serial number for circuit where kWh measurement is taken
data array Array of data points with timestamps recorded one month apart. 0 value for timestamp should be ignored.
data[].timestamp number Unix timestamp for which kWh measurement was recorded. 0 values should be ignored.
data[].kwh number energy measurement as kWh value.
[
    {
        "bankName": "Bank 1",
        "inletId": "I1-1502793",
        "serialNumber": 2001599,
        "data": [
            {
                "timestamp": 0,
                "kwh": 0
            },
            {
                "timestamp": 0,
                "kwh": 0
            },
            {
                "timestamp": 0,
                "kwh": 0
            },
            {
                "timestamp": 0,
                "kwh": 0
            },
            {
                "timestamp": 1632504072,
                "kwh": 0
            },
            {
                "timestamp": 1635096072,
                "kwh": 0
            },
            {
                "timestamp": 1637774472,
                "kwh": 0
            },
            {
                "timestamp": 1640366472,
                "kwh": 1.1
            },
            {
                "timestamp": 1643044872,
                "kwh": 3.33
            },
            {
                "timestamp": 1645723272,
                "kwh": 5.98
            },
            {
                "timestamp": 1648142472,
                "kwh": 8.87
            },
            {
                "timestamp": 1650820872,
                "kwh": 12.42
            },
            {
                "timestamp": 1652894420,
                "kwh": 18.87
            }
        ]
    }
]

Calculate Energy Consumption for a single month

There is an internal KWH meter that never gets deleted. Once a month on the 1st, this internal KWH meter value is recorded.

To calculate the energy consumption for a single month, start with identifying the month you are interested in. Timestamps are saved in unix time stamp format. There are online converters to get human readable time information from unix time stamps.

Once you've identified the month you'd like, find the first time stamp after the month of interest. For instance, if you are interested in February's KWH consumption, identify the timestamp marked March 1.

Subtract March 1st's kwh value from the previous timestamp's kwh value. This will give you the KWH for March.

Calculate Energy Consumption for a Single Month

There is an internal KWH meter that never gets deleted. Once a month on the 1st, this internal KWH meter value is recorded.

To calculate the energy consumption for a single month, start with identifying the month you are interested in. Timestamps are saved in unix time stamp format. There are online converters to get human readable time information from unix time stamps.

Once you've identified the month you'd like, find the first time stamp after the month of interest. For instance, if you are interested in February's KWH consumption, identify the timestamp marked March 1.

Subtract March 1st's kwh value from the previous timestamp's kwh value. This will give you the KWH for March.

Calculate Month To Date (MTD) kWh

In order to calculate the Month-to-Date (MTD) kWh, you need two pieces of information from the PDU: 1. The kWh at the 1st of the current month. 2. The latest and current kWh

To get the kwh at the 1st of the current month, get the output of GET /api/kwhHist, access the last item inside the "data" array. To get the latest and current kWh, get the output of GET /api/diagnostics and access the lifetimeInletEnergyAccumulation value.

Subtract the latest from the kwh at the 1st of the month to calculate the month to date kwh.

Get KWH History

Retrieve PDU device information.

GET    /api/kwhHist      Returns object describing top level device information

Example Request

curl 'http://192.168.1.100/api/kwhHist' \
--header 'Authorization: Bearer j2d36cG2ciHKDDqFc3k'

Response Body

[
    {
        "bankName": "Bank 1",
        "inletId": "I1-1502793",
        "serialNumber": 2001599,
        "data": [
            {
                "timestamp": 0,
                "kwh": 0
            },
            {
                "timestamp": 0,
                "kwh": 0
            },
            {
                "timestamp": 0,
                "kwh": 0
            },
            {
                "timestamp": 0,
                "kwh": 0
            },
            {
                "timestamp": 1632504072,
                "kwh": 0
            },
            {
                "timestamp": 1635096072,
                "kwh": 0
            },
            {
                "timestamp": 1637774472,
                "kwh": 0
            },
            {
                "timestamp": 1640366472,
                "kwh": 1.1
            },
            {
                "timestamp": 1643044872,
                "kwh": 3.33
            },
            {
                "timestamp": 1645723272,
                "kwh": 5.98
            },
            {
                "timestamp": 1648142472,
                "kwh": 8.87
            },
            {
                "timestamp": 1650820872,
                "kwh": 12.42
            },
            {
                "timestamp": 1652894420,
                "kwh": 18.87
            }
        ]
    }
]

System Utility Endpoints

Requires Proper Permissions for user for each separate System Utility Endpoint. Configure permissions as admin user on web interface in Settings -> Manage Users section.

Factory Reset Configuration

Call this endpoint to return PDU to factory default

POST    /api/system/configReset  Reset all configuration to factory default

Reboot PDU

Call this endpoint to reboot the controller module of the PDU.

THIS DOES NOT AFFECT YOUR OUTLET RELAY STATES.

If you call this, your outlet states will not change.

POST    /api/system/reboot       Reboot PDU.

Upload Firmware Binary

With appropriate firmware files, update your SynLink PDU Operating System via HTTP API.

POST    /api/system/firmware     Upload firmware binary to firmware upgrade. If valid binary, upgrade occurs immediately

Example Request

  curl \
  -F filename=@/home/user/file_location \
  --header 'Cookie: SPID=j2d36cG2ciHKDDqFc3k'
  http://192.168.1.100/api/system/firmware

WebSocket

WebSocket Data Stream

When successfully connected AND authenticated. SynLink PDU's will output a data stream onto a WebSocket with the following WebSocket Data Stream Object at a rate of once every 2 seconds.

WebSocket Data Stream Object

Key Type Description
device object Object with uptime and time
banks array Array of WebSocket Bank Object(s)
inlets array Array of WebSocket Inlet Object(s)
outlets array Array of WebSocket Outlet Objects if applicable
sensors array Array of Sensor Outlet Object(s) if connected

WebSocket Device Object

Key Type Description
uptime number Number of seconds the PDU has been on.
time string Time in ISO8601 String Format.

WebSocket Bank Object

Key Type Description
id string Unique identifier for the bank
currentRms number The instantaneous current measured at the inlet in Amps
voltageRms number Instantaneous voltage reading at inlet and all outlets in volts
lineFrequency number Line Frequency measurement valid from 45-65 GHz
powerFactor number Power Factor reading. Value is signed value representing polarity of power factor
activePower number Active Power measured in KW (kiloWatts). Power consumed by electrical resistance
apparentPower number Power which is actually consumed or utilized
energyAccumulation number Number of kilowatt hours accumulated. Can be used as billing unit for energy delivered
hasCircuitBreakerProtection boolean true if PDU has circuit breaker protection.
circuitBreakerClosed boolean State of circuit breakers. true if circuit breaker is closed and providing power correctly.

WebSocket Inlet Object

Key Type Description
id string Unique identifier for Inlet
inletType string Describes configuration of specific Inlet Object. Either "single", "dual", or "ats".
inletPlug string Connector type for Inlet
inletName string User defined name for inlet
inletEnergyAccumulation number kWH value to show energy consumption for inlet plug. If multiple inlets, value will stay same for all inlets.

Conditional WebSocket Inlet Object Attributes

Is available when PDU is a three phase PDU

Key Type Description
inletPowerFactor number Power factor value for inlet plug
threePhaseBalance string Percentage unbalance for 3 phase circuit
inletLines array Contains 3 line objects, each with "currentRMS" in amps, unique "id", and "line" it is associated with.

Is available when PDU is a single phase PDU

Key Type Description
inletCurrentRms number Inlet current draw in amps
inletVoltageRms number Inlet voltage RMS in volts
inletLineFrequency number Inlet line frequency in hertz
inletPowerFactor number Power factor ratio
inletActivePower number Inlet Active Power in watts
inletApparentPower number Inlet Apparent Power in Volt-amperes (VA)
inletLineConfiguration string Line configuration for outlets connected to this inlet.

Is available when PDU is an ATS PDU

Key Type Description
atsInletId string Either "A" or "B". Matches label on PDU.
atsInletActive boolean true if inlet is used to power outlets.
atsInletReady boolean true if inlet has voltage potential

Data Stream Object

{
  "device": {
    "uptime": 251362,
    "time": "2012-01-03T22:34Z"
  },
  "banks": [
    {
      "id": 16777225,
      "currentRms": 0.007400000002235174,
      "voltageRms": 117.0999984741211,
      "lineFrequency": 60.1879997253418,
      "powerFactor": -0.465087890625,
      "activePower": 0.4000000059604645,
      "apparentPower": 0.8600000143051147,
      "hasCircuitBreakerProtection": false,
      "circuitBreakerClosed": true,
      "energyAccumulation": 0
    },
    ...
  ],
  "inlets": [
    {
      "id": "I1-9826498",
      "inletCurrentRms": 0.007400000002235174,
      "inletVoltageRms": 117.0999984741211,
      "inletLineFrequency": 60.1879997253418,
      "inletPowerFactor": 0.4651162922382355,
      "inletActivePower": 0.4000000059604645,
      "inletApparentPower": 0.8600000143051147,
      "inletEnergyAccumulation": 0
    }
  ],
  "outlets": [
    {
      "id": "1-16777225",
      "currentRms": 0.16098617017269135,
      "state": "ON",
      "voltageDetection": true,
      "relayHealth": "OK"
    },
    ...
  ],
  "sensors": [
    {
      "sensorPort": "B",
      "sensorName": "Temperature & Humidity Sensor",
      "sensorTempInC": 18.23232650756836,
      "sensorTempInF": 64.81819152832031,
      "sensorHumidity": 59.186912536621094,
      "sensorType": "temp_hum"
    },
    ...
  ]
}

Web Hook / Post HTTP Requests

Post HTTP Request Actions for Events

Post HTTP can be configured to send on a configured event

The following JSON object is the structure depending on optionally added stats.

Example Web Hook Data Structure

{
  "eventCode": 15,
  "eventName": "Example Inlet Max Current",
  "enclosureSerialNumber": "1000016",
  "valueExceedingThreshold": 0,
  "outlets": [ OUTLET OBJECTS ], // optional
  "inlets": [ INLET OBJECTS ], // optional
  "banks": [ BANK OBJECTS ], // optional
  "sensors": [ SENSORS ] // optional
}