Skip to content

EDR Integrations

Breeze integrates with leading Endpoint Detection and Response (EDR) platforms to give you a unified view of endpoint security across your managed fleet. Instead of switching between your RMM and EDR consoles, you can view threat data, agent coverage, and incident details directly in Breeze.

Currently supported EDR vendors:

VendorData SyncedActions Available
HuntressAgents, incidentsWebhook ingestion, manual sync
SentinelOneAgents, threats, site mappingsDevice isolation, threat actions (kill, quarantine, rollback), manual sync

Both integrations follow the same pattern: you provide API credentials, Breeze syncs agent and threat data on a schedule, and the synced data is automatically mapped to your existing Breeze devices.

Auto-Linking: How EDR Agents Map to Breeze Devices

Section titled “Auto-Linking: How EDR Agents Map to Breeze Devices”

During each sync, Breeze automatically attempts to match imported EDR agents to enrolled Breeze devices. The matching logic differs slightly by vendor:

Huntress: Agents are matched by hostname (case-insensitive, trimmed). Breeze compares the Huntress agent’s hostname against both the hostname and displayName of every enrolled device in the organization. If a match is found, the Huntress agent and any associated incidents are linked to that Breeze device.

SentinelOne: Agents are matched first by hostname (the computerName field), then by IP address as a fallback. If the SentinelOne agent’s computer name matches a Breeze device hostname (case-insensitive), the match is made. If no hostname match exists, Breeze checks the agent’s network interfaces against known device IP addresses.

Agents that cannot be matched appear as “unmapped” in the integration status dashboard. To resolve unmapped agents, either enroll the missing device in Breeze or verify that the hostname in the EDR system matches the hostname reported by the Breeze agent.


The Huntress integration syncs agent inventory and incident reports from your Huntress account into Breeze. It supports both pull-based syncing (via the Huntress API) and push-based updates (via webhooks). Huntress agents are automatically matched to Breeze devices, and incidents are linked to the affected device when a mapping exists.

  1. In the Breeze dashboard, navigate to Settings > Integrations > Huntress.
  2. Provide a name for the integration (e.g., “Production Huntress”).
  3. Enter your Huntress API key. This is encrypted at rest using AES before being stored.
  4. Optionally provide your Huntress account ID and API base URL (defaults to https://api.huntress.io/v1).
  5. Optionally provide a webhook secret for signature verification on incoming webhook payloads.
  6. Click Save. An initial sync is automatically scheduled.

Huntress can push event notifications to Breeze in real time via webhooks. Configure the webhook URL in your Huntress dashboard:

POST https://your-breeze-instance.com/api/v1/huntress/webhook

Webhook payloads are verified using HMAC-SHA256 signature validation:

  1. Breeze reads the signature from the x-huntress-signature header (fallback: x-signature).
  2. Breeze reads the timestamp from the x-huntress-timestamp header (fallback: x-timestamp).
  3. Breeze computes HMAC-SHA256(secret, "{timestamp}.{body}") and compares the result to the provided signature using a timing-safe comparison.
  4. The timestamp must be within 10 minutes of the current server time, or the webhook is rejected as a potential replay.

The expected signature format is sha256={hex_digest}.

When Breeze receives a Huntress webhook, it needs to determine which integration the event belongs to. The integration is resolved using (in order of priority):

  1. integrationId query parameter or x-huntress-integration-id header
  2. integrationId field in the JSON payload body
  3. x-huntress-account-id header or account ID extracted from the payload

If multiple active integrations match the same account and no explicit integration ID is provided, the webhook returns a 409 conflict.

FieldTypeDescription
huntressAgentIdStringUnique agent identifier from Huntress
deviceIdUUIDMapped Breeze device (nullable if unmapped)
hostnameStringAgent hostname
platformStringOperating system platform
statusStringAgent status (e.g., online, offline)
lastSeenAtTimestampLast time the agent checked in with Huntress
metadataJSONAdditional agent metadata from Huntress
FieldTypeDescription
huntressIncidentIdStringUnique incident identifier from Huntress
deviceIdUUIDAffected Breeze device (nullable if unmapped)
severityStringIncident severity level
categoryStringIncident category (max 60 chars)
titleStringIncident title
descriptionTextDetailed incident description
recommendationTextRecommended remediation steps
statusStringCurrent incident status
reportedAtTimestampWhen the incident was first reported
resolvedAtTimestampWhen the incident was resolved (nullable)
detailsJSONFull incident details from Huntress

The Huntress status endpoint provides a summary of your integration health:

MetricDescription
totalAgentsTotal Huntress agents synced
mappedAgentsAgents matched to Breeze devices
unmappedAgentsAgents without a Breeze device match
offlineAgentsAgents with an offline status
openCount of unresolved incidents
bySeverityIncident counts grouped by severity
byStatusIncident counts grouped by status

Incidents can be filtered by multiple criteria:

FilterTypeDescription
orgIdUUIDFilter by organization
integrationIdUUIDFilter by specific integration
statusStringFilter by incident status
severityStringFilter by severity level
deviceIdUUIDFilter by affected Breeze device
searchStringSearch incident titles (case-insensitive)
limitNumberResults per page (1-500, default 100)
offsetNumberPagination offset

The SentinelOne integration provides deeper operational capabilities beyond data sync. In addition to importing agent and threat data, you can isolate devices and take threat actions (kill, quarantine, rollback) directly from the Breeze dashboard — commands are dispatched to the SentinelOne management console via API.

  1. In the Breeze dashboard, navigate to Settings > Integrations > SentinelOne.
  2. Provide a name for the integration.
  3. Enter your SentinelOne management console URL (e.g., https://usea1.sentinelone.net).
  4. Enter your SentinelOne API token. This is encrypted at rest before being stored.
  5. Click Save. An initial sync is automatically scheduled.

The following SentinelOne operations require MFA verification before they can be executed:

OperationMFA Required
Create or update integrationYes
Isolate / unisolate devicesYes
Execute threat actions (kill, quarantine, rollback)Yes
Trigger manual syncNo
View status, threats, or sitesNo
FieldTypeDescription
s1AgentIdStringUnique agent identifier from SentinelOne
deviceIdUUIDMapped Breeze device (nullable if unmapped)
statusStringAgent connection status
infectedBooleanWhether the agent has active threats
threatCountIntegerNumber of threats detected on this agent
policyNameStringApplied SentinelOne policy name
lastSeenAtTimestampLast check-in time
metadataJSONAdditional agent metadata including site name
FieldTypeDescription
s1ThreatIdStringUnique threat identifier from SentinelOne
deviceIdUUIDAffected Breeze device (nullable if unmapped)
classificationStringThreat classification (e.g., Malware, PUP)
severityStringSeverity level (low, medium, high, critical)
threatNameStringName of the detected threat
processNameStringProcess that triggered the detection
filePathStringFile path of the threat
mitreTacticsJSONMITRE ATT&CK tactic mappings
statusStringCurrent threat status (active, in_progress, resolved, etc.)
detectedAtTimestampWhen the threat was first detected
resolvedAtTimestampWhen the threat was resolved (nullable)
detailsJSONFull threat details from SentinelOne
FieldTypeDescription
actionStringAction type (isolate, unisolate, kill, quarantine, rollback)
statusStringAction status: queued, in_progress, completed, failed
providerActionIdStringAction ID from SentinelOne API
requestedByUUIDUser who initiated the action
requestedAtTimestampWhen the action was requested
completedAtTimestampWhen the action finished (nullable)
errorTextError message if the action failed

SentinelOne organizes agents into “Sites.” Breeze lets you map SentinelOne sites to Breeze organizations, enabling multi-tenant EDR management from a single SentinelOne console.

  1. Navigate to Settings > Integrations > SentinelOne > Sites.
  2. View the list of SentinelOne sites with their agent counts.
  3. For each site, select the Breeze organization it should map to.
  4. Click Save to apply the mapping.

To remove a mapping, set the target organization to null.

You can isolate compromised devices directly from Breeze. The isolation command is sent to SentinelOne, which enforces network isolation at the endpoint level.

  1. Select one or more devices in the Breeze dashboard.
  2. Click Isolate (or Unisolate to restore connectivity).
  3. Breeze identifies the corresponding SentinelOne agents and dispatches the isolation command.
  4. The action status is tracked and reported back.

Take direct action on detected threats without leaving Breeze:

ActionDescription
killTerminate the malicious process
quarantineMove the threat file to quarantine
rollbackRoll back changes made by the threat (Windows only)
  1. Navigate to the Threats view and find the threat(s) to act on.
  2. Select the threat action (kill, quarantine, or rollback).
  3. Confirm the action. Up to 200 threats can be acted on in a single request.
  4. The action is dispatched to SentinelOne and the status is tracked.

The SentinelOne status endpoint provides a comprehensive summary:

MetricDescription
totalAgentsTotal SentinelOne agents synced
mappedDevicesAgents matched to Breeze devices
infectedAgentsAgents with active infections
activeThreatsThreats with active or in_progress status
highOrCriticalThreatsThreats with high or critical severity
pendingActionsActions with queued or in_progress status
reportedThreatCountSum of threat counts across all agents

Threats can be filtered by multiple criteria:

FilterTypeDescription
orgIdUUIDFilter by organization
integrationIdUUIDFilter by specific integration
deviceIdUUIDFilter by affected Breeze device
statusStringFilter by threat status
severityStringFilter by severity level
searchStringSearch by threat name, process name, or file path
startISO datetimeThreats detected on or after this time
endISO datetimeThreats detected on or before this time
limitNumberResults per page (1-500, default 100)
offsetNumberPagination offset

Both integrations support manual and automatic syncing.

Trigger a sync from the Breeze dashboard or API. The sync job is queued via the background queue and processes in the background.

VendorRequirements
Huntressorgs:write permission, MFA, active integration
SentinelOneorgs:write permission, active integration

Each integration tracks its last sync result:

FieldDescription
lastSyncAtTimestamp of the most recent sync
lastSyncStatusResult: success or failure indicator
lastSyncErrorError message from the last failed sync (nullable)

Sync jobs are processed through a background queue. If a sync fails (for example, due to a network timeout or an API rate limit from the EDR vendor), the following happens:

  • SentinelOne syncs automatically retry up to 3 times with exponential backoff (starting at 2 seconds, then 4 seconds, then 8 seconds).
  • Huntress syncs do not have built-in retries. If a Huntress sync fails, trigger another manual sync or wait for the next scheduled sync cycle.
  • The lastSyncError field on the integration record is updated with the error message from the most recent failure. Check this field in the dashboard or API to diagnose sync issues.
  • If the initial sync scheduled on integration creation fails, a warning is returned in the API response: “Initial sync could not be scheduled. Data will sync on the next scheduled cycle.”

All authenticated endpoints require organization, partner, or system scope. Mounted at /api/v1/huntress.

MethodPathAuthDescription
POST/webhookNo (signature verified)Receive Huntress webhook events
GET/integrationYesGet the Huntress integration for the current org
POST/integrationYes + MFACreate or update a Huntress integration
POST/syncYes + MFATrigger a manual Huntress sync
GET/statusYesGet integration status and coverage summary
GET/incidentsYesList Huntress incidents with filters

All endpoints require authentication with organization, partner, or system scope. Mounted at /api/v1/sentinel-one.

MethodPathAuthDescription
GET/integrationYesGet the SentinelOne integration for the current org
POST/integrationYes + MFACreate or update a SentinelOne integration
GET/statusYesGet integration status and threat summary
GET/threatsYesList threats with filters
POST/isolateYes + MFAIsolate or unisolate devices
POST/threat-actionYes + MFAExecute a threat action (kill, quarantine, rollback)
POST/syncYesTrigger a manual SentinelOne sync
GET/sitesYesList SentinelOne sites with agent counts and org mappings
POST/sites/mapYesMap or unmap a SentinelOne site to a Breeze organization

API keys and tokens for both Huntress and SentinelOne are encrypted at rest using AES encryption before being stored in the database. The apiKeyEncrypted and apiTokenEncrypted fields are never returned in API responses — only a boolean hasApiKey or similar flag is exposed.

Huntress webhooks use HMAC signature verification. The webhook secret is encrypted at rest and decrypted only at verification time. Webhooks without a configured secret or with an invalid signature are rejected.

OperationRequired PermissionMFA Required
View integration statusorganization, partner, or system scopeNo
Create/update integrationorgs:writeYes
Trigger manual syncorgs:writeHuntress: Yes, SentinelOne: No
Isolate devicesdevices:executeYes
Execute threat actionsdevices:executeYes

Activate the integration by updating it with isActive: true before triggering a sync.

Huntress webhook returns 403 “Webhook secret not configured”

Section titled “Huntress webhook returns 403 “Webhook secret not configured””

You must configure a webhook secret on the integration before Breeze will accept webhook payloads. Update the integration with a webhookSecret value that matches what you configured in your Huntress dashboard.

Huntress webhook returns 409 “Multiple active integrations match”

Section titled “Huntress webhook returns 409 “Multiple active integrations match””

When multiple Huntress integrations share the same account ID, Breeze cannot determine which one to route the webhook to. Include the integrationId as a query parameter on your webhook URL or in the x-huntress-integration-id header.

A 502 response means the isolation command was sent to SentinelOne but the provider returned an error. Check the warning field in the response for details and verify the target devices have active SentinelOne agents.

After syncing, some EDR agents may not be matched to Breeze devices. This happens when the hostname or identifier in the EDR system does not correspond to any enrolled Breeze device. Enroll the missing devices in Breeze or verify the hostname matches.

”API token is required for new integrations”

Section titled “”API token is required for new integrations””

When creating a new SentinelOne integration, the API token is mandatory. For updates to existing integrations, the token is optional (the existing encrypted token is preserved).