# Litmus UNS/MQTT - LE, LEM, LUNS API Docs

## Server Info

**POST** `{{uns_url}}/mqtt/gql`

server statistics

### Request Body

**GraphQL Query**

```graphql
query ServerInfo {
    server {
        info {
            version
            uptime
            bytesSent
            bytesRcvd
            msgSent
            msgRcvd
            msgDropped
            packetsSent
            packetsRcvd
            clientsConnected
            clientsDisconnected
            clientsMax
            clientsTotal
            subscriptions
        }
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "data": {
        "server": {
            "info": {
                "version": "1.2.20",
                "uptime": "142h58m27s",
                "bytesSent": 24,
                "bytesRcvd": 4458,
                "msgSent": 0,
                "msgRcvd": 0,
                "msgDropped": 0,
                "packetsSent": 3,
                "packetsRcvd": 6,
                "clientsConnected": 0,
                "clientsDisconnected": 0,
                "clientsMax": 1,
                "clientsTotal": 0,
                "subscriptions": 0
            }
        }
    }
}
```

---

## List Clients and Connections

**POST** `{{uns_url}}/mqtt/gql`

client statistics

### Request Body

**GraphQL Query**

```graphql
query Clients {
    clients {
        id
        connected
        protoLevel
        remote
        lastSeen
        account {
            id
            username
            acType
            enabled
        }
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "data": {
        "clients": [
            {
                "id": "mqtt-explorer-9f98c545",
                "connected": true,
                "protoLevel": "unknown",
                "remote": "",
                "lastSeen": "2024-03-25 20:34:05 UTC",
                "account": {
                    "id": "309CE008-757C-439A-AFE0-05ACC8031165",
                    "username": "mqtt-explorer",
                    "acType": "General",
                    "enabled": true
                }
            }
        ]
    }
}
```

---

## Client Details

**POST** `{{uns_url}}/mqtt/gql`

info about sub topics, pub topics, rejected topics and general cleint info

### Request Body

**GraphQL Query**

```graphql
query ClientsDetails($input: [String!]) {
    clients(ids: $input) {
        id
        connected
        protoLevel
        remote
        lastSeen
        account {
            id
            username
            acType
            enabled
        }
        pubTopics {
            path
            lastSeen
            pubRate
            byteCount
            msgCount
            clients
            UNS
            lastVal {
                timestamp
                deviceName
                tagName
                datatype
                value
            }
        }
        pubTopicsRejected {
            path
            lastSeen
            pubRate
            byteCount
            msgCount
            clients
            UNS
            lastVal {
                timestamp
                deviceName
                tagName
                datatype
                value
            }
        }
        subTopics {
            path
            lastSeen
            pubRate
            byteCount
            msgCount
            clients
            UNS
            lastVal {
                timestamp
                deviceName
                tagName
                datatype
                value
            }
        }
    }
}
```

**Variables**

```json
{
  "input": "{{uns_client_id}}"
}
```

### Response

**Status**: 200 OK

```json
{
    "data": {
        "clients": [
            {
                "id": "mqtt-explorer-9f98c545",
                "connected": true,
                "protoLevel": "unknown",
                "remote": "",
                "lastSeen": "2024-03-25 20:34:05 UTC",
                "account": {
                    "id": "309CE008-757C-439A-AFE0-05ACC8031165",
                    "username": "parthUI",
                    "acType": "General",
                    "enabled": true
                },
                "pubTopics": [
                    {
                        "path": "entVal/val/2/productionunit",
                        "lastSeen": "0001-01-01 00:00:00 UTC",
                        "pubRate": 1.5488602464078632e-11,
                        "byteCount": 0,
                        "msgCount": 1,
                        "clients": null,
                        "UNS": "UNS",
                        "lastVal": null
                    },
                    {
                        "path": "top1",
                        "lastSeen": "0001-01-01 00:00:00 UTC",
                        "pubRate": 1.5488602464078632e-11,
                        "byteCount": 0,
                        "msgCount": 1,
                        "clients": null,
                        "UNS": "NonUNS",
                        "lastVal": null
                    }
                ],
                "pubTopicsRejected": [
                    {
                        "path": "entVal/val/2/productionunit",
                        "lastSeen": "0001-01-01 00:00:00 UTC",
                        "pubRate": 1.5488602464078632e-11,
                        "byteCount": 0,
                        "msgCount": 1,
                        "clients": null,
                        "UNS": "UNS",
                        "lastVal": null
                    },
                    {
                        "path": "top1",
                        "lastSeen": "0001-01-01 00:00:00 UTC",
                        "pubRate": 1.5488602464078632e-11,
                        "byteCount": 0,
                        "msgCount": 1,
                        "clients": null,
                        "UNS": "NonUNS",
                        "lastVal": null
                    }
                ],
                "subTopics": null
            }
        ]
    }
}
```

---

## Server Config

**POST** `{{uns_url}}/mqtt/gql`

same server config information as dashboard connect button

### Request Body

**GraphQL Query**

```graphql
query ServerConfig {
    server {
        config {
            ssl {
                cert
                ca
                socketTLS {
                    port
                    enabled
                }
                socketWSS {
                    port
                    enabled
                }
            }
            socketTCP {
                port
                enabled
            }
            socketWS {
                port
                enabled
            }
            socketHealthCheck {
                port
                enabled
            }
            sslEnabled
            updateEnabled
        }
    }
}
```

### Response

**Status**: 200 OK

```json
{
    "data": {
        "server": {
            "config": {
                "ssl": {
                    "cert": "-----BEGIN CERTIFICATE-----\nMIIErDCCApQCFH5s6ZLur6pkWymEZ/S+601ui1a4MA0GCSqGSIb3DQEBCwUAMBQx\nEjAQBgNVBAMMCUNBLUJyb2tlcjAeFw0yNDAzMTQyMDU1MTdaFw0zNDAzMTIyMDU1\nMTdaMBExDzANBgNVBAMMBmJyb2tlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC\nAgoCggIBAMNSQGYN0fbdjEjsmq6fm6Wi/kcqyPtfLajdbHaMtAnkoyfTJsUG7Chf\nzGpjgolSMpkCRJwDXcWVR+swgi0VmxKB3MCeSI13iMsm8Q6Z3Y3lk37SQNR1gPnv\nx6YeMaPob4I4VHhKs4KjaEeYXbBW8WWOJS9M2ZHiJtzOyjIc2dqMa386mpeF8det\nLzQ34zkOm2tv+yOW3Hj2OWKSTGgbPZQ03y+YTwGBgqk41J5ScvoNcXwOrSlG1B6F\n4SxLo3GP1bfp0UhKLDkW+zXF7Pu6MrA3RsTopH1aR53bLWMwhiF11QjMSYtkNdJK\n0p7A9eO0eeJtFYv2RWZQ87Xqe7g71tx9oMVuceG8dLX6H4e1xJ70I+E7vmNu/xCe\nRxWivH5AGdphY/TrEGuQ5Zu53vEapPqoZHxkODa1Oj1IGVrAtg/6zjmL702NS8ZE\npvrnFFrquVYilULVNPVSumUcEoWgdHv2EiD/eXncBiEjTmj44ymPYul54E+t1OEw\nlo86hyl4pbxEu8pS3+xQTX+KRwm6d0kjY3hMGh5I9X8fDm92pIH+LglNCwFqwvVS\nrmdhYOOc2sLiQHFXnwBEmYvHMBLVEgGLIePEjlXAz7YSknZ0HK9Sz9/k6UMHah3X\nDGQzOIvu4UTfSY7XaqWX64iYKkvMBMb0ebPZpAFoD/3InzJ82AcvAgMBAAEwDQYJ\nKoZIhvcNAQELBQADggIBAHB5T+Bgs53+klZnMHXXUbgbQNieqTVforQtPhZH3VFj\nOiqCV9AUjAM5F3kV8unDiYjLeVY+YPcpBEeBHUvU0QFQ2yNPiShtZmJOvxRq8UAH\nqaSQ5LjsopZLW8B7HfJK/9YrLr9C816P21fDoxElWOXQFxI2oDgPq4piKcpESUgI\n8T86gZueYCRnY6CZGBy0Yh2AodcIHpT44NGH7hDF+YrKP5ewqt7fjxJtRrpGcwJe\nLC+O9KRZ/BwUqLAgKkXCtKoU3lcSVFZGozwCd/U9v+DzZiq2gEXz6nN+BnHZ7gKn\niUgAvl7laBBtWtQk+dD41B6VJ3XmlDLsD4NYT/3skH7/q5HuNRD2ijwhzjLN6JJT\nunnwdv4K+xzqxJksduCInfwY2UcBD9F9mxTIbv2UkIOiRaXb0/cZWRtlKb6yW7qu\nQad0GyK5VpoxB49H8nNzXPW4TAtpYd522LlUOHUbv2xptsraOxUDy10zLI2vN5Uw\nu754yJXaN7OLqBmD4mos7F113W2YXowrxaLCX7+m5pdyb2WIUWkYtiujBvNk174V\nXSIKXcrhfCDJ8STDgu/6I6vH7Gi21486KUuE93OdweiIJfH0QJivlkWS0Qc1nYYk\nLBpnMpO0DZkeSgKtaHj09OS/MVo6HAstRIlgECQvhDmRbM33fG24l73aTI8iAvVC\n-----END CERTIFICATE-----\n",
                    "ca": "-----BEGIN CERTIFICATE-----\nMIIErDCCApQCFH5s6ZLur6pkWymEZ/S+601ui1a4MA0GCSqGSIb3DQEBCwUAMBQx\nEjAQBgNVBAMMCUNBLUJyb2tlcjAeFw0yNDAzMTQyMDU1MTdaFw0zNDAzMTIyMDU1\nMTdaMBExDzANBgNVBAMMBmJyb2tlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC\nAgoCggIBAMNSQGYN0fbdjEjsmq6fm6Wi/kcqyPtfLajdbHaMtAnkoyfTJsUG7Chf\nzGpjgolSMpkCRJwDXcWVR+swgi0VmxKB3MCeSI13iMsm8Q6Z3Y3lk37SQNR1gPnv\nx6YeMaPob4I4VHhKs4KjaEeYXbBW8WWOJS9M2ZHiJtzOyjIc2dqMa386mpeF8det\nLzQ34zkOm2tv+yOW3Hj2OWKSTGgbPZQ03y+YTwGBgqk41J5ScvoNcXwOrSlG1B6F\n4SxLo3GP1bfp0UhKLDkW+zXF7Pu6MrA3RsTopH1aR53bLWMwhiF11QjMSYtkNdJK\n0p7A9eO0eeJtFYv2RWZQ87Xqe7g71tx9oMVuceG8dLX6H4e1xJ70I+E7vmNu/xCe\nRxWivH5AGdphY/TrEGuQ5Zu53vEapPqoZHxkODa1Oj1IGVrAtg/6zjmL702NS8ZE\npvrnFFrquVYilULVNPVSumUcEoWgdHv2EiD/eXncBiEjTmj44ymPYul54E+t1OEw\nlo86hyl4pbxEu8pS3+xQTX+KRwm6d0kjY3hMGh5I9X8fDm92pIH+LglNCwFqwvVS\nrmdhYOOc2sLiQHFXnwBEmYvHMBLVEgGLIePEjlXAz7YSknZ0HK9Sz9/k6UMHah3X\nDGQzOIvu4UTfSY7XaqWX64iYKkvMBMb0ebPZpAFoD/3InzJ82AcvAgMBAAEwDQYJ\nKoZIhvcNAQELBQADggIBAHB5T+Bgs53+klZnMHXXUbgbQNieqTVforQtPhZH3VFj\nOiqCV9AUjAM5F3kV8unDiYjLeVY+YPcpBEeBHUvU0QFQ2yNPiShtZmJOvxRq8UAH\nqaSQ5LjsopZLW8B7HfJK/9YrLr9C816P21fDoxElWOXQFxI2oDgPq4piKcpESUgI\n8T86gZueYCRnY6CZGBy0Yh2AodcIHpT44NGH7hDF+YrKP5ewqt7fjxJtRrpGcwJe\nLC+O9KRZ/BwUqLAgKkXCtKoU3lcSVFZGozwCd/U9v+DzZiq2gEXz6nN+BnHZ7gKn\niUgAvl7laBBtWtQk+dD41B6VJ3XmlDLsD4NYT/3skH7/q5HuNRD2ijwhzjLN6JJT\nunnwdv4K+xzqxJksduCInfwY2UcBD9F9mxTIbv2UkIOiRaXb0/cZWRtlKb6yW7qu\nQad0GyK5VpoxB49H8nNzXPW4TAtpYd522LlUOHUbv2xptsraOxUDy10zLI2vN5Uw\nu754yJXaN7OLqBmD4mos7F113W2YXowrxaLCX7+m5pdyb2WIUWkYtiujBvNk174V\nXSIKXcrhfCDJ8STDgu/6I6vH7Gi21486KUuE93OdweiIJfH0QJivlkWS0Qc1nYYk\nLBpnMpO0DZkeSgKtaHj09OS/MVo6HAstRIlgECQvhDmRbM33fG24l73aTI8iAvVC\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIFCTCCAvGgAwIBAgIUao97vj/CMPxYML6Zcs0mk9noo9EwDQYJKoZIhvcNAQEL\nBQAwFDESMBAGA1UEAwwJQ0EtQnJva2VyMB4XDTI0MDMxNDIwNTUxNloXDTQzMTEz\nMDIwNTUxNlowFDESMBAGA1UEAwwJQ0EtQnJva2VyMIICIjANBgkqhkiG9w0BAQEF\nAAOCAg8AMIICCgKCAgEAt9O/k1+hlmhtFIA20oKBWntFSo76PhWKQBZGhE6PeJg1\nKgidb68dfUS3KOSxassSUNE0wyNibtDIppX1Jn5ywh24anRruz7jH+L1lgSeOb7A\ntQuHc2ZUK8cSMlp/lkd2Ang2Eh0oDQcoL0+iYT2Rk8IlZiGNYUUpN14Zh+T6mZ6B\n6kJZQLIJxKQmZ/6S2VOmZc4QtEqt0+/QhxxxpStuaPAL7mFLIEHxiVEHk/YzBIR+\nP9QCXe9skNQOXOeuB6LCiQ4UeXyK0HEdwK4DmIaHzaAgX87s1DEh0mujr4yieihx\nv09fJ4khEv+vYRILTpB3NHCGYD7aiQUH90HH9jJtOpYm/gNhiwSepo+Loe/a6MSw\nqnUhD8jER7K1c3XYNZ6aI5njpgtV3m7ypnXO2QIC80EVTuPsaaWaWOujCWGCb4mN\nadIgrj9t/+aXmaPDf31feRCXJdIZlFwv0kXztgYUGnvY2d6oBTekjLjEWBItfYf9\nSj7BO8QAYfw4ifRL9YpzdIh09MMzaktMucANrq84etop5lTrifpaa3y0DioZEfTu\nZYvOm2jdAKJu2HMWMAoQS08I2pGZb2hNJ8uGfleKylTWsCxQGnsRuUm+tmPA20I3\noJs8y3CINx06jZJMFrMe4nEPecNQErDvpF+tvlXHnZwuUt/E3YIxR9QqGfuvuTUC\nAwEAAaNTMFEwHQYDVR0OBBYEFA84tEiUZVKsi5q/lHMGLpx9GUpQMB8GA1UdIwQY\nMBaAFA84tEiUZVKsi5q/lHMGLpx9GUpQMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI\nhvcNAQELBQADggIBABz2YKIHjG006sZTB8RiHBh/TWfKzsiZ2UR9vsqEoFnkTJTn\nZX4/XUI9bBe8Eowj7qkegqx8AEbiQN0HHY/+O3kKuAGmyXqylHGmHDVpKOO/P2Kc\nJyFCFrY2MsKQS3b0+xlfqxAEMONvBYLOApTY2wkk1mOhoP2YmziC5f9Usb7Km55d\n/LynIZ3JPJEnNOgaTjxoDlQWlRGnHWeSH9QCmrhCmcKNorT5E4KwNJ0OzsppauBI\nNXq1x8yEq2iqa0tLAmxGSzLmOEWTJgmDo+EMxfJv2NshafobhOzBva+rnzRVIvJk\nDjciEY+hsgrZGjLOZzrbtElrHwhZHWNnYTan7wpw7XGBnpV0TgJ/fCZgO1XufLHX\nba7zINaP+IwuVJ1gkl9/WfF0ZkvspNCmOE0MCTSH5S7BFxW9j1qtyp+fvAEJcuQk\nFXfFQ3GiZcJtg6aUiF2wmGqNte19QqyoO70QnqEruAMmBqKloljLCwShGIoNWQkR\nohw1GbEH2XB8MORXhxuznZfd36RxhbGWLhGki52k7jmvHrzntXlWTzMb0wkNKLI8\nmIXN/bY4pB1d3mLkMD3v07qy8RoErA4AJrqya7FTxa7VgR0hBfHYXyyZHksbYZ5r\nozKoys44HWkMZ3JzzkwHbKA3c8GmKn/DGd2zRLyBMPaUeg2pQwi2u/gj5ALj\n-----END CERTIFICATE-----\n",
                    "socketTLS": {
                        "port": 8883,
                        "enabled": true,
                        "__typename": "Socket"
                    },
                    "socketWSS": {
                        "port": 8882,
                        "enabled": true,
                        "__typename": "Socket"
                    },
                    "__typename": "SSLConfig"
                },
                "socketTCP": {
                    "port": 1883,
                    "enabled": true,
                    "__typename": "Socket"
                },
                "socketWS": {
                    "port": 1882,
                    "enabled": true,
                    "__typename": "Socket"
                },
                "socketHealthCheck": {
                    "port": 8082,
                    "enabled": true,
                    "__typename": "Socket"
                },
                "sslEnabled": true,
                "updateEnabled": false,
                "__typename": "ServerConfig"
            },
            "__typename": "Server"
        }
    }
}
```

---

