# LitmusEdge 4.0.x API Documentation/System/Network - LE, LEM, LUNS API Docs

## Update Modem Configuration

**PUT** `{{edgeUrl}}/dm/modem/{imei}`

# Update Modem Configuration

Sets the APN for a cellular modem identified by its IMEI.

## Endpoint

```http
PUT {{edgeUrl}}/dm/modem/{imei}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Path parameters

| Location | Name      | Required | Description                                  |
|----------|-----------|----------|----------------------------------------------|
| Path     | `{imei}`  | Yes      | Modem IMEI (from `List Available Modems`).   |

## Request body

```json
{ "apn": "broadband" }
```

## Response

`200 OK` on success.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "apn": "broadband"
}
```

---

## Set System Clock

**PUT** `{{edgeUrl}}/dm/host/clock`

# Set System Clock

Sets the device's wall-clock time manually. Use only on devices without NTP access; on NTP-synced devices, the next NTP poll overwrites the manual setting.

## Endpoint

```http
PUT {{edgeUrl}}/dm/host/clock
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{ "date": "1970-01-01", "time": "23:59:59" }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "date": "1970-01-01",
    "time": "23:59:59"
}
```

---

## Set Country for WiFi Compliance

**PUT** `{{edgeUrl}}/dm/host/country`

# Set Country for WiFi Compliance

Sets the device's regulatory country. Required for correct WiFi channel selection.

## Endpoint

```http
PUT {{edgeUrl}}/dm/host/country
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{ "country": "US" }
```

| Field      | Type   | Required | Description                                              |
|------------|--------|----------|----------------------------------------------------------|
| `country`  | string | Yes      | Two-letter ISO 3166-1 country code.                       |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "country": "US"
}
```

---

## Set Friendly Host Name

**PUT** `{{edgeUrl}}/dm/host/description`

# Set Friendly Host Name

Sets the device's free-form description (visible in the LE UI header, status pages, and inventory exports). Distinct from the kernel hostname.

## Endpoint

```http
PUT {{edgeUrl}}/dm/host/description
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{ "desc": "CA;ON;Toronto;1 Yonge Street" }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "desc": "CA;ON;Toronto;1 Yonge Street"
}
```

---

## Set DNS Resolvers

**PUT** `{{edgeUrl}}/dm/host/dns`

# Set DNS Resolvers

Configures the DNS resolvers the device uses. Replaces the current list completely.

## Endpoint

```http
PUT {{edgeUrl}}/dm/host/dns
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{
  "dns": [
    "8.8.8.8",
    "8.8.4.4",
    "2001:4860:4860::8888",
    "2001:4860:4860::8844"
  ]
}
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "dns": [
        "8.8.8.8",
        "8.8.4.4",
        "2001:4860:4860::8888",
        "2001:4860:4860::8844"
    ]
}
```

---

## Set Docker Config

**PUT** `{{edgeUrl}}/dm/host/docker/config`

# Set Docker Config

Sets the Docker bridge IP/subnet used by edge applications. Changing the BIP **restarts the Docker daemon** -- every container restarts.

## Endpoint

```http
PUT {{edgeUrl}}/dm/host/docker/config
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{ "bip": "192.168.5.1/24" }
```

| Field   | Type   | Required | Description                                              |
|---------|--------|----------|----------------------------------------------------------|
| `bip`   | string | Yes      | Bridge IP with CIDR (e.g. `192.168.5.1/24`).             |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "bip": "<Default Docker bridge network> 192.168.5.1/24"
}
```

---

## Set User-Editable Part of /etc/hosts

**PUT** `{{edgeUrl}}/dm/host/etcHosts`

# Set User-Editable Part of /etc/hosts

Replaces the **user-editable region** of `/etc/hosts` with the provided entries. Built-in system entries are preserved.

## Endpoint

```http
PUT {{edgeUrl}}/dm/host/etcHosts
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{
  "etcHosts": [
    { "address": "192.168.1.254", "names": "edge01.example.com edge01" }
  ]
}
```

| Field                  | Type     | Description                                                       |
|------------------------|----------|-------------------------------------------------------------------|
| `etcHosts[].address`   | string   | IP address.                                                       |
| `etcHosts[].names`     | string   | Space-separated hostnames.                                        |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "etcHosts": [
        {
            "address": "192.168.1.254",
            "names": "edge01.example.com edge01"
        },
        {
            "address": "192.168.1.254",
            "names": "edge01.example.com edge01"
        },
        {
            "address": "192.168.1.254",
            "names": "edge01.example.com edge01"
        }
    ]
}
```

---

## Set NTP Servers

**PUT** `{{edgeUrl}}/dm/host/ntp`

# Set NTP Servers

Configures the NTP servers the device synchronizes against. Replaces the current list completely.

## Endpoint

```http
PUT {{edgeUrl}}/dm/host/ntp
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{
  "ntp": [
    "0.pool.ntp.org",
    "1.pool.ntp.org",
    "2.pool.ntp.org",
    "3.pool.ntp.org"
  ]
}
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "ntp": [
        "0.pool.ntp.org",
        "1.pool.ntp.org",
        "2.pool.ntp.org",
        "3.pool.ntp.org"
    ]
}
```

---

## Set Timezone

**PUT** `{{edgeUrl}}/dm/host/timezone`

# Set Timezone

Sets the device's IANA timezone. Use `Network > List Available Timezones` to enumerate legal values.

## Endpoint

```http
PUT {{edgeUrl}}/dm/host/timezone
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{ "timezone": "America/Toronto" }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "timezone": "America/Toronto"
}
```

---

## Update Network Interface

**PUT** `{{edgeUrl}}/dm/ifconfig/{name}`

# Update Network Interface

Re-configures one network interface (IPv4 + IPv6 + WAN flag). The change is applied immediately; existing connections on the interface may be reset.

## Endpoint

```http
PUT {{edgeUrl}}/dm/ifconfig/{name}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Path parameters

| Location | Name      | Required | Description                                  |
|----------|-----------|----------|----------------------------------------------|
| Path     | `{name}`  | Yes      | Interface name (e.g. `eth0`).                |

## Request body

```json
{
  "inet": { "address": "10.0.0.2/24", "gateway": "10.0.0.1", "type": "static" },
  "inet6": { "address": "2001:dead:beef::2/64", "gateway": "2001:dead:beef::1", "type": "static" },
  "wan": true
}
```

| Field            | Type    | Description                                                                                |
|------------------|---------|--------------------------------------------------------------------------------------------|
| `inet.type`      | string  | `dhcp` or `static`. When `static`, `address` and `gateway` are required.                   |
| `inet.address`   | string  | IPv4 with CIDR mask.                                                                       |
| `inet.gateway`   | string  | IPv4 gateway address.                                                                      |
| `inet6.*`        | mixed   | Same shape for IPv6. `type` can be `auto`, `static`, or empty.                             |
| `wan`            | boolean | `true` if this interface is the WAN uplink.                                                |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "inet": {
        "address": "10.0.0.2/24",
        "gateway": "10.0.0.1",
        "type": "static"
    },
    "inet6": {
        "address": "2001:dead:beef::2/64",
        "gateway": "2001:dead:beef::1",
        "type": "static"
    },
    "wan": true
}
```

---

## Update Interface/s

**PUT** `{{edgeUrl}}/dm/ifconfig/eth0`

# Update Interface/s

Alternate form of `Configure > Update Network Interface`. The Postman item targets `eth0` specifically and submits the **full interface record** -- including read-only fields like `idx` and `name` -- which are ignored on the server side.

## Endpoint

```http
PUT {{edgeUrl}}/dm/ifconfig/eth0
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{
  "idx": 3,
  "inet": { "address": "10.17.3.238/22", "gateway": "10.17.0.1", "type": "dhcp" },
  "inet6": { "address": "fe80::250:56ff:feb9:afd3/64", "type": "auto" },
  "name": "eth0",
  "wan": true
}
```

Use `Configure > Update Network Interface` for new code paths; the shorter shape there is the canonical form.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "idx": 3,
    "inet": {
        "address": "10.17.3.238/22",
        "gateway": "10.17.0.1",
        "type": "dhcp"
    },
    "inet6": {
        "address": "fe80::250:56ff:feb9:afd3/64",
        "type": "auto"
    },
    "name": "eth0",
    "wan": true
}
```

### Response

**Status**: 204 No Content

---

## Get Firewall Rules

**GET** `{{edgeUrl}}/dm/firewall`

# Get Firewall Rules

Lists every user-defined firewall rule on the device. Built-in system rules are not returned by this endpoint.

## Endpoint

```http
GET {{edgeUrl}}/dm/firewall
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`. Array of firewall-rule objects.

| Field        | Type   | Description                                                       |
|--------------|--------|-------------------------------------------------------------------|
| `id`         | string | Rule UUID.                                                        |
| `desc`       | string | Operator description.                                             |
| `iface`      | string | Interface the rule applies on (e.g. `eth0`).                       |
| `policy`     | string | `ALLOW` or `DENY`.                                                |
| `port`       | string | Port number or range (`2233` or `2200-2299`).                      |
| `protocol`   | string | `tcp` or `udp`.                                                   |

```json
[
  {
    "desc": "api firewall",
    "id": "057feac1-e8db-4337-ab5e-20ef1db07ab8",
    "iface": "eth0",
    "policy": "ALLOW",
    "port": "2233",
    "protocol": "tcp"
  }
]
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "desc": "api firewall",
        "id": "057feac1-e8db-4337-ab5e-20ef1db07ab8",
        "iface": "eth0",
        "policy": "ALLOW",
        "port": "2233",
        "protocol": "tcp"
    }
]
```

---

## Create Firewall Rule

**POST** `{{edgeUrl}}/dm/firewall`

# Create Firewall Rule

Adds a new firewall rule. Rules are evaluated in order; later rules take precedence over earlier matches.

## Endpoint

```http
POST {{edgeUrl}}/dm/firewall
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{
  "desc": "api firewall",
  "iface": "eth0",
  "policy": "ALLOW",
  "port": "2233",
  "protocol": "tcp"
}
```

| Field        | Type   | Required | Description                                                       |
|--------------|--------|----------|-------------------------------------------------------------------|
| `desc`       | string | Yes      | Free-form description shown in the UI.                            |
| `iface`      | string | Yes      | Interface the rule applies to.                                    |
| `policy`     | string | Yes      | `ALLOW` or `DENY`.                                                |
| `port`       | string | Yes      | Single port or a range (`2200-2299`).                              |
| `protocol`   | string | Yes      | `tcp` or `udp`.                                                   |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
  "desc": "api firewall",
  "iface": "eth0",
  "policy": "ALLOW",
  "port": "2233",
  "protocol": "tcp"
}
```

### Response

**Status**: 204 No Content

---

## Change Firewall Rule

**PUT** `{{edgeUrl}}/dm/firewall/{{firewall-rule-id}}`

# Change Firewall Rule

Updates an existing firewall rule by ID. Send the **full record**; omitted fields are reset.

## Endpoint

```http
PUT {{edgeUrl}}/dm/firewall/{{firewall-rule-id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{
  "id": "{{firewall-rule-id}}",
  "desc": "api modifies firewall",
  "iface": "eth0",
  "policy": "ALLOW",
  "port": "2233",
  "protocol": "tcp"
}
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
  "desc": "api modifies firewall",
  "id": "{{firewall-rule-id}}",
  "iface": "eth0",
  "policy": "ALLOW",
  "port": "2233",
  "protocol": "tcp"
}
```

### Response

**Status**: 204 No Content

---

## Delete Firewall Rule

**DELETE** `{{edgeUrl}}/dm/firewall/{{firewall-rule-id}}`

# Delete Firewall Rule

Removes a firewall rule by UUID.

## Endpoint

```http
DELETE {{edgeUrl}}/dm/firewall/{{firewall-rule-id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Path parameters

| Location | Name                       | Required | Description                                              |
|----------|----------------------------|----------|----------------------------------------------------------|
| Path     | `{{firewall-rule-id}}`     | Yes      | Rule UUID from `Get Firewall Rules`.                     |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 204 No Content

---

## Get Device Certificate

**GET** `{{edgeUrl}}/dm/deviceinfo/crt`

# Get Device Certificate

Returns metadata for the **device server certificate** -- the TLS cert the LE web UI and APIs are served behind. Use after `Add Device Certificate` to confirm the new cert took effect.

## Endpoint

```http
GET {{edgeUrl}}/dm/deviceinfo/crt
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`

```json
{
  "issuer": "litmus-edge-94c6911b9c77",
  "notAfter": "2029-02-22T21:39:00Z",
  "notBefore": "2022-02-21T21:39:00Z",
  "subject": "litmus-edge-94c6911b9c77"
}
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "issuer": "litmus-edge-94c6911b9c77",
    "notAfter": "2029-02-22T21:39:00Z",
    "notBefore": "2022-02-21T21:39:00Z",
    "subject": "litmus-edge-94c6911b9c77"
}
```

---

## Get Custom CA Certificates

**GET** `{{edgeUrl}}/dm/certstore`

# Get Custom CA Certificates

Returns the custom CA certificates installed in the device's trust store. Useful when the device needs to talk to enterprise services fronted by an internal CA.

## Endpoint

```http
GET {{edgeUrl}}/dm/certstore
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`. Array of CA certificate objects.

| Field                  | Type     | Description                                                       |
|------------------------|----------|-------------------------------------------------------------------|
| `id`                   | string   | Certificate fingerprint (SHA256 hex).                              |
| `issuer` / `subject`   | string   | DN strings.                                                       |
| `notBefore` / `notAfter` | string | Validity window.                                                  |
| `signatureAlgorithm`   | string   | Signature algorithm (e.g. `SHA256-RSA`).                          |
| `isValid` / `isWeak`   | boolean  | Validity flags.                                                   |
| `trustChain`           | object[] | Chain back to the trust anchor.                                   |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "id": "11:aa:bb:22:3c:4d:5e:6f:7a:8b:9c:1d:2e:3f:11:aa:bb:22:3c:4d:5e:6f:7a:8b:9c:1d:2e:3f:11:aa:bb:22",
        "isValid": true,
        "isWeak": false,
        "issuer": "ISRG Root X1",
        "notAfter": "2025-09-15T16:00:00Z",
        "notBefore": "2020-09-04T00:00:00Z",
        "signatureAlgorithm": "SHA256-RSA",
        "subject": "R3",
        "trustChain": [
            {
                "id": "",
                "issuer": "ISRG Root X1",
                "notAfter": "2025-09-15T16:00:00Z",
                "notBefore": "2020-09-04T00:00:00Z",
                "subject": "R3"
            }
        ]
    }
]
```

---

## Step 1 : Upload Custom CA Certificate

**POST** `{{edgeUrl}}/dm/certstore`

# Step 1: Upload Custom CA Certificate

First step in the two-step CA-cert upload flow. Declares the size of the certificate file to upload. The response includes an upload session ID used in step 2.

## Endpoint

```http
POST {{edgeUrl}}/dm/certstore
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{ "size": 1228 }
```

## Response

`200 OK` -- `application/json`

```json
{ "id": "0ba421eb-5055-11f0-b38b-005056b9b678" }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "size": 1228
}
```

### Response

**Status**: 200 OK

```json
{
    "id": "0ba421eb-5055-11f0-b38b-005056b9b678"
}
```

---

## Step 2: Upload Custom Certificate

**PUT** `{{edgeUrl}}/dm/certstore/{step1_upload_id}`

# Step 2: Upload Custom Certificate

Uploads the actual CA certificate file in the session created by step 1. The cert is added to the device's trust store on success.

## Endpoint

```http
PUT {{edgeUrl}}/dm/certstore/{step1_upload_id}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Path parameters

| Location | Name                  | Required | Description                                              |
|----------|-----------------------|----------|----------------------------------------------------------|
| Path     | `{step1_upload_id}`   | Yes      | Session UUID from step 1.                                |

## Request body (multipart form-data)

| Form key      | Type | Description                                  |
|---------------|------|----------------------------------------------|
| `uploadFile`  | file | CA certificate file (PEM or DER).            |

## Response

`200 OK` once the upload is complete and the cert has been added to the trust store.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

---

## Add Device Certificate

**POST** `{{edgeUrl}}/dm/deviceinfo/crt`

# Add Device Certificate

Installs a new **device server certificate** (the one the LE web UI is served behind). Replaces the self-signed certificate that ships by default. Requires the full chain plus the private key.

After installation, web/API connections are re-established with the new certificate; existing TLS sessions may need to reconnect.

## Endpoint

```http
POST {{edgeUrl}}/dm/deviceinfo/crt
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{
  "caChain": "Server certificate CA chain",
  "cert": "Server certificate",
  "certKey": "Server certificate private key"
}
```

| Field      | Type   | Required | Description                                                                |
|------------|--------|----------|----------------------------------------------------------------------------|
| `cert`     | string | Yes      | PEM-encoded leaf certificate.                                              |
| `caChain`  | string | Yes      | PEM-encoded CA chain (root + intermediates).                               |
| `certKey`  | string | Yes      | PEM-encoded private key matching `cert`.                                   |

> **Sensitive data**: `certKey` should be transferred over HTTPS only.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "caChain" : "Server certificate CA chain",
    "cert": "Server certificate",
    "certKey": "Server certificate private key"
}
```

---

## Reset Device Certificate with Self Signed

**PUT** `{{edgeUrl}}/dm/deviceinfo/crt/reset`

# Reset Device Certificate with Self Signed

Reverts the device server certificate to the self-signed certificate that ships by default. Useful when the installed custom certificate has expired or is causing TLS issues.

## Endpoint

```http
PUT {{edgeUrl}}/dm/deviceinfo/crt/reset
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` on success.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 204 No Content

---

## Get CSR

**GET** `{{edgeUrl}}/dm/deviceinfo/csr`

# Get CSR

Generates a Certificate Signing Request (CSR) using the device's existing private key. Submit the CSR to your CA to obtain a signed certificate, then install via `Add Device Certificate`.

## Endpoint

```http
GET {{edgeUrl}}/dm/deviceinfo/csr
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`

```json
{
  "csr": "-----BEGIN CERTIFICATE REQUEST-----...-----END CERTIFICATE REQUEST-----\n"
}
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "csr": "-----BEGIN CERTIFICATE REQUEST-----SOMETHING HERE-----END CERTIFICATE REQUEST-----\n"
}
```

---

## Show Device Identity

**GET** `{{edgeUrl}}/dm/deviceinfo/identity`

# Show Device Identity

Returns the device's identity public key in PEM form. Use to verify a device's identity from an external system or to install on a CA-issued identity certificate.

## Endpoint

```http
GET {{edgeUrl}}/dm/deviceinfo/identity
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`

```json
{ "pubKey": "-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----\n" }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "pubKey": "-----BEGIN PUBLIC KEY-----PUBLIC KEY HERE-----END PUBLIC KEY-----\n"
}
```

---

## Get Identity Certificates

**GET** `{{edgeUrl}}/dm/deviceinfo/identity/crt`

# Get Identity Certificates

Returns the **identity certificates** installed on the device. These are separate from the device server certificate and are used for authenticating the device to upstream systems (e.g. LE Manager, mTLS-protected services).

## Endpoint

```http
GET {{edgeUrl}}/dm/deviceinfo/identity/crt
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`. Array of identity-certificate objects.

| Field           | Type    | Description                                                       |
|-----------------|---------|-------------------------------------------------------------------|
| `id`            | string  | Certificate fingerprint.                                          |
| `certificate`   | string  | PEM-encoded certificate.                                          |
| `caChain`       | string  | PEM-encoded CA chain.                                             |
| `issuer` / `subject` | string | DN strings.                                                  |
| `notBefore` / `notAfter` | string | Validity window.                                          |
| `canDelete`     | boolean | `false` for system-managed certs (e.g. LE Manager issued).        |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "caChain": "-----BEGIN CERTIFICATE-----SOMETHING HERE-----END CERTIFICATE-----",
        "canDelete": false,
        "certificate": "-----BEGIN CERTIFICATE-----SOMETHING HERE-----END CERTIFICATE-----",
        "id": "11:aa:bb:22:3c:4d:5e:6f:7a:8b:9c:1d:2e:3f:11:aa:bb:22:3c:4d:5e:6f:7a:8b:9c:1d:2e:3f:11:aa:bb:22",
        "issuer": "Litmus Edge Manager CA",
        "notAfter": "2024-05-21T19:07:28Z",
        "notBefore": "2023-05-22T19:06:58Z",
        "subject": "2ea9g28plimcks2kma5g8x2me"
    }
]
```

---

## Install Identity Certificate

**POST** `{{edgeUrl}}/dm/deviceinfo/identity/crt`

# Install Identity Certificate

Installs a new identity certificate (signed by a CA against the CSR from `Show Device Identity`). Once installed, the device can present this certificate to upstream services.

## Endpoint

```http
POST {{edgeUrl}}/dm/deviceinfo/identity/crt
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{
  "cert": "Identity certificate",
  "caChain": "Identity certificate CA chain"
}
```

| Field      | Type   | Required | Description                                              |
|------------|--------|----------|----------------------------------------------------------|
| `cert`     | string | Yes      | PEM-encoded leaf certificate.                            |
| `caChain`  | string | Yes      | PEM-encoded CA chain.                                    |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
"caChain": "Identity certificate CA chain",
"cert": "Identity certificate"
}
```

---

## Delete Identity Certificate

**DELETE** `{{edgeUrl}}/dm/deviceinfo/identity/crt/{id}`

# Delete Identity Certificate

Removes an identity certificate by ID. System-managed certificates (`canDelete: false`) cannot be removed.

## Endpoint

```http
DELETE {{edgeUrl}}/dm/deviceinfo/identity/crt/{id}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Path parameters

| Location | Name    | Required | Description                                              |
|----------|---------|----------|----------------------------------------------------------|
| Path     | `{id}`  | Yes      | Certificate ID from `Get Identity Certificates`.         |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
"caChain": "Identity certificate CA chain",
"cert": "Identity certificate"
}
```

---

## Packet Capture Interfaces

**GET** `{{edgeUrl}}/networkutil/packetcapture/interfaces`

# Packet Capture Interfaces

Returns the network interfaces eligible for packet capture, plus the special `any` pseudo-interface that captures across all interfaces.

## Endpoint

```http
GET {{edgeUrl}}/networkutil/packetcapture/interfaces
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`

```json
{ "interfaces": ["eth0", "any"] }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "interfaces": [
        "eth0",
        "any"
    ]
}
```

---

## Packet Capture Status

**GET** `{{edgeUrl}}/networkutil/packetcapture`

# Packet Capture Status

Returns whether a packet capture is currently running and, if so, when it will complete.

## Endpoint

```http
GET {{edgeUrl}}/networkutil/packetcapture
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`

| Field             | Type    | Description                                              |
|-------------------|---------|----------------------------------------------------------|
| `capturing`       | boolean | `true` while a capture is in progress.                    |
| `completiontime`  | string  | Scheduled completion time, or empty when idle.            |

```json
{ "capturing": false, "completiontime": "" }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "capturing": false,
    "completiontime": ""
}
```

---

## Start Packet Capture

**POST** `{{edgeUrl}}/networkutil/packetcapture`

# Start Packet Capture

Starts a new packet capture on the given interface for the given duration. Only one capture can run at a time; calling while one is already running returns an error.

## Endpoint

```http
POST {{edgeUrl}}/networkutil/packetcapture
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Request body

```json
{ "interface": "eth0", "duration": "1" }
```

| Field         | Type   | Required | Description                                                                |
|---------------|--------|----------|----------------------------------------------------------------------------|
| `interface`   | string | Yes      | Interface from `Packet Capture Interfaces` (or `any`).                     |
| `duration`    | string | Yes      | Duration in **minutes** (string).                                          |

## Response

`200 OK` -- `application/json`

```json
{ "capturing": true, "completiontime": "2024-07-30 15:18" }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

### Recovering the capture file

The capture file is exposed for download via the LE UI's network diagnostics page; this API only starts/stops the capture.

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "interface": "eth0",
    "duration": "1"
}
```

### Response

**Status**: 200 OK

```json
{
    "capturing": true,
    "completiontime": "2024-07-30 15:18"
}
```

---

## Stop Packet Capture

**DELETE** `{{edgeUrl}}/networkutil/packetcapture`

# Stop Packet Capture

Stops the currently-running packet capture. Idempotent when no capture is active.

## Endpoint

```http
DELETE {{edgeUrl}}/networkutil/packetcapture
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`

```json
{ "capturing": false, "completiontime": "" }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "capturing": false,
    "completiontime": ""
}
```

---

## Get WiFi Interfaces

**GET** `{{edgeUrl}}/dm/wifi/interfaces`

# Get WiFi Interfaces

Returns every WiFi-capable interface on the device, with the currently connected network (if any) and its signal strength.

## Endpoint

```http
GET {{edgeUrl}}/dm/wifi/interfaces
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`. Array of WiFi interface objects.

| Field                            | Type    | Description                                                       |
|----------------------------------|---------|-------------------------------------------------------------------|
| `name`                           | string  | Interface name (e.g. `wlan0`).                                    |
| `state`                          | string  | `CONNECTED`, `DISCONNECTED`, `SCANNING`, ...                       |
| `currentNetwork.ssid`            | string  | Connected SSID, when applicable.                                  |
| `currentNetwork.signalBars` / `signalRSSI` | integer | Signal level (0-4 bars, raw RSSI in dBm).                |
| `currentNetwork.band` / `channel` / `frequencyMHz` | mixed | Band info.                                            |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "currentNetwork": {
            "band": 5,
            "channel": 44,
            "frequencyMHz": 5220,
            "signalBars": 4,
            "signalRSSI": -56,
            "ssid": "LitmusAutomation-Internal"
        },
        "name": "wlan0",
        "state": "CONNECTED"
    },
    {
        "currentNetwork": {
            "band": 5,
            "channel": 44,
            "frequencyMHz": 5220,
            "signalBars": 4,
            "signalRSSI": -56,
            "ssid": "LitmusAutomation-Internal"
        },
        "name": "wlan0",
        "state": "CONNECTED"
    }
]
```

---

## Get Interface Status by Name

**GET** `{{edgeUrl}}/dm/wifi/interfaces/{ifname}`

# Get Interface Status by Name

Returns the WiFi status of one named interface. Single-interface counterpart to `Get WiFi Interfaces`.

## Endpoint

```http
GET {{edgeUrl}}/dm/wifi/interfaces/{ifname}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Path parameters

| Location | Name        | Required | Description                                              |
|----------|-------------|----------|----------------------------------------------------------|
| Path     | `{ifname}`  | Yes      | WiFi interface name.                                     |

## Response

See `Get WiFi Interfaces`.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "currentNetwork": {
        "band": 5,
        "channel": 44,
        "frequencyMHz": 5220,
        "signalBars": 4,
        "signalRSSI": -56,
        "ssid": "LitmusAutomation-Internal"
    },
    "name": "wlan0",
    "state": "CONNECTED"
}
```

---

## Leave Current Network

**DELETE** `{{edgeUrl}}/dm/wifi/interfaces/{ifname}`

# Leave Current Network

Disconnects the WiFi interface from its current network. The network's known-networks entry is preserved -- use `Forget Network` to remove it permanently.

## Endpoint

```http
DELETE {{edgeUrl}}/dm/wifi/interfaces/{ifname}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Path parameters

| Location | Name        | Required | Description                                              |
|----------|-------------|----------|----------------------------------------------------------|
| Path     | `{ifname}`  | Yes      | WiFi interface name.                                     |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


---

## List Networks in Interface

**GET** `{{edgeUrl}}/dm/wifi/interfaces/{ifname}/networks`

# List Networks in Interface

Scans the named WiFi interface and returns the visible SSIDs with signal strength. The scan is triggered on each call (may take a few seconds).

## Endpoint

```http
GET {{edgeUrl}}/dm/wifi/interfaces/{ifname}/networks
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Path parameters

| Location | Name        | Required | Description                                              |
|----------|-------------|----------|----------------------------------------------------------|
| Path     | `{ifname}`  | Yes      | WiFi interface name.                                     |

## Response

`200 OK` -- `application/json`. Array of network objects.

| Field        | Type    | Description                                              |
|--------------|---------|----------------------------------------------------------|
| `ssid`       | string  | Network SSID.                                            |
| `signalBars` | integer | Signal level (0-4).                                       |
| `signalRSSI` | integer | RSSI in dBm.                                              |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "signalBars": 4,
        "signalRSSI": -56,
        "ssid": "LitmusAutomation-Internal"
    },
    {
        "signalBars": 4,
        "signalRSSI": -56,
        "ssid": "LitmusAutomation-Internal"
    }
]
```

---

## Connect to WiFi Network

**POST** `{{edgeUrl}}/dm/wifi/interfaces/{ifname}/networks/{ssid}`

# Connect to WiFi Network

Connects to an **open** WiFi network. For password-protected networks use `Connect to WiFi with Password`.

## Endpoint

```http
POST {{edgeUrl}}/dm/wifi/interfaces/{ifname}/networks/{ssid}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Path parameters

| Location | Name        | Required | Description                                              |
|----------|-------------|----------|----------------------------------------------------------|
| Path     | `{ifname}`  | Yes      | WiFi interface name.                                     |
| Path     | `{ssid}`    | Yes      | Network SSID (URL-encode if it contains special characters). |

No request body.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


---

## Connect to WiFi with Password

**POST** `{{edgeUrl}}/dm/wifi/interfaces/{ifname}/networks/{ssid}/withPassword`

# Connect to WiFi with Password

Connects to a password-protected WiFi network. The password is sent in the request body -- ensure the request is over HTTPS.

## Endpoint

```http
POST {{edgeUrl}}/dm/wifi/interfaces/{ifname}/networks/{ssid}/withPassword
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Path parameters

| Location | Name        | Required | Description                                              |
|----------|-------------|----------|----------------------------------------------------------|
| Path     | `{ifname}`  | Yes      | WiFi interface name.                                     |
| Path     | `{ssid}`    | Yes      | Network SSID.                                            |

## Request body

```json
{ "password": "Password" }
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Request Body

```json
{
    "password": "Password"
}
```

---

## List Known Networks

**GET** `{{edgeUrl}}/dm/wifi/knownNetworks`

# List Known Networks

Returns every WiFi network the device has been previously joined to. The device may auto-connect to known networks when in range.

## Endpoint

```http
GET {{edgeUrl}}/dm/wifi/knownNetworks
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`. Array of `{ssid, signalBars, signalRSSI}` objects.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "signalBars": 4,
        "signalRSSI": -56,
        "ssid": "LitmusAutomation-Internal"
    },
    {
        "signalBars": 4,
        "signalRSSI": -56,
        "ssid": "LitmusAutomation-Internal"
    }
]
```

---

## Forget Network

**DELETE** `{{edgeUrl}}/dm/wifi/knownNetworks/{ssid}`

# Forget Network

Removes a known network entry. Saved credentials are wiped; the device will not auto-connect to that SSID again.

## Endpoint

```http
DELETE {{edgeUrl}}/dm/wifi/knownNetworks/{ssid}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Path parameters

| Location | Name      | Required | Description                                              |
|----------|-----------|----------|----------------------------------------------------------|
| Path     | `{ssid}`  | Yes      | Network SSID.                                            |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


---

## Host Device Network Info

**GET** `{{edgeUrl}}/dm/host/info`

# Host Device Network Info

Returns the device's host-level network identity: hostname, DNS / NTP servers, gateway, Docker bridge IP, timezone, country, and the user-editable `/etc/hosts` overrides. Same payload as `Dashboard > Host Device Info`.

## Endpoint

```http
GET {{edgeUrl}}/dm/host/info
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

See `Dashboard > Host Device Info` for the full field reference.

```json
{
  "country": "US",
  "dns": ["8.8.8.8", "8.8.4.4"],
  "docker": { "bip": "10.30.50.1/24" },
  "etcHosts": null,
  "gateway": { "ipv4": "10.17.8.1" },
  "hostname": "litmus-edge-aabbccddeeff",
  "ntp": ["0.pool.ntp.org", "1.pool.ntp.org"],
  "timezone": "UTC"
}
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "country": "US",
    "description": "Litmus Edge (aa:bb:cc:dd:ee:ff)- SJ sensor",
    "dns": [
        "8.8.8.8",
        "8.8.4.4"
    ],
    "docker": {
        "bip": "10.30.50.1/24"
    },
    "etcHosts": null,
    "gateway": {
        "ipv4": "10.17.8.1"
    },
    "hostname": "litmus-edge-aabbccddeeff",
    "ntp": [
        "0.pool.ntp.org",
        "1.pool.ntp.org",
        "2.pool.ntp.org"
    ],
    "timezone": "UTC"
}
```

---

## List Available Timezones

**GET** `{{edgeUrl}}/dm/host/timezones`

# List Available Timezones

Returns every IANA timezone name supported by the device. Use to populate a timezone picker before calling `Network > Configure > Set Timezone`.

## Endpoint

```http
GET {{edgeUrl}}/dm/host/timezones
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`

```json
{
  "timezones": [
    "Africa/Abidjan", "Africa/Algiers", "America/Los_Angeles", "Europe/London", "UTC"
  ]
}
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "timezones": [
        "Africa/Abidjan",
        "Africa/Algiers",
        "Africa/Bissau",
        "Africa/Cairo",
        "Africa/Casablanca",
        "Africa/Ceuta",
        "Africa/El_Aaiun",
        "Africa/Johannesburg",
        "Africa/Juba",
        "Africa/Khartoum",
        "Africa/Lagos",
        "Africa/Maputo",
        "Africa/Monrovia",
        "Africa/Nairobi",
        "Africa/Ndjamena",
        "Africa/Sao_Tome",
        "Africa/Tripoli",
        "Africa/Tunis",
        "Africa/Windhoek",
        "America/Adak",
        "America/Anchorage",
        "America/Araguaina",
        "America/Argentina/Buenos_Aires",
        "America/Argentina/Catamarca",
        "America/Argentina/Cordoba",
        "America/Argentina/Jujuy",
        "America/Argentina/La_Rioja",
        "America/Argentina/Mendoza",
        "America/Argentina/Rio_Gallegos",
        "America/Argentina/Salta",
        "America/Argentina/San_Juan",
        "America/Argentina/San_Luis",
        "America/Argentina/Tucuman",
        "America/Argentina/Ushuaia",
        "America/Asuncion",
        "America/Bahia",
        "America/Bahia_Banderas",
        "America/Barbados",
        "America/Belem",
        "America/Belize",
        "America/Boa_Vista",
        "America/Bogota",
        "America/Boise",
        "America/Cambridge_Bay",
        "America/Campo_Grande",
        "America/Cancun",
        "America/Caracas",
        "America/Cayenne",
        "America/Chicago",
        "America/Chihuahua",
        "America/Ciudad_Juarez",
        "America/Costa_Rica",
        "America/Cuiaba",
        "America/Danmarkshavn",
        "America/Dawson",
        "America/Dawson_Creek",
        "America/Denver",
        "America/Detroit",
        "America/Edmonton",
        "America/Eirunepe",
        "America/El_Salvador",
        "America/Fort_Nelson",
        "America/Fortaleza",
        "America/Glace_Bay",
        "America/Goose_Bay",
        "America/Grand_Turk",
        "America/Guatemala",
        "America/Guayaquil",
        "America/Guyana",
        "America/Halifax",
        "America/Havana",
        "America/Hermosillo",
        "America/Indiana/Indianapolis",
        "America/Indiana/Knox",
        "America/Indiana/Marengo",
        "America/Indiana/Petersburg",
        "America/Indiana/Tell_City",
        "America/Indiana/Vevay",
        "America/Indiana/Vincennes",
        "America/Indiana/Winamac",
        "America/Inuvik",
        "America/Iqaluit",
        "America/Jamaica",
        "America/Juneau",
        "America/Kentucky/Louisville",
        "America/Kentucky/Monticello",
        "America/La_Paz",
        "America/Lima",
        "America/Los_Angeles",
        "America/Maceio",
        "America/Managua",
        "America/Manaus",
        "America/Martinique",
        "America/Matamoros",
        "America/Mazatlan",
        "America/Menominee",
        "America/Merida",
        "America/Metlakatla",
        "America/Mexico_City",
        "America/Miquelon",
        "America/Moncton",
        "America/Monterrey",
        "America/Montevideo",
        "America/New_York",
        "America/Nome",
        "America/Noronha",
        "America/North_Dakota/Beulah",
        "America/North_Dakota/Center",
        "America/North_Dakota/New_Salem",
        "America/Nuuk",
        "America/Ojinaga",
        "America/Panama",
        "America/Paramaribo",
        "America/Phoenix",
        "America/Port-au-Prince",
        "America/Porto_Velho",
        "America/Puerto_Rico",
        "America/Punta_Arenas",
        "America/Rankin_Inlet",
        "America/Recife",
        "America/Regina",
        "America/Resolute",
        "America/Rio_Branco",
        "America/Santarem",
        "America/Santiago",
        "America/Santo_Domingo",
        "America/Sao_Paulo",
        "America/Scoresbysund",
        "America/Sitka",
        "America/St_Johns",
        "America/Swift_Current",
        "America/Tegucigalpa",
        "America/Thule",
        "America/Tijuana",
        "America/Toronto",
        "America/Vancouver",
        "America/Whitehorse",
        "America/Winnipeg",
        "America/Yakutat",
        "America/Yellowknife",
        "Antarctica/Casey",
        "Antarctica/Davis",
        "Antarctica/Macquarie",
        "Antarctica/Mawson",
        "Antarctica/Palmer",
        "Antarctica/Rothera",
        "Antarctica/Troll",
        "Asia/Almaty",
        "Asia/Amman",
        "Asia/Anadyr",
        "Asia/Aqtau",
        "Asia/Aqtobe",
        "Asia/Ashgabat",
        "Asia/Atyrau",
        "Asia/Baghdad",
        "Asia/Baku",
        "Asia/Bangkok",
        "Asia/Barnaul",
        "Asia/Beirut",
        "Asia/Bishkek",
        "Asia/Chita",
        "Asia/Choibalsan",
        "Asia/Colombo",
        "Asia/Damascus",
        "Asia/Dhaka",
        "Asia/Dili",
        "Asia/Dubai",
        "Asia/Dushanbe",
        "Asia/Famagusta",
        "Asia/Gaza",
        "Asia/Hebron",
        "Asia/Ho_Chi_Minh",
        "Asia/Hong_Kong",
        "Asia/Hovd",
        "Asia/Irkutsk",
        "Asia/Jakarta",
        "Asia/Jayapura",
        "Asia/Jerusalem",
        "Asia/Kabul",
        "Asia/Kamchatka",
        "Asia/Karachi",
        "Asia/Kathmandu",
        "Asia/Khandyga",
        "Asia/Kolkata",
        "Asia/Krasnoyarsk",
        "Asia/Kuching",
        "Asia/Macau",
        "Asia/Magadan",
        "Asia/Makassar",
        "Asia/Manila",
        "Asia/Nicosia",
        "Asia/Novokuznetsk",
        "Asia/Novosibirsk",
        "Asia/Omsk",
        "Asia/Oral",
        "Asia/Pontianak",
        "Asia/Pyongyang",
        "Asia/Qatar",
        "Asia/Qostanay",
        "Asia/Qyzylorda",
        "Asia/Riyadh",
        "Asia/Sakhalin",
        "Asia/Samarkand",
        "Asia/Seoul",
        "Asia/Shanghai",
        "Asia/Singapore",
        "Asia/Srednekolymsk",
        "Asia/Taipei",
        "Asia/Tashkent",
        "Asia/Tbilisi",
        "Asia/Tehran",
        "Asia/Thimphu",
        "Asia/Tokyo",
        "Asia/Tomsk",
        "Asia/Ulaanbaatar",
        "Asia/Urumqi",
        "Asia/Ust-Nera",
        "Asia/Vladivostok",
        "Asia/Yakutsk",
        "Asia/Yangon",
        "Asia/Yekaterinburg",
        "Asia/Yerevan",
        "Atlantic/Azores",
        "Atlantic/Bermuda",
        "Atlantic/Canary",
        "Atlantic/Cape_Verde",
        "Atlantic/Faroe",
        "Atlantic/Madeira",
        "Atlantic/South_Georgia",
        "Atlantic/Stanley",
        "Australia/Adelaide",
        "Australia/Brisbane",
        "Australia/Broken_Hill",
        "Australia/Darwin",
        "Australia/Eucla",
        "Australia/Hobart",
        "Australia/Lindeman",
        "Australia/Lord_Howe",
        "Australia/Melbourne",
        "Australia/Perth",
        "Australia/Sydney",
        "Europe/Andorra",
        "Europe/Astrakhan",
        "Europe/Athens",
        "Europe/Belgrade",
        "Europe/Berlin",
        "Europe/Brussels",
        "Europe/Bucharest",
        "Europe/Budapest",
        "Europe/Chisinau",
        "Europe/Dublin",
        "Europe/Gibraltar",
        "Europe/Helsinki",
        "Europe/Istanbul",
        "Europe/Kaliningrad",
        "Europe/Kirov",
        "Europe/Kyiv",
        "Europe/Lisbon",
        "Europe/London",
        "Europe/Madrid",
        "Europe/Malta",
        "Europe/Minsk",
        "Europe/Moscow",
        "Europe/Paris",
        "Europe/Prague",
        "Europe/Riga",
        "Europe/Rome",
        "Europe/Samara",
        "Europe/Saratov",
        "Europe/Simferopol",
        "Europe/Sofia",
        "Europe/Tallinn",
        "Europe/Tirane",
        "Europe/Ulyanovsk",
        "Europe/Vienna",
        "Europe/Vilnius",
        "Europe/Volgograd",
        "Europe/Warsaw",
        "Europe/Zurich",
        "Indian/Chagos",
        "Indian/Maldives",
        "Indian/Mauritius",
        "Pacific/Apia",
        "Pacific/Auckland",
        "Pacific/Bougainville",
        "Pacific/Chatham",
        "Pacific/Easter",
        "Pacific/Efate",
        "Pacific/Fakaofo",
        "Pacific/Fiji",
        "Pacific/Galapagos",
        "Pacific/Gambier",
        "Pacific/Guadalcanal",
        "Pacific/Guam",
        "Pacific/Honolulu",
        "Pacific/Kanton",
        "Pacific/Kiritimati",
        "Pacific/Kosrae",
        "Pacific/Kwajalein",
        "Pacific/Marquesas",
        "Pacific/Nauru",
        "Pacific/Niue",
        "Pacific/Norfolk",
        "Pacific/Noumea",
        "Pacific/Pago_Pago",
        "Pacific/Palau",
        "Pacific/Pitcairn",
        "Pacific/Port_Moresby",
        "Pacific/Rarotonga",
        "Pacific/Tahiti",
        "Pacific/Tarawa",
        "Pacific/Tongatapu",
        "UTC"
    ]
}
```

---

## Network Interface Configuration

**GET** `{{edgeUrl}}/dm/ifconfig`

# Network Interface Configuration

Returns the IP configuration of every network interface (IPv4 + IPv6, DHCP vs static, gateway, WAN flag). Used by the LE UI's Network page.

## Endpoint

```http
GET {{edgeUrl}}/dm/ifconfig
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`. Array of interface objects.

| Field             | Type    | Description                                                                                |
|-------------------|---------|--------------------------------------------------------------------------------------------|
| `idx`             | integer | Kernel interface index.                                                                    |
| `name`            | string  | Interface name (e.g. `eth0`).                                                              |
| `type`            | string  | Link type (`eth`, `wlan`, `wwan`).                                                         |
| `wan`             | boolean | `true` if this interface is considered the WAN uplink.                                      |
| `inet.address`    | string  | IPv4 address with CIDR mask.                                                               |
| `inet.gateway`    | string  | IPv4 gateway. Empty for DHCP unless overridden.                                            |
| `inet.type`       | string  | `dhcp` or `static`.                                                                        |
| `inet6.*`         | mixed   | Same fields for IPv6 (`type` can be `auto`).                                               |

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "idx": 2,
        "inet": {
            "address": "10.17.10.18/22",
            "gateway": "",
            "type": "dhcp"
        },
        "inet6": {
            "address": "fe80::96c6:91ff:fe1b:9c77/64",
            "gateway": "",
            "type": "auto"
        },
        "name": "eth0",
        "type": "eth",
        "wan": true
    },
    {
        "idx": 4,
        "inet": {
            "address": "",
            "gateway": "",
            "type": "dhcp"
        },
        "inet6": {
            "address": "",
            "gateway": "",
            "type": "auto"
        },
        "name": "wlan0",
        "type": "wifi",
        "wan": false
    }
]
```

---

## Details of Network Interface

**GET** `{{edgeUrl}}/dm/ifconfig/{name}`

# Details of Network Interface

Returns the IP configuration of one named interface. Single-interface counterpart to `Network Interface Configuration`.

## Endpoint

```http
GET {{edgeUrl}}/dm/ifconfig/{name}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Path parameters

| Location | Name      | Required | Description                                  |
|----------|-----------|----------|----------------------------------------------|
| Path     | `{name}`  | Yes      | Interface name (e.g. `eth0`).                |

## Response

See `Network Interface Configuration` for the field reference.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "idx": 2,
    "inet": {
        "address": "10.17.10.18/22",
        "gateway": "",
        "type": "dhcp"
    },
    "inet6": {
        "address": "fe80::96c6:91ff:fe1b:9c77/64",
        "gateway": "",
        "type": "auto"
    },
    "name": "eth0",
    "type": "eth",
    "wan": true
}
```

---

## List Available Modems

**GET** `{{edgeUrl}}/dm/modem`

# List Available Modems

Returns the cellular modems the device knows about, with the carrier APN and IMEI. Subset of `Info > Mobile Broadband Info`.

## Endpoint

```http
GET {{edgeUrl}}/dm/modem
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`

```json
[
  { "apn": "broadband", "imei": "014666000090318" }
]
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "apn": "broadband",
        "imei": "014666000090318"
    },
    {
        "apn": "broadband",
        "imei": "014666000090318"
    }
]
```

---

## Get Host Time

**GET** `{{edgeUrl}}/dm/host/time`

# Get Host Time

Returns the device's host time -- current date / time, NTP sync flag, and uptime. Useful for clock-skew diagnostics.

## Endpoint

```http
GET {{edgeUrl}}/dm/host/time
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

`200 OK` -- `application/json`

| Field             | Type    | Description                                              |
|-------------------|---------|----------------------------------------------------------|
| `dateTime`        | object  | `{date, time, tz, offset}` -- the wall-clock view.        |
| `epoch`           | integer | Unix epoch seconds.                                       |
| `local` / `utc`   | string  | ISO 8601 local / UTC timestamps.                          |
| `ntpSync`         | boolean | `true` if NTP synchronization is currently healthy.       |
| `uptime`          | object  | `{years, days, hours, minutes, seconds, raw}` since boot. |

```json
{
  "dateTime": { "date": "2023-08-03", "time": "22:46:53", "tz": "UTC", "offset": 0 },
  "epoch": 1691102813,
  "local": "2023-08-03T22:46:53Z",
  "ntpSync": false,
  "uptime": { "days": 26, "hours": 7, "minutes": 19, "raw": 2272746, "seconds": 6, "years": 0 },
  "utc": "2023-08-03T22:46:53Z"
}
```

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
{
    "dateTime": {
        "date": "2023-08-03",
        "offset": 0,
        "time": "22:46:53",
        "tz": "UTC"
    },
    "epoch": 1691102813,
    "local": "2023-08-03T22:46:53Z",
    "ntpSync": false,
    "uptime": {
        "days": 26,
        "hours": 7,
        "minutes": 19,
        "raw": 2272746,
        "seconds": 6,
        "years": 0
    },
    "utc": "2023-08-03T22:46:53Z"
}
```

---

## Mobile Broadband Info

**GET** `{{edgeUrl}}/dm/deviceinfo/modem`

# Mobile Broadband Info

Identical endpoint to `Info > Mobile Broadband Info` -- exposed under Network for convenience. See that entry for the full field reference.

## Endpoint

```http
GET {{edgeUrl}}/dm/deviceinfo/modem
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Response

See `Info > Mobile Broadband Info`.

## Errors

| HTTP status         | When it happens                                                                |
|---------------------|--------------------------------------------------------------------------------|
| `400 Bad Request`   | Missing or malformed query/body parameter.                                     |
| `401 Unauthorized`  | Missing or invalid credentials.                                                |
| `403 Forbidden`     | Token lacks permission for this operation.                                     |
| `404 Not Found`     | Target entity does not exist.                                                  |
| `5xx`               | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.


### Response

**Status**: 200 OK

```json
[
    {
        "addrIPv4": {
            "cidr": "10.20.30.1/30"
        },
        "addrIPv6": {
            "cidr": "10.20.30.1/30"
        },
        "apnAssigned": "10569.mcs.mnc410.mcc310.gprs",
        "apnRequested": "broadband",
        "dns": [
            "8.8.8.8",
            "8.8.4.4",
            "2001:4860:4860::8888",
            "2001:4860:4860::8844"
        ],
        "iccid": "89014103279631659340",
        "imei": "014666000090318",
        "lastConnAt": "2016-06-15T06:29:52Z",
        "manufacturer": "WNC",
        "model": "M14A2A",
        "name": "wwan0",
        "network": "AT&T",
        "revision": "MPSS: M14A2A_v11.50.171541 APSS: M14A2A_v11.54.171541",
        "rsrpDbm": -56,
        "rssiDbm": -56,
        "signalBars": 3,
        "status": "home"
    }
]
```

---

