#
NinjaOne RMM
Monitor all your managed devices, organizations, and alerts across your MSP clients with real-time AI-powered insights.
#
Overview
Connect Weavestream to NinjaOne RMM to monitor:
- 💻 Devices - All managed endpoints with detailed system info
- 🏢 Organizations - Your complete MSP client list
- 🚨 Alerts - Real-time monitoring alerts and notifications
- 🔗 Relationships - Devices linked to organizations, alerts linked to devices
- 📊 System Details - OS, memory, disk space, uptime, and more
Estimated Setup Time: 15-20 minutes
#
Prerequisites
- NinjaOne account with API access
- Admin or appropriate role permissions
- At least one organization with managed devices
- Weavestream installed on your Mac
#
Part 1: Create NinjaOne API Application
#
Step 1: Sign into NinjaOne
- Go to https://app.ninjarmm.com
- Sign in with your NinjaOne account
#
Step 2: Navigate to API Settings
- Click Administration in the left sidebar
- Select Apps → API
- Click "Add" or "Create Application"
#
Step 3: Configure API Application
Fill in the application details:
Application Name:
Weavestream Monitor
Description:
API integration for Weavestream unified monitoring dashboard
Redirect URI:
http://localhost:8080/callback
(This is required for OAuth flow - Weavestream will handle the redirect)
Scopes: Select the following permissions:
- ✅ Monitoring (read access to devices, alerts, organizations)
- ✅ Management (optional - only if you want to manage devices from Weavestream later)
Grant Type:
- Select "Authorization Code" (for OAuth 2.0 flow)
Click "Save" or "Create"
#
Step 4: Copy Your Credentials
After creation, you'll see:
📋 Client ID
- Example:
nj_abc123def456ghi789 - Copy this value
📋 Client Secret
- Example:
secret_XyZ789AbC123DeF456... - ⚠️ IMPORTANT: Copy this immediately - you won't see it again!
Save these credentials securely - you'll need them for Weavestream.
#
Part 2: Configure Weavestream
#
Step 1: Add NinjaOne as a Source
- Open Weavestream
- Click the "+" button in the sidebar
- Select "Add Source"
- Fill in the source details:
- Name:
NinjaOne - Base URL:
https://app.ninjarmm.com/api/v2 - Auth Type:
OAuth - OAuth Flow Type:
Authorization Code - Authorization URL:
https://app.ninjarmm.com/ws/oauth/authorize - Token URL:
https://app.ninjarmm.com/ws/oauth/token - Client ID: Paste your Client ID
- Client Secret: Paste your Client Secret
- Scopes:
monitoring - Redirect Port:
8080 - Use Basic Auth: Yes (checked)
- Icon: Select
shield.checkeredor use customninjaoneicon if available - Color: Choose your preference (suggested:
#7ED321- NinjaOne green, or#0052CC- blue) - Refresh Interval:
15minutes (for real-time monitoring)
- Name:
- Click "Add" or "Save"
- OAuth Authorization Flow:
- A browser window will open
- Sign into NinjaOne if prompted
- Click "Authorize" to grant access
- Browser will redirect back to Weavestream
- You should see "Authorization successful"
#
Step 2: Add Endpoints
Now we'll add endpoints to monitor different aspects of your NinjaOne environment.
#
Endpoint 1: Organizations (Client List)
Monitor all your MSP client organizations.
Configuration:
- Name:
Organizations - Path:
/organizations - Method:
GET - Query Parameters: (none needed)
Field Mapping:
- ID Field:
id - Title Field:
name - Date Field: (none - use sync time)
- Summary Fields:
description - Status Field: (none)
Retention Mode: Delete on Sync (organizations don't change often)
Relationships: None
#
Endpoint 2: Devices (All Managed Endpoints)
Get detailed information about all managed devices across all organizations.
Configuration:
- Name:
Devices - Path:
/devices-detailed - Method:
GET - Query Parameters: (none needed)
Optional Query Parameters:
df:class,system,os,memory(specify detail fields)pageSize:1000(results per page)
Field Mapping:
- ID Field:
uid(orid) - Title Field:
name(fallback todisplayNameorsystemName) - Date Field:
created - Summary Fields:
os.name,nodeClass,memory.capacity - Status Field:
offline- Important: Enable "Invert Status Boolean"
- This maps
offline: false→okandoffline: true→critical
Retention Mode: Keep All (preserve device history)
Relationships:
- Link to Organizations endpoint
- Source Field:
organizationId - Target Endpoint: Organizations
- Target ID Field:
id - Fields to Include:
name(organization name)
#
Endpoint 3: Alerts
Monitor all active alerts across your managed devices.
Configuration:
- Name:
Alerts - Path:
/alerts - Method:
GET - Query Parameters: (none needed)
Optional Query Parameters:
status:OPEN(only open alerts)severity:CRITICAL(only critical alerts)pageSize:1000
Field Mapping:
- ID Field:
uid - Title Field:
subject - Date Field:
createTime - Summary Fields:
message,severity - Status Field:
severity- Map
CRITICAL→critical - Map
WARNING→warning - Map
INFO→info
- Map
Retention Mode: Keep All (preserve alert history)
Relationships:
- Link to Devices endpoint
- Source Field:
deviceId - Target Endpoint: Devices
- Target ID Field:
id - Fields to Include:
systemName,os.name,deviceType,nodeClass
This allows AI to answer: "Which device triggered this alert?" and "Show me device details for this alert"
#
Endpoint 4: Offline Devices
Quickly identify devices that are currently offline.
Configuration:
- Name:
Offline Devices - Path:
/devices-detailed - Method:
GET
Query Parameters:
df:class,system,ospageSize:1000
Note: You'll need to create a Smart Filter instead (see Part 4).
Alternative: Use Smart Filter on Devices endpoint:
- Condition:
offlineequalstrue
#
Endpoint 5: Device Software Inventory (Optional)
Track installed software on a specific device.
Configuration:
- Name:
Software - [Device Name] - Path:
/device/{deviceId}/software - Method:
GET
Replace {deviceId} with actual device ID from Devices endpoint.
Field Mapping:
- ID Field:
id - Title Field:
name - Summary Fields:
version,publisher
Use Case: Create separate endpoints for key servers/workstations to track software inventory.
#
Endpoint 6: Device Activities (Optional)
Track activities/events on a specific device.
Configuration:
- Name:
Activities - [Device Name] - Path:
/device/{deviceId}/activities - Method:
GET
Query Parameters:
pageSize:100olderThan: (timestamp for pagination)
Field Mapping:
- ID Field:
id - Title Field:
activityType - Date Field:
activityTime - Summary Fields:
status,user
#
Part 3: Understanding NinjaOne API Data
#
Device Data Structure
When you sync devices, you'll get data like:
{
"id": 123,
"uid": "abc-123-def-456",
"organizationId": 456,
"name": "WORKSTATION-01",
"displayName": "John's Workstation",
"systemName": "WORKSTATION-01.domain.com",
"nodeClass": "WINDOWS_WORKSTATION",
"deviceType": "LAPTOP",
"offline": false,
"created": "2024-01-15T10:00:00Z",
"lastContact": "2024-01-26T14:30:00Z",
"os": {
"name": "Windows 11 Pro",
"version": "10.0.22621"
},
"memory": {
"capacity": 34359738368
},
"cpu": {
"name": "Intel Core i7-12700"
},
"disks": [
{
"name": "C:",
"freeSpace": 483183820800,
"size": 1000204886016
}
]
}
#
Alert Data Structure
{
"uid": "alert-123",
"deviceId": 123,
"subject": "Disk space low on C:",
"message": "C: drive has less than 10% free space",
"severity": "CRITICAL",
"status": "OPEN",
"createTime": "2024-01-26T14:00:00Z"
}
#
Organization Data Structure
{
"id": 456,
"name": "Acme Corporation",
"description": "Main office and 3 satellite locations",
"nodeApprovalMode": "AUTOMATIC",
"created": "2023-06-01T00:00:00Z"
}
#
Part 4: Create Useful Filters
#
Filter 1: Offline Devices
- Under NinjaOne source, click "+" → "New Filter"
- Name:
Offline Devices - Select Endpoint: Devices
- Add Condition:
- Field:
offline - Type: Boolean (or use raw field)
- Operator:
is true(orequals) - Value:
true
- Field:
- Logic: Match ALL conditions (AND)
- Save
#
Filter 2: Critical Alerts (Last 24 Hours)
- Create new filter
- Name:
Critical Alerts - 24h - Select Endpoint: Alerts
- Add Conditions:
- Field:
severity - Operator:
equals - Value:
CRITICAL - AND
- Field:
createTime - Operator:
in last - Value:
24 hours
- Field:
- Logic: Match ALL (AND)
- Save
#
Filter 3: Windows Workstations
- Create new filter
- Name:
Windows Workstations - Select Endpoint: Devices
- Add Conditions:
- Field:
nodeClass - Operator:
contains - Value:
WINDOWS_WORKSTATION
- Field:
- Save
#
Filter 4: Devices Not Seen in 7 Days
- Create new filter
- Name:
Stale Devices (7+ days) - Select Endpoint: Devices
- Add Condition:
- Field:
lastContact - Operator:
not in last - Value:
7 days
- Field:
- Save
#
Filter 5: Specific Client Devices
- Create new filter
- Name:
[Client Name] Devices - Select Endpoint: Devices
- Add Condition:
- Field:
organizationId - Operator:
equals - Value:
[Organization ID number](get from Organizations endpoint)
- Field:
- Save
Pro Tip: Create one filter per VIP client for quick access.
#
Filter 6: Low Disk Space
- Create new filter
- Name:
Low Disk Space (<10%) - Select Endpoint: Devices
- Add Condition:
- Field:
disks[0].freeSpacePercent(you may need to check raw JSON for exact path) - Operator:
less than - Value:
10
- Field:
- Save
#
Part 5: Use AI to Monitor Your Fleet
Now you can ask intelligent questions about your NinjaOne 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 this week?"
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"
Organization Overview:
- "How many devices does Acme Corp have?"
- "Which organization has the most devices?"
- "List all my clients and their device counts"
System Analysis:
- "Show me all devices running Windows 10"
- "Which workstations have low memory?"
- "Find laptops vs desktops across all clients"
- "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 critical 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 organizations"
Relationship Queries (Powered by linked data):
- "What organization 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
NinjaOne API supports various query parameters:
Pagination:
pageSize: 1000 - Results per page
after: 123 - Cursor for next page
Detail Fields (devices-detailed):
df: class,system,os,memory,disks,cpu,network
Available detail categories:
class- Device classificationsystem- System infoos- Operating system detailsmemory- RAM informationdisks- Disk/storage detailscpu- Processor informationnetwork- Network adaptersbios- BIOS/UEFI infoantivirus- AV status
Alert Filtering:
status: OPEN - Only open alerts
severity: CRITICAL - Only critical
lang: en-US - Language for messages
#
Status Field Mapping
NinjaOne uses various status representations:
Device Status (offline field):
offline: false→ Device is online → Map tookoffline: true→ Device is offline → Map tocritical- Important: Enable "Invert Status Boolean" in Weavestream
Alert Severity:
CRITICAL→criticalWARNING→warningINFO→info
Node Class (Device Types):
WINDOWS_WORKSTATIONWINDOWS_SERVERMACLINUX_SERVERVMWARE_VM_GUESTHYPER_V_VM_GUESTCLOUD_MONITOR_TARGETNMS_DEVICE(network devices)
#
Relationship Configuration
Weavestream's relationship feature lets AI understand connections between data.
Example: Devices → Organizations
When you link devices to organizations:
- AI can answer: "Which organization owns this device?"
- Can query: "Show me all devices for Acme Corp"
- Enriches device data with org name
Configuration:
- Source Field:
organizationId(in Devices) - Target Endpoint: Organizations
- Target ID Field:
id(in Organizations) - 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 (OS, memory, etc.)
Configuration:
- Source Field:
deviceId(in Alerts) - Target Endpoint: Devices
- Target ID Field:
id(in Devices) - Fields to Include:
systemName,os.name,deviceType
#
Part 7: Multi-Organization Setup
For MSPs managing many clients:
#
Approach 1: Single Devices Endpoint + Filters (Recommended)
Setup:
- One "Devices" endpoint for all organizations
- Create Smart Filters per organization
- Filter condition:
organizationId equals [ORG_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 org-specific paths (if API supports)
- Or use query parameters to filter by org
- Each client gets dedicated endpoint
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+ organizations.
#
Troubleshooting
#
Issue: "OAuth authorization failed"
Solution:
- Verify Authorization URL is
https://app.ninjarmm.com/ws/oauth/authorize - Check Token URL is
https://app.ninjarmm.com/ws/oauth/token - Ensure redirect URI in NinjaOne matches:
http://localhost:8080/callback - Verify "Use Basic Auth" is checked
- Make sure API app has "monitoring" scope enabled
- Try revoking and re-authorizing
#
Issue: "No devices returned"
Solution:
- Verify you have managed devices in NinjaOne
- Check API permissions include device read access
- Try
/devicesendpoint first (simpler than/devices-detailed) - Ensure your NinjaOne user role has device visibility
#
Issue: "Token expired" or "401 Unauthorized"
Solution:
- OAuth tokens expire - Weavestream should auto-refresh
- Check refresh token is being stored correctly
- Try re-authorizing OAuth flow
- Verify API application is still active in NinjaOne
#
Issue: "Offline status not mapping correctly"
Solution:
- Enable "Invert Status Boolean" in device endpoint mapping
- This converts
offline: falsetookstatus - Check raw JSON to verify field name is exactly
offline
#
Issue: "Relationships not working"
Solution:
- Ensure both endpoints (source and target) are syncing successfully
- Verify relationship source field exists in data (e.g.,
organizationId) - Check target ID field matches (e.g., organization
id) - Make sure target endpoint is synced before source endpoint
#
Issue: "Too many API calls / Rate limited"
Solution:
- Increase refresh interval (15 min → 30 min)
- Remove detail fields (
dfparameter) to reduce payload - Reduce
pageSizeif hitting timeouts - Stagger sync times for multiple endpoints
- Check NinjaOne API rate limits for your plan
#
API Rate Limits
NinjaOne API limits vary by plan:
- Standard: 100-200 requests per minute
- Enterprise: Higher limits
Best practices:
- Don't set refresh below 15 minutes for multiple endpoints
- Use
pageSizeto balance between API calls and data freshness - Monitor API usage in NinjaOne dashboard (Administration → API)
#
Security Best Practices
#
✅ Do:
- Use "monitoring" scope only (read-only)
- Rotate Client Secret every 90 days
- Create separate API apps for each integration
- Use OAuth Authorization Code flow (not Client Credentials)
- Monitor API access logs regularly
- Store credentials securely (Weavestream uses macOS Keychain)
#
❌ Don't:
- Grant "management" scope unless needed for automation
- Share Client Secret with anyone
- Use the same API app for multiple integrations
- Store credentials in plain text
- Leave inactive API apps enabled
#
Additional NinjaOne Endpoints
Here are more endpoints you can add:
#
Policies
Path: /policies
List all monitoring policies and configurations.
#
Scripts
Path: /scripts
Get automation scripts available in your NinjaOne environment.
#
Jobs
Path: /jobs
Track script execution jobs and their status.
#
Tickets (If Integrated)
Path: /ticketing/tickets
Monitor PSA tickets if you have NinjaOne ticketing enabled.
#
Groups
Path: /groups
Device groups for organizing managed endpoints.
#
Webhooks
Path: /webhooks
List configured webhooks for external integrations.
#
Integration with Other Tools
NinjaOne works great alongside:
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 (ConnectWise, Autotask):
- Link alerts to tickets
- Track device assignments to clients
- Generate billing reports
Backup Solutions (Veeam, Acronis):
- Verify backup coverage across all devices
- Identify devices missing from backup
- Cross-check backup status with device health
#
Summary Checklist
Before you finish, verify:
- ✅ NinjaOne API application created with monitoring scope
- ✅ OAuth authorization completed successfully
- ✅ NinjaOne source added to Weavestream
- ✅ Devices endpoint syncing (with offline status inverted)
- ✅ Organizations endpoint syncing
- ✅ Alerts endpoint syncing
- ✅ Relationships configured (Devices→Orgs, Alerts→Devices)
- ✅ Smart filters created for offline devices, critical alerts
- ✅ Tested AI questions about your NinjaOne 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
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 NinjaOne and Action1"
Last updated: February 2026 NinjaOne API version: v2