Summary
Power distribution unit with IP-based REST API control. Managed via HTTP/HTTPS with Basic Authentication and session token support. Controls individual outlets, groups, and sequences. Supports power monitoring, triggers, and event logging. Model SX-VS-1216 identified in source; other Vertical Series+ models may be compatible.
Transport
protocols:
- http
- udp # mDNS/Bonjour discovery service per source
addressing:
base_url: "" # UNRESOLVED: base URL not explicitly stated; only host:port shown in examples (e.g. 10.221.7.73:8080, default HTTP port 80 per httpd.port)
port: 80 # default HTTP port per httpd.port description in source
udp_discovery_port: 5353 # source: mDNS runs on port 5353
auth:
type: basic # Basic Authentication stated in source
session_tokens: true # x-auth-token header supported per source
Traits
- powerable # PowerOn, PowerOff, Reboot commands present
- routable # Outlet and group routing via sequences
- queryable # GET endpoints for status, settings, measurements
- levelable # Power monitoring (voltage, current, energy, PF)
- discoverable # mDNS / Bonjour on UDP port 5353 per source
Actions
- id: power_on_outlet
label: Power On Outlet
kind: action
params:
- name: outlet_id
type: string
description: Outlet identifier (e.g., "/1/1")
method: POST
path: /api/v1/{id}/{outlet_id}/PowerOn
source: POST /api/v1/1/1/PowerOn documented in source
- id: power_off_outlet
label: Power Off Outlet
kind: action
params:
- name: outlet_id
type: string
description: Outlet identifier (e.g., "/1/1")
method: POST
path: /api/v1/{id}/{outlet_id}/PowerOff
source: POST /api/v1/1/1/PowerOff documented in source
- id: reboot_outlet
label: Reboot Outlet
kind: action
params:
- name: outlet_id
type: string
description: Outlet identifier (e.g., "/1/1")
method: POST
path: /api/v1/{id}/{outlet_id}/Reboot
source: POST /api/v1/1/1/Reboot documented in source
- id: enter_shutdown_state
label: Enter Shutdown State
kind: action
params: []
method: POST
path: /api/v1/EnterShutdownState
source: POST /api/v1/EnterShutdownState documented in source
- id: clear_shutdown_state
label: Clear Shutdown State
kind: action
params: []
method: POST
path: /api/v1/ClearShutdownState
source: POST /api/v1/ClearShutdownState documented in source
- id: reset_energy_usage
label: Reset Energy Usage Counter
kind: action
params: []
method: POST
path: /api/v1/1/ResetEnergyUsage
source: POST /api/v1/ResetEnergyUsage documented in source
- id: run_sequence
label: Run Sequence
kind: action
params:
- name: sequence_id
type: integer
description: ID of the sequence to run (passed as array element, e.g. [1])
method: POST
path: /api/v1/RunSequence
source: POST /api/v1/RunSequence documented in source
- id: add_sequence
label: Add Sequence
kind: action
params:
- name: id
type: integer
description: Sequence ID
- name: name
type: string
description: Sequence name
- name: steps
type: array
description: Array of step objects with method and delay
method: POST
path: /api/v1/AddSequence
source: POST /api/v1/AddSequence documented in source
- id: change_sequence
label: Change Sequence
kind: action
params:
- name: id
type: integer
description: Sequence ID to modify
- name: name
type: string
description: New sequence name
- name: steps
type: array
description: Updated steps array
method: POST
path: /api/v1/ChangeSequence
source: POST /api/v1/ChangeSequence documented in source
- id: remove_sequence
label: Remove Sequence
kind: action
params:
- name: id
type: integer
description: ID of sequence to delete (passed as array element, e.g. [2])
method: POST
path: /api/v1/RemoveSequence
source: POST /api/v1/RemoveSequence documented in source
- id: add_trigger
label: Add Trigger
kind: action
params:
- name: trigger_config
type: object
description: Full trigger configuration object (array of trigger objects with id, enabled, name, type, expressions.on/off, actions[].on/off.cmd, etc.)
method: POST
path: /api/v1/AddTrigger
source: POST /api/v1/AddTrigger documented in source
- id: change_trigger
label: Change Trigger
kind: action
params:
- name: trigger_config
type: object
description: Trigger configuration with UUID id
method: POST
path: /api/v1/ChangeTrigger
source: POST /api/v1/ChangeTrigger documented in source
- id: update_network_settings
label: Update Network Settings
kind: action
params:
- name: network_config
type: object
description: Network settings object (ethInterfaces, httpd)
method: PUT
path: /api/v1/networkSettings
source: PUT /api/v1/networkSettings documented in source
- id: update_device_settings
label: Update Device Settings
kind: action
params:
- name: device_config
type: object
description: Device settings object (verticalseries name/id, autoLogoutTime, startupProcedure, shutdownClearProcedure, dataLogSchema, eventLogSchema, autoPing, temperatureUnits)
method: PUT
path: /api/v1/deviceSettings
source: PUT /api/v1/deviceSettings documented in source
- id: add_user
label: Add New User
kind: action
params:
- name: username
type: string
- name: name
type: string
- name: authmode
type: string
enum: [internal, ldap]
- name: admin
type: string
enum: [admin, user]
- name: passwd
type: string
- name: privs
type: array
items:
type: string
enum: [TriggerConfig, DeviceControl, NetworkSettings, SoftwareUpdate, UserAdmin]
method: POST
path: /api/v1/UserAdd
source: POST /api/v1/UserAdd documented in source
- id: change_user
label: Change User Settings
kind: action
params:
- name: username
type: string
description: Username of user to modify (required, not for creation)
- name: authmode
type: string
enum: [internal, ldap]
- name: admin
type: string
enum: [admin, user]
- name: passwd
type: string
- name: privs
type: array
method: POST
path: /api/v1/UserChange
source: POST /api/v1/UserChange documented in source
- id: delete_user
label: Delete User
kind: action
params:
- name: username
type: string
description: Username to delete (raw value, not key/value JSON)
method: POST
path: /api/v1/UserDel
source: POST /api/v1/UserDel documented in source
- id: upload_file
label: Upload File
kind: action
params:
- name: filename
type: string
enum: [fwupdate.img, verticalseriesPlus.cfg, snmpd.conf, ssl.crt, ssl.key, cert.ca, wpa_supplicant.conf, wpa_cert.ca, wpa_user.crt, wpa_user.prv, wpa_fast.pac]
- name: file_data
type: string
format: binary
method: POST
path: /api/v1/UploadFile
source: POST /api/v1/UploadFile documented in source
- id: query_time_stamped_events
label: Query Time Stamped Events
kind: query
params:
- name: start_date
type: string
description: Earliest date to include
- name: end_date
type: string
description: Latest date to include
method: POST
path: /api/v1/TimeStampedEvents
source: POST /api/v1/TimeStampedEvents documented in source; body syntax [-1,-1,"startDate","endDate"]
- id: query_log_file_info
label: Query Historical Data File Info
kind: query
params:
- name: log_type
type: string
enum: [VerticalSeriesData]
method: POST
path: /api/v1/LogFileInfo
source: POST /api/v1/LogFileInfo documented in source; returns gzipped CSV file listing
Feedbacks
- id: current_status
type: object
method: GET
path: /api/v1/currentStatus
description: Full device status including outlets, measurements, groups
source: GET /api/v1/currentStatus documented in source
- id: network_settings
type: object
method: GET
path: /api/v1/networkSettings
description: Network configuration including ethInterfaces, httpd, snmp, ntp, udpDiscovery, 802_1x
source: GET /api/v1/networkSettings documented in source
- id: device_settings
type: object
method: GET
path: /api/v1/deviceSettings
description: Device settings including outlets, groups, sequences, startupProcedure, shutdownClearProcedure, autoPing, eventLogSchema, dataLogSchema
source: GET /api/v1/deviceSettings documented in source
- id: user_settings
type: array
method: GET
path: /api/v1/users
description: Array of user objects with privileges
source: GET /api/v1/users documented in source
- id: sequences
type: array
method: GET
path: /api/v1/sequences
description: Array of sequence objects with steps (method = /*ID*/*OUTLET*/*COMMAND*, delay in seconds)
source: GET /api/v1/sequences documented in source
- id: event_settings
type: object
method: GET
path: /api/v1/EventSettings
description: Trigger configurations including numActive, numEntries, maxEntries (default 16), triggers[]
source: GET /api/v1/EventSettings documented in source
- id: time_stamped_events
type: array
method: POST
path: /api/v1/TimeStampedEvents
description: Event log entries between specified dates; body syntax [-1,-1,"startDate","endDate"]
source: POST /api/v1/TimeStampedEvents documented in source
- id: log_file_info
type: object
method: POST
path: /api/v1/LogFileInfo
description: Historical data file listing (VerticalSeriesData); returns schema, logDuration, folder, files[]
source: POST /api/v1/LogFileInfo documented in source
- id: who_are_you
type: object
method: GET
path: /api/v1/WhoAreYou
description: Device identification including model, serial, firmware (semver), manufacturer ("AMETEK ESP/SurgeX"), deviceType, hostname, httpd
source: GET /api/v1/WhoAreYou documented in source
- id: outlet_state
type: enum
values: [0, 1, 2]
description: "0=off, 1=on, 2=rebooting"
source: Outlet state field in currentStatus response
- id: outlet_initial_state
type: enum
values: [0, 1, 2, 3, 4, 5]
description: "0=always on, 1=always off, 2=shutdown, 3=on, 4=off, 5=last state"
source: initialState field in currentStatus response
- id: active_state
type: enum
values: [Start Up, Running, Shutdown]
description: Device operational state
source: activeState field in currentStatus response
- id: temperature_units
type: enum
values: [F, C]
description: "F=Fahrenheit, C=Celsius"
source: temperatureUnits field in currentStatus/deviceSettings response
- id: input_state
type: integer
description: "Reports abnormalities on input power: 'No Ground', 'Reverse Polarity', 'Wiring Fault'"
source: inputState field in currentStatus response
- id: line_voltage
type: number
description: Line-to-line voltage in volts
source: line1Line2 field in currentStatus
- id: line_neutral_voltage
type: number
description: Line-to-neutral voltage in volts
source: voltageLN field in currentStatus
- id: frequency
type: number
description: Frequency in Hz
source: frequency field in currentStatus
- id: current
type: number
description: AC current in Amps (measured on neutral line)
source: current field in currentStatus
- id: power
type: number
description: Average power in watts
source: power field in currentStatus
- id: power_factor
type: number
description: Power factor (-1 to 1, but 0 to 1 for this device)
source: pf field in currentStatus
- id: energy_usage
type: number
description: Energy usage in watt-hours since last reset
source: energyUsage field in currentStatus
- id: temperature
type: number
description: Temperature in units specified by temperatureUnits
source: temperature field in currentStatus
- id: outlet_count
type: integer
description: Number of switchable outlets
source: outletCount field in currentStatus
- id: crest_factor_ln
type: number
description: Crest factor for line-to-neutral voltage (min 1, no max)
source: crestFactor / crestFactorLN field in currentStatus
- id: crest_factor_ng
type: number
description: Crest factor for neutral-to-ground voltage (typical 1.414)
source: crestFactorNG field in currentStatus
- id: crest_factor_current
type: number
description: Crest factor for AC current measurement (min 1, no max)
source: crestFactorNI field in currentStatus
- id: voltage_ng
type: number
description: Neutral-to-ground voltage in volts
source: voltageNG field in currentStatus
- id: line2_ground_voltage
type: number
description: Line 2 to ground voltage in volts (same as neutral-to-ground)
source: line2Ground field in currentStatus
- id: voltage_rating
type: number
description: Same as nominalVoltage (software setting for expected electrical service)
source: voltageRating field in currentStatus
- id: nominal_voltage
type: number
description: Typical voltage expected at the input
source: nominalVoltage field in currentStatus
- id: nominal_frequency
type: number
description: Expected electrical service frequency
source: nominalFrequency field in currentStatus
- id: reboot_time
type: integer
description: Seconds between off and on during Reboot command
source: rebootTime field in currentStatus
- id: data_log_interval
type: integer
description: Frequency in seconds for min/max/avg data storage
source: dataLogInterval field in currentStatus
- id: auto_logout_time
type: integer
description: Web session inactivity timeout in minutes
source: autoLogoutTime field in currentStatus/deviceSettings response
- id: active_users
type: integer
description: Number of users logged into web server
source: activeUsers field in currentStatus response
- id: shutdown_requests
type: integer
description: Counter of Enter Shutdown State requests received
source: shutdownRequests field in currentStatus response
- id: mac_address
type: string
description: MAC address of eth0 (OUI AC:A6:67 owned by ESP Inc.)
source: MAC field in currentStatus response
- id: snmp_port
type: integer
description: SNMP client port (default 161)
source: snmp.port field in networkSettings response
- id: snmp_trap_port
type: integer
description: SNMP trap listener port (default 162)
source: snmp.traps[].port field in networkSettings response
- id: trigger_max_entries
type: integer
description: Maximum number of trigger configurations (default 16)
source: triggers.maxEntries field in EventSettings response
Variables
- id: auto_logout_time
type: integer
description: Web session inactivity timeout in minutes; settable via PUT /api/v1/deviceSettings
source: autoLogoutTime field in deviceSettings
- id: temperature_units
type: enum
values: [F, C]
description: Reported temperature unit; settable via PUT /api/v1/deviceSettings
source: temperatureUnits field in deviceSettings
- id: startup_procedure
type: object
description: "Power-up behavior: {sequenceId, type: RunSequence|InitialState, delay}"
source: startupProcedure field in deviceSettings
- id: shutdown_clear_procedure
type: object
description: Method for power up after shutdown: {sequenceId, type: InitialState|RunSequence}
source: shutdownClearProcedure field in deviceSettings
- id: data_log_schema_active
type: array
description: Array of data points (from available schema) that will be logged
source: dataLogSchema.active field in deviceSettings
- id: event_log_schema_active
type: array
description: Array of event fields logged: Timestamp, Object, User, Name, Type, AlertLevel, Message
source: eventLogSchema.active field in deviceSettings
- id: auto_ping
type: object
description: "Auto-ping settings: {pingTimeout, pollFrequency} in seconds"
source: autoPing field in deviceSettings
- id: hostname
type: string
description: Device hostname
source: hostname field in networkSettings
- id: httpd
type: object
description: "Web server config: {enabled, ssl, port, status}"
source: httpd field in networkSettings
- id: eth_interfaces
type: array
description: "Array of ethernet interface configs: {ifname, mac, addr, mask, gw, dns[], dhcp}"
source: ethInterfaces field in networkSettings
- id: ntp_settings
type: object
description: "NTP client config: {enabled, frequency, server, tz{name,dst}}"
source: ntp field in networkSettings
- id: snmp_settings
type: object
description: "SNMPv3 config: {enabled, communities[], v3[], traps[], port, sendAuthTraps, manualControl, systemTriggers}"
source: snmp field in networkSettings
- id: udp_discovery
type: object
description: "mDNS/Bonjour discovery config: {enabled, status}; port 5353"
source: udpDiscovery field in networkSettings
- id: dot1x
type: object
description: "802.1X authentication config: {enabled, ifname, wpa_supplicant{...}}"
source: 802_1x field in networkSettings
Events
- id: device_control_event
description: Outlet power on/off/reboot actions logged via TimeStampedEvents
type: DeviceControl
source: type=DeviceControl entries in TimeStampedEvents response
- id: system_event
description: System events: login, logout, NTP sync, sequence run
type: System
source: type=System entries in TimeStampedEvents response
- id: trigger_on_event
description: Trigger fired (entered 'on' state)
type: "Trigger (On)"
source: type="Trigger (On)" entries in TimeStampedEvents response
# UNRESOLVED: source does not document unsolicited push notifications from device
# UNRESOLVED: SNMP trap payload schema not detailed in source beyond port
Macros
- id: start_up_sequence
description: Example default sequence from source (id=0, "Start Up Sequence"); runs "/1/X/PowerOn" with staggered delays
steps:
- method: /1/1/PowerOn
delay: 0
- method: /1/2/PowerOn
delay: 5
- method: /1/3/PowerOn
delay: 10
- method: /1/4/PowerOn
delay: 15
source: Example sequence in source under Sequences request
- id: power_off_sensitive
description: Example sequence from source (id=1, "Power off sensitive")
steps:
- method: /1/2/PowerOff
delay: 5
- method: /1/4/PowerOff
delay: 10
source: Example sequence in source under Sequences request
# UNRESOLVED: max sequence steps not specified in source
# UNRESOLVED: max triggers per device is 16 per EventSettings.maxEntries
Safety
confirmation_required_for:
- EnterShutdownState # source: requires Admin privileges; blocks manual outlet on
interlocks:
- ShutdownState: when device is in shutdown state, outlets cannot be turned on by manual control until ClearShutdownState is issued
# UNRESOLVED: explicit power-sequencing warnings or electrical safety limits not in source
Notes
HTTP by default; HTTPS supported via ssl: true in httpd settings. Default HTTP port 80 per httpd.port; examples use port 8080 when customized. All responses JSON with objType key. Protocol version v1 in URI; future breaking changes will increment the version. Web session timeout managed via autoLogoutTime. mDNS (port 5353, UDP) for discovery — recommended to leave enabled when DHCP is on so device IP can be found without USB / factory reset. SNMPv3 supported with MD5 or DES auth; default trap port 162, default client port 161. 802.1X supported via wpa_supplicant (EAP methods: MD5, PEAP, etc.). File upload supports firmware images, config backups, certificates, and WPA supplicant files. objType keys in responses: currentStatus, networkSettings, deviceSettings, eventSettings, timeStampedEvents, whoAreYou, sequences (array). Trigger cmd options: /ClearShutdownState, /EnterShutdownState, /RunSequence, /1/X/PowerOn, /1/X/PowerOff, /1/X/Reboot, /1/X/None. Sequence step method syntax: /*ID*/*OUTLET*/*COMMAND* where ID=1 for Vertical Series+. Energy usage reset endpoint per source: POST /api/v1/ResetEnergyUsage (documented path) vs POST /api/v1/1/ResetEnergyUsage (path pattern used elsewhere) — source shows the bare form in the example.
Provenance
source_domains:
- ametekesp.com
source_urls:
- https://www.ametekesp.com/-/media/ametekesp/downloads/manuals/vertical-series-plus/api-definition-vertical-series.pdf
retrieved_at: 2026-07-10T13:20:51.890Z
last_checked_at: 2026-10-01T11:17:37.499Z
Verification Summary
verdict: verified
checked_at: 2026-10-01T11:17:37.499Z
matched_actions: 20
action_count: 20
confidence: medium
summary: "All 20 spec actions match source POST/PUT endpoints verbatim; transport values (port 80, mDNS 5353, Basic auth, session tokens) are supported by source. (13 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "RS-232 serial control not documented in source"
- "SNMP binary command encodings not in source"
- "base URL not explicitly stated; only host:port shown in examples (e.g. 10.221.7.73:8080, default HTTP port 80 per httpd.port)"
- "source does not document unsolicited push notifications from device"
- "SNMP trap payload schema not detailed in source beyond port"
- "max sequence steps not specified in source"
- "max triggers per device is 16 per EventSettings.maxEntries"
- "explicit power-sequencing warnings or electrical safety limits not in source"
- "serial/RS-232 protocol not documented"
- "HTTPS default port (443) inferred by convention not in source"
- "power rating specifications (voltage, current, wattage limits) not in source beyond nominalVoltage / nominalFrequency per-device settings"
- "fault behavior and error recovery sequences not documented beyond wiringFault boolean"
- "binary SNMP command encodings not in source"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0