API Endpoints
Complete REST API reference. All endpoints require a Bearer token unless noted otherwise.
Base URL: https://api.maxrmm.com/api
All requests must include Authorization: Bearer <access-token> unless marked as public.
Authentication
See API Authentication for detailed flow.
| Method | Endpoint | Description |
POST | /auth/login | Login with email + password. Returns tokens or MFA challenge. |
POST | /auth/mfa-verify | Submit TOTP code to complete MFA login. |
POST | /auth/refresh | Exchange a refresh token for new access + refresh tokens. |
Agents
| Method | Endpoint | Description |
GET | /agents | List all agents for the company. Returns hostname, status, OS, hardware, AV status, compliance, and more. |
GET | /agents/:id | Get full agent detail including software inventory and winget status. |
POST | /agents | Provision a new agent. Body: {"hostname": "..."}. Returns agent ID and one-time auth token. |
GET | /agents/:id/telemetry | Telemetry history. Query: ?hours=24. Returns CPU, RAM, disk, uptime, AV, WAN IP over time. |
GET | /agents/:id/alerts | Unresolved alerts for this agent (max 50). |
GET | /agents/:id/security-score | Security score + history. Query: ?days=7. |
GET | /agents/:id/compliance-bridge | Compliance framework mapping for all security checks on this agent. |
POST | /agents/:id/command | Send a command to the agent. Body: {"type": "patch-scan", "payload": {}}. |
Install Keys
| Method | Endpoint | Description |
GET | /install-keys | List all install keys for the company. |
POST | /install-keys | Create a new install key. Body: {"name": "...", "maxUses": 100, "expiresAt": "..."}. |
DELETE | /install-keys/:id | Revoke (disable) an install key. |
GET | /install-keys/:id/script | Generate a PowerShell install script for this key. Returns plain text. |
POST | /install-keys/:id/send | Email the install script link. Body: {"emails": ["user@company.com"]}. |
Alerts
| Method | Endpoint | Description |
GET | /alerts | List alerts. Query: ?status=open|resolved|all&severity=critical&agentId=...&limit=100. |
GET | /alerts/:id | Get alert detail with agent info and linked ticket. |
PUT | /alerts/:id/acknowledge | Acknowledge an alert (marks as seen). |
PUT | /alerts/:id/resolve | Resolve an alert. |
PUT | /alerts/maintenance | Toggle maintenance mode. Body: {"enabled": true, "durationMinutes": 60}. |
PUT | /alerts/snooze/:agentId | Snooze alerts for an agent. Body: {"durationMinutes": 120}. |
Alert Rules
Requires admin role.
| Method | Endpoint | Description |
GET | /alert-rules | List all alert rules. |
POST | /alert-rules | Create a rule. Body: {"category": "cpu", "condition": "above", "threshold": 90, "severity": "warning"}. |
PUT | /alert-rules/:id | Update a rule. |
DELETE | /alert-rules/:id | Delete a rule. |
Patches
| Method | Endpoint | Description |
GET | /patches/compliance | Compliance overview with per-agent status and fleet summary. |
GET | /patches/history | Patch event history. Query: ?agentId=...&limit=100. |
GET | /patches/policy | Get patch policy (auto-approve settings + maintenance window). |
PUT | /patches/policy | Update patch policy. Admin only. |
GET | /patches/winget-policy | Get winget application update policy. |
PUT | /patches/winget-policy | Update winget policy. Admin only. |
POST | /patches/scan | Trigger a patch scan. Optional body: {"agentIds": [...]}. Admin only. |
POST | /patches/install | Trigger patch installation. Optional body: {"agentIds": [...]}. Admin only. |
Scripts
| Method | Endpoint | Description |
GET | /scripts | List scripts (company + global). Query: ?category=...&language=powershell. |
GET | /scripts/:id | Get script detail including body. |
POST | /scripts | Create a script. Body: {"name": "...", "language": "powershell", "body": "...", "category": "..."}. |
PUT | /scripts/:id | Update a script (company scripts only; global scripts are read-only). |
DELETE | /scripts/:id | Delete a script (company scripts only). |
Scheduled Scripts
Requires admin role.
| Method | Endpoint | Description |
GET | /scheduled-scripts | List scheduled scripts. |
POST | /scheduled-scripts | Create a schedule. Body: {"name": "...", "scriptId": "...", "cron": "0 2 * * *", "agentFilter": null}. |
PUT | /scheduled-scripts/:id | Update a schedule. |
DELETE | /scheduled-scripts/:id | Delete a schedule. |
Event Triggers
Requires admin role.
| Method | Endpoint | Description |
GET | /event-triggers | List event triggers with linked scripts. |
POST | /event-triggers | Create a trigger. Body: {"name": "...", "alertCategory": "service", "scriptId": "...", "cooldownMin": 60}. |
PUT | /event-triggers/:id | Update a trigger. |
DELETE | /event-triggers/:id | Delete a trigger. |
Workflows
Requires admin role.
| Method | Endpoint | Description |
GET | /workflows | List workflows. |
GET | /workflows/:id | Get workflow detail including nodes and edges. |
POST | /workflows | Create a workflow. Body: {"name": "...", "trigger": {}, "nodes": [], "edges": []}. |
PUT | /workflows/:id | Update a workflow. |
DELETE | /workflows/:id | Delete a workflow. |
Tickets
| Method | Endpoint | Description |
GET | /tickets | List tickets. Query: ?status=open&assignedTo=...&priority=high&limit=50. |
GET | /tickets/:id | Get ticket detail with comments, time entries, linked agent, and alert. |
POST | /tickets | Create a ticket. Body: {"title": "...", "priority": "medium", "agentId": "..."}. |
PUT | /tickets/:id | Update a ticket (status, priority, assignedTo, title, description). |
POST | /tickets/:id/comments | Add a comment. Body: {"body": "...", "internal": false}. |
POST | /tickets/:id/time | Log time. Body: {"minutes": 30, "description": "...", "billable": true}. |
SLA
| Method | Endpoint | Description |
GET | /sla | Get SLA policy (response and resolution times by priority). |
PUT | /sla | Update SLA policy. |
GET | /sla/breaches | List tickets that have breached SLA targets. |
Reports
| Method | Endpoint | Description |
GET | /reports/available | List available report types. |
GET | /reports/agent-inventory | Download agent inventory report. Query: ?format=csv|pdf. |
GET | /reports/alert-summary | Download alert summary report. Query: ?format=csv|pdf. |
Scheduled Reports
Requires admin role.
| Method | Endpoint | Description |
GET | /scheduled-reports | List scheduled reports. |
POST | /scheduled-reports | Create a scheduled report. |
PUT | /scheduled-reports/:id | Update a scheduled report. |
DELETE | /scheduled-reports/:id | Delete a scheduled report. |
Integrations
| Method | Endpoint | Description |
GET | /integrations/catalog | Browse available integrations. Query: ?category=notification. |
GET | /integrations/installed | List installed integrations for your company. |
POST | /integrations/install/:catalogId | Install an integration. Admin only. |
PUT | /integrations/installed/:id | Update integration config or toggle. Admin only. |
DELETE | /integrations/installed/:id | Uninstall an integration. Admin only. |
Notification Integrations
| Method | Endpoint | Description |
GET | /integration-config | List notification integrations (Slack, Teams, etc.). |
POST | /integration-config | Add a notification integration. Body: {"slug": "slack", "config": {"webhookUrl": "..."}}. |
PUT | /integration-config/:id | Update config or toggle enabled. |
DELETE | /integration-config/:id | Remove a notification integration. |
POST | /integration-config/:id/test | Send a test notification. |
Webhooks
Requires admin role.
| Method | Endpoint | Description |
GET | /webhooks | List webhook endpoints. |
POST | /webhooks | Create a webhook. Body: {"url": "...", "events": ["alert.fired", "agent.offline"]}. Returns signing secret on creation. |
PUT | /webhooks/:id | Update a webhook. |
DELETE | /webhooks/:id | Delete a webhook. |
Webhook Events
| Event | Description |
alert.fired | A new alert was created |
alert.resolved | An alert was resolved |
agent.online | An agent connected |
agent.offline | An agent disconnected |
ticket.created | A new ticket was created |
ticket.updated | A ticket was updated |
script.completed | A script execution finished |
* | Subscribe to all events |