# LitmusEdgeManager 2.31.x API Documentation/Edge Lifecycle Management/Settings - LE, LEM, LUNS API Docs

## Settings - Project Details

**GET** `{{LEM_URL}}/api/v1/project/{{project_id}}`

# Settings -- Project Details

Returns the full project record (same shape as `Companies > Projects Within Company` for one project). Surfaces `properties`, `topics`, allocated slots, action templates, and triggers.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/project/{{project_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## 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": "462j1mq70mph31wa100t1yuxa",
    "companyName": "solutions",
    "name": "parth",
    "description": "",
    "teams": {},
    "properties": {
        "KEEP_DELETED_INTERVAL": "24",
        "STORE_OMA_DATA": "false",
        "DATAENRICHER_INTEGRATION": "off",
        "STORE_RAW_DATA": "false"
    },
    "dataTtl": 30,
    "topics": [],
    "numberOfAllocatedSlots": 0,
    "keys": [],
    "remoteNetwork": null,
    "deleted": false,
    "actionTemplates": {},
    "triggers": {
        "6u98gdlpwxuypstkb7826beb9": {
            "id": "6u98gdlpwxuypstkb7826beb9",
            "name": "Monitor alert failures",
            "description": null,
            "simpleRules": null,
            "eventRules": null,
            "rawDataRules": null,
            "metricRules": null,
            "advancedRules": null,
            "deduplicate": true,
            "severity": 2,
            "subject": "Monitor alert failures",
            "message": "Monitor alert failures",
            "tags": null,
            "deviceId": null,
            "actions": null,
            "active": true,
            "showOnDashboard": true,
            "scopeType": "SYSTEM",
            "sourceType": "DATA",
            "updatedOn": 1691100533111,
            "notifyContinuously": false,
            "notifyGracePeriod": 0,
            "alertDelay": 0
        }
    },
    "billingPlanCode": null,
    "createdAt": null,
    "grafanaOrgId": 5,
    "subnetId": 1,
    "latestBackupsToKeep": 3,
    "pubSubKeyRotationIntervalSec": 0,
    "pubSubKeyRotationDaysOfWeek": [],
    "pubSubKeyRotationTime": null,
    "pubSubKeyRotationWindowSec": 0
}
```

---

## Settings - Project Timezone

**GET** `{{LEM_URL}}/api/v1/project/settings/timezone?projectId={{project_id}}`

# Settings -- Project Timezone

Returns the project's configured timezone (IANA name).
## Endpoint

```http
GET {{LEM_URL}}/api/v1/project/settings/timezone?projectId={{project_id}}
```
## Authentication

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

```json
{ "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
{
    "timezone": "UTC"
}
```

---

## Settings - Edge Data Device Storage

**GET** `{{LEM_URL}}/api/v1/project/store-edge-data/{{project_id}}`

# Settings -- Edge Data Device Storage

Returns whether the project stores **OMA data** and **raw data** from edge devices.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/project/store-edge-data/{{project_id}}
```
## Authentication

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

```json
{ "storeOmaData": false, "storeRawData": false }
```

## 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
{
    "storeOmaData": false,
    "storeRawData": false
}
```

---

## Settings - Edge Device Backups

**GET** `{{LEM_URL}}/api/v1/project/retention/{{project_id}}`

# Settings -- Edge Device Backups

Returns the backup retention policy: how many most-recent backups to keep per device.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/project/retention/{{project_id}}
```
## Authentication

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

```json
{ "latestBackupsToKeep": 3 }
```

## 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
{
    "latestBackupsToKeep": 3
}
```

---

## Settings - Edge Device Metrics Sync Interval

**GET** `{{LEM_URL}}/api/v1/device/edge-polling-settings/{{edge_device_id}}`

# Settings -- Edge Device Metrics Sync Interval

Returns one device's metrics polling configuration: enabled flag, polling interval (seconds), and whether to inherit from the project's settings.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/device/edge-polling-settings/{{edge_device_id}}
```
## Authentication

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

```json
{
  "enabled": true,
  "intervalSec": 30,
  "useProjectSettings": true
}
```

## 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

```Text
{
    "enabled": true,
    "intervalSec": 30,
    "useProjectSettings": true
}
```

---

## Members

**GET** `{{LEM_URL}}/api/v1/company?name={{company_name}}`

# Members

Same payload as `Companies > Return Company Details`. Used here to render the project Members section (because teams are company-scoped but project members are looked up via team membership).
## Endpoint

```http
GET {{LEM_URL}}/api/v1/company?name={{company_name}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## 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
{
    "name": "solutions",
    "realName": "Solutions",
    "description": "",
    "teams": [
        {
            "name": "OWNER",
            "users": [
                {
                    "username": "demo",
                    "attrs": {
                        "status": "ONBOARD"
                    }
                },
                {
                    "username": "member2",
                    "attrs": {
                        "status": "ONBOARD"
                    }
                },
                {
                    "username": "member3",
                    "attrs": {
                        "status": "ONBOARD"
                    }
                },
                {
                    "username": "member4",
                    "attrs": {
                        "status": "ONBOARD"
                    }
                }
            ]
        }
    ],
    "quotas": null,
    "license": null,
    "deleted": false,
    "companyType": "USER"
}
```

---

## Credentials - MQTT

**GET** `{{LEM_URL}}/api/v1/project/credentials/mqtt?projectId={{project_id}}`

# Credentials -- MQTT

Returns the **MQTT broker credentials** for one project: TCP/SSL/HTTP/WS URLs plus the CA certificate. Use these to configure external clients (industrial devices, custom apps) to publish into LEM's bus.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/project/credentials/mqtt?projectId={{project_id}}
```
## 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`. Fields: `tcpUrl`, `sslUrl`, `httpUrl`, `httpsUrl`, `wsUrl`, `wssUrl`, `caCertificate`.

## 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
{
    "tcpUrl": "tcp://10.17.3.103:1883",
    "sslUrl": "ssl://10.17.3.103:8883",
    "httpUrl": "http://10.17.3.103/mqtt/publish",
    "httpsUrl": "https://10.17.3.103/mqtt/publish",
    "wsUrl": "ws://10.17.3.103/mqtt",
    "wssUrl": "wss://10.17.3.103/mqtt",
    "caCertificate": "-----BEGIN CERTIFICATE-----\nMIIDSzCCAjOgAwIBAgIUWBhOM2+MjE3RTvyUJBXhciF+UQgwDQYJKoZIhvcNAQELBQAwLTErMCkGA1UEAxMiTGl0bXVzIEVkZ2UgTWFuYWdlciBDQSAyMzA3MjAyMjAyNzAeFw0yMzA3MjEyMDI2MzJaFw00MzA3MTYyMDI3MDJaMC0xKzApBgNVBAMTIkxpdG11cyBFZGdlIE1hbmFnZXIgQ0EgMjMwNzIwMjIwMjcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzGo0BV+jkd2GVMC+pkEmOJzEgI4laAjfCXpKR8F2b5CVjwwf17/ordr3Ovc3mf4cBbRmwyw/EKYLeTTPTR/WYlX0P05Q+gCb8VWKwRFy3tn+l62RRt5ucHvGGS9m2ISjOqWWKNodkI7IQahUrHYIFcXEYAJPhzAkav+oj0T9gz88XrZiLidx6czvWo/hRidx/vI/0Fp1x4FiW6S0FTUKIpSZ0BRD/Es4Zfau6bql84j1hDVrbVnjSnjTfmyg7sIFkWrqashHITJmKOnC3SF424sejiopCYoVCSUaJzjRymbkACFruIK6TYIUXkKW+QntlC6Q0+HB5rVh+45onfOHpAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRFEAElhG/8N7UTMscJjL9YerjlrTAfBgNVHSMEGDAWgBRFEAElhG/8N7UTMscJjL9YerjlrTANBgkqhkiG9w0BAQsFAAOCAQEAk92foXaLi5l6RrSOwuwdk8yTnKn3Jdh4r2mSj8Pp1ywY8KsZqP/DbnZ9YaDAd3m56bEPWrgnIByRZQRjBLM6g3RJVZjzG/ZCDkGGHho5WcoJ8v8+ebnO4P2U83A883cwA6/0HhrSyb3mRMWaaUHMS5KMHlNphR/2G5RUcocXjMbzrH4bwZmoE/PlWyTEpquWI1kobOynbeJhVPngUCgddNr3sVAAywK1oTeCoLucmRI8SlnKSqSD10Chp6JVqSPL/E1uwBC1o5Doju2iYBYGayD8WQMZ8MR8zRO1/FORTT6Jp4FDlv4HDM8QUHChx2qjb0+sjjbMfxyDVorLjHegQA==\n-----END CERTIFICATE-----",
    "caValidBefore": 2320691222000,
    "caSerialNumber": "58184e336f8c8c4dd14efc942415e172217e5108",
    "caSigningAlgorithm": "SHA256withRSA",
    "caFingerprint": "711e9d8b36035730a7725418ffc1a770e9a9323d",
    "dataTopic": "loop/data/+/462j1mq70mph31wa100t1yuxa/+",
    "requestTopic": "loop/req/+/462j1mq70mph31wa100t1yuxa/+",
    "responseTopic": "loop/resp/+/462j1mq70mph31wa100t1yuxa/+",
    "eventsTopic": "loop/events/+/462j1mq70mph31wa100t1yuxa/+",
    "dataSchema": "{\n  \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"timestamp\": {\n      \"type\": \"integer\"\n    },\n    \"values\": {\n      \"type\": \"array\",\n      \"properties\": {\n        \"objectId\": {\n          \"type\": \"integer\"\n        },\n        \"instanceId\": {\n          \"type\": \"string\"\n        },\n        \"resourceId\": {\n          \"type\": \"integer\"\n        },\n        \"datatype\": {\n          \"type\": \"string\"\n        },\n        \"value\": {\n          \"type\": \"string\"\n        }\n      },\n      \"required\": [\n        \"objectId\",\n        \"instanceId\",\n        \"resourceId\",\n        \"datatype\",\n        \"value\"\n      ]\n    }\n  },\n  \"required\": [\n    \"values\"\n  ]\n}\n"
}
```

---

## Credentials - List all MQTT accounts

**GET** `{{LEM_URL}}/api/v1/project/mqtt/account/{{project_id}}`

# Credentials -- List all MQTT accounts

Returns the per-project MQTT accounts with their authorised topic patterns. Each `topics[]` entry has an `access` flag (`1` = subscribe, `2` = publish, `3` = both) and the topic pattern with wildcards.
## Endpoint

```http
GET {{LEM_URL}}/api/v1/project/mqtt/account/{{project_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## 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
[
    {
        "accountName": "solutions-parth-e08vup7sl4qrjxm6mo04n5dpp",
        "topics": [
            {
                "access": 1,
                "ipaddr": null,
                "topic": "+/req/+/462j1mq70mph31wa100t1yuxa/+"
            },
            {
                "access": 1,
                "ipaddr": null,
                "topic": "+/resp/+/462j1mq70mph31wa100t1yuxa/+"
            },
            {
                "access": 1,
                "ipaddr": null,
                "topic": "+/data/+/462j1mq70mph31wa100t1yuxa/+"
            },
            {
                "access": 1,
                "ipaddr": null,
                "topic": "+/events/+/462j1mq70mph31wa100t1yuxa/+"
            },
            {
                "access": 2,
                "ipaddr": null,
                "topic": "+/req/+/462j1mq70mph31wa100t1yuxa/+"
            },
            {
                "access": 2,
                "ipaddr": null,
                "topic": "+/resp/+/462j1mq70mph31wa100t1yuxa/+"
            }
        ]
    }
]
```

---

## Credentials - Topics

**GET** `{{LEM_URL}}/api/v1/project/credentials/topics?projectId={{project_id}}`

# Credentials -- Topics

Returns the project's authorised MQTT topic patterns (the same topics that appear in MQTT account grants, projected as a flat list).
## Endpoint

```http
GET {{LEM_URL}}/api/v1/project/credentials/topics?projectId={{project_id}}
```
## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.
## 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
[
    "loop/custom/+/462j1mq70mph31wa100t1yuxa",
    "loop/data/+/462j1mq70mph31wa100t1yuxa/+",
    "loop/req/+/462j1mq70mph31wa100t1yuxa/+",
    "loop/resp/+/462j1mq70mph31wa100t1yuxa/+"
]
```

---

