From liongard
Manages Liongard environments representing customer organizations: CRUD operations, listing with pagination/filtering, grouping, related entities, and MSP workflows via REST API.
npx claudepluginhub wyre-technology/msp-claude-plugins --plugin liongardThis skill uses the workspace's default tool permissions.
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.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Analyzes BMad project state from catalog CSV, configs, artifacts, and query to recommend next skills or answer questions. Useful for help requests, 'what next', or starting BMad.
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