From 7c9a5f64963b2ebf9811fae300c238fb17463039 Mon Sep 17 00:00:00 2001
From: Jakob Olsson <Jakob Olsson>
Date: Fri, 13 Dec 2019 15:11:13 +0100
Subject: [PATCH] add example markdown files

---
 md/wifi.ap.md    | 3625 ++++++++++++++++++++++++++++++++++++++++++++++
 md/wifi.md       |  507 +++++++
 md/wifi.radio.md | 1136 +++++++++++++++
 md/wifi.wps.md   |  707 +++++++++
 4 files changed, 5975 insertions(+)
 create mode 100644 md/wifi.ap.md
 create mode 100644 md/wifi.md
 create mode 100644 md/wifi.radio.md
 create mode 100644 md/wifi.wps.md

diff --git a/md/wifi.ap.md b/md/wifi.ap.md
new file mode 100644
index 0000000..a6af80d
--- /dev/null
+++ b/md/wifi.ap.md
@@ -0,0 +1,3625 @@
+# wifi.ap.&lt;name&gt; Schema
+
+```
+https://www.iopsys.eu/wifi.ap.json
+```
+
+| Custom Properties | Additional Properties |
+| ----------------- | --------------------- |
+| Forbidden         | Forbidden             |
+
+# wifi.ap.&lt;name&gt;
+
+| List of Methods                           |
+| ----------------------------------------- |
+| [add_neighbor](#add_neighbor)             | Method | wifi.ap.&lt;name&gt; (this schema) |
+| [add_vendor_ie](#add_vendor_ie)           | Method | wifi.ap.&lt;name&gt; (this schema) |
+| [assoclist](#assoclist)                   | Method | wifi.ap.&lt;name&gt; (this schema) |
+| [del_neighbor](#del_neighbor)             | Method | wifi.ap.&lt;name&gt; (this schema) |
+| [del_vendor_ie](#del_vendor_ie)           | Method | wifi.ap.&lt;name&gt; (this schema) |
+| [disconnect](#disconnect)                 | Method | wifi.ap.&lt;name&gt; (this schema) |
+| [list_neighbor](#list_neighbor)           | Method | wifi.ap.&lt;name&gt; (this schema) |
+| [monitor](#monitor)                       | Method | wifi.ap.&lt;name&gt; (this schema) |
+| [request_neighbor](#request_neighbor)     | Method | wifi.ap.&lt;name&gt; (this schema) |
+| [request_transition](#request_transition) | Method | wifi.ap.&lt;name&gt; (this schema) |
+| [stations](#stations)                     | Method | wifi.ap.&lt;name&gt; (this schema) |
+| [stats](#stats)                           | Method | wifi.ap.&lt;name&gt; (this schema) |
+| [status](#status)                         | Method | wifi.ap.&lt;name&gt; (this schema) |
+
+## add_neighbor
+
+`add_neighbor`
+
+- type: `Method`
+
+### add_neighbor Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property     | Type    | Required     |
+| ------------ | ------- | ------------ |
+| `bssid`      | string  | **Required** |
+| `bssid_info` | string  | **Required** |
+| `channel`    | oneOf   | **Required** |
+| `phy`        | integer | **Required** |
+| `reg`        | integer | **Required** |
+
+#### bssid
+
+##### MAC Address
+
+`bssid`
+
+- is **required**
+- type: reference
+
+##### bssid Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+#### bssid_info
+
+`bssid_info`
+
+- is **required**
+- type: `string`
+
+##### bssid_info Type
+
+`string`
+
+#### channel
+
+`channel`
+
+- is **required**
+- type: complex
+
+##### channel Type
+
+**One** of the following _conditions_ need to be fulfilled.
+
+#### Condition 1
+
+`integer`
+
+- minimum value: `1`
+- maximum value: `14`
+
+#### Condition 2
+
+`integer`
+
+- minimum value: `32`
+- maximum value: `200`
+
+#### phy
+
+`phy`
+
+- is **required**
+- type: `integer`
+
+##### phy Type
+
+`integer`
+
+- minimum value: `0`
+
+#### reg
+
+`reg`
+
+- is **required**
+- type: `integer`
+
+##### reg Type
+
+`integer`
+
+- minimum value: `0`
+
+### Ubus CLI Example
+
+```
+ubus call wifi.ap.<name> add_neighbor {"bssid":"bD:cC:f5:f2:50:B6","channel":9,"bssid_info":"irure consequat","reg":68830384,"phy":9016275}
+```
+
+### JSONRPC Example
+
+```json
+{
+  "jsonrpc": "2.0",
+  "id": 0,
+  "method": "call",
+  "params": [
+    "<SID>",
+    "wifi.ap.<name>",
+    "add_neighbor",
+    { "bssid": "bD:cC:f5:f2:50:B6", "channel": 9, "bssid_info": "irure consequat", "reg": 68830384, "phy": 9016275 }
+  ]
+}
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Output Example
+
+```json
+{}
+```
+
+## add_vendor_ie
+
+`add_vendor_ie`
+
+- type: `Method`
+
+### add_vendor_ie Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type    | Required     |
+| -------- | ------- | ------------ |
+| `data`   | string  | **Required** |
+| `mgmt`   | integer | **Required** |
+| `oui`    | string  | **Required** |
+
+#### data
+
+##### Hex String
+
+`data`
+
+- is **required**
+- type: reference
+
+##### data Type
+
+`string`
+
+All instances must conform to this regular expression (test examples
+[here](https://regexr.com/?expression=%5E%5B0-9a-fA-F%5D%2B)):
+
+```regex
+^[0-9a-fA-F]+
+```
+
+#### mgmt
+
+`mgmt`
+
+- is **required**
+- type: `integer`
+
+##### mgmt Type
+
+`integer`
+
+#### oui
+
+##### Three byte oui
+
+`oui`
+
+- is **required**
+- type: reference
+
+##### oui Type
+
+`string`
+
+- minimum length: 9 characters
+- maximum length: 9 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D)%7B3%7D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]){3}$
+```
+
+### Ubus CLI Example
+
+```
+ubus call wifi.ap.<name> add_vendor_ie {"mgmt":-80241492,"oui":"c81FCdC7E","data":"b3F4fD3EE"}
+```
+
+### JSONRPC Example
+
+```json
+{
+  "jsonrpc": "2.0",
+  "id": 0,
+  "method": "call",
+  "params": [
+    "<SID>",
+    "wifi.ap.<name>",
+    "add_vendor_ie",
+    { "mgmt": -80241492, "oui": "c81FCdC7E", "data": "b3F4fD3EE" }
+  ]
+}
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Output Example
+
+```json
+{}
+```
+
+## assoclist
+
+`assoclist`
+
+- type: `Method`
+
+### assoclist Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Ubus CLI Example
+
+```
+ubus call wifi.ap.<name> assoclist {}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "wifi.ap.<name>", "assoclist", {}] }
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property    | Type  | Required     |
+| ----------- | ----- | ------------ |
+| `assoclist` | array | **Required** |
+
+#### assoclist
+
+`assoclist`
+
+- is **required**
+- type: `object[]`
+
+##### assoclist Type
+
+Array type: `object[]`
+
+All items must be of the type: `object` with following properties:
+
+| Property  | Type   | Required     |
+| --------- | ------ | ------------ |
+| `macaddr` | string | **Required** |
+| `wdev`    | string | **Required** |
+
+#### macaddr
+
+##### MAC Address
+
+`macaddr`
+
+- is **required**
+- type: reference
+
+##### macaddr Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+#### wdev
+
+##### Interface
+
+`wdev`
+
+- is **required**
+- type: reference
+
+##### wdev Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+### Output Example
+
+```json
+{
+  "assoclist": [
+    { "wdev": "sint non co", "macaddr": "Aa:C0:a5:4A:A6:Ff" },
+    { "wdev": "quis labor", "macaddr": "24:0D:F2:6C:E1:e4" },
+    { "wdev": "Excep", "macaddr": "9e:dB:37:82:0A:C9" },
+    { "wdev": "d", "macaddr": "1d:bE:DF:c3:bD:e9" }
+  ]
+}
+```
+
+## del_neighbor
+
+`del_neighbor`
+
+- type: `Method`
+
+### del_neighbor Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type   | Required     |
+| -------- | ------ | ------------ |
+| `bssid`  | string | **Required** |
+
+#### bssid
+
+##### MAC Address
+
+`bssid`
+
+- is **required**
+- type: reference
+
+##### bssid Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+### Ubus CLI Example
+
+```
+ubus call wifi.ap.<name> del_neighbor {"bssid":"cD:fb:70:C8:6d:e7"}
+```
+
+### JSONRPC Example
+
+```json
+{
+  "jsonrpc": "2.0",
+  "id": 0,
+  "method": "call",
+  "params": ["<SID>", "wifi.ap.<name>", "del_neighbor", { "bssid": "cD:fb:70:C8:6d:e7" }]
+}
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Output Example
+
+```json
+{}
+```
+
+## del_vendor_ie
+
+`del_vendor_ie`
+
+- type: `Method`
+
+### del_vendor_ie Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `intput` | object | Optional |
+| `output` | object | Optional |
+
+#### intput
+
+`intput`
+
+- is optional
+- type: `object`
+
+##### intput Type
+
+`object` with following properties:
+
+| Property | Type    | Required     |
+| -------- | ------- | ------------ |
+| `data`   | string  | **Required** |
+| `mgmt`   | integer | **Required** |
+| `oui`    | string  | **Required** |
+
+#### data
+
+##### Hex String
+
+`data`
+
+- is **required**
+- type: reference
+
+##### data Type
+
+`string`
+
+All instances must conform to this regular expression (test examples
+[here](https://regexr.com/?expression=%5E%5B0-9a-fA-F%5D%2B)):
+
+```regex
+^[0-9a-fA-F]+
+```
+
+#### mgmt
+
+`mgmt`
+
+- is **required**
+- type: `integer`
+
+##### mgmt Type
+
+`integer`
+
+#### oui
+
+##### Three byte oui
+
+`oui`
+
+- is **required**
+- type: reference
+
+##### oui Type
+
+`string`
+
+- minimum length: 9 characters
+- maximum length: 9 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D)%7B3%7D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]){3}$
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Output Example
+
+```json
+{}
+```
+
+## disconnect
+
+`disconnect`
+
+- type: `Method`
+
+### disconnect Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type   | Required     |
+| -------- | ------ | ------------ |
+| `sta`    | string | **Required** |
+
+#### sta
+
+##### MAC Address
+
+`sta`
+
+- is **required**
+- type: reference
+
+##### sta Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+### Ubus CLI Example
+
+```
+ubus call wifi.ap.<name> disconnect {"sta":"6D:F7:F4:87:CC:1c"}
+```
+
+### JSONRPC Example
+
+```json
+{
+  "jsonrpc": "2.0",
+  "id": 0,
+  "method": "call",
+  "params": ["<SID>", "wifi.ap.<name>", "disconnect", { "sta": "6D:F7:F4:87:CC:1c" }]
+}
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Output Example
+
+```json
+{}
+```
+
+## list_neighbor
+
+`list_neighbor`
+
+- type: `Method`
+
+### list_neighbor Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `client` | string | Optional |
+| `ssid`   | string | Optional |
+
+#### client
+
+##### MAC Address
+
+`client`
+
+- is optional
+- type: reference
+
+##### client Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+#### ssid
+
+##### SSID
+
+`ssid`
+
+- is optional
+- type: reference
+
+##### ssid Type
+
+`string`
+
+- maximum length: 32 characters
+
+### Ubus CLI Example
+
+```
+ubus call wifi.ap.<name> list_neighbor {"ssid":"cillum nostrud","client":"65:D1:Eb:c7:9B:DB"}
+```
+
+### JSONRPC Example
+
+```json
+{
+  "jsonrpc": "2.0",
+  "id": 0,
+  "method": "call",
+  "params": ["<SID>", "wifi.ap.<name>", "list_neighbor", { "ssid": "cillum nostrud", "client": "65:D1:Eb:c7:9B:DB" }]
+}
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property    | Type  | Required     |
+| ----------- | ----- | ------------ |
+| `neighbors` | array | **Required** |
+
+#### neighbors
+
+`neighbors`
+
+- is **required**
+- type: `object[]`
+
+##### neighbors Type
+
+Array type: `object[]`
+
+All items must be of the type: `object` with following properties:
+
+| Property     | Type    | Required     |
+| ------------ | ------- | ------------ |
+| `bss_info`   | integer | **Required** |
+| `bssid`      | string  | **Required** |
+| `channel`    | oneOf   | **Required** |
+| `phy`        | integer | **Required** |
+| `regulatory` | integer | **Required** |
+
+#### bss_info
+
+`bss_info`
+
+- is **required**
+- type: `integer`
+
+##### bss_info Type
+
+`integer`
+
+- minimum value: `0`
+
+#### bssid
+
+##### MAC Address
+
+`bssid`
+
+- is **required**
+- type: reference
+
+##### bssid Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+#### channel
+
+`channel`
+
+- is **required**
+- type: complex
+
+##### channel Type
+
+**One** of the following _conditions_ need to be fulfilled.
+
+#### Condition 1
+
+`integer`
+
+- minimum value: `1`
+- maximum value: `14`
+
+#### Condition 2
+
+`integer`
+
+- minimum value: `32`
+- maximum value: `200`
+
+#### phy
+
+`phy`
+
+- is **required**
+- type: `integer`
+
+##### phy Type
+
+`integer`
+
+- minimum value: `0`
+- maximum value: `9`
+
+#### regulatory
+
+`regulatory`
+
+- is **required**
+- type: `integer`
+
+##### regulatory Type
+
+`integer`
+
+- minimum value: `0`
+
+### Output Example
+
+```json
+{
+  "neighbors": [
+    { "bssid": "E1:14:D7:Ad:cF:00", "bss_info": 43348190, "regulatory": 83594411, "channel": 2, "phy": 1 },
+    { "bssid": "1C:71:8C:E6:2B:AA", "bss_info": 95700545, "regulatory": 39414802, "channel": 4, "phy": 6 },
+    { "bssid": "21:DC:20:F2:6a:4d", "bss_info": 26245316, "regulatory": 15776497, "channel": 7, "phy": 2 },
+    { "bssid": "07:4A:A9:dA:82:1d", "bss_info": 36544340, "regulatory": 68524423, "channel": 8, "phy": 8 }
+  ]
+}
+```
+
+## monitor
+
+`monitor`
+
+- type: `Method`
+
+### monitor Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `intput` | object | Optional |
+| `output` | object | Optional |
+
+#### intput
+
+`intput`
+
+- is optional
+- type: `object`
+
+##### intput Type
+
+`object` with following properties:
+
+| Property | Type    | Required     |
+| -------- | ------- | ------------ |
+| `get`    | integer | Optional     |
+| `sta`    | string  | **Required** |
+
+#### get
+
+`get`
+
+- is optional
+- type: `integer`
+
+##### get Type
+
+`integer`
+
+#### sta
+
+##### MAC Address
+
+`sta`
+
+- is **required**
+- type: reference
+
+##### sta Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Output Example
+
+```json
+{}
+```
+
+## request_neighbor
+
+`request_neighbor`
+
+- type: `Method`
+
+### request_neighbor Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type   | Required     |
+| -------- | ------ | ------------ |
+| `client` | string | **Required** |
+| `ssid`   | string | Optional     |
+
+#### client
+
+##### MAC Address
+
+`client`
+
+- is **required**
+- type: reference
+
+##### client Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+#### ssid
+
+##### SSID
+
+`ssid`
+
+- is optional
+- type: reference
+
+##### ssid Type
+
+`string`
+
+- maximum length: 32 characters
+
+### Ubus CLI Example
+
+```
+ubus call wifi.ap.<name> request_neighbor {"client":"cF:3c:a1:Ce:98:76","ssid":"deserunt dolore proi"}
+```
+
+### JSONRPC Example
+
+```json
+{
+  "jsonrpc": "2.0",
+  "id": 0,
+  "method": "call",
+  "params": [
+    "<SID>",
+    "wifi.ap.<name>",
+    "request_neighbor",
+    { "client": "cF:3c:a1:Ce:98:76", "ssid": "deserunt dolore proi" }
+  ]
+}
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Output Example
+
+```json
+{}
+```
+
+## request_transition
+
+`request_transition`
+
+- type: `Method`
+
+### request_transition Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property  | Type    | Required     |
+| --------- | ------- | ------------ |
+| `bssid`   | array   | **Required** |
+| `client`  | string  | **Required** |
+| `timeout` | integer | Optional     |
+
+#### bssid
+
+`bssid`
+
+- is **required**
+- type: reference
+
+##### bssid Type
+
+Array type: reference
+
+All items must be of the type: `string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+#### client
+
+##### MAC Address
+
+`client`
+
+- is **required**
+- type: reference
+
+##### client Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+#### timeout
+
+`timeout`
+
+- is optional
+- type: `integer`
+
+##### timeout Type
+
+`integer`
+
+### Ubus CLI Example
+
+```
+ubus call wifi.ap.<name> request_transition {"client":"9F:4C:Ec:38:c7:bF","bssid":["85:24:D4:b4:1b:De","F7:B7:C9:28:Cd:8A","e1:da:4e:F5:6e:4e"],"timeout":-47489435}
+```
+
+### JSONRPC Example
+
+```json
+{
+  "jsonrpc": "2.0",
+  "id": 0,
+  "method": "call",
+  "params": [
+    "<SID>",
+    "wifi.ap.<name>",
+    "request_transition",
+    {
+      "client": "9F:4C:Ec:38:c7:bF",
+      "bssid": ["85:24:D4:b4:1b:De", "F7:B7:C9:28:Cd:8A", "e1:da:4e:F5:6e:4e"],
+      "timeout": -47489435
+    }
+  ]
+}
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Output Example
+
+```json
+{}
+```
+
+## stations
+
+`stations`
+
+- type: `Method`
+
+### stations Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `sta`    | string | Optional |
+
+#### sta
+
+##### MAC Address
+
+`sta`
+
+- is optional
+- type: reference
+
+##### sta Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+### Ubus CLI Example
+
+```
+ubus call wifi.ap.<name> stations {"sta":"EB:53:5B:AC:f3:Ec"}
+```
+
+### JSONRPC Example
+
+```json
+{
+  "jsonrpc": "2.0",
+  "id": 0,
+  "method": "call",
+  "params": ["<SID>", "wifi.ap.<name>", "stations", { "sta": "EB:53:5B:AC:f3:Ec" }]
+}
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property   | Type  | Required     |
+| ---------- | ----- | ------------ |
+| `stations` | array | **Required** |
+
+#### stations
+
+`stations`
+
+- is **required**
+- type: `object[]`
+
+##### stations Type
+
+Array type: `object[]`
+
+All items must be of the type: `object` with following properties:
+
+| Property           | Type    | Required     |
+| ------------------ | ------- | ------------ |
+| `airtime`          | integer | **Required** |
+| `capabilities`     | object  | **Required** |
+| `frequency`        | string  | **Required** |
+| `idle`             | integer | **Required** |
+| `in_network`       | integer | **Required** |
+| `macaddr`          | string  | **Required** |
+| `max_rate`         | integer | **Required** |
+| `rssi`             | integer | **Required** |
+| `rssi_per_antenna` | array   | **Required** |
+| `rx_airtime`       | integer | **Required** |
+| `snr`              | integer | **Required** |
+| `stats`            | object  | **Required** |
+| `status`           | object  | **Required** |
+| `tx_airtime`       | integer | **Required** |
+| `wdev`             | string  | **Required** |
+
+#### airtime
+
+`airtime`
+
+- is **required**
+- type: `integer`
+
+##### airtime Type
+
+`integer`
+
+- minimum value: `0`
+- maximum value: `100`
+
+#### capabilities
+
+`capabilities`
+
+- is **required**
+- type: `object`
+
+##### capabilities Type
+
+`object` with following properties:
+
+| Property                | Type    | Required     |
+| ----------------------- | ------- | ------------ |
+| `2040coex`              | boolean | **Required** |
+| `apsd`                  | boolean | **Required** |
+| `dot11ac`               | boolean | **Required** |
+| `dot11ac_160`           | boolean | **Required** |
+| `dot11ac_8080`          | boolean | **Required** |
+| `dot11ac_mpdu_max`      | integer | **Required** |
+| `dot11ac_mu_beamformee` | boolean | **Required** |
+| `dot11ac_mu_beamformer` | boolean | **Required** |
+| `dot11ac_rx_ldpc`       | boolean | **Required** |
+| `dot11ac_rx_stbc_1ss`   | boolean | **Required** |
+| `dot11ac_rx_stbc_2ss`   | boolean | **Required** |
+| `dot11ac_rx_stbc_3ss`   | boolean | **Required** |
+| `dot11ac_rx_stbc_4ss`   | boolean | **Required** |
+| `dot11ac_sgi160`        | boolean | **Required** |
+| `dot11ac_sgi80`         | boolean | **Required** |
+| `dot11ac_su_beamformee` | boolean | **Required** |
+| `dot11ac_su_beamformer` | boolean | **Required** |
+| `dot11ac_tx_stbc`       | boolean | **Required** |
+| `dot11h`                | boolean | **Required** |
+| `dot11k`                | boolean | **Required** |
+| `dot11k_bcn_active`     | boolean | **Required** |
+| `dot11k_bcn_passive`    | boolean | **Required** |
+| `dot11k_bcn_table`      | boolean | **Required** |
+| `dot11k_link_meas`      | boolean | **Required** |
+| `dot11k_nbr_report`     | boolean | **Required** |
+| `dot11k_rcpi`           | boolean | **Required** |
+| `dot11k_rsni`           | boolean | **Required** |
+| `dot11n`                | boolean | **Required** |
+| `dot11n_40`             | boolean | **Required** |
+| `dot11n_ldpc`           | boolean | **Required** |
+| `dot11n_ps`             | boolean | **Required** |
+| `dot11n_rx_stbc`        | boolean | **Required** |
+| `dot11n_sgi20`          | boolean | **Required** |
+| `dot11n_sgi40`          | boolean | **Required** |
+| `dot11n_tx_stbc`        | boolean | **Required** |
+| `dot11v_btm`            | boolean | **Required** |
+| `proxy_arp`             | boolean | **Required** |
+| `psmp`                  | boolean | **Required** |
+| `shortslot`             | boolean | **Required** |
+| `wmm`                   | boolean | **Required** |
+
+#### 2040coex
+
+`2040coex`
+
+- is **required**
+- type: `boolean`
+
+##### 2040coex Type
+
+`boolean`
+
+#### apsd
+
+`apsd`
+
+- is **required**
+- type: `boolean`
+
+##### apsd Type
+
+`boolean`
+
+#### dot11ac
+
+`dot11ac`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac Type
+
+`boolean`
+
+#### dot11ac_160
+
+`dot11ac_160`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_160 Type
+
+`boolean`
+
+#### dot11ac_8080
+
+`dot11ac_8080`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_8080 Type
+
+`boolean`
+
+#### dot11ac_mpdu_max
+
+`dot11ac_mpdu_max`
+
+- is **required**
+- type: `integer`
+
+##### dot11ac_mpdu_max Type
+
+`integer`
+
+- minimum value: `0`
+- maximum value: `65535`
+
+#### dot11ac_mu_beamformee
+
+`dot11ac_mu_beamformee`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_mu_beamformee Type
+
+`boolean`
+
+#### dot11ac_mu_beamformer
+
+`dot11ac_mu_beamformer`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_mu_beamformer Type
+
+`boolean`
+
+#### dot11ac_rx_ldpc
+
+`dot11ac_rx_ldpc`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_rx_ldpc Type
+
+`boolean`
+
+#### dot11ac_rx_stbc_1ss
+
+`dot11ac_rx_stbc_1ss`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_rx_stbc_1ss Type
+
+`boolean`
+
+#### dot11ac_rx_stbc_2ss
+
+`dot11ac_rx_stbc_2ss`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_rx_stbc_2ss Type
+
+`boolean`
+
+#### dot11ac_rx_stbc_3ss
+
+`dot11ac_rx_stbc_3ss`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_rx_stbc_3ss Type
+
+`boolean`
+
+#### dot11ac_rx_stbc_4ss
+
+`dot11ac_rx_stbc_4ss`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_rx_stbc_4ss Type
+
+`boolean`
+
+#### dot11ac_sgi160
+
+`dot11ac_sgi160`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_sgi160 Type
+
+`boolean`
+
+#### dot11ac_sgi80
+
+`dot11ac_sgi80`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_sgi80 Type
+
+`boolean`
+
+#### dot11ac_su_beamformee
+
+`dot11ac_su_beamformee`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_su_beamformee Type
+
+`boolean`
+
+#### dot11ac_su_beamformer
+
+`dot11ac_su_beamformer`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_su_beamformer Type
+
+`boolean`
+
+#### dot11ac_tx_stbc
+
+`dot11ac_tx_stbc`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_tx_stbc Type
+
+`boolean`
+
+#### dot11h
+
+`dot11h`
+
+- is **required**
+- type: `boolean`
+
+##### dot11h Type
+
+`boolean`
+
+#### dot11k
+
+`dot11k`
+
+- is **required**
+- type: `boolean`
+
+##### dot11k Type
+
+`boolean`
+
+#### dot11k_bcn_active
+
+`dot11k_bcn_active`
+
+- is **required**
+- type: `boolean`
+
+##### dot11k_bcn_active Type
+
+`boolean`
+
+#### dot11k_bcn_passive
+
+`dot11k_bcn_passive`
+
+- is **required**
+- type: `boolean`
+
+##### dot11k_bcn_passive Type
+
+`boolean`
+
+#### dot11k_bcn_table
+
+`dot11k_bcn_table`
+
+- is **required**
+- type: `boolean`
+
+##### dot11k_bcn_table Type
+
+`boolean`
+
+#### dot11k_link_meas
+
+`dot11k_link_meas`
+
+- is **required**
+- type: `boolean`
+
+##### dot11k_link_meas Type
+
+`boolean`
+
+#### dot11k_nbr_report
+
+`dot11k_nbr_report`
+
+- is **required**
+- type: `boolean`
+
+##### dot11k_nbr_report Type
+
+`boolean`
+
+#### dot11k_rcpi
+
+`dot11k_rcpi`
+
+- is **required**
+- type: `boolean`
+
+##### dot11k_rcpi Type
+
+`boolean`
+
+#### dot11k_rsni
+
+`dot11k_rsni`
+
+- is **required**
+- type: `boolean`
+
+##### dot11k_rsni Type
+
+`boolean`
+
+#### dot11n
+
+`dot11n`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n Type
+
+`boolean`
+
+#### dot11n_40
+
+`dot11n_40`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_40 Type
+
+`boolean`
+
+#### dot11n_ldpc
+
+`dot11n_ldpc`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_ldpc Type
+
+`boolean`
+
+#### dot11n_ps
+
+`dot11n_ps`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_ps Type
+
+`boolean`
+
+#### dot11n_rx_stbc
+
+`dot11n_rx_stbc`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_rx_stbc Type
+
+`boolean`
+
+#### dot11n_sgi20
+
+`dot11n_sgi20`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_sgi20 Type
+
+`boolean`
+
+#### dot11n_sgi40
+
+`dot11n_sgi40`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_sgi40 Type
+
+`boolean`
+
+#### dot11n_tx_stbc
+
+`dot11n_tx_stbc`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_tx_stbc Type
+
+`boolean`
+
+#### dot11v_btm
+
+`dot11v_btm`
+
+- is **required**
+- type: `boolean`
+
+##### dot11v_btm Type
+
+`boolean`
+
+#### proxy_arp
+
+`proxy_arp`
+
+- is **required**
+- type: `boolean`
+
+##### proxy_arp Type
+
+`boolean`
+
+#### psmp
+
+`psmp`
+
+- is **required**
+- type: `boolean`
+
+##### psmp Type
+
+`boolean`
+
+#### shortslot
+
+`shortslot`
+
+- is **required**
+- type: `boolean`
+
+##### shortslot Type
+
+`boolean`
+
+#### wmm
+
+`wmm`
+
+- is **required**
+- type: `boolean`
+
+##### wmm Type
+
+`boolean`
+
+#### frequency
+
+##### WiFi Band
+
+`frequency`
+
+- is **required**
+- type: reference
+
+##### frequency Type
+
+`string`
+
+The value of this property **must** be equal to one of the [known values below](#stations-known-values).
+
+##### frequency Known Values
+
+| Value  |
+| ------ |
+| 2.4GHz |
+| 5GHz   |
+
+#### idle
+
+`idle`
+
+- is **required**
+- type: `integer`
+
+##### idle Type
+
+`integer`
+
+- minimum value: `0`
+
+#### in_network
+
+`in_network`
+
+- is **required**
+- type: `integer`
+
+##### in_network Type
+
+`integer`
+
+- minimum value: `0`
+
+#### macaddr
+
+##### MAC Address
+
+`macaddr`
+
+- is **required**
+- type: reference
+
+##### macaddr Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+#### max_rate
+
+`max_rate`
+
+- is **required**
+- type: `integer`
+
+##### max_rate Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rssi
+
+##### RSSI
+
+`rssi`
+
+- is **required**
+- type: reference
+
+##### rssi Type
+
+`integer`
+
+- minimum value: `-128`
+- maximum value: `0`
+
+#### rssi_per_antenna
+
+`rssi_per_antenna`
+
+- is **required**
+- type: reference
+
+##### rssi_per_antenna Type
+
+Array type: reference
+
+All items must be of the type: `integer`
+
+- minimum value: `-128`
+- maximum value: `0`
+
+#### rx_airtime
+
+`rx_airtime`
+
+- is **required**
+- type: `integer`
+
+##### rx_airtime Type
+
+`integer`
+
+- minimum value: `0`
+- maximum value: `100`
+
+#### snr
+
+`snr`
+
+- is **required**
+- type: `integer`
+
+##### snr Type
+
+`integer`
+
+- minimum value: `0`
+- maximum value: `100`
+
+#### stats
+
+`stats`
+
+- is **required**
+- type: `object`
+
+##### stats Type
+
+`object` with following properties:
+
+| Property              | Type    | Required     |
+| --------------------- | ------- | ------------ |
+| `rate_of_last_rx_pkt` | integer | **Required** |
+| `rate_of_last_tx_pkt` | integer | **Required** |
+| `rx_data_bytes`       | integer | **Required** |
+| `rx_data_pkts`        | integer | **Required** |
+| `rx_failures`         | integer | **Required** |
+| `tx_failures`         | integer | **Required** |
+| `tx_pkts_retries`     | integer | **Required** |
+| `tx_total_bytes`      | integer | **Required** |
+| `tx_total_pkts`       | integer | **Required** |
+
+#### rate_of_last_rx_pkt
+
+`rate_of_last_rx_pkt`
+
+- is **required**
+- type: reference
+
+##### rate_of_last_rx_pkt Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rate_of_last_tx_pkt
+
+`rate_of_last_tx_pkt`
+
+- is **required**
+- type: reference
+
+##### rate_of_last_tx_pkt Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_data_bytes
+
+`rx_data_bytes`
+
+- is **required**
+- type: reference
+
+##### rx_data_bytes Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_data_pkts
+
+`rx_data_pkts`
+
+- is **required**
+- type: reference
+
+##### rx_data_pkts Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_failures
+
+`rx_failures`
+
+- is **required**
+- type: reference
+
+##### rx_failures Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_failures
+
+`tx_failures`
+
+- is **required**
+- type: reference
+
+##### tx_failures Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_pkts_retries
+
+`tx_pkts_retries`
+
+- is **required**
+- type: reference
+
+##### tx_pkts_retries Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_total_bytes
+
+`tx_total_bytes`
+
+- is **required**
+- type: reference
+
+##### tx_total_bytes Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_total_pkts
+
+`tx_total_pkts`
+
+- is **required**
+- type: reference
+
+##### tx_total_pkts Type
+
+`integer`
+
+- minimum value: `0`
+
+#### status
+
+`status`
+
+- is **required**
+- type: `object`
+
+##### status Type
+
+`object` with following properties:
+
+| Property | Type    | Required     |
+| -------- | ------- | ------------ |
+| `ps`     | boolean | **Required** |
+| `wmm`    | boolean | **Required** |
+
+#### ps
+
+`ps`
+
+- is **required**
+- type: `boolean`
+
+##### ps Type
+
+`boolean`
+
+#### wmm
+
+`wmm`
+
+- is **required**
+- type: `boolean`
+
+##### wmm Type
+
+`boolean`
+
+#### tx_airtime
+
+`tx_airtime`
+
+- is **required**
+- type: `integer`
+
+##### tx_airtime Type
+
+`integer`
+
+- minimum value: `0`
+- maximum value: `100`
+
+#### wdev
+
+##### Interface
+
+`wdev`
+
+- is **required**
+- type: reference
+
+##### wdev Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+### Output Example
+
+```json
+{
+  "stations": [
+    {
+      "macaddr": "6a:61:41:0E:5d:42",
+      "wdev": "ali",
+      "frequency": "2.4GHz",
+      "rssi": -127,
+      "snr": 42,
+      "idle": 8221623,
+      "in_network": 94294966,
+      "tx_airtime": 33,
+      "rx_airtime": 27,
+      "airtime": 80,
+      "max_rate": 43275519,
+      "status": { "wmm": false, "ps": false },
+      "capabilities": {
+        "wmm": true,
+        "apsd": true,
+        "shortslot": true,
+        "dot11h": true,
+        "dot11k": true,
+        "2040coex": false,
+        "psmp": true,
+        "proxy_arp": false,
+        "dot11v_btm": true,
+        "dot11n": false,
+        "dot11n_ldpc": true,
+        "dot11n_40": false,
+        "dot11n_ps": true,
+        "dot11n_sgi20": false,
+        "dot11n_sgi40": true,
+        "dot11n_tx_stbc": false,
+        "dot11n_rx_stbc": false,
+        "dot11ac": false,
+        "dot11ac_160": false,
+        "dot11ac_8080": true,
+        "dot11ac_mpdu_max": 9157,
+        "dot11ac_sgi80": true,
+        "dot11ac_sgi160": true,
+        "dot11ac_rx_ldpc": false,
+        "dot11ac_tx_stbc": true,
+        "dot11ac_rx_stbc_1ss": false,
+        "dot11ac_rx_stbc_2ss": false,
+        "dot11ac_rx_stbc_3ss": false,
+        "dot11ac_rx_stbc_4ss": true,
+        "dot11ac_su_beamformer": false,
+        "dot11ac_su_beamformee": false,
+        "dot11ac_mu_beamformer": true,
+        "dot11ac_mu_beamformee": false,
+        "dot11k_link_meas": false,
+        "dot11k_nbr_report": true,
+        "dot11k_bcn_passive": false,
+        "dot11k_bcn_active": true,
+        "dot11k_bcn_table": false,
+        "dot11k_rcpi": false,
+        "dot11k_rsni": false
+      },
+      "stats": {
+        "tx_total_pkts": 5284814,
+        "tx_total_bytes": 2056846,
+        "tx_failures": 77153183,
+        "tx_pkts_retries": 79638711,
+        "rx_data_pkts": 38026510,
+        "rx_data_bytes": 24100606,
+        "rx_failures": 96216085,
+        "rate_of_last_tx_pkt": 26022244,
+        "rate_of_last_rx_pkt": 74971605
+      },
+      "rssi_per_antenna": [-32, -126, -112, -35]
+    },
+    {
+      "macaddr": "A8:43:dE:66:D9:e2",
+      "wdev": "quis lab",
+      "frequency": "2.4GHz",
+      "rssi": -25,
+      "snr": 27,
+      "idle": 96934722,
+      "in_network": 78648251,
+      "tx_airtime": 33,
+      "rx_airtime": 54,
+      "airtime": 36,
+      "max_rate": 53297877,
+      "status": { "wmm": true, "ps": false },
+      "capabilities": {
+        "wmm": true,
+        "apsd": false,
+        "shortslot": false,
+        "dot11h": false,
+        "dot11k": false,
+        "2040coex": true,
+        "psmp": true,
+        "proxy_arp": false,
+        "dot11v_btm": true,
+        "dot11n": true,
+        "dot11n_ldpc": true,
+        "dot11n_40": false,
+        "dot11n_ps": true,
+        "dot11n_sgi20": false,
+        "dot11n_sgi40": false,
+        "dot11n_tx_stbc": true,
+        "dot11n_rx_stbc": false,
+        "dot11ac": false,
+        "dot11ac_160": false,
+        "dot11ac_8080": true,
+        "dot11ac_mpdu_max": 62196,
+        "dot11ac_sgi80": false,
+        "dot11ac_sgi160": true,
+        "dot11ac_rx_ldpc": true,
+        "dot11ac_tx_stbc": false,
+        "dot11ac_rx_stbc_1ss": false,
+        "dot11ac_rx_stbc_2ss": false,
+        "dot11ac_rx_stbc_3ss": true,
+        "dot11ac_rx_stbc_4ss": true,
+        "dot11ac_su_beamformer": true,
+        "dot11ac_su_beamformee": false,
+        "dot11ac_mu_beamformer": false,
+        "dot11ac_mu_beamformee": false,
+        "dot11k_link_meas": false,
+        "dot11k_nbr_report": false,
+        "dot11k_bcn_passive": false,
+        "dot11k_bcn_active": true,
+        "dot11k_bcn_table": false,
+        "dot11k_rcpi": true,
+        "dot11k_rsni": true
+      },
+      "stats": {
+        "tx_total_pkts": 58951132,
+        "tx_total_bytes": 45335778,
+        "tx_failures": 32718312,
+        "tx_pkts_retries": 21908695,
+        "rx_data_pkts": 95630903,
+        "rx_data_bytes": 63584440,
+        "rx_failures": 39270548,
+        "rate_of_last_tx_pkt": 44056607,
+        "rate_of_last_rx_pkt": 84623863
+      },
+      "rssi_per_antenna": [0, -30]
+    },
+    {
+      "macaddr": "9E:6f:c6:65:Ff:b6",
+      "wdev": "aliqua nisi ea",
+      "frequency": "5GHz",
+      "rssi": -14,
+      "snr": 27,
+      "idle": 72967745,
+      "in_network": 67335770,
+      "tx_airtime": 34,
+      "rx_airtime": 18,
+      "airtime": 95,
+      "max_rate": 94240850,
+      "status": { "wmm": true, "ps": false },
+      "capabilities": {
+        "wmm": true,
+        "apsd": true,
+        "shortslot": false,
+        "dot11h": false,
+        "dot11k": true,
+        "2040coex": true,
+        "psmp": false,
+        "proxy_arp": false,
+        "dot11v_btm": false,
+        "dot11n": true,
+        "dot11n_ldpc": true,
+        "dot11n_40": false,
+        "dot11n_ps": false,
+        "dot11n_sgi20": false,
+        "dot11n_sgi40": false,
+        "dot11n_tx_stbc": false,
+        "dot11n_rx_stbc": true,
+        "dot11ac": false,
+        "dot11ac_160": true,
+        "dot11ac_8080": false,
+        "dot11ac_mpdu_max": 37156,
+        "dot11ac_sgi80": true,
+        "dot11ac_sgi160": false,
+        "dot11ac_rx_ldpc": true,
+        "dot11ac_tx_stbc": false,
+        "dot11ac_rx_stbc_1ss": false,
+        "dot11ac_rx_stbc_2ss": true,
+        "dot11ac_rx_stbc_3ss": true,
+        "dot11ac_rx_stbc_4ss": true,
+        "dot11ac_su_beamformer": true,
+        "dot11ac_su_beamformee": true,
+        "dot11ac_mu_beamformer": false,
+        "dot11ac_mu_beamformee": true,
+        "dot11k_link_meas": true,
+        "dot11k_nbr_report": false,
+        "dot11k_bcn_passive": true,
+        "dot11k_bcn_active": false,
+        "dot11k_bcn_table": true,
+        "dot11k_rcpi": false,
+        "dot11k_rsni": true
+      },
+      "stats": {
+        "tx_total_pkts": 87872896,
+        "tx_total_bytes": 86239351,
+        "tx_failures": 13879796,
+        "tx_pkts_retries": 80156196,
+        "rx_data_pkts": 59158671,
+        "rx_data_bytes": 90448780,
+        "rx_failures": 12054389,
+        "rate_of_last_tx_pkt": 9580770,
+        "rate_of_last_rx_pkt": 91617793
+      },
+      "rssi_per_antenna": [-53, -15, -61]
+    },
+    {
+      "macaddr": "93:cb:EF:9A:d5:cF",
+      "wdev": "cupidat",
+      "frequency": "2.4GHz",
+      "rssi": -105,
+      "snr": 95,
+      "idle": 26865809,
+      "in_network": 53124163,
+      "tx_airtime": 97,
+      "rx_airtime": 87,
+      "airtime": 59,
+      "max_rate": 68743221,
+      "status": { "wmm": false, "ps": false },
+      "capabilities": {
+        "wmm": true,
+        "apsd": false,
+        "shortslot": true,
+        "dot11h": false,
+        "dot11k": false,
+        "2040coex": true,
+        "psmp": true,
+        "proxy_arp": false,
+        "dot11v_btm": true,
+        "dot11n": true,
+        "dot11n_ldpc": true,
+        "dot11n_40": false,
+        "dot11n_ps": false,
+        "dot11n_sgi20": true,
+        "dot11n_sgi40": false,
+        "dot11n_tx_stbc": true,
+        "dot11n_rx_stbc": false,
+        "dot11ac": false,
+        "dot11ac_160": true,
+        "dot11ac_8080": false,
+        "dot11ac_mpdu_max": 11909,
+        "dot11ac_sgi80": false,
+        "dot11ac_sgi160": true,
+        "dot11ac_rx_ldpc": false,
+        "dot11ac_tx_stbc": true,
+        "dot11ac_rx_stbc_1ss": true,
+        "dot11ac_rx_stbc_2ss": false,
+        "dot11ac_rx_stbc_3ss": true,
+        "dot11ac_rx_stbc_4ss": false,
+        "dot11ac_su_beamformer": false,
+        "dot11ac_su_beamformee": false,
+        "dot11ac_mu_beamformer": false,
+        "dot11ac_mu_beamformee": false,
+        "dot11k_link_meas": true,
+        "dot11k_nbr_report": true,
+        "dot11k_bcn_passive": false,
+        "dot11k_bcn_active": true,
+        "dot11k_bcn_table": true,
+        "dot11k_rcpi": false,
+        "dot11k_rsni": true
+      },
+      "stats": {
+        "tx_total_pkts": 71182120,
+        "tx_total_bytes": 851737,
+        "tx_failures": 11875842,
+        "tx_pkts_retries": 22238355,
+        "rx_data_pkts": 88315464,
+        "rx_data_bytes": 58118316,
+        "rx_failures": 79227469,
+        "rate_of_last_tx_pkt": 53945137,
+        "rate_of_last_rx_pkt": 54262743
+      },
+      "rssi_per_antenna": [-120]
+    },
+    {
+      "macaddr": "5C:Bc:C4:a9:2f:c9",
+      "wdev": "Exc",
+      "frequency": "5GHz",
+      "rssi": -16,
+      "snr": 2,
+      "idle": 32141217,
+      "in_network": 20948251,
+      "tx_airtime": 15,
+      "rx_airtime": 47,
+      "airtime": 22,
+      "max_rate": 77766469,
+      "status": { "wmm": false, "ps": false },
+      "capabilities": {
+        "wmm": true,
+        "apsd": false,
+        "shortslot": false,
+        "dot11h": false,
+        "dot11k": true,
+        "2040coex": false,
+        "psmp": true,
+        "proxy_arp": false,
+        "dot11v_btm": true,
+        "dot11n": true,
+        "dot11n_ldpc": false,
+        "dot11n_40": false,
+        "dot11n_ps": false,
+        "dot11n_sgi20": false,
+        "dot11n_sgi40": true,
+        "dot11n_tx_stbc": true,
+        "dot11n_rx_stbc": false,
+        "dot11ac": true,
+        "dot11ac_160": true,
+        "dot11ac_8080": false,
+        "dot11ac_mpdu_max": 39123,
+        "dot11ac_sgi80": false,
+        "dot11ac_sgi160": true,
+        "dot11ac_rx_ldpc": true,
+        "dot11ac_tx_stbc": true,
+        "dot11ac_rx_stbc_1ss": false,
+        "dot11ac_rx_stbc_2ss": true,
+        "dot11ac_rx_stbc_3ss": true,
+        "dot11ac_rx_stbc_4ss": true,
+        "dot11ac_su_beamformer": true,
+        "dot11ac_su_beamformee": true,
+        "dot11ac_mu_beamformer": false,
+        "dot11ac_mu_beamformee": true,
+        "dot11k_link_meas": true,
+        "dot11k_nbr_report": true,
+        "dot11k_bcn_passive": true,
+        "dot11k_bcn_active": false,
+        "dot11k_bcn_table": true,
+        "dot11k_rcpi": false,
+        "dot11k_rsni": true
+      },
+      "stats": {
+        "tx_total_pkts": 12681971,
+        "tx_total_bytes": 9866073,
+        "tx_failures": 42715585,
+        "tx_pkts_retries": 83607104,
+        "rx_data_pkts": 13113353,
+        "rx_data_bytes": 7472360,
+        "rx_failures": 50770063,
+        "rate_of_last_tx_pkt": 95613787,
+        "rate_of_last_rx_pkt": 43058887
+      },
+      "rssi_per_antenna": [0, -53, -123]
+    }
+  ]
+}
+```
+
+## stats
+
+`stats`
+
+- type: `Method`
+
+### stats Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Ubus CLI Example
+
+```
+ubus call wifi.ap.<name> stats {}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "wifi.ap.<name>", "stats", {}] }
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property                  | Type    | Required     |
+| ------------------------- | ------- | ------------ |
+| `ack_fail_packets`        | integer | **Required** |
+| `aggregate_packets`       | integer | **Required** |
+| `rx_broadcast_packets`    | integer | **Required** |
+| `rx_bytes`                | integer | **Required** |
+| `rx_dropped_packets`      | integer | **Required** |
+| `rx_error_packets`        | integer | **Required** |
+| `rx_multicast_packets`    | integer | **Required** |
+| `rx_packets`              | integer | **Required** |
+| `rx_unicast_packets`      | integer | **Required** |
+| `rx_unknown_packets`      | integer | **Required** |
+| `tx_broadcast_packets`    | integer | **Required** |
+| `tx_bytes`                | integer | **Required** |
+| `tx_dropped_packets`      | integer | **Required** |
+| `tx_error_packets`        | integer | **Required** |
+| `tx_multi_retry_packets`  | integer | **Required** |
+| `tx_multicast_packets`    | integer | **Required** |
+| `tx_packets`              | integer | **Required** |
+| `tx_retrans_fail_packets` | integer | **Required** |
+| `tx_retrans_packets`      | integer | **Required** |
+| `tx_retry_packets`        | integer | **Required** |
+| `tx_unicast_packets`      | integer | **Required** |
+
+#### ack_fail_packets
+
+`ack_fail_packets`
+
+- is **required**
+- type: reference
+
+##### ack_fail_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### aggregate_packets
+
+`aggregate_packets`
+
+- is **required**
+- type: reference
+
+##### aggregate_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_broadcast_packets
+
+`rx_broadcast_packets`
+
+- is **required**
+- type: reference
+
+##### rx_broadcast_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_bytes
+
+`rx_bytes`
+
+- is **required**
+- type: reference
+
+##### rx_bytes Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_dropped_packets
+
+`rx_dropped_packets`
+
+- is **required**
+- type: reference
+
+##### rx_dropped_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_error_packets
+
+`rx_error_packets`
+
+- is **required**
+- type: reference
+
+##### rx_error_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_multicast_packets
+
+`rx_multicast_packets`
+
+- is **required**
+- type: reference
+
+##### rx_multicast_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_packets
+
+`rx_packets`
+
+- is **required**
+- type: reference
+
+##### rx_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_unicast_packets
+
+`rx_unicast_packets`
+
+- is **required**
+- type: reference
+
+##### rx_unicast_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_unknown_packets
+
+`rx_unknown_packets`
+
+- is **required**
+- type: reference
+
+##### rx_unknown_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_broadcast_packets
+
+`tx_broadcast_packets`
+
+- is **required**
+- type: reference
+
+##### tx_broadcast_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_bytes
+
+`tx_bytes`
+
+- is **required**
+- type: reference
+
+##### tx_bytes Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_dropped_packets
+
+`tx_dropped_packets`
+
+- is **required**
+- type: reference
+
+##### tx_dropped_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_error_packets
+
+`tx_error_packets`
+
+- is **required**
+- type: reference
+
+##### tx_error_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_multi_retry_packets
+
+`tx_multi_retry_packets`
+
+- is **required**
+- type: reference
+
+##### tx_multi_retry_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_multicast_packets
+
+`tx_multicast_packets`
+
+- is **required**
+- type: reference
+
+##### tx_multicast_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_packets
+
+`tx_packets`
+
+- is **required**
+- type: reference
+
+##### tx_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_retrans_fail_packets
+
+`tx_retrans_fail_packets`
+
+- is **required**
+- type: reference
+
+##### tx_retrans_fail_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_retrans_packets
+
+`tx_retrans_packets`
+
+- is **required**
+- type: reference
+
+##### tx_retrans_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_retry_packets
+
+`tx_retry_packets`
+
+- is **required**
+- type: reference
+
+##### tx_retry_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_unicast_packets
+
+`tx_unicast_packets`
+
+- is **required**
+- type: reference
+
+##### tx_unicast_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+### Output Example
+
+```json
+{
+  "tx_bytes": 96350161,
+  "tx_packets": 55270543,
+  "tx_unicast_packets": 11220016,
+  "tx_multicast_packets": 76777539,
+  "tx_broadcast_packets": 21125812,
+  "tx_error_packets": 29210439,
+  "tx_retrans_packets": 79531269,
+  "tx_retrans_fail_packets": 13435849,
+  "tx_retry_packets": 85104829,
+  "tx_multi_retry_packets": 41508238,
+  "tx_dropped_packets": 27402800,
+  "ack_fail_packets": 47758471,
+  "aggregate_packets": 39188989,
+  "rx_bytes": 41660723,
+  "rx_packets": 40320245,
+  "rx_unicast_packets": 32902938,
+  "rx_multicast_packets": 96016840,
+  "rx_broadcast_packets": 31360956,
+  "rx_error_packets": 8218167,
+  "rx_dropped_packets": 38187385,
+  "rx_unknown_packets": 6848059
+}
+```
+
+## status
+
+`status`
+
+- type: `Method`
+
+### status Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Ubus CLI Example
+
+```
+ubus call wifi.ap.<name> status {}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "wifi.ap.<name>", "status", {}] }
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property       | Type    | Required     |
+| -------------- | ------- | ------------ |
+| `adm_capacity` | integer | **Required** |
+| `bandwidth`    | oneOf   | **Required** |
+| `bssid`        | string  | **Required** |
+| `capabilities` | object  | **Required** |
+| `encryption`   | string  | **Required** |
+| `hidden`       | boolean | **Required** |
+| `ifname`       | string  | **Required** |
+| `max_stations` | integer | **Required** |
+| `num_stations` | integer | **Required** |
+| `ssid`         | string  | **Required** |
+| `standard`     | string  | **Required** |
+| `status`       | string  | **Required** |
+| `utilization`  | integer | **Required** |
+
+#### adm_capacity
+
+`adm_capacity`
+
+- is **required**
+- type: `integer`
+
+##### adm_capacity Type
+
+`integer`
+
+#### bandwidth
+
+`bandwidth`
+
+- is **required**
+- type: complex
+
+##### bandwidth Type
+
+**One** of the following _conditions_ need to be fulfilled.
+
+#### Condition 1
+
+`integer`
+
+#### Condition 2
+
+`integer`
+
+#### bssid
+
+##### MAC Address
+
+`bssid`
+
+- is **required**
+- type: reference
+
+##### bssid Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+#### capabilities
+
+`capabilities`
+
+- is **required**
+- type: `object`
+
+##### capabilities Type
+
+`object` with following properties:
+
+| Property                | Type    | Required     |
+| ----------------------- | ------- | ------------ |
+| `apsd`                  | boolean | **Required** |
+| `dot11ac`               | boolean | **Required** |
+| `dot11ac_160`           | boolean | **Required** |
+| `dot11ac_8080`          | boolean | **Required** |
+| `dot11ac_mpdu_max`      | integer | **Required** |
+| `dot11ac_mu_beamformee` | boolean | **Required** |
+| `dot11ac_mu_beamformer` | boolean | **Required** |
+| `dot11ac_rx_ldpc`       | boolean | **Required** |
+| `dot11ac_rx_stbc_1ss`   | boolean | **Required** |
+| `dot11ac_rx_stbc_2ss`   | boolean | **Required** |
+| `dot11ac_rx_stbc_3ss`   | boolean | **Required** |
+| `dot11ac_rx_stbc_4ss`   | boolean | **Required** |
+| `dot11ac_sgi160`        | boolean | **Required** |
+| `dot11ac_sgi80`         | boolean | **Required** |
+| `dot11ac_su_beamformee` | boolean | **Required** |
+| `dot11ac_su_beamformer` | boolean | **Required** |
+| `dot11ac_tx_stbc`       | boolean | **Required** |
+| `dot11h`                | boolean | **Required** |
+| `dot11k`                | boolean | **Required** |
+| `dot11n`                | boolean | **Required** |
+| `dot11n_40`             | boolean | **Required** |
+| `dot11n_ldpc`           | boolean | **Required** |
+| `dot11n_ps`             | boolean | **Required** |
+| `dot11n_rx_stbc`        | boolean | **Required** |
+| `dot11n_sgi20`          | boolean | **Required** |
+| `dot11n_sgi40`          | boolean | **Required** |
+| `dot11n_tx_stbc`        | boolean | **Required** |
+| `shortslot`             | boolean | **Required** |
+| `wmm`                   | boolean | **Required** |
+
+#### apsd
+
+`apsd`
+
+- is **required**
+- type: `boolean`
+
+##### apsd Type
+
+`boolean`
+
+#### dot11ac
+
+`dot11ac`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac Type
+
+`boolean`
+
+#### dot11ac_160
+
+`dot11ac_160`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_160 Type
+
+`boolean`
+
+#### dot11ac_8080
+
+`dot11ac_8080`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_8080 Type
+
+`boolean`
+
+#### dot11ac_mpdu_max
+
+`dot11ac_mpdu_max`
+
+- is **required**
+- type: `integer`
+
+##### dot11ac_mpdu_max Type
+
+`integer`
+
+- minimum value: `0`
+- maximum value: `65535`
+
+#### dot11ac_mu_beamformee
+
+`dot11ac_mu_beamformee`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_mu_beamformee Type
+
+`boolean`
+
+#### dot11ac_mu_beamformer
+
+`dot11ac_mu_beamformer`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_mu_beamformer Type
+
+`boolean`
+
+#### dot11ac_rx_ldpc
+
+`dot11ac_rx_ldpc`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_rx_ldpc Type
+
+`boolean`
+
+#### dot11ac_rx_stbc_1ss
+
+`dot11ac_rx_stbc_1ss`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_rx_stbc_1ss Type
+
+`boolean`
+
+#### dot11ac_rx_stbc_2ss
+
+`dot11ac_rx_stbc_2ss`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_rx_stbc_2ss Type
+
+`boolean`
+
+#### dot11ac_rx_stbc_3ss
+
+`dot11ac_rx_stbc_3ss`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_rx_stbc_3ss Type
+
+`boolean`
+
+#### dot11ac_rx_stbc_4ss
+
+`dot11ac_rx_stbc_4ss`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_rx_stbc_4ss Type
+
+`boolean`
+
+#### dot11ac_sgi160
+
+`dot11ac_sgi160`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_sgi160 Type
+
+`boolean`
+
+#### dot11ac_sgi80
+
+`dot11ac_sgi80`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_sgi80 Type
+
+`boolean`
+
+#### dot11ac_su_beamformee
+
+`dot11ac_su_beamformee`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_su_beamformee Type
+
+`boolean`
+
+#### dot11ac_su_beamformer
+
+`dot11ac_su_beamformer`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_su_beamformer Type
+
+`boolean`
+
+#### dot11ac_tx_stbc
+
+`dot11ac_tx_stbc`
+
+- is **required**
+- type: `boolean`
+
+##### dot11ac_tx_stbc Type
+
+`boolean`
+
+#### dot11h
+
+`dot11h`
+
+- is **required**
+- type: `boolean`
+
+##### dot11h Type
+
+`boolean`
+
+#### dot11k
+
+`dot11k`
+
+- is **required**
+- type: `boolean`
+
+##### dot11k Type
+
+`boolean`
+
+#### dot11n
+
+`dot11n`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n Type
+
+`boolean`
+
+#### dot11n_40
+
+`dot11n_40`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_40 Type
+
+`boolean`
+
+#### dot11n_ldpc
+
+`dot11n_ldpc`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_ldpc Type
+
+`boolean`
+
+#### dot11n_ps
+
+`dot11n_ps`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_ps Type
+
+`boolean`
+
+#### dot11n_rx_stbc
+
+`dot11n_rx_stbc`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_rx_stbc Type
+
+`boolean`
+
+#### dot11n_sgi20
+
+`dot11n_sgi20`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_sgi20 Type
+
+`boolean`
+
+#### dot11n_sgi40
+
+`dot11n_sgi40`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_sgi40 Type
+
+`boolean`
+
+#### dot11n_tx_stbc
+
+`dot11n_tx_stbc`
+
+- is **required**
+- type: `boolean`
+
+##### dot11n_tx_stbc Type
+
+`boolean`
+
+#### shortslot
+
+`shortslot`
+
+- is **required**
+- type: `boolean`
+
+##### shortslot Type
+
+`boolean`
+
+#### wmm
+
+`wmm`
+
+- is **required**
+- type: `boolean`
+
+##### wmm Type
+
+`boolean`
+
+#### encryption
+
+`encryption`
+
+- is **required**
+- type: `string`
+
+##### encryption Type
+
+`string`
+
+#### hidden
+
+`hidden`
+
+- is **required**
+- type: `boolean`
+
+##### hidden Type
+
+`boolean`
+
+#### ifname
+
+##### Interface
+
+`ifname`
+
+- is **required**
+- type: reference
+
+##### ifname Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+#### max_stations
+
+##### Number of stations
+
+`max_stations`
+
+- is **required**
+- type: reference
+
+##### max_stations Type
+
+`integer`
+
+- minimum value: `0`
+- maximum value: `2007`
+
+#### num_stations
+
+##### Number of stations
+
+`num_stations`
+
+- is **required**
+- type: reference
+
+##### num_stations Type
+
+`integer`
+
+- minimum value: `0`
+- maximum value: `2007`
+
+#### ssid
+
+##### SSID
+
+`ssid`
+
+- is **required**
+- type: reference
+
+##### ssid Type
+
+`string`
+
+- maximum length: 32 characters
+
+#### standard
+
+`standard`
+
+- is **required**
+- type: `string`
+
+##### standard Type
+
+`string`
+
+#### status
+
+`status`
+
+- is **required**
+- type: `string`
+
+##### status Type
+
+`string`
+
+#### utilization
+
+`utilization`
+
+- is **required**
+- type: `integer`
+
+##### utilization Type
+
+`integer`
+
+- minimum value: `0`
+- maximum value: `100`
+
+### Output Example
+
+```json
+{
+  "ifname": "elit ven",
+  "status": "non id consequat nisi ut",
+  "ssid": "consequat Lorem cupidatat",
+  "bssid": "E5:28:b3:09:9C:d1",
+  "encryption": "officia reprehenderit in",
+  "bandwidth": 160,
+  "standard": "elit",
+  "num_stations": 1963,
+  "utilization": 52,
+  "adm_capacity": 92570569,
+  "hidden": true,
+  "max_stations": 961,
+  "capabilities": {
+    "wmm": false,
+    "apsd": false,
+    "shortslot": false,
+    "dot11h": false,
+    "dot11k": true,
+    "dot11n": false,
+    "dot11n_ldpc": false,
+    "dot11n_40": true,
+    "dot11n_ps": false,
+    "dot11n_sgi20": false,
+    "dot11n_sgi40": false,
+    "dot11n_tx_stbc": true,
+    "dot11n_rx_stbc": false,
+    "dot11ac": true,
+    "dot11ac_160": true,
+    "dot11ac_8080": false,
+    "dot11ac_mpdu_max": 23096,
+    "dot11ac_sgi80": true,
+    "dot11ac_sgi160": false,
+    "dot11ac_rx_ldpc": true,
+    "dot11ac_tx_stbc": false,
+    "dot11ac_rx_stbc_1ss": true,
+    "dot11ac_rx_stbc_2ss": true,
+    "dot11ac_rx_stbc_3ss": false,
+    "dot11ac_rx_stbc_4ss": true,
+    "dot11ac_su_beamformer": true,
+    "dot11ac_su_beamformee": true,
+    "dot11ac_mu_beamformer": true,
+    "dot11ac_mu_beamformee": false
+  }
+}
+```
diff --git a/md/wifi.md b/md/wifi.md
new file mode 100644
index 0000000..16f3257
--- /dev/null
+++ b/md/wifi.md
@@ -0,0 +1,507 @@
+# wifi Schema
+
+```
+https://www.iopsys.eu/wifi.json
+```
+
+| Custom Properties | Additional Properties |
+| ----------------- | --------------------- |
+| Forbidden         | Forbidden             |
+
+# wifi
+
+| List of Methods   |
+| ----------------- |
+| [status](#status) | Method | wifi (this schema) |
+
+## status
+
+`status`
+
+- type: `Method`
+
+### status Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Ubus CLI Example
+
+```
+ubus call wifi status {}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "wifi", "status", {}] }
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type  | Required     |
+| -------- | ----- | ------------ |
+| `radios` | array | **Required** |
+
+#### radios
+
+`radios`
+
+- is **required**
+- type: `object[]`
+
+##### radios Type
+
+Array type: `object[]`
+
+All items must be of the type: `object` with following properties:
+
+| Property       | Type    | Required     |
+| -------------- | ------- | ------------ |
+| `accesspoints` | array   | **Required** |
+| `backhauls`    | array   | **Required** |
+| `band`         | string  | **Required** |
+| `bandwidth`    | integer | **Required** |
+| `country`      | string  | **Required** |
+| `isup`         | boolean | **Required** |
+| `name`         | string  | **Required** |
+| `noise`        | integer | **Required** |
+| `rate`         | integer | **Required** |
+| `standard`     | string  | **Required** |
+
+#### accesspoints
+
+`accesspoints`
+
+- is **required**
+- type: reference
+
+##### accesspoints Type
+
+Array type: reference
+
+All items must be of the type: `object` with following properties:
+
+| Property | Type   | Required     |
+| -------- | ------ | ------------ |
+| `bssid`  |        | **Required** |
+| `ifname` | string | **Required** |
+| `ssid`   | string | **Required** |
+| `status` | string | **Required** |
+
+#### bssid
+
+`bssid`
+
+- is **required**
+- type: complex
+
+##### bssid Type
+
+Unknown type ``.
+
+```json
+{
+  "bssid": {
+    "$ref": "#/definitions/macaddr_t"
+  },
+  "simpletype": "complex"
+}
+```
+
+#### ifname
+
+`ifname`
+
+- is **required**
+- type: `string`
+
+##### ifname Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+#### ssid
+
+`ssid`
+
+- is **required**
+- type: `string`
+
+##### ssid Type
+
+`string`
+
+- maximum length: 32 characters
+
+#### status
+
+`status`
+
+- is **required**
+- type: `string`
+
+##### status Type
+
+`string`
+
+#### backhauls
+
+`backhauls`
+
+- is **required**
+- type: reference
+
+##### backhauls Type
+
+Array type: reference
+
+All items must be of the type: `object` with following properties:
+
+| Property | Type   | Required     |
+| -------- | ------ | ------------ |
+| `bssid`  |        | **Required** |
+| `ifname` | string | **Required** |
+| `ssid`   | string | **Required** |
+| `status` | string | **Required** |
+
+#### bssid
+
+`bssid`
+
+- is **required**
+- type: complex
+
+##### bssid Type
+
+Unknown type ``.
+
+```json
+{
+  "bssid": {
+    "$ref": "#/definitions/macaddr_t"
+  },
+  "simpletype": "complex"
+}
+```
+
+#### ifname
+
+`ifname`
+
+- is **required**
+- type: `string`
+
+##### ifname Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+#### ssid
+
+`ssid`
+
+- is **required**
+- type: `string`
+
+##### ssid Type
+
+`string`
+
+- maximum length: 32 characters
+
+#### status
+
+`status`
+
+- is **required**
+- type: `string`
+
+##### status Type
+
+`string`
+
+#### band
+
+##### WiFi Band
+
+`band`
+
+- is **required**
+- type: reference
+
+##### band Type
+
+`string`
+
+The value of this property **must** be equal to one of the [known values below](#status-known-values).
+
+##### band Known Values
+
+| Value  |
+| ------ |
+| 2.4GHz |
+| 5GHz   |
+
+#### bandwidth
+
+##### Bandwidth
+
+`bandwidth`
+
+- is **required**
+- type: reference
+
+##### bandwidth Type
+
+`integer`
+
+The value of this property **must** be equal to one of the [known values below](#status-known-values).
+
+##### bandwidth Known Values
+
+| Value |
+| ----- |
+| 20    |
+| 40    |
+| 80    |
+| 160   |
+
+#### country
+
+`country`
+
+- is **required**
+- type: `string`
+
+##### country Type
+
+`string`
+
+- minimum length: 2 characters
+- maximum length: 3 characters
+
+#### isup
+
+`isup`
+
+- is **required**
+- type: `boolean`
+
+##### isup Type
+
+`boolean`
+
+#### name
+
+##### Interface
+
+`name`
+
+- is **required**
+- type: reference
+
+##### name Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+#### noise
+
+##### Noise
+
+`noise`
+
+- is **required**
+- type: reference
+
+##### noise Type
+
+`integer`
+
+- minimum value: `-127`
+- maximum value: `0`
+
+#### rate
+
+`rate`
+
+- is **required**
+- type: `integer`
+
+##### rate Type
+
+`integer`
+
+- minimum value: `0`
+
+#### standard
+
+`standard`
+
+- is **required**
+- type: `string`
+
+##### standard Type
+
+`string`
+
+### Output Example
+
+```json
+{
+  "radios": [
+    {
+      "name": "mi",
+      "isup": true,
+      "standard": "incididunt sit",
+      "country": "el",
+      "band": "2.4GHz",
+      "bandwidth": 20,
+      "noise": -65,
+      "rate": 83302859,
+      "accesspoints": [
+        {
+          "ifname": "mini",
+          "status": "labore dolore adipisicing",
+          "ssid": "cillum deseru",
+          "bssid": { "bssid": "68:63:aa:B1:Aa:71" }
+        }
+      ],
+      "backhauls": [
+        {
+          "ifname": "cupidatat",
+          "status": "anim consectetur",
+          "ssid": "esse con",
+          "bssid": { "bssid": "EB:B6:f3:ea:A9:D5" }
+        },
+        {
+          "ifname": "nisi",
+          "status": "fugiat dolore occaec",
+          "ssid": "dolore commodo elit con",
+          "bssid": { "bssid": "bA:Eb:b3:AC:49:ca" }
+        },
+        { "ifname": "Ut", "status": "consectetur et labore", "ssid": "cup", "bssid": { "bssid": "56:De:C4:e5:2F:BA" } }
+      ],
+      "channel": 32553447,
+      "channels": false
+    },
+    {
+      "name": "in elit ",
+      "isup": true,
+      "standard": "consequat dolore amet reprehenderit",
+      "country": "in ",
+      "band": "2.4GHz",
+      "bandwidth": 160,
+      "noise": -60,
+      "rate": 48607504,
+      "accesspoints": [
+        { "ifname": "aute sint e", "status": "sunt sint", "ssid": "enim", "bssid": { "bssid": "16:Ed:FA:78:5D:41" } },
+        { "ifname": "la", "status": "sunt ", "ssid": "proident ex", "bssid": { "bssid": "5b:F4:F2:99:98:EA" } }
+      ],
+      "backhauls": [
+        {
+          "ifname": "aute ipsum",
+          "status": "magna officia dolor",
+          "ssid": "sunt",
+          "bssid": { "bssid": "aF:5C:6E:cB:24:7F" }
+        },
+        {
+          "ifname": "Excepteur sed",
+          "status": "ullamco Ut",
+          "ssid": "aliqua exercitation Duis",
+          "bssid": { "bssid": "fC:4D:fa:9A:CE:b8" }
+        }
+      ],
+      "channel": 89047725,
+      "channels": 87342077
+    },
+    {
+      "name": "Excepteur",
+      "isup": true,
+      "standard": "tempor",
+      "country": "Ut ",
+      "band": "5GHz",
+      "bandwidth": 40,
+      "noise": -98,
+      "rate": 38327719,
+      "accesspoints": [
+        {
+          "ifname": "e",
+          "status": "dolore ullamco Ut aliquip in",
+          "ssid": "Lorem",
+          "bssid": { "bssid": "bf:0c:d2:fc:c7:d6" }
+        },
+        {
+          "ifname": "dolor quis",
+          "status": "eiusmod voluptate Excepteur ullamco dolore",
+          "ssid": "aliqua no",
+          "bssid": { "bssid": "5f:70:b8:36:2d:EC" }
+        },
+        {
+          "ifname": "sit in",
+          "status": "mollit",
+          "ssid": "eiusmod ullamco minim",
+          "bssid": { "bssid": "BC:f1:d6:49:5e:0F" }
+        },
+        {
+          "ifname": "magna i",
+          "status": "ut fugiat laboris anim aliquip",
+          "ssid": "magna Duis",
+          "bssid": { "bssid": "d1:6E:A6:68:7B:Ce" }
+        },
+        {
+          "ifname": "dolore ulla",
+          "status": "occaecat",
+          "ssid": "occaecat",
+          "bssid": { "bssid": "D8:0c:49:05:49:a3" }
+        }
+      ],
+      "backhauls": [
+        {
+          "ifname": "sed voluptate",
+          "status": "labore commodo",
+          "ssid": "proident D",
+          "bssid": { "bssid": "2A:CD:11:B9:C7:08" }
+        }
+      ],
+      "channel": 4510991,
+      "channels": "id eu"
+    }
+  ]
+}
+```
diff --git a/md/wifi.radio.md b/md/wifi.radio.md
new file mode 100644
index 0000000..c14d6af
--- /dev/null
+++ b/md/wifi.radio.md
@@ -0,0 +1,1136 @@
+# wifi.radio.&lt;name&gt; Schema
+
+```
+https://www.iopsys.eu/wifi.radio.json
+```
+
+WiFi Radio Object
+
+| Custom Properties | Additional Properties |
+| ----------------- | --------------------- |
+| Forbidden         | Forbidden             |
+
+# wifi.radio.&lt;name&gt;
+
+| List of Methods             |
+| --------------------------- |
+| [autochannel](#autochannel) | Method | wifi.radio.&lt;name&gt; (this schema) |
+| [get](#get)                 | Method | wifi.radio.&lt;name&gt; (this schema) |
+| [scan](#scan)               | Method | wifi.radio.&lt;name&gt; (this schema) |
+| [scanresults](#scanresults) | Method | wifi.radio.&lt;name&gt; (this schema) |
+| [stats](#stats)             | Method | wifi.radio.&lt;name&gt; (this schema) |
+| [status](#status)           | Method | wifi.radio.&lt;name&gt; (this schema) |
+
+## autochannel
+
+`autochannel`
+
+- type: `Method`
+
+### autochannel Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property   | Type    | Required |
+| ---------- | ------- | -------- |
+| `algo`     | integer | Optional |
+| `interval` | integer | Optional |
+| `scans`    | integer | Optional |
+
+#### algo
+
+`algo`
+
+- is optional
+- type: `integer`
+
+##### algo Type
+
+`integer`
+
+#### interval
+
+`interval`
+
+- is optional
+- type: `integer`
+
+##### interval Type
+
+`integer`
+
+#### scans
+
+`scans`
+
+- is optional
+- type: `integer`
+
+##### scans Type
+
+`integer`
+
+### Ubus CLI Example
+
+```
+ubus call wifi.radio.<name> autochannel {"interval":-94429752,"algo":-10162573,"scans":70077630}
+```
+
+### JSONRPC Example
+
+```json
+{
+  "jsonrpc": "2.0",
+  "id": 0,
+  "method": "call",
+  "params": [
+    "<SID>",
+    "wifi.radio.<name>",
+    "autochannel",
+    { "interval": -94429752, "algo": -10162573, "scans": 70077630 }
+  ]
+}
+```
+
+#### output
+
+##### wifi.radio.autochannel
+
+Auto channel selection
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property      | Type    | Required     |
+| ------------- | ------- | ------------ |
+| `code`        | integer | **Required** |
+| `new_channel` | oneOf   | **Required** |
+| `status`      | string  | **Required** |
+
+#### code
+
+`code`
+
+- is **required**
+- type: `integer`
+
+##### code Type
+
+`integer`
+
+#### new_channel
+
+`new_channel`
+
+- is **required**
+- type: complex
+
+##### new_channel Type
+
+**One** of the following _conditions_ need to be fulfilled.
+
+#### Condition 1
+
+`integer`
+
+- minimum value: `1`
+- maximum value: `14`
+
+#### Condition 2
+
+`integer`
+
+- minimum value: `32`
+- maximum value: `200`
+
+#### status
+
+`status`
+
+- is **required**
+- type: `string`
+
+##### status Type
+
+`string`
+
+### Output Example
+
+```json
+{ "code": -51114728, "new_channel": 122, "status": "Excepteur aute" }
+```
+
+## get
+
+`get`
+
+- type: `Method`
+
+### get Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `param`  | string | Optional |
+
+#### param
+
+`param`
+
+- is optional
+- type: `string`
+
+##### param Type
+
+`string`
+
+### Ubus CLI Example
+
+```
+ubus call wifi.radio.<name> get {"param":"magna"}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "wifi.radio.<name>", "get", { "param": "magna" }] }
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type    | Required |
+| -------- | ------- | -------- |
+| `status` | integer | Optional |
+| `values` | integer | Optional |
+
+#### status
+
+`status`
+
+- is optional
+- type: `integer`
+
+##### status Type
+
+`integer`
+
+#### values
+
+`values`
+
+- is optional
+- type: `integer`
+
+##### values Type
+
+`integer`
+
+### Output Example
+
+```json
+{ "status": 20867505, "values": 37737241 }
+```
+
+## scan
+
+`scan`
+
+- type: `Method`
+
+### scan Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property  | Type   | Required |
+| --------- | ------ | -------- |
+| `bssid`   | string | Optional |
+| `channel` | oneOf  | Optional |
+| `ssid`    | string | Optional |
+
+#### bssid
+
+##### MAC Address
+
+`bssid`
+
+- is optional
+- type: reference
+
+##### bssid Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+#### channel
+
+`channel`
+
+- is optional
+- type: complex
+
+##### channel Type
+
+**One** of the following _conditions_ need to be fulfilled.
+
+#### Condition 1
+
+`integer`
+
+- minimum value: `1`
+- maximum value: `14`
+
+#### Condition 2
+
+`integer`
+
+- minimum value: `32`
+- maximum value: `200`
+
+#### ssid
+
+##### SSID
+
+`ssid`
+
+- is optional
+- type: reference
+
+##### ssid Type
+
+`string`
+
+- maximum length: 32 characters
+
+### Ubus CLI Example
+
+```
+ubus call wifi.radio.<name> scan {"ssid":"consequat ullamco","bssid":"C4:4c:75:b2:2f:a4","channel":161}
+```
+
+### JSONRPC Example
+
+```json
+{
+  "jsonrpc": "2.0",
+  "id": 0,
+  "method": "call",
+  "params": [
+    "<SID>",
+    "wifi.radio.<name>",
+    "scan",
+    { "ssid": "consequat ullamco", "bssid": "C4:4c:75:b2:2f:a4", "channel": 161 }
+  ]
+}
+```
+
+#### output
+
+Trigger a scan
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Output Example
+
+```json
+{}
+```
+
+## scanresults
+
+`scanresults`
+
+- type: `Method`
+
+### scanresults Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Ubus CLI Example
+
+```
+ubus call wifi.radio.<name> scanresults {}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "wifi.radio.<name>", "scanresults", {}] }
+```
+
+#### output
+
+##### wifi.radio.iface
+
+Show scan results
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property       | Type  | Required     |
+| -------------- | ----- | ------------ |
+| `accesspoints` | array | **Required** |
+
+#### accesspoints
+
+`accesspoints`
+
+- is **required**
+- type: `object[]`
+
+##### accesspoints Type
+
+Array type: `object[]`
+
+All items must be of the type: `object` with following properties:
+
+| Property           | Type    | Required |
+| ------------------ | ------- | -------- |
+| `band`             | string  | Optional |
+| `bssid`            | string  | Optional |
+| `encryption`       | string  | Optional |
+| `load_available`   | integer | Optional |
+| `load_stas`        | integer | Optional |
+| `load_utilization` | integer | Optional |
+| `rssi`             | integer | Optional |
+| `ssid`             | string  | Optional |
+
+#### band
+
+##### WiFi Band
+
+`band`
+
+- is optional
+- type: reference
+
+##### band Type
+
+`string`
+
+The value of this property **must** be equal to one of the [known values below](#scanresults-known-values).
+
+##### band Known Values
+
+| Value  |
+| ------ |
+| 2.4GHz |
+| 5GHz   |
+
+#### bssid
+
+##### MAC Address
+
+`bssid`
+
+- is optional
+- type: reference
+
+##### bssid Type
+
+`string`
+
+- minimum length: 17 characters
+- maximum length: 17 characters All instances must conform to this regular expression (test examples
+  [here](<https://regexr.com/?expression=%5E(%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%3A)%7B5%7D%5B0-9a-fA-F%5D%5B0-9a-fA-F%5D%24>)):
+
+```regex
+^([0-9a-fA-F][0-9a-fA-F]:){5}[0-9a-fA-F][0-9a-fA-F]$
+```
+
+#### encryption
+
+`encryption`
+
+- is optional
+- type: `string`
+
+##### encryption Type
+
+`string`
+
+#### load_available
+
+`load_available`
+
+- is optional
+- type: `integer`
+
+##### load_available Type
+
+`integer`
+
+- minimum value: `0`
+
+#### load_stas
+
+`load_stas`
+
+- is optional
+- type: `integer`
+
+##### load_stas Type
+
+`integer`
+
+- minimum value: `0`
+
+#### load_utilization
+
+`load_utilization`
+
+- is optional
+- type: `integer`
+
+##### load_utilization Type
+
+`integer`
+
+- minimum value: `0`
+- maximum value: `100`
+
+#### rssi
+
+##### RSSI
+
+`rssi`
+
+- is optional
+- type: reference
+
+##### rssi Type
+
+`integer`
+
+- minimum value: `-128`
+- maximum value: `0`
+
+#### ssid
+
+##### SSID
+
+`ssid`
+
+- is optional
+- type: reference
+
+##### ssid Type
+
+`string`
+
+- maximum length: 32 characters
+
+### Output Example
+
+```json
+{
+  "accesspoints": [
+    {
+      "ssid": "voluptate",
+      "bssid": "8e:4B:FA:b5:b2:3b",
+      "encryption": "occaecat ipsum adipisicing",
+      "band": "2.4GHz",
+      "rssi": -49,
+      "load_stas": 65903225,
+      "load_utilization": 95,
+      "load_available": 81778543
+    },
+    {
+      "ssid": "u",
+      "bssid": "3F:db:6D:DA:F5:E4",
+      "encryption": "et consectetur qui",
+      "band": "5GHz",
+      "rssi": -112,
+      "load_stas": 41230767,
+      "load_utilization": 69,
+      "load_available": 33400870
+    },
+    {
+      "ssid": "in ad",
+      "bssid": "A0:9b:3F:7F:55:e2",
+      "encryption": "ad exercitation",
+      "band": "5GHz",
+      "rssi": -9,
+      "load_stas": 92027414,
+      "load_utilization": 91,
+      "load_available": 54137283
+    },
+    {
+      "ssid": "ea nostrud est adipisicing",
+      "bssid": "4A:7C:a7:f9:8d:13",
+      "encryption": "do mollit non ut elit",
+      "band": "2.4GHz",
+      "rssi": -113,
+      "load_stas": 6957610,
+      "load_utilization": 30,
+      "load_available": 14471763
+    }
+  ]
+}
+```
+
+## stats
+
+`stats`
+
+- type: `Method`
+
+### stats Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Ubus CLI Example
+
+```
+ubus call wifi.radio.<name> stats {}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "wifi.radio.<name>", "stats", {}] }
+```
+
+#### output
+
+##### wifi.radio.iface
+
+Radio statistics
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property               | Type    | Required     |
+| ---------------------- | ------- | ------------ |
+| `rx_bytes`             | integer | **Required** |
+| `rx_dropped_packets`   | integer | **Required** |
+| `rx_error_packets`     | integer | **Required** |
+| `rx_fcs_error_packets` | integer | **Required** |
+| `rx_packets`           | integer | **Required** |
+| `tx_bytes`             | integer | **Required** |
+| `tx_dropped_packets`   | integer | **Required** |
+| `tx_error_packets`     | integer | **Required** |
+| `tx_packets`           | integer | **Required** |
+
+#### rx_bytes
+
+`rx_bytes`
+
+- is **required**
+- type: reference
+
+##### rx_bytes Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_dropped_packets
+
+`rx_dropped_packets`
+
+- is **required**
+- type: reference
+
+##### rx_dropped_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_error_packets
+
+`rx_error_packets`
+
+- is **required**
+- type: reference
+
+##### rx_error_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_fcs_error_packets
+
+`rx_fcs_error_packets`
+
+- is **required**
+- type: reference
+
+##### rx_fcs_error_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rx_packets
+
+`rx_packets`
+
+- is **required**
+- type: reference
+
+##### rx_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_bytes
+
+`tx_bytes`
+
+- is **required**
+- type: reference
+
+##### tx_bytes Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_dropped_packets
+
+`tx_dropped_packets`
+
+- is **required**
+- type: reference
+
+##### tx_dropped_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_error_packets
+
+`tx_error_packets`
+
+- is **required**
+- type: reference
+
+##### tx_error_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+#### tx_packets
+
+`tx_packets`
+
+- is **required**
+- type: reference
+
+##### tx_packets Type
+
+`integer`
+
+- minimum value: `0`
+
+### Output Example
+
+```json
+{
+  "tx_bytes": 4456811,
+  "tx_packets": 61670182,
+  "tx_error_packets": 47310604,
+  "tx_dropped_packets": 95443975,
+  "rx_bytes": 97114413,
+  "rx_packets": 35506291,
+  "rx_error_packets": 33734857,
+  "rx_dropped_packets": 40012093,
+  "rx_fcs_error_packets": 73483705
+}
+```
+
+## status
+
+`status`
+
+- type: `Method`
+
+### status Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Ubus CLI Example
+
+```
+ubus call wifi.radio.<name> status {}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "wifi.radio.<name>", "status", {}] }
+```
+
+#### output
+
+##### wifi.radio.iface
+
+Radio status
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property            | Type    | Required     | Default |
+| ------------------- | ------- | ------------ | ------- |
+| `band`              | string  | **Required** |         |
+| `beacon_int`        | integer | **Required** | `100`   |
+| `dtim_period`       | integer | **Required** | `1`     |
+| `frag_threshold`    | integer | **Required** | `2346`  |
+| `isup`              | boolean | **Required** |         |
+| `long_retry_limit`  | integer | **Required** |         |
+| `noise`             | integer | **Required** |         |
+| `radio`             | string  | **Required** |         |
+| `rate`              | integer | **Required** |         |
+| `rts_threshold`     | integer | **Required** | `2347`  |
+| `short_retry_limit` | integer | **Required** |         |
+
+#### band
+
+##### WiFi Band
+
+`band`
+
+- is **required**
+- type: reference
+
+##### band Type
+
+`string`
+
+The value of this property **must** be equal to one of the [known values below](#status-known-values).
+
+##### band Known Values
+
+| Value  |
+| ------ |
+| 2.4GHz |
+| 5GHz   |
+
+#### beacon_int
+
+`beacon_int`
+
+- is **required**
+- type: `integer`
+- default: `100`
+
+##### beacon_int Type
+
+`integer`
+
+- minimum value: `1`
+- maximum value: `65535`
+
+#### dtim_period
+
+`dtim_period`
+
+- is **required**
+- type: `integer`
+- default: `1`
+
+##### dtim_period Type
+
+`integer`
+
+- minimum value: `1`
+- maximum value: `255`
+
+#### frag_threshold
+
+`frag_threshold`
+
+- is **required**
+- type: `integer`
+- default: `2346`
+
+##### frag_threshold Type
+
+`integer`
+
+- minimum value: `256`
+- maximum value: `65535`
+
+#### isup
+
+`isup`
+
+- is **required**
+- type: `boolean`
+
+##### isup Type
+
+`boolean`
+
+#### long_retry_limit
+
+`long_retry_limit`
+
+- is **required**
+- type: `integer`
+
+##### long_retry_limit Type
+
+`integer`
+
+- minimum value: `1`
+- maximum value: `255`
+
+#### noise
+
+##### Noise
+
+`noise`
+
+- is **required**
+- type: reference
+
+##### noise Type
+
+`integer`
+
+- minimum value: `-127`
+- maximum value: `0`
+
+#### radio
+
+##### Interface
+
+`radio`
+
+- is **required**
+- type: reference
+
+##### radio Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+#### rate
+
+`rate`
+
+- is **required**
+- type: `integer`
+
+##### rate Type
+
+`integer`
+
+- minimum value: `0`
+
+#### rts_threshold
+
+`rts_threshold`
+
+- is **required**
+- type: `integer`
+- default: `2347`
+
+##### rts_threshold Type
+
+`integer`
+
+- minimum value: `0`
+- maximum value: `65535`
+
+#### short_retry_limit
+
+`short_retry_limit`
+
+- is **required**
+- type: `integer`
+
+##### short_retry_limit Type
+
+`integer`
+
+- minimum value: `1`
+- maximum value: `255`
+
+### Output Example
+
+```json
+{
+  "radio": "repr",
+  "isup": false,
+  "band": "5GHz",
+  "noise": -69,
+  "rate": 55785181,
+  "beacon_int": 36869,
+  "dtim_period": 243,
+  "short_retry_limit": 165,
+  "long_retry_limit": 25,
+  "frag_threshold": 60605,
+  "rts_threshold": 14149,
+  "channel": true,
+  "bandwidth": "quis pari"
+}
+```
diff --git a/md/wifi.wps.md b/md/wifi.wps.md
new file mode 100644
index 0000000..cb3b76e
--- /dev/null
+++ b/md/wifi.wps.md
@@ -0,0 +1,707 @@
+# wifi.wps Schema
+
+```
+https://www.iopsys.eu/wifi.wps
+```
+
+| Custom Properties | Additional Properties |
+| ----------------- | --------------------- |
+| Forbidden         | Forbidden             |
+
+# wifi.wps
+
+| List of Methods               |
+| ----------------------------- |
+| [generate_pin](#generate_pin) | Method | wifi.wps (this schema) |
+| [setpin](#setpin)             | Method | wifi.wps (this schema) |
+| [showpin](#showpin)           | Method | wifi.wps (this schema) |
+| [start](#start)               | Method | wifi.wps (this schema) |
+| [status](#status)             | Method | wifi.wps (this schema) |
+| [stop](#stop)                 | Method | wifi.wps (this schema) |
+| [validate_pin](#validate_pin) | Method | wifi.wps (this schema) |
+
+## generate_pin
+
+`generate_pin`
+
+- type: `Method`
+
+### generate_pin Type
+
+`object` with following properties:
+
+| Property | Type   | Required     |
+| -------- | ------ | ------------ |
+| `input`  | object | Optional     |
+| `output` | object | **Required** |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Ubus CLI Example
+
+```
+ubus call wifi.wps generate_pin {}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "wifi.wps", "generate_pin", {}] }
+```
+
+#### output
+
+`output`
+
+- is **required**
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type   | Required     |
+| -------- | ------ | ------------ |
+| `pin`    | string | **Required** |
+
+#### pin
+
+`pin`
+
+- is **required**
+- type: reference
+
+##### pin Type
+
+`string`
+
+- minimum length: 8 characters
+- maximum length: 8 characters All instances must conform to this regular expression (test examples
+  [here](https://regexr.com/?expression=%5E%5B0-9%5D*%24)):
+
+```regex
+^[0-9]*$
+```
+
+### Output Example
+
+```json
+{ "pin": "66225586" }
+```
+
+## setpin
+
+`setpin`
+
+- type: `Method`
+
+### setpin Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type   | Required     |
+| -------- | ------ | ------------ |
+| `pin`    | string | **Required** |
+| `vif`    | string | Optional     |
+
+#### pin
+
+`pin`
+
+- is **required**
+- type: reference
+
+##### pin Type
+
+`string`
+
+- minimum length: 8 characters
+- maximum length: 8 characters All instances must conform to this regular expression (test examples
+  [here](https://regexr.com/?expression=%5E%5B0-9%5D*%24)):
+
+```regex
+^[0-9]*$
+```
+
+#### vif
+
+##### Interface
+
+`vif`
+
+- is optional
+- type: reference
+
+##### vif Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+### Ubus CLI Example
+
+```
+ubus call wifi.wps setpin {"pin":"10118562","vif":"en"}
+```
+
+### JSONRPC Example
+
+```json
+{
+  "jsonrpc": "2.0",
+  "id": 0,
+  "method": "call",
+  "params": ["<SID>", "wifi.wps", "setpin", { "pin": "10118562", "vif": "en" }]
+}
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Output Example
+
+```json
+{}
+```
+
+## showpin
+
+`showpin`
+
+- type: `Method`
+
+### showpin Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `vif`    | string | Optional |
+
+#### vif
+
+##### Interface
+
+`vif`
+
+- is optional
+- type: reference
+
+##### vif Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+### Ubus CLI Example
+
+```
+ubus call wifi.wps showpin {"vif":"labore"}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "wifi.wps", "showpin", { "vif": "labore" }] }
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type   | Required     |
+| -------- | ------ | ------------ |
+| `pin`    | string | **Required** |
+
+#### pin
+
+`pin`
+
+- is **required**
+- type: reference
+
+##### pin Type
+
+`string`
+
+- minimum length: 8 characters
+- maximum length: 8 characters All instances must conform to this regular expression (test examples
+  [here](https://regexr.com/?expression=%5E%5B0-9%5D*%24)):
+
+```regex
+^[0-9]*$
+```
+
+### Output Example
+
+```json
+{ "pin": "67012142" }
+```
+
+## start
+
+`start`
+
+- type: `Method`
+
+### start Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `mode`   | string | Optional |
+| `pin`    | string | Optional |
+| `role`   | string | Optional |
+| `vif`    | string | Optional |
+
+#### mode
+
+`mode`
+
+- is optional
+- type: `string`
+
+##### mode Type
+
+`string`
+
+#### pin
+
+`pin`
+
+- is optional
+- type: reference
+
+##### pin Type
+
+`string`
+
+- minimum length: 8 characters
+- maximum length: 8 characters All instances must conform to this regular expression (test examples
+  [here](https://regexr.com/?expression=%5E%5B0-9%5D*%24)):
+
+```regex
+^[0-9]*$
+```
+
+#### role
+
+`role`
+
+- is optional
+- type: `enum`
+
+##### role Type
+
+`string`
+
+The value of this property **must** be equal to one of the [known values below](#start-known-values).
+
+##### role Known Values
+
+| Value     |
+| --------- |
+| registrar |
+| enrollee  |
+
+#### vif
+
+##### Interface
+
+`vif`
+
+- is optional
+- type: reference
+
+##### vif Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+### Ubus CLI Example
+
+```
+ubus call wifi.wps start {"vif":"ex","mode":"occaecat consequat reprehenderit","role":"enrollee","pin":"45603292"}
+```
+
+### JSONRPC Example
+
+```json
+{
+  "jsonrpc": "2.0",
+  "id": 0,
+  "method": "call",
+  "params": [
+    "<SID>",
+    "wifi.wps",
+    "start",
+    { "vif": "ex", "mode": "occaecat consequat reprehenderit", "role": "enrollee", "pin": "45603292" }
+  ]
+}
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Output Example
+
+```json
+{}
+```
+
+## status
+
+`status`
+
+- type: `Method`
+
+### status Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `vif`    | string | Optional |
+
+#### vif
+
+##### Interface
+
+`vif`
+
+- is optional
+- type: reference
+
+##### vif Type
+
+`string`
+
+- minimum length: 1 characters
+- maximum length: 16 characters
+
+### Ubus CLI Example
+
+```
+ubus call wifi.wps status {"vif":"deserunt"}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "wifi.wps", "status", { "vif": "deserunt" }] }
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type    | Required     |
+| -------- | ------- | ------------ |
+| `code`   | integer | **Required** |
+| `status` | string  | **Required** |
+
+#### code
+
+`code`
+
+- is **required**
+- type: `integer`
+
+##### code Type
+
+`integer`
+
+- minimum value: `0`
+
+#### status
+
+`status`
+
+- is **required**
+- type: `string`
+
+##### status Type
+
+`string`
+
+### Output Example
+
+```json
+{ "code": 51171879, "status": "ipsum laborum reprehenderit" }
+```
+
+## stop
+
+`stop`
+
+- type: `Method`
+
+### stop Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Ubus CLI Example
+
+```
+ubus call wifi.wps stop {}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "wifi.wps", "stop", {}] }
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type | Required |
+| -------- | ---- | -------- |
+| None     | None | None     |
+
+### Output Example
+
+```json
+{}
+```
+
+## validate_pin
+
+`validate_pin`
+
+- type: `Method`
+
+### validate_pin Type
+
+`object` with following properties:
+
+| Property | Type   | Required |
+| -------- | ------ | -------- |
+| `input`  | object | Optional |
+| `output` | object | Optional |
+
+#### input
+
+`input`
+
+- is optional
+- type: `object`
+
+##### input Type
+
+`object` with following properties:
+
+| Property | Type   | Required     |
+| -------- | ------ | ------------ |
+| `pin`    | string | **Required** |
+
+#### pin
+
+`pin`
+
+- is **required**
+- type: reference
+
+##### pin Type
+
+`string`
+
+- minimum length: 8 characters
+- maximum length: 8 characters All instances must conform to this regular expression (test examples
+  [here](https://regexr.com/?expression=%5E%5B0-9%5D*%24)):
+
+```regex
+^[0-9]*$
+```
+
+### Ubus CLI Example
+
+```
+ubus call wifi.wps validate_pin {"pin":"20662363"}
+```
+
+### JSONRPC Example
+
+```json
+{ "jsonrpc": "2.0", "id": 0, "method": "call", "params": ["<SID>", "wifi.wps", "validate_pin", { "pin": "20662363" }] }
+```
+
+#### output
+
+`output`
+
+- is optional
+- type: `object`
+
+##### output Type
+
+`object` with following properties:
+
+| Property | Type    | Required     |
+| -------- | ------- | ------------ |
+| `valid`  | boolean | **Required** |
+
+#### valid
+
+`valid`
+
+- is **required**
+- type: `boolean`
+
+##### valid Type
+
+`boolean`
+
+### Output Example
+
+```json
+{ "valid": true }
+```
-- 
GitLab