Summary
The SurgeX Vertical Series + (by AMETEK ESP/SurgeX) is a networked power distribution unit with individually switchable AC outlets, outlet grouping, power sequencing, event triggers, and energy monitoring. This spec covers the RESTful HTTP/HTTPS API version 1 (/api/v1) used for outlet power control, sequencing, threshold-based triggers, user management, and device configuration. Basic Authentication (or session token) is required for all endpoints. All responses are JSON.
Transport
protocols:
- http
addressing:
base_url: /api/v1
port: 80 # default per source httpd.port; configurable via PUT /api/v1/networkSettings
auth:
type: basic # Basic Authentication required; also supports x-auth-token session header
notes: Authentication is required for all API features. Supports Basic Auth and web session tokens via x-auth-token header.
Traits
- powerable # inferred from PowerOn/PowerOff/Reboot outlet commands
- queryable # inferred from currentStatus, WhoAreYou, deviceSettings query endpoints
Actions
- id: power_on_outlet
label: Power On Outlet
kind: action
transport: http
method: POST
path: /api/v1/{device_id}/{outlet_id}/PowerOn
description: Powers on the specified outlet or group
params:
- name: device_id
type: string
description: Device ID (always "1" for Vertical Series +)
required: true
- name: outlet_id
type: string
description: Outlet or group ID (e.g. "1", "2", or group ID like "25")
required: true
response: boolean (true = success)
auth_required: DeviceControl privilege
- id: power_off_outlet
label: Power Off Outlet
kind: action
transport: http
method: POST
path: /api/v1/{device_id}/{outlet_id}/PowerOff
description: Powers off the specified outlet or group
params:
- name: device_id
type: string
description: Device ID (always "1" for Vertical Series +)
required: true
- name: outlet_id
type: string
description: Outlet or group ID
required: true
response: boolean (true = success)
auth_required: DeviceControl privilege
- id: reboot_outlet
label: Reboot Outlet
kind: action
transport: http
method: POST
path: /api/v1/{device_id}/{outlet_id}/Reboot
description: Reboots the specified outlet or group (power off then on with configurable delay)
params:
- name: device_id
type: string
description: Device ID (always "1" for Vertical Series +)
required: true
- name: outlet_id
type: string
description: Outlet or group ID
required: true
response: boolean (true = success)
auth_required: DeviceControl privilege
- id: enter_shutdown_state
label: Enter Shutdown State
kind: action
transport: http
method: POST
path: /api/v1/EnterShutdownState
description: Puts the device into shutdown state; no outlets can be turned on manually until cleared
params: []
response: boolean (true = success)
auth_required: Admin privilege
- id: clear_shutdown_state
label: Clear Shutdown State
kind: action
transport: http
method: POST
path: /api/v1/ClearShutdownState
description: Takes the device out of shutdown state, returning to running state
params: []
response: boolean (true = success)
auth_required: Admin privilege
- id: reset_energy_usage
label: Reset Energy Usage
kind: action
transport: http
method: POST
path: /api/v1/ResetEnergyUsage
description: Clears the total energy usage counter and resets the date-since-last-reset
params: []
response: boolean
- id: run_sequence
label: Run Sequence
kind: action
transport: http
method: POST
path: /api/v1/RunSequence
description: Executes a previously defined power sequence by its ID
params:
- name: id
type: integer
description: Sequence ID to run
required: true
response: boolean (true = success)
- id: add_sequence
label: Add Sequence
kind: action
transport: http
method: POST
path: /api/v1/AddSequence
description: Creates a new power sequence
params:
- name: id
type: integer
description: Set to null for new sequence
required: true
- name: name
type: string
description: User-friendly name for the sequence
required: true
- name: steps
type: array
description: Array of step objects with "method" and "delay" keys
required: true
response: integer (new sequence ID)
- id: change_sequence
label: Change Sequence
kind: action
transport: http
method: POST
path: /api/v1/ChangeSequence
description: Modifies an existing power sequence
params:
- name: id
type: integer
description: Sequence ID to modify
required: true
- name: name
type: string
description: Updated sequence name
required: true
- name: steps
type: array
description: Updated array of step objects
required: true
response: boolean
- id: remove_sequence
label: Remove Sequence
kind: action
transport: http
method: POST
path: /api/v1/RemoveSequence
description: Deletes a power sequence
params:
- name: id
type: integer
description: Sequence ID to delete
required: true
response: boolean
- id: add_trigger
label: Add Trigger
kind: action
transport: http
method: POST
path: /api/v1/AddTrigger
description: Creates a new event trigger (threshold, schedule, autoping, or GPIO state change)
params:
- name: id
type: integer
description: Set to 0 for new trigger
required: true
- name: enabled
type: boolean
required: true
- name: name
type: string
required: true
- name: type
type: string
description: "One of: ThresholdSamples, Schedule, Autoping, GpioStateChange"
required: true
- name: expressions
type: object
description: On/off evaluation criteria
required: true
- name: actions
type: array
description: Action objects for on/off state transitions
required: true
response: object (newly created trigger)
- id: change_trigger
label: Change Trigger
kind: action
transport: http
method: POST
path: /api/v1/ChangeTrigger
description: Modifies an existing event trigger
params:
- name: id
type: string
description: UUID of the trigger to modify
required: true
- name: enabled
type: boolean
required: true
- name: name
type: string
required: true
- name: type
type: string
required: true
- name: expressions
type: object
required: true
- name: actions
type: array
required: true
response: string (trigger UUID)
- id: change_network_settings
label: Change Network Settings
kind: action
transport: http
method: PUT
path: /api/v1/networkSettings
description: Updates network interface, HTTP server, SNMP, and other network configuration
params:
- name: ethInterfaces
type: array
description: Array of network interface configuration objects
required: false
- name: httpd
type: object
description: HTTP server settings (enabled, ssl, port)
required: false
response: null
- id: change_device_settings
label: Change Device Settings
kind: action
transport: http
method: PUT
path: /api/v1/deviceSettings
description: Updates device name and other device-level settings
params:
- name: verticalseries
type: object
description: Device object with name and id keys
required: true
response: boolean
- id: add_user
label: Add User
kind: action
transport: http
method: POST
path: /api/v1/UserAdd
description: Creates a new user account
params:
- name: username
type: string
required: true
- name: name
type: string
required: true
- name: authmode
type: string
description: "internal" or "ldap"
required: true
- name: admin
type: string
description: "admin" or "user"
required: true
- name: privs
type: array
description: "Array of: TriggerConfig, DeviceControl, NetworkSettings, SoftwareUpdate, UserAdmin"
required: true
- name: passwd
type: string
required: false
response: array [status_code, username]
- id: change_user
label: Change User
kind: action
transport: http
method: POST
path: /api/v1/UserChange
description: Modifies an existing user account
params:
- name: username
type: string
description: Username to edit (must already exist)
required: true
- name: authmode
type: string
required: false
- name: email
type: string
required: false
- name: admin
type: string
required: false
- name: passwd
type: string
required: false
- name: name
type: string
required: false
- name: privs
type: array
required: false
response: array [status_code, username]
- id: delete_user
label: Delete User
kind: action
transport: http
method: POST
path: /api/v1/UserDel
description: Deletes a user account
params:
- name: username
type: string
required: true
response: array [status_code, username]
- id: upload_file
label: Upload File
kind: action
transport: http
method: POST
path: /api/v1/UploadFile
description: Uploads firmware, config, or certificate files to the device
params:
- name: file
type: file
description: "Multipart form data. Supported names: 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"
required: true
response: integer
Feedbacks
- id: current_status
label: Current Status
transport: http
method: GET
path: /api/v1/currentStatus
description: Returns full device status including model, serial, active state, firmware, device measurements, outlet states, and outlet groups
response_fields:
- key: activeState
type: enum
values: [Startup, Running, Shutdown]
- key: firmware
type: string
- key: devices[].deviceMeasurements.voltageLN
type: number
description: Line to neutral voltage (V)
- key: devices[].deviceMeasurements.current
type: number
description: Total AC current (A)
- key: devices[].deviceMeasurements.power
type: number
description: Average power (W)
- key: devices[].deviceMeasurements.frequency
type: number
description: Frequency (Hz)
- key: devices[].deviceMeasurements.temperature
type: number
description: Internal temperature
- key: devices[].deviceMeasurements.energyUsage
type: number
description: Energy usage since last reset (Wh)
- key: devices[].deviceMeasurements.pf
type: number
description: Power factor (0 to 1)
- key: devices[].deviceMeasurements.crestFactor
type: number
description: Line to neutral voltage crest factor
- key: outlets[].state
type: enum
values: [0, 1, 2]
description: "Outlet state: 0=off, 1=on, 2=rebooting"
- key: groups[].state
type: integer
description: Outlet group state
- id: who_are_you
label: Who Are You
transport: http
method: GET
path: /api/v1/WhoAreYou
description: Returns device identification including model, serial, MAC, hostname, firmware, manufacturer, and device type
response_fields:
- key: model
type: string
- key: serial
type: string
- key: manufacturer
type: string
description: Always "AMETEK ESP/SurgeX"
- key: deviceType
type: string
description: "Power Controller"
- key: firmware
type: string
- id: network_settings
label: Network Settings
transport: http
method: GET
path: /api/v1/networkSettings
description: Returns network interface, HTTP server, SNMP, NTP, and 802.1x configuration
response_fields:
- key: ethInterfaces[].addr
type: string
description: IP address
- key: httpd.port
type: integer
description: HTTP server port
- key: httpd.ssl
type: boolean
description: Whether HTTPS is enabled
- id: device_settings
label: Device Settings
transport: http
method: GET
path: /api/v1/deviceSettings
description: Returns device configuration including sequences, startup/shutdown procedures, outlet and group settings, data log schema
- id: sequences
label: Sequences
transport: http
method: GET
path: /api/v1/sequences
description: Returns all configured power sequences with their steps, running state, and current step
response_fields:
- key: [].id
type: integer
description: Sequence ID
- key: [].running
type: boolean
- key: [].currentStep
type: integer
- key: [].name
type: string
- key: [].steps[].method
type: string
description: "Command path e.g. /1/1/PowerOn"
- key: [].steps[].delay
type: integer
description: Delay in seconds before executing step
- id: event_settings
label: Event Settings
transport: http
method: GET
path: /api/v1/EventSettings
description: Returns trigger configurations including threshold, schedule, autoping, and GPIO state change triggers
- id: users
label: Users
transport: http
method: GET
path: /api/v1/users
description: Returns array of user accounts with their privileges
response_fields:
- key: [].username
type: string
- key: [].admin
type: string
description: "admin" or "user"
- key: [].privs
type: array
description: "Privileges: TriggerConfig, DeviceControl, NetworkSettings, SoftwareUpdate, UserAdmin"
- id: time_stamped_events
label: Time Stamped Events
transport: http
method: POST
path: /api/v1/TimeStampedEvents
description: Returns event log entries between specified dates
params:
- name: date_range
type: array
description: "[-1, -1, \"startDate\", \"endDate\"]"
required: true
- id: historical_data_info
label: Historical Data Info
transport: http
method: POST
path: /api/v1/LogFileInfo
description: Returns historical data log file list with schema and retrieval URLs
params:
- name: log_type
type: array
description: '["VerticalSeriesData"]'
required: true
Variables
- id: outlet_initial_state
label: Outlet Initial State
description: "State the outlet will take on startup. 0=always on, 1=always off, 2=shutdown, 3=on, 4=off, 5=last state"
type: enum
values: [0, 1, 2, 3, 4, 5]
set_via: PUT /api/v1/deviceSettings
- id: outlet_reboot_time
label: Outlet Reboot Time
description: Time delay in seconds between turning an outlet off and back on during a reboot command
type: integer
set_via: PUT /api/v1/deviceSettings
- id: outlet_name
label: Outlet Name
description: User-configurable name for an outlet
type: string
set_via: PUT /api/v1/deviceSettings
- id: outlet_group_name
label: Outlet Group Name
description: User-configurable name for an outlet group
type: string
set_via: PUT /api/v1/deviceSettings
- id: auto_logout_time
label: Auto Logout Time
description: Minutes a web session stays active before auto logout
type: integer
set_via: PUT /api/v1/deviceSettings
- id: temperature_units
label: Temperature Units
description: Units for temperature reporting
type: enum
values: [F, C]
set_via: PUT /api/v1/deviceSettings
- id: startup_procedure
label: Startup Procedure
description: "Procedure on power-up after outage or restart. type: RunSequence or InitialState"
type: object
set_via: PUT /api/v1/deviceSettings
- id: shutdown_clear_procedure
label: Shutdown Clear Procedure
description: "Procedure for power-up after a shutdown state. Same options as startup procedure"
type: object
set_via: PUT /api/v1/deviceSettings
- id: http_port
label: HTTP Server Port
description: Port number for the web server
type: integer
set_via: PUT /api/v1/networkSettings
- id: http_ssl
label: HTTP SSL Enabled
description: Whether HTTPS is enabled
type: boolean
set_via: PUT /api/v1/networkSettings
Events
# The device supports event triggers that fire actions on state transitions.
# Triggers are configured via AddTrigger/ChangeTrigger and monitored via EventSettings.
# Types: ThresholdSamples (power measurement thresholds), Schedule (date/time),
# Autoping (IP reachability), GpioStateChange (GPIO feedback signal).
# Trigger actions can call: PowerOn, PowerOff, Reboot, RunSequence,
# EnterShutdownState, ClearShutdownState, or None per outlet/group.
# Time-stamped event log accessible via POST /api/v1/TimeStampedEvents.
# SNMP traps are also supported for auth failures, manual control, and system triggers.
Macros
- id: power_sequence
label: Power Sequence
description: >
A sequence of timed outlet commands. Each step has a "method" (e.g. /1/1/PowerOn)
and a "delay" in seconds before execution. Sequences are created via
POST /api/v1/AddSequence, modified via POST /api/v1/ChangeSequence,
and executed via POST /api/v1/RunSequence with the sequence ID.
Sequences can also be triggered automatically on startup or shutdown clear.
steps_example:
- method: /1/1/PowerOn
delay: 0
- method: /1/2/PowerOn
delay: 5
- method: /1/3/PowerOn
delay: 10
Safety
confirmation_required_for: []
interlocks:
- description: "Shutdown state prevents any outlet from being turned on via manual control until ClearShutdownState is called (requires Admin privilege)"
# UNRESOLVED: source does not detail specific power-on sequencing warnings or interlock procedures beyond the shutdown state mechanism
Notes
- All API endpoints require authentication (Basic Auth or x-auth-token session header).
- Protocol versioning is embedded in the URI path (
/api/v1). Breaking changes will iterate the version number. Multiple versions may coexist. - Outlet IDs follow the pattern
/{device_id}/{outlet_number}where device_id is always "1" for Vertical Series +. - Outlet groups have their own IDs (e.g.
/1/25for "All Outlets") and can be controlled the same as individual outlets. rebootTimeper outlet defines the off-to-on delay during a reboot command (default 3 seconds in example).outputConfirmationfield present on outlets but not fully documented in source.- mDNS discovery is supported on port 5353 for dynamic device discovery.
- SNMP v1/v2c/v3 is supported with configurable communities, users, and traps.
- Data log files are gzip-compressed CSV accessible via HTTP GET at the folder URI returned by LogFileInfo.
- Files still being written have
__inprocess__in the filename and should be treated as corrupt.
Provenance
source_domains:
- ametekesp.com
source_urls:
- https://www.ametekesp.com/surgex/vertical-series-plus/vertical-series-120v
retrieved_at: 2026-04-30T04:31:25.323Z
last_checked_at: 2026-06-02T22:15:20.892Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T22:15:20.892Z
matched_actions: 18
action_count: 18
confidence: medium
summary: "All 18 spec actions traced to source (dip-safe re-verify). (8 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "which specific Vertical Series + models share this API beyond SX-VS-1216"
- "maximum number of outlets varies by model; only SX-VS-1216 (16 outlets) shown in source"
- "source does not detail specific power-on sequencing warnings or interlock procedures beyond the shutdown state mechanism"
- "maximum number of outlets and groups varies by model; only SX-VS-1216 (16 outlets) is shown"
- "outputConfirmation field values and meaning not fully documented"
- "protocol version v1 is the only version documented; no deprecation timeline stated"
- "GPIO feedback signal options beyond DCBank1Feedback, DCBank2Feedback, 5VBankFeedback not enumerated"
- "DHCP and static IP configuration change may require device restart"
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0