Liongard Environments — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Liongard Environments (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Environments in Liongard represent customer organizations or sites being monitored. Each environment serves as the top-level container for all inspection activity, discovered systems, detections, and metrics associated with a particular client. Proper environment management is essential for organized MSP service delivery.
| Field | Type | Required | Description |
|---|---|---|---|
ID | int | System | Auto-generated unique identifier |
Name | string | Yes | Environment display name |
Description | string | No | Optional description text |
Status | string | No | Active or Inactive (default: Active) |
Visible | boolean | No | Visibility in UI (default: true) |
Tier | string | No | Service tier classification |
CreatedOn | datetime | System | Creation timestamp |
UpdatedOn | datetime | System | Last update timestamp |
| Field | Type | Description |
|---|---|---|
AgentCount | int | Number of agents associated |
LaunchpointCount | int | Number of configured inspections |
SystemCount | int | Number of discovered systems |
DetectionCount | int | Number of active detections |
GET /api/v1/environments?page=1&pageSize=100
X-ROAR-API-KEY: {api_key}Response:
{
"Data": [
{
"ID": 1234,
"Name": "Acme Corporation",
"Description": "Primary client environment",
"Status": "Active",
"Visible": true,
"Tier": "Premium",
"CreatedOn": "2023-01-15T10:00:00Z",
"UpdatedOn": "2024-02-01T14:30:00Z"
}
],
"TotalRows": 150,
"HasMoreRows": true,
"CurrentPage": 1,
"TotalPages": 2,
"PageSize": 100
}The v2 endpoint supports POST-based filtering with conditions:
POST /api/v2/environments
X-ROAR-API-KEY: {api_key}
Content-Type: application/json{
"Pagination": {
"Page": 1,
"PageSize": 100
},
"conditions": [
{
"path": "Status",
"op": "eq",
"value": "Active"
}
],
"fields": ["ID", "Name", "Status", "Tier"],
"orderBy": [
{
"path": "Name",
"direction": "asc"
}
]
}GET /api/v1/environments/{environmentId}
X-ROAR-API-KEY: {api_key}Response:
{
"ID": 1234,
"Name": "Acme Corporation",
"Description": "Primary client environment",
"Status": "Active",
"Visible": true,
"Tier": "Premium",
"CreatedOn": "2023-01-15T10:00:00Z",
"UpdatedOn": "2024-02-01T14:30:00Z",
"AgentCount": 2,
"LaunchpointCount": 15,
"SystemCount": 47,
"DetectionCount": 3
}GET /api/v1/environments/count
X-ROAR-API-KEY: {api_key}Response:
{
"Count": 150
}This is a lightweight endpoint useful for health checks and dashboard summaries.
POST /api/v1/environments
X-ROAR-API-KEY: {api_key}
Content-Type: application/json{
"Name": "New Company Inc",
"Description": "Managed services client",
"Status": "Active",
"Visible": true,
"Tier": "Standard"
}Response:
{
"ID": 5678,
"Name": "New Company Inc",
"Description": "Managed services client",
"Status": "Active",
"Visible": true,
"Tier": "Standard",
"CreatedOn": "2024-02-15T09:00:00Z",
"UpdatedOn": "2024-02-15T09:00:00Z"
}PUT /api/v1/environments/{environmentId}
X-ROAR-API-KEY: {api_key}
Content-Type: application/json{
"Name": "New Company Inc - Updated",
"Description": "Premium managed services client",
"Tier": "Premium"
}DELETE /api/v1/environments/{environmentId}
X-ROAR-API-KEY: {api_key}Warning: Deleting an environment removes all associated launchpoints, systems, detections, and historical inspection data. This action cannot be undone.
Environment Groups (v2) provide logical grouping of environments for organizational purposes. Groups help MSPs manage large numbers of clients by category, region, or service level.
GET /api/v2/environment-groups
X-ROAR-API-KEY: {api_key}Response:
{
"Data": [
{
"ID": 10,
"Name": "Tier 1 - Premium",
"Description": "Premium service level clients",
"EnvironmentCount": 25
},
{
"ID": 11,
"Name": "Tier 2 - Standard",
"Description": "Standard service level clients",
"EnvironmentCount": 75
}
]
}POST /api/v2/environment-groups
X-ROAR-API-KEY: {api_key}
Content-Type: application/json{
"Name": "East Coast Clients",
"Description": "Clients in the eastern US region"
}PUT /api/v2/environment-groups/{groupId}
X-ROAR-API-KEY: {api_key}
Content-Type: application/json{
"Name": "East Coast Clients - Updated",
"Description": "All eastern US and Canada clients"
}DELETE /api/v2/environment-groups/{groupId}
X-ROAR-API-KEY: {api_key}Note: Deleting a group does not delete the environments within it. They are simply ungrouped.
GET /api/v1/launchpoints?environmentId={environmentId}&page=1&pageSize=100
X-ROAR-API-KEY: {api_key}GET /api/v1/systems?environmentId={environmentId}&page=1&pageSize=100
X-ROAR-API-KEY: {api_key}GET /api/v1/agents?environmentId={environmentId}
X-ROAR-API-KEY: {api_key}POST /api/v1/detections
X-ROAR-API-KEY: {api_key}
Content-Type: application/json{
"Pagination": {
"Page": 1,
"PageSize": 100
},
"conditions": [
{
"path": "EnvironmentID",
"op": "eq",
"value": 1234
}
]
}Environments can be mapped to external systems (PSA tools, RMM platforms) for cross-platform correlation:
GET /api/v1/environments/{environmentId}/integrationmappings
X-ROAR-API-KEY: {api_key}To update multiple environments at once, iterate with rate limiting:
async function bulkUpdateStatus(environmentIds, status) {
const results = [];
for (const id of environmentIds) {
const result = await fetch(
`https://${instance}.app.liongard.com/api/v1/environments/${id}`,
{
method: 'PUT',
headers: {
'X-ROAR-API-KEY': process.env.LIONGARD_API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({ Status: status })
}
);
results.push({ id, success: result.ok });
// Respect rate limits
await sleep(200);
}
return results;
}async function exportAllEnvironments() {
const environments = [];
let page = 1;
let hasMore = true;
while (hasMore) {
const response = await fetch(
`https://${instance}.app.liongard.com/api/v1/environments?page=${page}&pageSize=500`,
{
headers: { 'X-ROAR-API-KEY': process.env.LIONGARD_API_KEY }
}
);
const data = await response.json();
environments.push(...data.Data);
hasMore = data.HasMoreRows;
page++;
}
return environments;
}| Code | Message | Resolution |
|---|---|---|
| 400 | Invalid environment data | Verify required fields |
| 401 | Unauthorized | Check API key validity |
| 403 | Forbidden | Verify API key permissions |
| 404 | Environment not found | Confirm environment ID exists |
| 409 | Duplicate name | Environment name must be unique |
| 429 | Rate limited | Wait and retry (300 req/min) |
| Error | Cause | Fix |
|---|---|---|
| Name required | Missing Name field | Add environment name |
| Name too long | Name exceeds max length | Shorten name |
| Invalid status | Unrecognized status value | Use Active or Inactive |
| Duplicate name | Environment name already exists | Use unique name |
Environment (ID)
|
+-- Environment Groups (GroupID)
|
+-- Agents (AgentID)
|
+-- Launchpoints (LaunchpointID)
| +-- Systems (SystemID)
|
+-- Detections (DetectionID)
|
+-- Metrics (MetricID)
|
+-- Integration Mappings
|
+-- Timeline Events~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.