Download OpenAPI specification:Download
The API service exists for communication between service containers and to support external requests from the web front end or CLI tools.
The internal APIs run over unix sockets and rely on filesystem namespaces for authentication.
Currently there are four internal APIs:
The external API runs over port :80
or can optionally be configured to run over SSL on port :443
.
On the device, the following files contain credentials for access.
config/auth/auth_users.json
is a JSON file with a dictionary for username, password pairsconfigs/auth/auth_tokens.json
is a JSON file with a list of authentication tokensconfigs/auth/otp_settings.json
is a JSON file with OTP user configuration.The API supports Basic Authentication based on the auth_users file, using the Basic Schema.
To implement this, a client should include an "Authorization: Basic" header with the credentials formatted as base64(username:password)
. For a javascript example, see the frontend's Api.js.
basic
The API also supports Bearer Tokens, based on the auth_tokens
file.
To implement this, a client should include an "Authorization: Bearer" token. See Swagger's page for more examples.
bearer
API extensions operate through a reverse proxy into a unix socket. They allow for hosting extensions to the API on the same web origin while running in a different process or container.
Extensions are configured in configs/base/api.json
This example shows the mapping of unix://state/dns/dns_block_plugin to http://APIHOST/plugins/dns/block/
{
"Plugins" : [{
"Name": "dns block extension",
"URI": "dns/block",
"UnixPath": "/state/dns/dns_block_plugin"
}]
}
See the API documentation for plugins here
Returns a map of registered devices, indexed by MAC address
curl -u "admin:pass" \ "http://192.168.2.1/devices"
{- "11:22:33:44:55:61": {
- "Name": "rpi4",
- "MAC": "11:22:33:44:55:61",
- "WGPubKey": "pubkey",
- "VLANTag": "vlantag",
- "RecentIP": "192.168.2.102",
- "PSKEntry": {
- "Type": "sae",
- "Psk": "password"
}, - "Policies": [
- "wan",
- "dns",
- "lan_upstream"
], - "Groups": [
- "cameras",
- "tvs"
], - "DeviceTags": [
- "private"
]
}, - "11:22:33:44:55:62": {
- "Name": "rpi4",
- "MAC": "11:22:33:44:55:61",
- "WGPubKey": "pubkey",
- "VLANTag": "vlantag",
- "RecentIP": "192.168.2.102",
- "PSKEntry": {
- "Type": "sae",
- "Psk": "password"
}, - "Policies": [
- "wan",
- "dns",
- "lan_upstream"
], - "Groups": [
- "cameras",
- "tvs"
], - "DeviceTags": [
- "private"
]
}
}
Get a Device specified by the MAC address in the identity parameter. Requires OTP Code
identity required | string Example: 11:22:33:44:55:61 MAC address |
curl -u "admin:pass" -X DELETE -H "X-JWT-OTP:..." \ "http://192.168.2.1/device?identity=11:22:33:44:55:66"
{- "Name": "rpi4",
- "MAC": "11:22:33:44:55:61",
- "WGPubKey": "pubkey",
- "VLANTag": "vlantag",
- "RecentIP": "192.168.2.102",
- "PSKEntry": {
- "Type": "sae",
- "Psk": "password"
}, - "Policies": [
- "wan",
- "dns",
- "lan_upstream"
], - "Groups": [
- "cameras",
- "tvs"
], - "DeviceTags": [
- "private"
]
}
Update information specified by the MAC address in the identity parameter. All fields are optional. If a PSKEntry.PskType is set and a PSKEntry.Psk is not set, one will be generated and returned. To create a wildcard PSK for adding a new device, use the string "pending" for the identity.
identity required | string Example: 11:22:33:44:55:61 MAC address |
Device object
Name | string Client Name |
MAC | string HW address |
WGPubKey | string PubKey |
VLANTag | string VLANTag |
RecentIP | string RecentIP |
object (PSKEntry) | |
Policies | Array of strings Policies for Device |
Groups | Array of strings Interconnected Groups of Devices |
DeviceTags | Array of strings Tags for Device |
{- "Name": "rpi4",
- "MAC": "11:22:33:44:55:61",
- "WGPubKey": "pubkey",
- "VLANTag": "vlantag",
- "RecentIP": "192.168.2.102",
- "PSKEntry": {
- "Type": "sae",
- "Psk": "password"
}, - "Policies": [
- "wan",
- "dns",
- "lan_upstream"
], - "Groups": [
- "cameras",
- "tvs"
], - "DeviceTags": [
- "private"
]
}
{- "Name": "rpi4",
- "MAC": "11:22:33:44:55:61",
- "WGPubKey": "pubkey",
- "VLANTag": "vlantag",
- "RecentIP": "192.168.2.102",
- "PSKEntry": {
- "Type": "sae",
- "Psk": "password"
}, - "Policies": [
- "wan",
- "dns",
- "lan_upstream"
], - "Groups": [
- "cameras",
- "tvs"
], - "DeviceTags": [
- "private"
]
}
Delete a Device specified by the MAC address in the identity parameter
identity required | string Example: 11:22:33:44:55:61 MAC address |
curl -u "admin:pass" -X DELETE \ "http://192.168.2.1/device?identity=11:22:33:44:55:66"
If the group does not exist, it will be created. If it exists it will be updated. Fields are optional.
Group object
Name | string Unique Group Name |
Disabled | bool If Group is disabled |
GroupTags | Array of strings Tags for Group |
{- "Name": "vpn",
- "Disabled": false,
- "GroupTags": [
- [
- "private"
]
]
}
Group object
Name | string Unique Group Name |
Disabled | bool If Group is disabled |
GroupTags | Array of strings Tags for Group |
{- "Name": "vpn",
- "Disabled": false,
- "GroupTags": [
- [
- "private"
]
]
}
curl -u "admin:pass" \ "http://192.168.2.1/ip/addr"
[- {
- "ifindex": 1,
- "ifname": "eth0",
- "flags": [
- "BROADCAST"
], - "mtu": 1550,
- "qdisc": "mq",
- "operstate": "UP",
- "group": "default",
- "txqlen": 1000,
- "link_type": "ether",
- "address": "11:22:33:44:55:66",
- "broadcast": "ff:ff:ff:ff:ff:ff",
- "addr_info": [
- {
- "family": "inet6",
- "local": "::1",
- "prefixlen": 64,
- "scope": "link",
- "valid_life_time": 4294967295,
- "preferred_life_time": "preferred_life_time"
}
]
}
]
Returns the output of nft -j
for the verdict map specificed by the name parameter
name required | string Name of the nfmap to fetch |
curl -u "admin:pass" \ "http://192.168.2.1/nfmap/dns_access"
{ }
curl -u "admin:pass" \ "http://192.168.2.1/arp"
[- {
- "IP": "192.168.2.142",
- "HWType": "0x1",
- "Flags": "0x6",
- "MAC": "11:22:33:44:55:66",
- "Mask": "*",
- "Device": "wlan1.4097"
}
]
Returns the output of iw dev iface scan
in json format.
Note: the specified interface needs to be in managed mode.
iface required | string Example: wlan0 interface |
curl -u "admin:pass" \ "http://192.168.2.1/iw/dev/wlan0/scan"
[- {
- "bssid": "11:11:11:11:11:11",
- "interface": "wlan0",
- "freq": 2412,
- "ssid": "sample_ssid1",
- "authentication_suites": "PSK",
- "signal_dbm": -64
}
]
Sets or updates the subnet configuration. This will overwrite the existing configuration.
TinyNets required | Array of strings List of subnet pools. |
LeaseTime required | string Duration of the DHCP lease time. |
{- "TinyNets": [
- "string"
], - "LeaseTime": "string"
}
Updates the DNS settings. This operation overwrites the existing settings.
UpstreamTLSHost required | string DNS name of the upstream TLS host. |
UpstreamIPAddress required | string IP address of the upstream DNS server. |
TlsDisable required | boolean Flag to disable TLS. |
{- "UpstreamTLSHost": "string",
- "UpstreamIPAddress": "string",
- "TlsDisable": true
}
Performs an ICMP ping test from a specified interface to a given address
interface required | string Network interface to use for the ping test |
address required | string IP address to ping |
curl -X PUT http://localhost/ping/eth0/8.8.8.8
[- "10.523ms",
- "9.872ms",
- "11.245ms",
- "10.101ms"
]
Performs a UDP ping test from a specified interface to a given address
interface required | string Network interface to use for the UDP ping test |
address required | string IP address and port to ping |
curl -X PUT http://localhost/ping/eth0/8.8.8.8:53/udp
[- "15.789ms",
- "14.234ms",
- "16.012ms",
- "15.456ms"
]
Returns the firewall API configuration
curl -u "admin:pass" \ "http://192.168.2.1/firewall/config"
{- "ForwardingRules": [
- {
- "DstIP": "1.2.3.4",
- "SrcIP": "0.0.0.0/24",
- "SrcPort": "0-10",
- "DstPort": "any",
- "Protocol": "tcp"
}
], - "BlockRules": [
- {
- "DstIP": "1.2.3.4",
- "SrcIP": "0.0.0.0/24",
- "Protocol": "tcp"
}
], - "ForwardingBlockRules": [
- {
- "DstIP": "1.2.3.4",
- "SrcIP": "0.0.0.0/24",
- "DstPort": "0-65535",
- "Protocol": "tcp"
}
], - "ServicePorts": [
- {
- "UpstreamEnabled": false,
- "Port": "22",
- "Protocol": "tcp"
}
]
}
Use 'any' for the port to forward all ports. Specify a port or a port range otherwise
DstIP | string |
SrcIP | string |
SrcPort | string/any|[0-9]+/ |
DstPort | string/any|[0-9]+/ |
Protocol | string/udp|tcp/ |
{- "DstIP": "1.2.3.4",
- "SrcIP": "0.0.0.0/24",
- "SrcPort": "0-10",
- "DstPort": "any",
- "Protocol": "tcp"
}
Delete forwarding rule with matching contents
Use 'any' for the port to forward all ports. Specify a port or a port range otherwise
DstIP | string |
SrcIP | string |
SrcPort | string/any|[0-9]+/ |
DstPort | string/any|[0-9]+/ |
Protocol | string/udp|tcp/ |
{- "DstIP": "1.2.3.4",
- "SrcIP": "0.0.0.0/24",
- "SrcPort": "0-10",
- "DstPort": "any",
- "Protocol": "tcp"
}
Delete blocking rule with matching contents
FirewallBlock
DstIP | string |
SrcIP | string |
Protocol | string/udp|tcp/ |
{- "DstIP": "1.2.3.4",
- "SrcIP": "0.0.0.0/24",
- "Protocol": "tcp"
}
Add Forward Block Rule, to block outbound traffic
FirewallBlockForward
DstIP | string |
SrcIP | string |
DstPort | string |
Protocol | string/udp|tcp/ |
{- "DstIP": "1.2.3.4",
- "SrcIP": "0.0.0.0/24",
- "DstPort": "0-65535",
- "Protocol": "tcp"
}
Delete blocking rule with matching contents
FirewallBlockForward
DstIP | string |
SrcIP | string |
DstPort | string |
Protocol | string/udp|tcp/ |
{- "DstIP": "1.2.3.4",
- "SrcIP": "0.0.0.0/24",
- "DstPort": "0-65535",
- "Protocol": "tcp"
}
Service Ports are ports that run on the SPR router itself. They can be for LAN clients only or for upstream also
ServicePort
UpstreamEnabled | boolean Reachable from WAN/Upstream Interface |
Port | string |
Protocol | string/tcp/ Only TCP services are currently supported |
{- "UpstreamEnabled": false,
- "Port": "22",
- "Protocol": "tcp"
}
Delete service port from allow list
ServicePort
UpstreamEnabled | boolean Reachable from WAN/Upstream Interface |
Port | string |
Protocol | string/tcp/ Only TCP services are currently supported |
{- "UpstreamEnabled": false,
- "Port": "22",
- "Protocol": "tcp"
}
Endpoints store common destinations for the UI to populate fields with
RuleName | string |
Disabled | boolean |
Protocol | string |
IP | string |
Domain | string |
Port | string |
Tags | Array of strings Tags for Device |
{- "RuleName": "string",
- "Disabled": true,
- "Protocol": "string",
- "IP": "1.2.3.4",
- "Domain": "www.domain.com",
- "Port": "22",
- "Tags": [
- "private"
]
}
Delete an existing endpoint from the firewall configuration.
RuleName | string |
Disabled | boolean |
Protocol | string |
IP | string |
Domain | string |
Port | string |
Tags | Array of strings Tags for Device |
{- "RuleName": "string",
- "Disabled": true,
- "Protocol": "string",
- "IP": "1.2.3.4",
- "Domain": "www.domain.com",
- "Port": "22",
- "Tags": [
- "private"
]
}
Configures a multicast port in the firewall.
Upstream | boolean Reachable from Uplinks |
Port | string |
{- "Upstream": true,
- "Port": "22"
}
Adds a custom interface rule to the firewall.
Interface | string interface name |
SrcIP | string IP or CIDR assigned to interface |
RouteDst | string IP destination to route to, for example container host IP |
Policies | Array of strings Policies for Interface |
Groups | Array of strings Groups to join Interfaces to Devices |
Tags | Array of strings Tags to apply. NOTE, no impact for now |
{- "Interface": "wlan1",
- "SrcIP": "172.16.0.0/16",
- "RouteDst": "172.12.0.2",
- "Policies": [
- "api",
- "wan",
- "dns",
- "lan_upstream"
], - "Groups": [
- "cameras"
], - "Tags": [
- "private"
]
}
Removes a custom interface rule from the firewall.
Interface | string interface name |
SrcIP | string IP or CIDR assigned to interface |
RouteDst | string IP destination to route to, for example container host IP |
Policies | Array of strings Policies for Interface |
Groups | Array of strings Groups to join Interfaces to Devices |
Tags | Array of strings Tags to apply. NOTE, no impact for now |
{- "Interface": "wlan1",
- "SrcIP": "172.16.0.0/16",
- "RouteDst": "172.12.0.2",
- "Policies": [
- "api",
- "wan",
- "dns",
- "lan_upstream"
], - "Groups": [
- "cameras"
], - "Tags": [
- "private"
]
}
Configures ICMP options in the firewall.
PingLan required | boolean Allow ping from LAN |
PingWan required | boolean Allow ping from WAN/upstream |
{- "PingLan": true,
- "PingWan": false
}
curl http://localhost/multicastSettings
{- "Disabled": false,
- "Addresses": [
- {
- "Address": "224.0.0.251:5353"
}
], - "DisableMDNSAdvertise": false,
- "MDNSName": "MyDevice"
}
Updates the multicast settings
Disabled | boolean Whether multicast is disabled |
Array of objects (MulticastAddress) List of multicast addresses | |
DisableMDNSAdvertise | boolean Whether MDNS advertisement is disabled |
MDNSName | string MDNS name |
{- "Disabled": false,
- "Addresses": [
- {
- "Address": "224.0.0.251:5353"
}
], - "DisableMDNSAdvertise": false,
- "MDNSName": "MyDevice"
}
{- "Disabled": false,
- "Addresses": [
- {
- "Address": "224.0.0.251:5353"
}
], - "DisableMDNSAdvertise": false,
- "MDNSName": "MyDevice"
}
curl -u "admin:pass" \ "http://192.168.2.1/iptraffic"
[- {
- "Interface": "wlan1",
- "Src": "192.168.2.100",
- "Dst": "192.168.2.102",
- "Packets": 1024,
- "Bytes": 4096
}
]
Returns traffic information from the counter specified by the name parameter. Countermap can be one of incoming_traffic_lan
| outgoing_traffic_lan
| outgoing_traffic_wan
| incoming_traffic_wan
. See the accounting.sh NFT rules for additional information
countermap required | string Example: incoming_traffic_lan Name of counter |
curl -u "admin:pass" \ "http://192.168.2.1/traffic/outgoing_traffic_lan"
[- {
- "IP": "192.168.2.1",
- "Packets": 7544,
- "Bytes": 824606
}
]
Returns traffic information for all devices
curl -u "admin:pass" \ "http://192.168.2.1/traffic_history"
{- "192.168.2.11": {
- "LanIn": 11125256532,
- "LanOut": 292437928,
- "WanIn": 52664,
- "WanOut": 52664
}, - "192.168.2.12": {
- "LanIn": 11125256532,
- "LanOut": 292437928,
- "WanIn": 52664,
- "WanOut": 52664
}
}
Returns current status for hostapd
interface required | string Name of wireless interface |
curl -u "admin:pass" \ "http://192.168.2.1/hostapd/status"
{- "beacon_int": "100",
- "bss[0]": "wlan1",
- "bssid[0]": "00:c0:ca:33:11:22",
- "cac_time_left_seconds": "N/A",
- "cac_time_seconds": "0",
- "channel": "36",
- "dtim_period": "2",
- "edmg_channel": "0",
- "edmg_enable": "0",
- "freq": "5180",
- "ht_caps_info": "01ff",
- "ht_mcs_bitmask": "ffff0000000000000000",
- "ht_op_mode": "0x6",
- "ieee80211ac": "1",
- "ieee80211ax": "0",
- "ieee80211n": "1",
- "max_txpower": "23",
- "num_sta[0]": "6",
- "num_sta_ht40_intolerant": "0",
- "num_sta_ht_20_mhz": "2",
- "num_sta_ht_no_gf": "6",
- "num_sta_no_ht": "0",
- "num_sta_no_short_preamble": "6",
- "num_sta_no_short_slot_time": "6",
- "num_sta_non_erp": "0",
- "olbc": "0",
- "olbc_ht": "0",
- "phy": "phy1",
- "rx_vht_mcs_map": "fffa",
- "secondary_channel": "1",
- "ssid[0]": "test_ap",
- "state": "ENABLED",
- "supported_rates": "0c 12 18 24 30 48 60 6c",
- "tx_vht_mcs_map": "fffa",
- "vht_caps_info": "318001b0",
- "vht_oper_centr_freq_seg0_idx": "42",
- "vht_oper_centr_freq_seg1_idx": "0",
- "vht_oper_chwidth": "1"
}
Returns current status for all stations
interface required | string Name of wireless interface |
curl -u "admin:pass" \ "http://192.168.2.1/hostapd/all_stations"
{- "11:22:33:44:55:61": {
- "AKMSuiteSelector": "00-0f-ac-2",
- "aid": "3",
- "capability": "0x11",
- "connected_time": "4946",
- "dot11RSNAStatsSTAAddress": "11:22:33:44:55:61",
- "dot11RSNAStatsSelectedPairwiseCipher": "00-0f-ac-4",
- "dot11RSNAStatsTKIPLocalMICFailures": "0",
- "dot11RSNAStatsTKIPRemoteMICFailures": "0",
- "dot11RSNAStatsVersion": "1",
- "flags": "[AUTH][ASSOC][AUTHORIZED][WMM][HT]",
- "hostapdWPAPTKGroupState": "0",
- "hostapdWPAPTKState": "11",
- "ht_caps_info": "0x016e",
- "ht_mcs_bitmask": "ff000000000000000000",
- "inactive_msec": "1584",
- "listen_interval": "1",
- "rx_bytes": "126055",
- "rx_packets": "2394",
- "rx_rate_info": "60",
- "signal": "-85",
- "supported_rates": "8c 12 98 24 b0 48 60 6c",
- "timeout_next": "NULLFUNC POLL",
- "tx_bytes": "485584",
- "tx_packets": "1957",
- "tx_rate_info": "1200 mcs 5 shortGI",
- "vlan_id": "4247",
- "wpa": "2"
}, - "11:22:33:44:55:62": {
- "AKMSuiteSelector": "00-0f-ac-2",
- "aid": "3",
- "capability": "0x11",
- "connected_time": "4946",
- "dot11RSNAStatsSTAAddress": "11:22:33:44:55:61",
- "dot11RSNAStatsSelectedPairwiseCipher": "00-0f-ac-4",
- "dot11RSNAStatsTKIPLocalMICFailures": "0",
- "dot11RSNAStatsTKIPRemoteMICFailures": "0",
- "dot11RSNAStatsVersion": "1",
- "flags": "[AUTH][ASSOC][AUTHORIZED][WMM][HT]",
- "hostapdWPAPTKGroupState": "0",
- "hostapdWPAPTKState": "11",
- "ht_caps_info": "0x016e",
- "ht_mcs_bitmask": "ff000000000000000000",
- "inactive_msec": "1584",
- "listen_interval": "1",
- "rx_bytes": "126055",
- "rx_packets": "2394",
- "rx_rate_info": "60",
- "signal": "-85",
- "supported_rates": "8c 12 98 24 b0 48 60 6c",
- "timeout_next": "NULLFUNC POLL",
- "tx_bytes": "485584",
- "tx_packets": "1957",
- "tx_rate_info": "1200 mcs 5 shortGI",
- "vlan_id": "4247",
- "wpa": "2"
}
}
Set hostapd configuration
interface required | string Name of wireless interface |
Channel Parameters for WiFi
Country_code | string 2-letter country code |
Vht_capab | string Very High Throughput capabilities for 5ghz (802.11ac). Should be removed for 2.4ghz |
Ht_capab | string High Throughput capabilities (802.11n) |
Hw_mode | string/^(a/b/g)$/ a for 5ghz, b/g for 2.4ghz |
Ieee80211ax | integer WiFi 6 support |
He_su_beamformer | integer High Efficiency (WiFi 6) Single User Beamformer enable |
He_su_beamformee | integer High Efficiency (WiFi 6) Single User Beamformee enable |
He_mu_beamformer | integer High Efficiency (WiFi 6) Multiple User Beamformer enable |
Ssid | string WiFi SSID Name |
Channel | integer See the list of WLAN channels |
Vht_oper_centr_freq_seg0_idx | integer |
He_oper_centr_freq_seg0_idx | integer |
Vht_oper_chwidth | integer |
He_oper_chwidth | integer |
{- "Country_code": "US",
- "Vht_capab": "[RXLDPC][SHORT-GI-80][TX-STBC-2BY1][RX-STBC-1][MAX-A-MPDU-LEN-EXP3][RX-ANTENNA-PATTERN][TX-ANTENNA-PATTERN]",
- "Ht_capab": "[LDPC][HT40+][HT40-][GF][SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC1]",
- "Hw_mode": "a",
- "Ieee80211ax": 1,
- "He_su_beamformer": 1,
- "He_su_beamformee": 1,
- "He_mu_beamformer": 1,
- "Ssid": "8hzWANip",
- "Channel": 36,
- "Vht_oper_centr_freq_seg0_idx": 42,
- "He_oper_centr_freq_seg0_idx": 42,
- "Vht_oper_chwidth": 1,
- "He_oper_chwidth": 1
}
Sets channel configuration
interface required | string Name of wireless interface |
Channel Parameters for WiFi
Mode | string/^(a|b|g)$/ g for 2.4Ghz, a for 5Ghz |
Channel | integer See the list of WLAN channels |
Bandwidth | integer Channel width in Mhz. One of 20, 40, 80, 160, or 8080 for 80+80 |
HT_Enable | boolean 802.11n support - High Throughput |
VHT_Enable | boolean 802.11ac support - Very High Throughput (WiFi 5) |
HE_Enable | boolean 802.11ax support - High Effiency (WiFi 6) |
{- "Mode": "a",
- "Channel": 36,
- "Bandwidth": 80,
- "HT_Enable": true,
- "VHT_Enable": true,
- "HE_Enable": true
}
{- "Vht_oper_centr_freq_seg0_idx": 42,
- "He_oper_centr_freq_seg0_idx": 42,
- "Vht_oper_chwidth": 1,
- "He_oper_chwidth": 1
}
Enables an additional BSS (Basic Service Set) on the specified interface. This supports WPA1, and disabled isolation. Requires card support
interface required | string Name of the network interface. |
Ssid | string |
Bssid | string |
Wpa | string |
WpaKeyMgmt | string |
DisableIsolation | boolean |
{- "Ssid": "string",
- "Bssid": "string",
- "Wpa": "string",
- "WpaKeyMgmt": "string",
- "DisableIsolation": true
}
Disables an additional BSS on the specified interface.
interface required | string Name of the network interface. |
curl -u "admin:pass" -X DELETE \ "http://192.168.2.1/hostapd/eth0/enableExtraBSS"
SPR Tracks the state of interfaces to decide launching hostap
curl -u "admin:pass" \ "http://192.168.2.1/interfacesConfiguration"
[- {
- "Name": "wlan1",
- "Type": "AP",
- "Enabled": true
}
]
Retrieves the current WPA supplicant configuration.
{- "WPAs": [
- {
- "Iface": "string",
- "Enabled": true,
- "Networks": [
- {
- "Disabled": true,
- "Password": "string",
- "SSID": "string",
- "KeyMgmt": "string",
- "Priority": "string",
- "BSSID": "string"
}
]
}
]
}
Updates an existing WPA interface configuration or adds a new one.
Iface | string |
Enabled | boolean |
Array of objects (WPANetwork) |
{- "Iface": "string",
- "Enabled": true,
- "Networks": [
- {
- "Disabled": true,
- "Password": "string",
- "SSID": "string",
- "KeyMgmt": "string",
- "Priority": "string",
- "BSSID": "string"
}
]
}
Updates an existing PPP interface configuration or adds a new one.
Iface | string |
PPPIface | string |
Enabled | boolean |
Username | string |
Secret | string |
VLAN | string or null |
MTU | string or null |
{- "Iface": "string",
- "PPPIface": "string",
- "Enabled": true,
- "Username": "string",
- "Secret": "string",
- "VLAN": "string",
- "MTU": "string"
}
Updates the IP configuration of a network interface.
Name | string |
Enabled | boolean |
DisableDHCP | boolean or null |
IP | string or null |
Router | string or null |
VLAN | string or null |
{- "Name": "string",
- "Enabled": true,
- "DisableDHCP": true,
- "IP": "string",
- "Router": "string",
- "VLAN": "string"
}
Updates the configuration of a LAN network interface.
Name | string Interface name on system |
Type | string Enum: "AP" "Uplink" "Downlink" "Other" |
Subtype | string |
Enabled | boolean |
{- "Name": "string",
- "Type": "AP",
- "Subtype": "string",
- "Enabled": true
}
Set an interface as a VLAN trunk, enabling or disabling it.
interface required | string Name of the network interface. |
state required | string Enum: "enable" "disable" State of the VLAN trunk on the interface (enable or disable). |
# Example to enable VLAN trunk on eth0 curl -u "admin:pass" -X PUT \ "http://192.168.2.1/link/vlan/eth0/enable" # Example to disable VLAN trunk on eth0 curl -u "admin:pass" -X PUT \ "http://192.168.2.1/link/vlan/eth0/disable"
Get latest tag from docker specified by the container parameter. If no container is specified version is fetched for superd
container | string container to get version for |
curl -u "admin:pass" \ "http://192.168.2.1/version"
"0.1.23"
Returns the output of journalctl in json format
curl -u "admin:pass" \ "http://192.168.2.1/logs"
[- {
- "CONTAINER_NAME": "superapi",
- "MESSAGE": "192.168.2.101:1234 GET /logs",
- "__REALTIME_TIMESTAMP": 1651066188615770
}
]
Returns an object with the current SPR version and Channel, Version settings
curl -u "admin:pass" \ "http://192.168.2.1/release"
{- "CustomChannel": "-dev",
- "CustomVersion": "0.1.2",
- "Current": "0.1.2-dev"
}
Set a custom Channel, Version to update into
CustomChannel | string |
CustomVersion | string |
Current | string |
{- "CustomChannel": "-dev",
- "CustomVersion": "0.1.3"
}
Returns a list of tags available to update into
container required | string Example: super_superd Container name |
curl -u "admin:pass" \ "http://192.168.2.1/releaseChannels"
[- "latest",
- "0.1.23",
- "0.1.23-dev"
]
curl -u "admin:pass" \ "http://192.168.2.1/plugins"
[- {
- "Name": "dns-block",
- "URI": "dns/block",
- "UnixPath": "/state/dns/dns_block_plugin",
- "Enabled": true,
- "Plus": false,
- "ComposeFilePath": "plugins/plugin/docker-compose.yml",
- "HasUI": true,
- "SandboxedUI": true,
- "InstallTokenPath": "/config/plugins/dns-block/install-token",
- "ScopedPaths": [
- "/config/plugins/dns-block",
- "/state/plugins/dns-block"
]
}
]
Add or update a plugin specified by the name parameter
name required | string Example: dns-block plugin name |
PluginEntry to be added or updated
Name | string Plugin name |
URI | string Plugin URI |
UnixPath | string Plugin path for unix socket |
Enabled | boolean Plugin state |
Plus | boolean Indicates if this is a PLUS plugin |
GitURL | string Git repository URL for the plugin |
ComposeFilePath | string Relative path to docker compose file |
HasUI | boolean Indicates if the plugin has a user interface |
SandboxedUI | boolean Indicates if the plugin UI is sandboxed |
InstallTokenPath | string Path to the installation token |
ScopedPaths | Array of strings List of scoped paths for the plugin |
{- "Name": "dns-block",
- "URI": "dns/block",
- "UnixPath": "/state/dns/dns_block_plugin",
- "Enabled": true,
- "Plus": false,
- "ComposeFilePath": "plugins/plugin/docker-compose.yml",
- "HasUI": true,
- "SandboxedUI": true,
- "InstallTokenPath": "/config/plugins/dns-block/install-token",
- "ScopedPaths": [
- "/config/plugins/dns-block",
- "/state/plugins/dns-block"
]
}
Updates the permit list of docker compose files that can be launched from disk
[- "string"
]
Get an array of all tokens
curl -u "admin:pass" -H "X-JWT-OTP:..." \ "http://192.168.2.1/tokens"
[- {
- "Name": "TestToken",
- "Token": "dG9rbnRva250b2tudG9rbnRva250b2tudG9rbnRva24K",
- "ScopedPaths": [
- "wifi"
], - "Expire": 1656440879
}
]
Create a new token. If Expire is 0 or undefined the Token will never expire
Expire | integer |
ScopedPaths | Array of strings |
{- "Expire": 1656440879,
- "ScopedPaths": [
- "/status",
- "/docker/info"
]
}
{- "Name": "TestToken",
- "Token": "dG9rbnRva250b2tudG9rbnRva250b2tudG9rbnRva24K",
- "ScopedPaths": [
- "wifi"
], - "Expire": 1656440879
}
curl -X GET "http://192.168.2.1/alerts"
[- {
- "TopicPrefix": "string",
- "MatchAnyOne": true,
- "InvertRule": true,
- "Conditions": [
- {
- "JPath": "string"
}
], - "Actions": [
- {
- "SendNotification": true,
- "StoreAlert": true,
- "StoreTopicSuffix": "string",
- "MessageTitle": "string",
- "MessageBody": "string",
- "NotificationType": "string",
- "ActionType": "string",
- "GrabEvent": true,
- "GrabValues": true,
- "GrabFields": [
- "string"
]
}
], - "Name": "string",
- "Disabled": true,
- "RuleId": "string"
}
]
If an alert setting does not exist, it will be created, otherwise updated
AlertSetting object that needs to be added
TopicPrefix | string |
MatchAnyOne | boolean |
InvertRule | boolean |
Array of objects (ConditionEntry) | |
Array of objects (ActionConfig) | |
Name | string |
Disabled | boolean |
RuleId | string |
{- "TopicPrefix": "string",
- "MatchAnyOne": true,
- "InvertRule": true,
- "Conditions": [
- {
- "JPath": "string"
}
], - "Actions": [
- {
- "SendNotification": true,
- "StoreAlert": true,
- "StoreTopicSuffix": "string",
- "MessageTitle": "string",
- "MessageBody": "string",
- "NotificationType": "string",
- "ActionType": "string",
- "GrabEvent": true,
- "GrabValues": true,
- "GrabFields": [
- "string"
]
}
], - "Name": "string",
- "Disabled": true,
- "RuleId": "string"
}
Update an alert setting at a specific index. If the alert setting does not exist at this index, it will be created. Fields are optional.
AlertSetting object that needs to be added
TopicPrefix | string |
MatchAnyOne | boolean |
InvertRule | boolean |
Array of objects (ConditionEntry) | |
Array of objects (ActionConfig) | |
Name | string |
Disabled | boolean |
RuleId | string |
{- "TopicPrefix": "string",
- "MatchAnyOne": true,
- "InvertRule": true,
- "Conditions": [
- {
- "JPath": "string"
}
], - "Actions": [
- {
- "SendNotification": true,
- "StoreAlert": true,
- "StoreTopicSuffix": "string",
- "MessageTitle": "string",
- "MessageBody": "string",
- "NotificationType": "string",
- "ActionType": "string",
- "GrabEvent": true,
- "GrabValues": true,
- "GrabFields": [
- "string"
]
}
], - "Name": "string",
- "Disabled": true,
- "RuleId": "string"
}
Updates an OTP user with the given details. If already registered, a valid code is required
Name | string |
Code | string |
UpdateAlwaysOn | boolean |
AlwaysOn | boolean |
{- "Name": "string",
- "Code": "string",
- "UpdateAlwaysOn": true,
- "AlwaysOn": true
}
Deletes an OTP user. Valid code required
Name | string |
Code | string |
UpdateAlwaysOn | boolean |
AlwaysOn | boolean |
{- "Name": "string",
- "Code": "string",
- "UpdateAlwaysOn": true,
- "AlwaysOn": true
}
Validates the provided OTP user details and generates the X-JWT-OTP token
Name | string |
Code | string |
UpdateAlwaysOn | boolean |
AlwaysOn | boolean |
{- "Name": "string",
- "Code": "string",
- "UpdateAlwaysOn": true,
- "AlwaysOn": true
}
"string"
curl -H "Authorization: Bearer [token]" -H "X-JWT-Token: [jwt-token]" \ "http://192.168.2.1/otp_status"
{- "State": "string",
- "AlwaysOn": true
}
Start a PLUS extension. Currently this is the pfw plugin
name | string Example: name=pfw Name of plus extension |
[- {
- "Conditions": {
- "Prefix": "drop:input",
- "Protocol": "tcp",
- "DstIP": "1.1.1.1",
- "DstPort": 80,
- "SrcIP": "192.168.2.10",
- "SrcPort": 1234
}, - "Notification": true
}
]
Stop a PLUS extension. Currently this is the pfw plugin
name | string Example: name=pfw Name of plus extension |
[- {
- "Conditions": {
- "Prefix": "drop:input",
- "Protocol": "tcp",
- "DstIP": "1.1.1.1",
- "DstPort": 80,
- "SrcIP": "192.168.2.10",
- "SrcPort": 1234
}, - "Notification": true
}
]
Add domain to be blocked/permitted by DNS
DNSDomainOverride object that needs to be added
Type | string type of override (permit or block) |
Domain | string domain name to override |
ResultIP | string/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/ ip to return |
ClientIP | string/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/ target to apply to, '*' for all |
Expiration | integer if non zero has unix time for when the entry should disappear |
{- "Type": "permit",
- "Domain": "example.com",
- "ResultIP": "1.2.3.4",
- "ClientIP": "192.168.2.102",
- "Expiration": 0
}
Delete domain to be blocked/permitted by DNS
DNSDomainOverride object that needs to be added
Type | string type of override (permit or block) |
Domain | string domain name to override |
ResultIP | string/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/ ip to return |
ClientIP | string/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/ target to apply to, '*' for all |
Expiration | integer if non zero has unix time for when the entry should disappear |
{- "Type": "permit",
- "Domain": "example.com",
- "ResultIP": "1.2.3.4",
- "ClientIP": "192.168.2.102",
- "Expiration": 0
}
curl -u "admin:pass" \ "http://192.168.2.1/plugins/dns/block/blocklist"
[
]
curl -u "admin:pass" \ "http://192.168.2.1/plugins/dns/log/config"
[- {
- "HostPrivacyIPList": [
- "192.168.1.10"
]
}, - {
- "DomainIgnoreList": [
- "asdf.com",
- "asdf2.com",
- "test.com."
]
}
]
ip required | string Example: 1.1.1.1 ip address |
curl -u "admin:pass" \ "http://192.168.2.1/plugins/dns/log/history/192.168.1.10"
[- {
- "Q": [
- {
- "Name": "supernetworks.org.",
- "Qtype": 1,
- "Qclass": 1
}
], - "A": [
- {
- "Hdr": {
- "Name": "supernetworks.org.",
- "Rrtype": 1,
- "Class": 1,
- "Ttl": 30,
- "Rdlength": 4
}, - "A": "172.67.71.52"
}, - {
- "Hdr": {
- "Name": "supernetworks.org.",
- "Rrtype": 1,
- "Class": 1,
- "Ttl": 30,
- "Rdlength": 4
}, - "A": "104.26.7.38"
}, - {
- "Hdr": {
- "Name": "supernetworks.org.",
- "Rrtype": 1,
- "Class": 1,
- "Ttl": 30,
- "Rdlength": 4
}, - "A": "104.26.6.38"
}
], - "Type": "NOERROR",
- "FirstName": "supernetworks.org.",
- "FirstAnswer": "172.67.71.52",
- "Local": "[::]:53",
- "Remote": "127.0.0.1:60237",
- "Timestamp": "2022-03-28T21:47:49.563958-07:00"
}
]
curl -u "admin:pass" \ "http://192.168.2.1/plugins/wireguard/peers"
[- {
- "PublicKey": "7SdFRh8o76RjUn/y4c7cQgCcCXA85s47/gVAdem3bBI=",
- "AllowedIPs": "192.168.3.3/32",
- "Endpoint": "192.168.2.1:51280",
- "PresharedKey": "w9bfMAfqRnLjnlHofX+JSzaRDADrW1tvyW1UWzXJjrg=",
- "PersistentKeepalive": 25
}
]
Creates a new peer
Device object
PublicKey | string Base64 public key |
AllowedIPs | string Allowed IP address |
Endpoint | string Endpoint to connect to |
PresharedKey | any Preshared key |
PersistentKeepalive | integer Keepalive timeout |
{- "PublicKey": "7SdFRh8o76RjUn/y4c7cQgCcCXA85s47/gVAdem3bBI=",
- "AllowedIPs": "192.168.3.3/32",
- "Endpoint": "192.168.2.1:51280",
- "PresharedKey": "w9bfMAfqRnLjnlHofX+JSzaRDADrW1tvyW1UWzXJjrg=",
- "PersistentKeepalive": 25
}
{- "Interface": {
- "PrivateKey": "6KVVbcmXanU/6mByHy17eNO9DXe9BQJWOyaA204JYH4=",
- "Address": "192.168.3.3/24",
- "DNS": "1.1.1.1"
}, - "Peer": {
- "PublicKey": "7SdFRh8o76RjUn/y4c7cQgCcCXA85s47/gVAdem3bBI=",
- "AllowedIPs": "192.168.3.3/32",
- "Endpoint": "192.168.2.1:51280",
- "PresharedKey": "w9bfMAfqRnLjnlHofX+JSzaRDADrW1tvyW1UWzXJjrg=",
- "PersistentKeepalive": 25
}
}
curl -u "admin:pass" \ "http://192.168.2.1/plugins/wireguard/config"
"[Interface]\nAddress = 192.168.3.1/24\nListenPort = 51280\nPrivateKey = 6KVVbcmXanU/6mByHy17eNO9DXe9BQJWOyaA204JYH4=\n\n[Peer]\nPublicKey = 7SdFRh8o76RjUn/y4c7cQgCcCXA85s47/gVAdem3bBI=\nPresharedKey = w9bfMAfqRnLjnlHofX+JSzaRDADrW1tvyW1UWzXJjrg=\nAllowedIPs = 192.168.3.2/32\n"
curl -u "admin:pass" \ "http://192.168.2.1/plugins/wireguard/status"
{- "wg0": {
- "privateKey": "6KVVbcmXanU/6mByHy17eNO9DXe9BQJWOyaA204JYH4=",
- "publicKey": "7SdFRh8o76RjUn/y4c7cQgCcCXA85s47/gVAdem3bBI=",
- "listenPort": "51280,",
- "peers": {
- "HvtqvLJ1F33eHmR5Yk9PLZfTHg7w6sazPZtZi9u8pBQ=": {
- "presharedKey": "w9bfMAfqRnLjnlHofX+JSzaRDADrW1tvyW1UWzXJjrg=",
- "allowedIps": [
- "192.168.3.2/32"
]
}
}
}
}
Get ASN information for IP address
ips required | string Example: 1.1.1.1,2.2.2.2 ip address list, separated by , |
curl -u "admin:pass" \ "http://192.168.2.1/plugins/lookup/asn/1.1.1.1"
{- "IP": "1.1.1.1",
- "ASN": 13335,
- "Name": "CLOUDFLARENET",
- "Country": "US"
}
Get ASN information for IPs separated by ,
ips required | string Example: 1.1.1.1,2.2.2.2 ip address list, separated by , |
curl -u "admin:pass" \ "http://192.168.2.1/plugins/lookup/asns/1.1.1.1,8.8.8.8"
[- {
- "IP": "1.1.1.1",
- "ASN": 13335,
- "Name": "CLOUDFLARENET",
- "Country": "US"
}
]
Get OUI vendor information for MAC address
mac required | string Example: 11:22:33:44:55:66 MAC address |
curl -u "admin:pass" \ "http://192.168.2.1/plugins/lookup/oui/00:11:22:33:44:55"
{- "MAC": "00:11:22:33:44:66",
- "Vendor": "CIMSYS"
}
Get OUI vendor information for MACs separated by ,
macs required | string Example: 00:11:22:33:44:66 MAC address list separated by , |
curl -u "admin:pass" \ "http://192.168.2.1/plugins/lookup/ouis/00:11:22:33:44:66"
[- {
- "MAC": "00:11:22:33:44:66",
- "Vendor": "CIMSYS"
}
]
Retrieves the current mesh network configuration
curl -u "admin:pass" \ "http://192.168.2.1/plugins/mesh/config"
{- "ParentCredentials": {
- "ParentIP": "string",
- "ParentAPIToken": "string",
- "ParentCA": "string"
}, - "LeafRouters": [
- {
- "APIToken": "string",
- "IP": "string",
- "TLSCA": "string"
}
]
}
Retrieves a list of all leaf routers the main router has configured
curl -u "admin:pass" \ "http://192.168.2.1/plugins/mesh/leafRouters"
[- {
- "APIToken": "string",
- "IP": "string",
- "TLSCA": "string"
}
]
Adds a new leaf router or updates an existing one
APIToken | string |
IP | string |
TLSCA | string This field should be left empty when adding or updating a leaf router. |
{- "APIToken": "string",
- "IP": "string",
- "TLSCA": "string"
}
Removes a leaf router from the main router's mesh network
APIToken | string |
IP | string |
TLSCA | string This field should be left empty when adding or updating a leaf router. |
{- "APIToken": "string",
- "IP": "string",
- "TLSCA": "string"
}
Endpoint for mesh nodes to notify the main router/AP about a new station connection to the mesh network
Event | string Type of event (e.g., "connect" or "disconnect") |
Iface | string Network interface on the mesh node where the event occurred |
Mac | string MAC address of the station |
Router | string IP address of the mesh node reporting the event |
{- "Event": "string",
- "Iface": "string",
- "Mac": "string",
- "Router": "string"
}
Endpoint for mesh nodes to notify the main router/AP about a failed station connection attempt
Type | string Type of failure event (e.g., "connection_failure") |
MAC | string MAC address of the station that failed to connect |
Reason | string Reason for the connection failure |
Status | string Status of the connection attempt (e.g., "failure") |
Router | string IP address of the mesh node reporting the failure |
{- "Type": "string",
- "MAC": "string",
- "Reason": "string",
- "Status": "string",
- "Router": "string"
}
Endpoint for mesh nodes to notify the main router/AP about a station disconnection from the mesh network
Event | string Type of event (e.g., "connect" or "disconnect") |
Iface | string Network interface on the mesh node where the event occurred |
Mac | string MAC address of the station |
Router | string IP address of the mesh node reporting the event |
{- "Event": "string",
- "Iface": "string",
- "Mac": "string",
- "Router": "string"
}
Mesh nodes handle this request when the main AP/Router sends down the devices listing
additional property | object (DeviceEntry) | ||||||||||||||||||
|
{- "property1": {
- "Name": "rpi4",
- "MAC": "11:22:33:44:55:61",
- "WGPubKey": "pubkey",
- "VLANTag": "vlantag",
- "RecentIP": "192.168.2.102",
- "PSKEntry": {
- "Type": "sae",
- "Psk": "password"
}, - "Policies": [
- "wan",
- "dns",
- "lan_upstream"
], - "Groups": [
- "cameras",
- "tvs"
], - "DeviceTags": [
- "private"
]
}, - "property2": {
- "Name": "rpi4",
- "MAC": "11:22:33:44:55:61",
- "WGPubKey": "pubkey",
- "VLANTag": "vlantag",
- "RecentIP": "192.168.2.102",
- "PSKEntry": {
- "Type": "sae",
- "Psk": "password"
}, - "Policies": [
- "wan",
- "dns",
- "lan_upstream"
], - "Groups": [
- "cameras",
- "tvs"
], - "DeviceTags": [
- "private"
]
}
}
The main router uses this call to sync the OTP login code on the mesh nodes
Token | string Authentication token for the request |
object (OTPSettings) |
{- "Token": "string",
- "Settings": {
- "OTPUsers": [
- {
- "Name": "string",
- "Secret": "string",
- "Confirmed": true,
- "AlwaysOn": true
}
], - "JWTDurationSeconds": 0
}
}
Sets the credentials for the parent node in the mesh network, used for informing the parent about connection events
ParentIP | string |
ParentAPIToken | string |
ParentCA | string |
{- "ParentIP": "string",
- "ParentAPIToken": "string",
- "ParentCA": "string"
}
Retrieves the TLS certificate for the mesh network. This endpoint implements HMAC Authentication using the mesh node's API key.
X-SPR-Mesh-TLS-Hash | string HMAC signature of the certificate file contents, using the Mesh's API Key. This header is used to verify the integrity and authenticity of the certificate. The client should validate this HMAC to ensure the certificate hasn't been tampered with. |
curl -u "admin:pass" \ "http://192.168.2.1/plugins/mesh/cert
PSKAuthFailure object that needs to be added
Type | string |
MAC | string/^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/ |
Reason | string |
Status | string |
{- "Type": "sae",
- "MAC": "11:22:33:44:55:66",
- "Reason": "mismatch",
- "Status": "Okay"
}
PSKAuthSuccess object that needs to be added
Iface | string |
Event | string |
MAC | string/^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/ |
Status | string |
{- "Iface": "wlan1",
- "Event": "AP-STA-CONNECTED",
- "MAC": "11:22:33:44:55:66",
- "Status": "Okay"
}
Handle networking tasks upon a DHCP
DHCPUpdate object that needs to be added
IP | string/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/ |
MAC | string/^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/ |
Name | string |
Iface | string |
Router | string/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/ |
{- "IP": "192.168.2.102",
- "MAC": "11:22:33:44:55:66",
- "Name": "rpi4",
- "Iface": "wlan1",
- "Router": "192.168.2.1"
}
Handle networking tasks for a new wireguard peer
WireguardUpdate object that needs to be added
IP | string/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/ |
PublicKey | string Base64 public key |
Iface | string |
Name | string |
{- "IP": "192.168.2.102",
- "PublicKey": "7SdFRh8o76RjUn/y4c7cQgCcCXA85s47/gVAdem3bBI=",
- "Iface": "wg0",
- "Name": "wfh-laptop"
}
Handle networking tasks for removing a wireguard peer
WireguardUpdate object that needs to be added
IP | string/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/ |
PublicKey | string Base64 public key |
Iface | string |
Name | string |
{- "IP": "192.168.2.102",
- "PublicKey": "7SdFRh8o76RjUn/y4c7cQgCcCXA85s47/gVAdem3bBI=",
- "Iface": "wg0",
- "Name": "wfh-laptop"
}
Get latest tag from git repository specified by the plugin parameter
plugin | string plugin to get version for |
curl --unix-socket \ state/plugins/superd/socket \ http://localhost/git_version
"v0.1.23"
Get latest tag from docker specified by the container parameter
container | string container to get version for |
curl --unix-socket \ state/plugins/superd/socket \ http://localhost/container_version
"0.1.23"
Reserves an IP address for plugins like wireguard to assign to clients
AbstractDHCPRequest for requesting an IP by an Identifier
Identifier | string |
{- "Identifier": "7SdFRh8o76RjUn/y4c7cQgCcCXA85s47/gVAdem3bBI="
}
Name | string Client Name |
MAC | string HW address |
WGPubKey | string PubKey |
VLANTag | string VLANTag |
RecentIP | string RecentIP |
object (PSKEntry) | |
Policies | Array of strings Policies for Device |
Groups | Array of strings Interconnected Groups of Devices |
DeviceTags | Array of strings Tags for Device |
{- "Name": "mbp",
- "MAC": "11:22:33:44:55:66",
- "WGPubKey": "",
- "VLANTag": "",
- "RecentIP": "192.168.2.102",
- "PskEntry": {
- "Type": "sae",
- "Psk": "**"
}, - "Policies": [
- "wan",
- "lan",
- "dns",
- "lan_upstream"
], - "Groups": [
- "cameras",
- "lightbulbs"
], - "DeviceTags": [
- "private"
]
}
Name | string Unique Group Name |
Disabled | bool If Group is disabled |
GroupTags | Array of strings Tags for Group |
{- "Name": "vpn",
- "Disabled": false,
- "GroupTags": [
- "private"
]
}
Type | string Enum: "sae" "wpa" sae for WPA3 or wpa for WPA2 |
Psk | string Password |
{- "Type": "sae",
- "Psk": "password"
}
Name | string Plugin name |
URI | string Plugin URI |
UnixPath | string Plugin path for unix socket |
Enabled | boolean Plugin state |
Plus | boolean Indicates if this is a PLUS plugin |
GitURL | string Git repository URL for the plugin |
ComposeFilePath | string Relative path to docker compose file |
HasUI | boolean Indicates if the plugin has a user interface |
SandboxedUI | boolean Indicates if the plugin UI is sandboxed |
InstallTokenPath | string Path to the installation token |
ScopedPaths | Array of strings List of scoped paths for the plugin |
{- "Name": "dns-block",
- "URI": "dns/block",
- "UnixPath": "/state/dns/dns_block_plugin",
- "Enabled": true
}