Skip to main content
REST API endpoints for managing devices, recordings, events, rules, and alerts across your fleet. All endpoints require authentication via API key.
The Fleet API is in preview. Endpoints described on this page may change.

Base URL

All Fleet API requests use the standard Avala API base URL:
https://api.avala.ai/api/v1/fleet
Authenticate every request with your API key in the X-Avala-Api-Key header. See Authentication for details on creating and managing keys.

Devices

Register, list, and manage devices in your fleet.

List Devices

GET /api/v1/fleet/devices/
Returns all devices in your organization. Query Parameters
ParameterTypeDescription
statusstringFilter by device status: online, offline, maintenance
typestringFilter by device type (e.g., manipulator, amr, vehicle)
tagsstringComma-separated tag filter
metadatastringJSON-encoded metadata filter (e.g., {"location": "warehouse-1"})
limitintegerResults per page (default: 50, max: 200)
cursorstringPagination cursor
curl "https://api.avala.ai/api/v1/fleet/devices/?status=online" \
  -H "X-Avala-Api-Key: avk_your_api_key"
Response
{
  "next": "https://api.avala.ai/api/v1/fleet/devices/?cursor=eyJpZCI6MTB9",
  "previous": null,
  "results": [
    {
      "uid": "dev_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "name": "robot-alpha-01",
      "type": "amr",
      "status": "online",
      "tags": ["warehouse", "floor-2"],
      "last_seen_at": "2026-02-26T14:30:00Z",
      "firmware_version": "2.4.1",
      "metadata": {
        "model": "AMR-500",
        "location": "Building A"
      },
      "created_at": "2025-11-01T08:00:00Z",
      "updated_at": "2026-02-26T14:30:00Z"
    }
  ]
}

Register Device

POST /api/v1/fleet/devices/
Register a new device in your fleet. Request Body
FieldTypeRequiredDescription
namestringYesHuman-readable device name
typestringNoDevice type (e.g., manipulator, amr, drone)
firmware_versionstringNoCurrent firmware version
tagsarrayNoTags for organizing devices
metadataobjectNoArbitrary key-value metadata
curl -X POST "https://api.avala.ai/api/v1/fleet/devices/" \
  -H "X-Avala-Api-Key: avk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "robot-alpha-02",
    "tags": ["warehouse", "floor-1"],
    "metadata": {
      "model": "AMR-500",
      "location": "Building A"
    }
  }'
Response 201 Created
{
  "uid": "dev_f7e8d9c0-b1a2-3456-cdef-789012345678",
  "name": "robot-alpha-02",
  "status": "offline",
  "tags": ["warehouse", "floor-1"],
  "last_seen_at": null,
  "firmware_version": null,
  "metadata": {
    "model": "AMR-500",
    "location": "Building A"
  },
  "device_token": "dtk_abc123def456...",
  "created_at": "2026-02-26T15:00:00Z",
  "updated_at": "2026-02-26T15:00:00Z"
}
The device_token is returned only in the create response. Store it securely — it cannot be retrieved again. The device uses this token to authenticate when uploading recordings.

Get Device

GET /api/v1/fleet/devices/{uid}/
Returns the full details of a single device.
curl "https://api.avala.ai/api/v1/fleet/devices/dev_a1b2c3d4-e5f6-7890-abcd-ef1234567890/" \
  -H "X-Avala-Api-Key: avk_your_api_key"

Update Device

PATCH /api/v1/fleet/devices/{uid}/
Update a device’s name, tags, or metadata. Only provided fields are modified.
FieldTypeDescription
namestringUpdated device name
statusstringDevice status: online, offline, maintenance
firmware_versionstringCurrent firmware version
tagsarrayReplacement tags (replaces all existing tags)
metadataobjectReplacement metadata (merged with existing)
curl -X PATCH "https://api.avala.ai/api/v1/fleet/devices/dev_a1b2c3d4-e5f6-7890-abcd-ef1234567890/" \
  -H "X-Avala-Api-Key: avk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"tags": ["warehouse", "floor-3"]}'

Deregister Device

DELETE /api/v1/fleet/devices/{uid}/
Remove a device from your fleet. Recordings associated with the device are not deleted.
curl -X DELETE "https://api.avala.ai/api/v1/fleet/devices/dev_a1b2c3d4-e5f6-7890-abcd-ef1234567890/" \
  -H "X-Avala-Api-Key: avk_your_api_key"
Response 204 No Content

Device Fields

FieldTypeDescription
uidstringUnique device identifier
namestringHuman-readable name
typestringDevice type (e.g., manipulator, amr, drone)
statusstringonline, offline, or maintenance
tagsarrayOrganization tags
last_seen_atstring (ISO 8601)Last heartbeat timestamp
firmware_versionstringReported firmware version
metadataobjectArbitrary key-value metadata
created_atstring (ISO 8601)Registration timestamp
updated_atstring (ISO 8601)Last update timestamp

Recordings

List, filter, and manage recordings uploaded by fleet devices.

List Recordings

GET /api/v1/fleet/recordings/
Returns recordings across your fleet, ordered by creation date descending. Query Parameters
ParameterTypeDescription
device_idstringFilter by device UID
statusstringFilter by status: uploading, processing, ready, error, archived
sincestring (ISO 8601)Return recordings created after this timestamp
untilstring (ISO 8601)Return recordings created before this timestamp
tagsstringComma-separated tag filter
limitintegerResults per page (default: 50, max: 200)
cursorstringPagination cursor
curl "https://api.avala.ai/api/v1/fleet/recordings/?device_id=dev_a1b2c3d4&status=ready&since=2026-02-01T00:00:00Z" \
  -H "X-Avala-Api-Key: avk_your_api_key"
Response
{
  "next": null,
  "previous": null,
  "results": [
    {
      "uid": "rec_11223344-5566-7788-99aa-bbccddeeff00",
      "device_id": "dev_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "device_name": "robot-alpha-01",
      "status": "ready",
      "duration_seconds": 342.5,
      "size_bytes": 1073741824,
      "topic_count": 12,
      "tags": ["mission-47", "outdoor"],
      "started_at": "2026-02-26T10:00:00Z",
      "ended_at": "2026-02-26T10:05:42Z",
      "created_at": "2026-02-26T10:06:00Z"
    }
  ]
}

Get Recording

GET /api/v1/fleet/recordings/{uid}/
Returns full recording details including topic list and processing metadata.
curl "https://api.avala.ai/api/v1/fleet/recordings/rec_11223344-5566-7788-99aa-bbccddeeff00/" \
  -H "X-Avala-Api-Key: avk_your_api_key"
Response
{
  "uid": "rec_11223344-5566-7788-99aa-bbccddeeff00",
  "device_id": "dev_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "device_name": "robot-alpha-01",
  "status": "ready",
  "duration_seconds": 342.5,
  "size_bytes": 1073741824,
  "topic_count": 12,
  "tags": ["mission-47", "outdoor"],
  "topics": [
    {
      "name": "/camera/front/image",
      "schema": "sensor_msgs/Image",
      "message_count": 3425,
      "frequency_hz": 10.0
    },
    {
      "name": "/lidar/points",
      "schema": "sensor_msgs/PointCloud2",
      "message_count": 3425,
      "frequency_hz": 10.0
    }
  ],
  "started_at": "2026-02-26T10:00:00Z",
  "ended_at": "2026-02-26T10:05:42Z",
  "created_at": "2026-02-26T10:06:00Z"
}

Update Recording

PATCH /api/v1/fleet/recordings/{uid}/
Update a recording’s tags or status.
FieldTypeDescription
tagsarrayReplacement tags
statusstringSet to archived to archive the recording
curl -X PATCH "https://api.avala.ai/api/v1/fleet/recordings/rec_11223344-5566-7788-99aa-bbccddeeff00/" \
  -H "X-Avala-Api-Key: avk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"tags": ["mission-47", "outdoor", "reviewed"]}'

Delete Recording

DELETE /api/v1/fleet/recordings/{uid}/
Permanently delete a recording and all associated data.
This action is irreversible. All recording data, events, and associated files are permanently removed.
curl -X DELETE "https://api.avala.ai/api/v1/fleet/recordings/rec_11223344-5566-7788-99aa-bbccddeeff00/" \
  -H "X-Avala-Api-Key: avk_your_api_key"
Response 204 No Content

Recording Fields

FieldTypeDescription
uidstringUnique recording identifier
device_idstringUID of the device that created the recording
device_namestringHuman-readable device name
statusstringuploading, processing, ready, error, or archived
duration_secondsnumberRecording duration in seconds
size_bytesintegerTotal file size in bytes
topic_countintegerNumber of topics in the recording
tagsarrayOrganization tags
topicsarrayTopic details (only in detail endpoint)
started_atstring (ISO 8601)Recording start timestamp
ended_atstring (ISO 8601)Recording end timestamp
created_atstring (ISO 8601)Upload timestamp

Events

Create and query timeline events associated with recordings.

List Events

GET /api/v1/fleet/events/
Returns events across your fleet, ordered by timestamp descending. Query Parameters
ParameterTypeDescription
recording_idstringFilter by recording UID
device_idstringFilter by device UID
typestringFilter by event type: error, warning, info, state_change, anomaly, custom
severitystringFilter by severity: info, warning, error, critical
sincestring (ISO 8601)Return events after this timestamp
untilstring (ISO 8601)Return events before this timestamp
order_bystringSort order: timestamp (ascending) or -timestamp (descending, default)
metadata_filterstringJSON-encoded metadata query (e.g., {"motor_id": "joint_3"})
tagsstringComma-separated tag filter
limitintegerResults per page (default: 50, max: 200)
cursorstringPagination cursor
curl "https://api.avala.ai/api/v1/fleet/events/?recording_id=rec_11223344&severity=error" \
  -H "X-Avala-Api-Key: avk_your_api_key"
Response
{
  "next": null,
  "previous": null,
  "results": [
    {
      "uid": "evt_aabbccdd-eeff-0011-2233-445566778899",
      "recording_id": "rec_11223344-5566-7788-99aa-bbccddeeff00",
      "device_id": "dev_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "type": "anomaly",
      "label": "LiDAR topic /lidar/points dropped 15 messages in 2s window",
      "severity": "error",
      "timestamp": "2026-02-26T10:03:22Z",
      "metadata": {
        "topic": "/lidar/points",
        "dropped_count": 15,
        "window_seconds": 2
      },
      "created_at": "2026-02-26T10:03:22Z"
    }
  ]
}

Create Event

POST /api/v1/fleet/events/
Create a new event associated with a recording or device. Request Body
FieldTypeRequiredDescription
recording_idstringYesRecording to associate the event with
typestringYeserror, warning, info, state_change, anomaly, or custom
labelstringYesHuman-readable event label
timestampstring (ISO 8601)YesWhen the event occurred
descriptionstringNoDetailed description of the event
duration_msnumberNoDuration of the event in milliseconds (for span-like events)
tagsarrayNoTags for categorizing the event
metadataobjectNoArbitrary event metadata
severitystringNoOverride severity: info, warning, error, critical. Defaults based on type.
curl -X POST "https://api.avala.ai/api/v1/fleet/events/" \
  -H "X-Avala-Api-Key: avk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "recording_id": "rec_11223344-5566-7788-99aa-bbccddeeff00",
    "type": "anomaly",
    "label": "CPU usage exceeded 90% threshold",
    "timestamp": "2026-02-26T10:02:15Z",
    "metadata": {
      "cpu_percent": 93.2,
      "threshold": 90
    }
  }'
Response 201 Created

Batch Create Events

POST /api/v1/fleet/events/batch/
Create multiple events in a single request. Accepts up to 1,000 events. Events are created atomically — if any event fails validation, none are created. Request Body
FieldTypeRequiredDescription
recording_idstringYesRecording to attach events to
eventsarrayYesArray of event objects (max 1,000)
Each event object accepts the same fields as POST /api/v1/fleet/events/ (excluding recording_id, which is set at the top level).
curl -X POST "https://api.avala.ai/api/v1/fleet/events/batch/" \
  -H "X-Avala-Api-Key: avk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "recording_id": "rec_11223344-5566-7788-99aa-bbccddeeff00",
    "events": [
      {"timestamp": "2026-02-26T10:02:15Z", "type": "error", "label": "Motor overtemp"},
      {"timestamp": "2026-02-26T10:02:20Z", "type": "state_change", "label": "Emergency stop"}
    ]
  }'
Response 201 Created — Returns the array of created event objects.

Get Event

GET /api/v1/fleet/events/{uid}/

Delete Event

DELETE /api/v1/fleet/events/{uid}/
Response 204 No Content

Event Fields

FieldTypeDescription
uidstringUnique event identifier
recording_idstringAssociated recording UID
device_idstringDevice that generated the event (derived from recording)
typestringerror, warning, info, state_change, anomaly, or custom
labelstringHuman-readable event label
descriptionstringDetailed event description
timestampstring (ISO 8601)When the event occurred
duration_msnumberEvent duration in milliseconds (nullable)
tagsarrayEvent tags
metadataobjectArbitrary metadata
severitystringinfo, warning, error, or critical
created_atstring (ISO 8601)Server-side creation timestamp

Rules

Recording rules define conditions that automatically trigger events, flag recordings, or start processing pipelines.

List Rules

GET /api/v1/fleet/rules/
curl "https://api.avala.ai/api/v1/fleet/rules/" \
  -H "X-Avala-Api-Key: avk_your_api_key"
Query parameters
ParameterTypeDescription
enabledbooleanFilter by enabled/disabled status.
condition_typestringFilter by condition type (threshold, pattern, frequency, absence, composite).
Response
{
  "next": null,
  "previous": null,
  "results": [
    {
      "uid": "rul_00112233-4455-6677-8899-aabbccddeeff",
      "name": "Flag high CPU recordings",
      "description": "Flag any recording where CPU exceeds 90% for more than 10 seconds",
      "enabled": true,
      "condition": {
        "type": "threshold",
        "topic": "/diagnostics/cpu",
        "field": "data.aggregate_percent",
        "operator": "gt",
        "value": 90,
        "window": "10s"
      },
      "actions": [
        {
          "type": "tag",
          "value": "high-cpu"
        },
        {
          "type": "create_event",
          "event_type": "warning",
          "label": "CPU exceeded 90% for >10s"
        }
      ],
      "scope": null,
      "hit_count": 42,
      "last_hit_at": "2026-02-25T18:45:00Z",
      "created_at": "2026-01-15T09:00:00Z",
      "updated_at": "2026-02-20T11:30:00Z"
    }
  ]
}

Create Rule

POST /api/v1/fleet/rules/
Request Body
FieldTypeRequiredDescription
namestringYesHuman-readable rule name
descriptionstringNoDescription of the rule’s purpose
enabledbooleanNoWhether the rule is active (default: true)
conditionobjectYesTrigger condition (see below)
actionsarrayYesActions to execute when the condition is met
scopeobjectNoLimit rule to specific devices or groups. Contains device_ids and/or group_ids arrays.
Condition Types
TypeDescriptionRequired Fields
thresholdFires when a topic field exceeds a valuetopic, field, operator, value, optional window
patternFires when a topic field matches a regex patterntopic, field, regex
frequencyFires when event count crosses a threshold in a time windowtopic, count_operator, count, window
absenceFires when expected data is missing for a durationtopic, timeout
compositeLogical combination of other conditionsoperator (and or or), conditions
Action Types
TypeDescriptionRequired Fields
tagAdd a tag to the recordingvalue
create_eventCreate a timeline eventevent_type, label, optional severity
flag_for_reviewFlag the recording for manual review
notifySend notification to an alert channelchannel_id
auto_labelTrigger an auto-labeling pipelinepipeline_id
curl -X POST "https://api.avala.ai/api/v1/fleet/rules/" \
  -H "X-Avala-Api-Key: avk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "LiDAR dropout detection",
    "description": "Detect when LiDAR data is missing for more than 2 seconds",
    "condition": {
      "type": "absence",
      "topic": "/lidar/points",
      "timeout": "2s"
    },
    "actions": [
      {"type": "create_event", "event_type": "error", "label": "LiDAR data missing for >2s"},
      {"type": "tag", "value": "lidar-dropout"},
      {"type": "notify", "channel_id": "ch_aabb1122"}
    ]
  }'
Response 201 Created

Get Rule

GET /api/v1/fleet/rules/{uid}/

Update Rule

PATCH /api/v1/fleet/rules/{uid}/
Update a rule’s name, description, enabled state, condition, or actions. Only provided fields are modified.
FieldTypeDescription
namestringUpdated rule name
descriptionstringUpdated description
enabledbooleanSet to false to disable the rule, true to re-enable
conditionobjectUpdated trigger condition
actionsarrayUpdated list of actions

Delete Rule

DELETE /api/v1/fleet/rules/{uid}/
Response 204 No Content

Rule Fields

FieldTypeDescription
uidstringUnique rule identifier
namestringHuman-readable name
descriptionstringRule description
enabledbooleanWhether the rule is active
conditionobjectTrigger condition
actionsarrayActions to execute
scopeobjectRestricts rule to specific devices, groups, or tags (nullable)
hit_countintegerTotal number of times the rule has triggered
last_hit_atstring (ISO 8601)When the rule last triggered (nullable)
created_atstring (ISO 8601)Creation timestamp
updated_atstring (ISO 8601)Last update timestamp

Alerts

View and manage alerts generated by recording rules and diagnostics thresholds.

List Alerts

GET /api/v1/fleet/alerts/
Returns alerts ordered by creation date descending. Query Parameters
ParameterTypeDescription
device_idstringFilter by device UID
recording_idstringFilter by recording UID
rule_idstringFilter by rule UID
channel_idstringFilter by notification channel UID
statusstringFilter by status: open, acknowledged, resolved
severitystringFilter by severity: info, warning, error, critical
sincestring (ISO 8601)Return alerts created after this timestamp
untilstring (ISO 8601)Return alerts created before this timestamp
limitintegerResults per page (default: 50, max: 200)
cursorstringPagination cursor
curl "https://api.avala.ai/api/v1/fleet/alerts/?status=open&severity=error" \
  -H "X-Avala-Api-Key: avk_your_api_key"
Response
{
  "next": null,
  "previous": null,
  "results": [
    {
      "uid": "alt_99887766-5544-3322-1100-ffeeddccbbaa",
      "rule_id": "rul_00112233-4455-6677-8899-aabbccddeeff",
      "rule_name": "LiDAR dropout detection",
      "device_id": "dev_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "device_name": "robot-alpha-01",
      "recording_id": "rec_11223344-5566-7788-99aa-bbccddeeff00",
      "severity": "error",
      "status": "open",
      "message": "LiDAR frequency dropped below 8 Hz",
      "triggered_at": "2026-02-26T10:03:22Z",
      "acknowledged_at": null,
      "resolved_at": null,
      "created_at": "2026-02-26T10:03:22Z"
    }
  ]
}

Get Alert

GET /api/v1/fleet/alerts/{uid}/

Acknowledge Alert

POST /api/v1/fleet/alerts/{uid}/acknowledge/
Mark an alert as acknowledged. This indicates that someone is aware of the issue and is investigating.
curl -X POST "https://api.avala.ai/api/v1/fleet/alerts/alt_99887766-5544-3322-1100-ffeeddccbbaa/acknowledge/" \
  -H "X-Avala-Api-Key: avk_your_api_key"
Response
{
  "uid": "alt_99887766-5544-3322-1100-ffeeddccbbaa",
  "status": "acknowledged",
  "acknowledged_at": "2026-02-26T10:15:00Z",
  "acknowledged_by": "johndoe"
}

Resolve Alert

POST /api/v1/fleet/alerts/{uid}/resolve/
Mark an alert as resolved. Optionally include a resolution note. Request Body
FieldTypeRequiredDescription
notestringNoResolution note describing what was done
curl -X POST "https://api.avala.ai/api/v1/fleet/alerts/alt_99887766-5544-3322-1100-ffeeddccbbaa/resolve/" \
  -H "X-Avala-Api-Key: avk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"note": "LiDAR sensor recalibrated and firmware updated to v2.4.2"}'

Alert Fields

FieldTypeDescription
uidstringUnique alert identifier
rule_idstringRule that triggered the alert
rule_namestringHuman-readable rule name
device_idstringDevice associated with the alert
device_namestringHuman-readable device name
recording_idstringRecording associated with the alert (nullable)
severitystringinfo, warning, error, or critical
statusstringopen, acknowledged, or resolved
messagestringAlert description
triggered_atstring (ISO 8601)When the alert condition was met
acknowledged_atstring (ISO 8601)When the alert was acknowledged (nullable)
acknowledged_bystringUser who acknowledged the alert (nullable)
resolved_atstring (ISO 8601)When the alert was resolved (nullable)
durationstringComputed time between triggered_at and resolved_at (nullable)
created_atstring (ISO 8601)Server-side creation timestamp

Alert Channels

Configure notification destinations for alerts.

List Channels

GET /api/v1/fleet/alerts/channels/
curl "https://api.avala.ai/api/v1/fleet/alerts/channels/" \
  -H "X-Avala-Api-Key: avk_your_api_key"
Response
{
  "next": null,
  "previous": null,
  "results": [
    {
      "uid": "ch_aabb1122-3344-5566-7788-99aabbccddee",
      "name": "Engineering Slack",
      "type": "slack",
      "config": {
        "webhook_url": "https://hooks.slack.com/services/..."
      },
      "created_at": "2026-01-10T08:00:00Z"
    },
    {
      "uid": "ch_ffeeddcc-bbaa-9988-7766-554433221100",
      "name": "Ops Team Email",
      "type": "email",
      "config": {
        "recipients": ["ops@example.com"]
      },
      "created_at": "2026-01-10T08:30:00Z"
    }
  ]
}

Create Channel

POST /api/v1/fleet/alerts/channels/
Request Body
FieldTypeRequiredDescription
namestringYesChannel display name
typestringYesChannel type: slack, email, or webhook
configobjectYesChannel-specific configuration (see below)
Channel Configuration
TypeConfig Fields
slackwebhook_url (required) — Slack incoming webhook URL; channel — Optional channel override; username — Optional display name; icon_emoji — Optional emoji icon
emailrecipients (required) — Array of email addresses; subject_prefix — Optional email subject prefix
webhookurl (required) — HTTP endpoint URL; signing_secret — Optional HMAC signing secret; headers — Optional custom headers
curl -X POST "https://api.avala.ai/api/v1/fleet/alerts/channels/" \
  -H "X-Avala-Api-Key: avk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Engineering Slack",
    "type": "slack",
    "config": {
      "webhook_url": "https://hooks.slack.com/services/T00/B00/xxx"
    }
  }'
Response 201 Created

Delete Channel

DELETE /api/v1/fleet/alerts/channels/{uid}/
Deleting a channel that is referenced by active rules does not delete the rules. The rules continue to function, but the notify action is skipped for the deleted channel.
Response 204 No Content

Channel Fields

FieldTypeDescription
uidstringUnique channel identifier
namestringDisplay name
typestringslack, email, or webhook
configobjectChannel-specific configuration
created_atstring (ISO 8601)Creation timestamp

Common Patterns

Pagination

All list endpoints use cursor-based pagination. Follow the next URL until it returns null to retrieve all results.
{
  "next": "https://api.avala.ai/api/v1/fleet/devices/?cursor=eyJpZCI6MTB9",
  "previous": null,
  "results": [...]
}
Use the limit parameter to control page size. The maximum is 200 results per page.

Error Responses

The Fleet API uses standard Avala error responses. See Error Codes for the full reference.
StatusDescription
400Bad Request — invalid or missing fields
401Unauthorized — missing or invalid API key
403Forbidden — insufficient permissions
404Not Found — resource does not exist
409Conflict — resource already exists (e.g., duplicate device name)
429Too Many Requests — rate limit exceeded

Rate Limits

Fleet API endpoints share the standard Avala rate limits. See Rate Limits for details.

Additional SDK Resources

The following fleet features are available through the Python and TypeScript SDKs. REST endpoint documentation will be added as these features stabilize.
ResourceDescriptionGuide
Device GroupsOrganize devices into logical groups for scoped rules and metricsFleet Dashboard
Fleet MetricsAggregate fleet statistics and time-series telemetryFleet Dashboard
Escalation PoliciesDefine multi-stage alert escalation workflowsAlerts & Notifications
Alert Muting & SnoozingSuppress alerts during maintenance windowsAlerts & Notifications

Next Steps