#
Level RMM
Monitor all your managed devices, groups, and alerts across your MSP clients with Level's modern RMM platform and AI-powered insights.
#
Overview
Connect Weavestream to Level RMM to monitor:
- 💻 Devices - All managed endpoints with real-time status
- 🏢 Groups - Organization and device groupings
- 🚨 Alerts - Real-time monitoring alerts and incidents
- 🔗 Relationships - Devices linked to groups, alerts linked to devices
- 📊 System Details - OS, hardware, network, and health status
Estimated Setup Time: 10 minutes
#
Prerequisites
- Level account with API access
- Admin or appropriate role permissions
- At least one organization with managed devices
- Weavestream installed on your Mac
#
Part 1: Get Your Level API Key
#
Step 1: Sign into Level
- Go to https://app.level.io
- Sign in with your Level account
#
Step 2: Navigate to API Settings
- Click on your profile icon (top right)
- Select "Settings" or "Account Settings"
- In the left sidebar, look for "API" or "Integrations"
- Click "API Keys" or "API Access"
#
Step 3: Create API Key
- Click "Generate New API Key" or "Create API Key"
- Fill in the details:
- Name:
Weavestream Monitor - Description:
API access for Weavestream unified monitoring dashboard - Permissions: Select:
- ✅ Read Devices
- ✅ Read Groups
- ✅ Read Alerts
- ❌ Don't select write permissions (read-only is safer)
- Name:
- Click "Generate" or "Create"
#
Step 4: Copy Your API Key
After creation, you'll see:
📋 API Key
- Example:
lvl_abc123xyz789randomstring456... - ⚠️ IMPORTANT: Copy this immediately - you may not see it again!
Save this API key securely - you'll need it for Weavestream.
#
Part 2: Configure Weavestream
#
Step 1: Add Level as a Source
- Open Weavestream
- Click the "+" button in the sidebar
- Select "Add Source"
- Fill in the source details:
- Name:
Level - Base URL:
https://api.level.io/v2 - Auth Type:
API KeyorBearer - API Key: Paste your Level API key
- Header Name:
Authorization(if using Bearer) orX-API-Key - Header Value:
Bearer YOUR_API_KEY(if Bearer) or just the key - Icon: Select
server.rackorshield.checkeredor custom icon - Color: Choose your preference (suggested:
#64D2FF- Level blue, or#00C9FF) - Refresh Interval:
15minutes (for real-time monitoring)
- Name:
- Click "Add" or "Save"
Note: Check Level's API documentation for the exact authentication format (Bearer token vs API key header).
#
Step 2: Add Endpoints
Now we'll add endpoints to monitor different aspects of your Level environment.
#
Endpoint 1: Groups (Organizations/Clients)
Monitor all your MSP client organizations and device groups.
Configuration:
- Name:
Groups - Path:
/groups - Method:
GET - Query Parameters: (none needed)
Field Mapping:
- ID Field:
id - Title Field:
name - Date Field:
created_at(if available) - Summary Fields:
description,device_count - Status Field: (none)
Retention Mode: Keep All (preserve group history)
#
Endpoint 2: Devices (All Managed Endpoints)
Get detailed information about all managed devices across all groups.
Configuration:
- Name:
Devices - Path:
/devices - Method:
GET
Query Parameters:
per_page:100(results per page)page:1(pagination)
Pagination Config:
- Type:
Page-based - Page Field:
page - Page Size Field:
per_page - Page Size:
100 - Max Items:
1000(or adjust based on your fleet size)
Field Mapping:
- ID Field:
id - Title Field:
hostname(orname) - Date Field:
last_seen_atorcreated_at - Summary Fields:
group_name,full_operating_system,ip_address,mac_address - Status Field:
online- Map
true→ok - Map
false→critical
- Map
Retention Mode: Keep All (preserve device history)
Relationships:
- Link to Groups endpoint
- Source Field:
group_id - Target Endpoint: Groups
- Target ID Field:
id - Fields to Include:
name(group name)
#
Endpoint 3: Alerts
Monitor all active alerts and incidents across your managed devices.
Configuration:
- Name:
Alerts - Path:
/alerts - Method:
GET
Query Parameters:
per_page:100status:open(optional - only open alerts)
Field Mapping:
- ID Field:
id - Title Field:
name(oralert_type) - Date Field:
started_at(orcreated_at) - Summary Fields:
description,severity,group_name - Status Field:
is_resolved- Important: Enable "Invert Status Boolean"
- This maps
is_resolved: false→criticalandis_resolved: true→ok - Or map directly:
false→critical,true→ok
Retention Mode: Keep All (preserve alert history)
Relationships:
- Link to Devices endpoint
- Source Field:
device_id - Target Endpoint: Devices
- Target ID Field:
id - Fields to Include:
hostname,group_name,full_operating_system
This allows AI to answer: "Which device triggered this alert?" and "Show me device details for this alert"
#
Endpoint 4: Specific Group Devices
Monitor devices for a specific client/group.
Configuration:
- Name:
[Group Name] Devices - Path:
/devices - Method:
GET
Query Parameters:
group_id:123(your group ID - get from Groups endpoint)per_page:100
Alternative: Create a Smart Filter on Devices endpoint:
- Condition:
group_idequals[GROUP_ID]
Field Mapping: Same as "Devices" endpoint
#
Endpoint 5: Device Details (Optional)
Get detailed information about a specific device.
Configuration:
- Name:
Device Details - [Hostname] - Path:
/devices/{device_id} - Method:
GET
Replace {device_id} with actual device ID from Devices endpoint.
Field Mapping:
- ID Field:
id - Title Field:
hostname - Date Field:
last_seen_at - Summary Fields:
cpu,memory,disk,network
Use Case: Create separate endpoints for critical servers to track detailed metrics.
#
Part 3: Understanding Level API Data
#
Device Data Structure
{
"id": "dev_abc123",
"hostname": "WORKSTATION-01",
"group_id": "grp_xyz789",
"group_name": "Acme Corporation",
"online": true,
"last_seen_at": "2024-01-26T14:30:00Z",
"created_at": "2024-01-15T10:00:00Z",
"full_operating_system": "Windows 11 Pro (22H2)",
"operating_system": "Windows",
"os_version": "11",
"ip_address": "192.168.1.100",
"mac_address": "00:1A:2B:3C:4D:5E",
"cpu": {
"model": "Intel Core i7-12700",
"cores": 12,
"usage_percent": 45
},
"memory": {
"total_gb": 32,
"used_gb": 16,
"usage_percent": 50
},
"disk": {
"total_gb": 1000,
"used_gb": 550,
"free_gb": 450,
"usage_percent": 55
}
}
#
Alert Data Structure
{
"id": "alert_123",
"device_id": "dev_abc123",
"name": "High CPU Usage",
"description": "CPU usage exceeded 90% for 5 minutes",
"severity": "critical",
"started_at": "2024-01-26T14:00:00Z",
"resolved_at": null,
"is_resolved": false,
"alert_type": "cpu",
"threshold": 90,
"current_value": 95,
"group_name": "Acme Corporation"
}
#
Group Data Structure
{
"id": "grp_xyz789",
"name": "Acme Corporation",
"description": "Main office and satellite locations",
"device_count": 45,
"created_at": "2023-06-01T00:00:00Z",
"updated_at": "2024-01-26T10:00:00Z"
}
#
Part 4: Create Useful Filters
#
Filter 1: Offline Devices
- Under Level source, click "+" → "New Filter"
- Name:
Offline Devices - Select Endpoint: Devices
- Add Condition:
- Field:
online - Type: Boolean
- Operator:
equalsoris false - Value:
false
- Field:
- Logic: Match ALL (AND)
- Save
#
Filter 2: Unresolved Critical Alerts
- Create new filter
- Name:
Critical Alerts - Unresolved - Select Endpoint: Alerts
- Add Conditions:
- Field:
severity - Operator:
equals - Value:
critical - AND
- Field:
is_resolved - Operator:
equals - Value:
false
- Field:
- Logic: Match ALL (AND)
- Save
#
Filter 3: Windows Devices
- Create new filter
- Name:
Windows Devices - Select Endpoint: Devices
- Add Condition:
- Field:
operating_system - Operator:
equalsorcontains - Value:
Windows
- Field:
- Save
#
Filter 4: Devices Not Seen in 24 Hours
- Create new filter
- Name:
Stale Devices (24h+) - Select Endpoint: Devices
- Add Condition:
- Field:
last_seen_at - Operator:
not in last - Value:
24 hours
- Field:
- Save
#
Filter 5: Specific Client Devices
- Create new filter
- Name:
[Client Name] Devices - Select Endpoint: Devices
- Add Condition:
- Field:
group_id - Operator:
equals - Value:
grp_xyz789(get from Groups endpoint)
- Field:
- Save
Pro Tip: Create one filter per VIP client for quick access.
#
Filter 6: High Disk Usage
- Create new filter
- Name:
Low Disk Space (<15%) - Select Endpoint: Devices
- Add Condition:
- Field:
disk.usage_percent - Operator:
greater than - Value:
85
- Field:
- Save
#
Filter 7: Alert History (Optional)
Track resolved/historical alerts.
- Create new filter
- Name:
Alert History - Select Endpoint: Alerts
- Add Condition:
- Field:
resolved_at - Operator:
in last - Value:
30 days
- Field:
- Save
#
Part 5: Use AI to Monitor Your Fleet
Now you can ask intelligent questions about your Level environment!
#
Example Questions:
Device Status:
- "How many devices are offline right now?"
- "Which clients have offline devices?"
- "Show me all Windows 11 devices"
- "What devices haven't checked in today?"
Alert Management:
- "What critical alerts do I have?"
- "Show me all disk space alerts"
- "Which device has the most alerts?"
- "Summarize today's alerts by severity"
Group/Client Overview:
- "How many devices does Acme Corp have?"
- "Which group has the most devices?"
- "List all my clients and their device counts"
System Analysis:
- "Show me all devices running Windows 10"
- "Which workstations have high CPU usage?"
- "Find devices with low disk space"
- "What's the most common OS version?"
Troubleshooting:
- "Why is WORKSTATION-01 offline?"
- "Show me the alert history for server XYZ"
- "Which devices went offline today?"
- "Find devices with unresolved alerts"
Reporting:
- "Generate a health report for Acme Corp"
- "Summarize my entire MSP fleet"
- "Create a weekly alert summary"
- "Show me device trends across all groups"
Relationship Queries (Powered by linked data):
- "What group does this device belong to?"
- "Show me all alerts for Acme Corp devices"
- "Which device triggered this alert?"
#
Part 6: Advanced Configuration
#
Query Parameter Options
Level API may support various query parameters (check their docs):
Device Filtering:
group_id: grp_xyz789 - Filter by group
online: true - Only online devices
operating_system: Windows - Filter by OS
per_page: 100 - Results per page
page: 1 - Page number
Alert Filtering:
severity: critical - Only critical alerts
status: open - Only open/unresolved
device_id: dev_123 - Alerts for specific device
alert_type: cpu - By alert type
per_page: 100 - Results per page
Pagination: Level likely uses page-based pagination:
page: 1 - Current page
per_page: 100 - Items per page
Sorting:
sort: last_seen_at - Sort field
order: desc - Sort direction (asc/desc)
#
Status Field Mapping
Level uses various status representations:
Device Online Status:
online: true→ Device is online → Map tookonline: false→ Device is offline → Map tocritical
Alert Resolution:
is_resolved: false→ Alert is active → Map tocriticalis_resolved: true→ Alert is resolved → Map took- Important: May need to invert this mapping
Alert Severity:
critical→criticalwarning→warninginfo→info
#
Relationship Configuration
Weavestream's relationship feature lets AI understand connections between data.
Example: Devices → Groups
When you link devices to groups:
- AI can answer: "Which group owns this device?"
- Can query: "Show me all devices for Acme Corp"
- Enriches device data with group name
Configuration:
- Source Field:
group_id(in Devices) - Target Endpoint: Groups
- Target ID Field:
id(in Groups) - Fields to Include:
name,description
Example: Alerts → Devices
When you link alerts to devices:
- AI can answer: "Which device triggered this alert?"
- Can query: "Show me device details for alert XYZ"
- Enriches alerts with device info (hostname, OS, etc.)
Configuration:
- Source Field:
device_id(in Alerts) - Target Endpoint: Devices
- Target ID Field:
id(in Devices) - Fields to Include:
hostname,group_name,full_operating_system
#
Part 7: Multi-Organization Setup
For MSPs managing many clients:
#
Approach 1: Single Devices Endpoint + Filters (Recommended)
Setup:
- One "Devices" endpoint for all groups
- Create Smart Filters per group/client
- Filter condition:
group_id equals [GROUP_ID]
Pros:
- Simple setup
- Easy cross-client queries
- One place for all device data
Cons:
- All devices in one large list
- Can't customize refresh per client
#
Approach 2: Separate Endpoints Per Organization
Setup:
- Multiple device endpoints with group-specific query params
- Each client gets dedicated endpoint with
group_idfilter
Pros:
- Clean separation in UI
- Can prioritize VIP clients (faster refresh)
- Better performance for large fleets
Cons:
- More complex setup
- More API calls
- Harder to query across all clients
Recommendation: Start with Approach 1, consider Approach 2 if you have 50+ groups.
#
Troubleshooting
#
Issue: "Authentication failed" or "401 Unauthorized"
Solution:
- Verify API key is correct (no extra spaces)
- Check authentication format (Bearer vs API Key header)
- Ensure API key hasn't expired
- Try creating a new API key
- Verify your Level account has appropriate permissions
#
Issue: "No devices returned" or empty results
Solution:
- Verify you have managed devices in Level
- Check API permissions include device read access
- Try removing query parameters to test
- Ensure your Level user role has device visibility
- Check pagination is configured correctly
#
Issue: "Rate limited" or "Too many requests"
Solution: Level API has rate limits (check their documentation):
Best practices:
- Increase refresh interval (15 min → 30 min)
- Reduce
per_pageif hitting timeouts - Stagger sync times for multiple endpoints
- Monitor API usage in Level dashboard
#
Issue: "Online status not mapping correctly"
Solution:
- Check raw JSON to verify field name is exactly
online - Ensure boolean mapping is correct (
true= ok,false= critical) - Verify you're not inverting when you shouldn't
#
Issue: "Relationships not working"
Solution:
- Ensure both endpoints (source and target) are syncing successfully
- Verify relationship source field exists in data (e.g.,
group_id,device_id) - Check target ID field matches (e.g., group
id, deviceid) - Make sure target endpoint is synced before source endpoint
- Check for typos in field names
#
Issue: "Pagination not working" or "Missing devices"
Solution:
- Verify pagination config is set correctly:
- Type:
Page-based - Page field:
page - Page size field:
per_page
- Type:
- Increase max items per sync if you have large fleet
- Check Level API docs for exact pagination format
- Try manual pagination test with different page numbers
#
Security Best Practices
#
✅ Do:
- Use read-only API keys (no write access needed)
- Create separate API keys for each integration
- Rotate API keys every 90 days
- Monitor API usage regularly
- Store credentials securely (Weavestream uses macOS Keychain)
- Set appropriate permissions on API keys
#
❌ Don't:
- Grant write/delete permissions unless absolutely necessary
- Share API keys with anyone
- Use the same API key for multiple integrations
- Store credentials in plain text
- Leave inactive API keys enabled
- Commit API keys to version control
#
Additional Level Endpoints
Here are more endpoints you may be able to add (check Level API docs):
#
Scripts/Automation
Path: /scripts
List automation scripts available in your Level environment.
#
Jobs/Tasks
Path: /jobs
Track script execution and scheduled tasks.
#
Policies
Path: /policies
Monitoring policies and configurations.
#
Users
Path: /users
Level users and their roles.
#
Activity Log
Path: /activity
Audit log of changes and actions.
#
Reports
Path: /reports
Pre-built or custom reports.
#
Integration with Other Tools
Level works great alongside:
NinjaOne / Action1:
- Cross-reference devices between RMM platforms
- Compare endpoint coverage
- Validate monitoring completeness
Azure AD / Microsoft 365:
- Match devices to Azure AD joined devices
- Verify domain membership
- Cross-reference with Intune management
PSA Tools:
- Link alerts to tickets
- Track device assignments to clients
- Generate billing reports
Backup Solutions:
- Verify backup coverage across all devices
- Identify devices missing from backup
- Cross-check backup status with device health
#
Summary Checklist
Before you finish, verify:
- ✅ Level API key created with read permissions
- ✅ API key copied and saved securely
- ✅ Level source added to Weavestream
- ✅ Groups endpoint syncing successfully
- ✅ Devices endpoint syncing (with online status mapped correctly)
- ✅ Alerts endpoint syncing (with is_resolved mapped correctly)
- ✅ Relationships configured (Devices→Groups, Alerts→Devices)
- ✅ Pagination configured for Devices endpoint
- ✅ Smart filters created for offline devices, critical alerts
- ✅ Tested AI questions about your Level environment
You're all set! Monitor your entire MSP fleet with intelligent AI insights. 🚀
#
Pro Tips for MSPs
Tip 1: Morning Dashboard Ask AI: "Summarize overnight alerts and offline devices"
Tip 2: Client Health Checks Create filters per VIP client with 5-min refresh for real-time status
Tip 3: Trending Analysis Weekly question: "What were the most common alerts this week?"
Tip 4: Proactive Monitoring Set up filters for:
- Devices offline >4 hours
- Critical alerts not resolved in 2 hours
- Devices with >5 warnings
- High resource usage (CPU, memory, disk)
Tip 5: Client Reporting Monthly: "Generate device health summary for [Client Name]"
Tip 6: Cross-Platform Validation If using multiple RMMs: "Compare device counts between Level and NinjaOne"
Last updated: February 2026 Level API version: v2