Incident Management

Incidents group related alerts together for coordinated investigation and response.

Create an Incident from Alerts

Endpoint: POST /api/utm-incidents

Creates a new incident and associates one or more alerts with it.

Request Body:

FieldTypeRequiredDescription
incidentNamestringYesName/title for the incident
incidentDescriptionstringNoDetailed description
incidentAssignedTostringNoUsername to assign the incident to
alertListarrayYesArray of alert objects to include

Each alert object in alertList:

FieldTypeRequiredDescription
alertIdstringYesAlert UUID
alertNamestringYesAlert name
alertStatusintegerYesAlert status code
alertSeverityintegerYesAlert severity level
curl -sk -X POST "{{baseUrl}}/api/utm-incidents" 
  -H "Utm-Api-Key: {{apiKey}}" 
  -H "Content-Type: application/json" 
  -d '{
    "incidentName": "Security Incident - Network Configuration Changes",
    "incidentDescription": "Multiple network configuration change alerts detected on host v11ent during non-maintenance window",
    "incidentAssignedTo": "admin",
    "alertList": [
      {
        "alertId": "cdabf555-964d-4762-ab50-709bf50a9054",
        "alertName": "Network Configuration Changes Detected",
        "alertStatus": 2,
        "alertSeverity": 3
      }
    ]
  }'

Response (HTTP 200):

{
  "id": 3,
  "incidentName": "Security Incident - Network Configuration Changes",
  "incidentDescription": "Multiple network configuration change alerts detected on host v11ent during non-maintenance window",
  "incidentStatus": "OPEN",
  "incidentAssignedTo": "admin",
  "incidentSeverity": 3,
  "incidentCreatedDate": "2026-02-06T21:45:29.247Z",
  "incidentSolution": null
}

The incidentSeverity is automatically set based on the maximum severity of the included alerts. The incidentStatus defaults to OPEN.

Convert Alerts to Incident (Alternative Method)

Endpoint: POST /api/utm-alerts/convert-to-incident

An alternative way to create an incident from alerts. This endpoint links the alerts at the OpenSearch level.

Request Body:

FieldTypeRequiredDescription
eventIdsstring[]YesArray of alert IDs to convert
incidentNamestringYesName for the new incident
incidentIdintegerYesSet to
0
to create new; set to existing ID to add to existing
incidentSourcestringYesFree text source description

Create New Incident

curl -sk -X POST "{{baseUrl}}/api/utm-alerts/convert-to-incident" 
  -H "Utm-Api-Key: {{apiKey}}" 
  -H "Content-Type: application/json" 
  -d '{
    "eventIds": ["cdabf555-964d-4762-ab50-709bf50a9054"],
    "incidentName": "Security Incident - Multiple Failed Logins",
    "incidentId": 0,
    "incidentSource": "UTMStack Alert Investigation"
  }'

Response: HTTP 200, empty body.

Convert Multiple Alerts at Once

curl -sk -X POST "{{baseUrl}}/api/utm-alerts/convert-to-incident" 
  -H "Utm-Api-Key: {{apiKey}}" 
  -H "Content-Type: application/json" 
  -d '{
    "eventIds": [
      "cdabf555-964d-4762-ab50-709bf50a9054",
      "9a52aaab-53fb-4a79-89bc-06538acddbfa",
      "8e191f2e-4be4-4eb5-8f16-9f9897bcd440"
    ],
    "incidentName": "Coordinated Network Configuration Changes",
    "incidentId": 0,
    "incidentSource": "Automated Alert Correlation"
  }'

Add Alerts to an Existing Incident

Endpoint: POST /api/utm-incidents/add-alerts

Request Body:

FieldTypeRequiredDescription
incidentIdintegerYesID of the existing incident
alertListarrayYesArray of alert objects (same structure as creation)
curl -sk -X POST "{{baseUrl}}/api/utm-incidents/add-alerts" 
  -H "Utm-Api-Key: {{apiKey}}" 
  -H "Content-Type: application/json" 
  -d '{
    "incidentId": 3,
    "alertList": [
      {
        "alertId": "b68d1621-e754-410c-ab9e-db1761025331",
        "alertName": "AppArmor Profile Changes Detected",
        "alertStatus": 2,
        "alertSeverity": 3
      }
    ]
  }'

Response (HTTP 201): Returns the updated incident object.

List Incidents

Endpoint: GET /api/utm-incidents

Supports filtering, pagination, and sorting.

List All Incidents

curl -sk "{{baseUrl}}/api/utm-incidents?page=0&size=20" 
  -H "Utm-Api-Key: {{apiKey}}"

Response (HTTP 200):

[
  {
    "id": 1,
    "incidentName": "INC-202601021428 Example incident",
    "incidentDescription": "Example incident description",
    "incidentStatus": "OPEN",
    "incidentAssignedTo": null,
    "incidentSeverity": 3,
    "incidentCreatedDate": "2026-01-02T19:28:53.875Z",
    "incidentSolution": null
  }
]

Filter by Status

# Open incidents only
curl -sk "{{baseUrl}}/api/utm-incidents?incidentStatus.equals=OPEN&page=0&size=20" 
  -H "Utm-Api-Key: {{apiKey}}"

# Completed incidents only
curl -sk "{{baseUrl}}/api/utm-incidents?incidentStatus.equals=COMPLETED&page=0&size=20" 
  -H "Utm-Api-Key: {{apiKey}}"

# In Review incidents
curl -sk "{{baseUrl}}/api/utm-incidents?incidentStatus.equals=IN_REVIEW&page=0&size=20" 
  -H "Utm-Api-Key: {{apiKey}}"

Filter by Name

curl -sk "{{baseUrl}}/api/utm-incidents?incidentName.contains=Network&page=0&size=20" 
  -H "Utm-Api-Key: {{apiKey}}"

Filter by Severity

curl -sk "{{baseUrl}}/api/utm-incidents?incidentSeverity.greaterThan=2&page=0&size=20" 
  -H "Utm-Api-Key: {{apiKey}}"

Filter by Date Range

curl -sk "{{baseUrl}}/api/utm-incidents?incidentCreatedDate.greaterThanOrEqual=2026-01-01T00:00:00Z&incidentCreatedDate.lessThanOrEqual=2026-01-31T23:59:59Z&page=0&size=20" 
  -H "Utm-Api-Key: {{apiKey}}"

Sort Results

curl -sk "{{baseUrl}}/api/utm-incidents?page=0&size=20&sort=incidentCreatedDate,desc" 
  -H "Utm-Api-Key: {{apiKey}}"

Available Filter Parameters:

ParameterTypeDescription
incidentStatus.equalsstringOPEN
,
IN_REVIEW
,
COMPLETED
incidentName.containsstringName substring search
incidentSeverity.equalsintegerExact severity match
incidentSeverity.greaterThanintegerMinimum severity
incidentAssignedTo.equalsstringAssigned analyst username
incidentCreatedDate.greaterThanOrEqualISO datetimeCreated after date
incidentCreatedDate.lessThanOrEqualISO datetimeCreated before date
sortstringSort field and direction (e.g.,
id,desc
)

Get a Specific Incident

Endpoint: GET /api/utm-incidents/{id}

curl -sk "{{baseUrl}}/api/utm-incidents/3" 
  -H "Utm-Api-Key: {{apiKey}}"

Response (HTTP 200):

{
  "id": 3,
  "incidentName": "Security Incident - Network Configuration Changes",
  "incidentDescription": "Multiple network configuration change alerts detected",
  "incidentStatus": "OPEN",
  "incidentAssignedTo": "admin",
  "incidentSeverity": 3,
  "incidentCreatedDate": "2026-02-06T21:45:29.247Z",
  "incidentSolution": null
}

Change Incident Status

Endpoint: PUT /api/utm-incidents/change-status

Important: You must include all required fields in the request body. Fields not included may be reset to null.

Request Body:

FieldTypeRequiredDescription
idintegerYesIncident ID
incidentNamestringYesIncident name
incidentDescriptionstringYesIncident description
incidentStatusstringYesNew status:
OPEN
,
IN_REVIEW
,
COMPLETED
incidentSeverityintegerYesSeverity level
incidentCreatedDateISO datetimeYesOriginal creation date
incidentAssignedTostringNoInclude to preserve assignment
incidentSolutionstringNoResolution text (recommended when completing)

Set to In Review

curl -sk -X PUT "{{baseUrl}}/api/utm-incidents/change-status" 
  -H "Utm-Api-Key: {{apiKey}}" 
  -H "Content-Type: application/json" 
  -d '{
    "id": 3,
    "incidentName": "Security Incident - Network Configuration Changes",
    "incidentDescription": "Multiple network configuration change alerts detected",
    "incidentStatus": "IN_REVIEW",
    "incidentSeverity": 3,
    "incidentCreatedDate": "2026-02-06T21:45:29.247Z",
    "incidentAssignedTo": "admin"
  }'

Complete an Incident

curl -sk -X PUT "{{baseUrl}}/api/utm-incidents/change-status" 
  -H "Utm-Api-Key: {{apiKey}}" 
  -H "Content-Type: application/json" 
  -d '{
    "id": 3,
    "incidentName": "Security Incident - Network Configuration Changes",
    "incidentDescription": "Multiple network configuration change alerts detected",
    "incidentStatus": "COMPLETED",
    "incidentSeverity": 3,
    "incidentCreatedDate": "2026-02-06T21:45:29.247Z",
    "incidentAssignedTo": "admin",
    "incidentSolution": "Resolved after investigation - changes were authorized per change ticket CT-1234"
  }'

Note: When an incident is completed, the associated alert statuses within the incident are automatically set to 5 (Completed).

Status Workflow: OPENIN_REVIEWCOMPLETED

List Alerts in an Incident

Endpoint: GET /api/utm-incident-alerts

curl -sk "{{baseUrl}}/api/utm-incident-alerts?incidentId.equals=3&page=0&size=50" 
  -H "Utm-Api-Key: {{apiKey}}"

Response (HTTP 200):

[
  {
    "id": 3,
    "incidentId": 3,
    "alertId": "cdabf555-964d-4762-ab50-709bf50a9054",
    "alertName": "Network Configuration Changes Detected",
    "alertStatus": 5,
    "alertSeverity": 3
  },
  {
    "id": 4,
    "incidentId": 3,
    "alertId": "b68d1621-e754-410c-ab9e-db1761025331",
    "alertName": "AppArmor Profile Changes Detected",
    "alertStatus": 5,
    "alertSeverity": 3
  }
]

Remove an Alert from an Incident

Endpoint: DELETE /api/utm-incident-alerts/{id}

The {id} is the incident-alert relationship ID (from the id field in the response above), not the alert UUID.

curl -sk -X DELETE "{{baseUrl}}/api/utm-incident-alerts/4" 
  -H "Utm-Api-Key: {{apiKey}}"

Response: HTTP 200, empty body.

Update Alert Status Within an Incident

Endpoint: POST /api/utm-incident-alerts/update-status

Request Body:

FieldTypeRequiredDescription
incidentIdintegerYesIncident ID
alertIdsstring[]YesArray of alert UUIDs
statusintegerYesNew alert status code
curl -sk -X POST "{{baseUrl}}/api/utm-incident-alerts/update-status" 
  -H "Utm-Api-Key: {{apiKey}}" 
  -H "Content-Type: application/json" 
  -d '{
    "incidentId": 3,
    "alertIds": ["cdabf555-964d-4762-ab50-709bf50a9054"],
    "status": 3
  }'

Add Notes to an Incident

Endpoint: POST /api/utm-incident-notes

Request Body:

FieldTypeRequiredDescription
incidentIdintegerYesIncident ID
noteTextstringYesNote text content
curl -sk -X POST "{{baseUrl}}/api/utm-incident-notes" 
  -H "Utm-Api-Key: {{apiKey}}" 
  -H "Content-Type: application/json" 
  -d '{
    "incidentId": 3,
    "noteText": "Initial investigation shows the network configuration changes occurred during a scheduled maintenance window. Checking change management records."
  }'

Response (HTTP 201):

{
  "id": 1,
  "incidentId": 3,
  "noteText": "Initial investigation shows the network configuration changes occurred during a scheduled maintenance window.",
  "noteSendDate": "2026-02-06T21:45:55.269925706Z",
  "noteSendBy": "admin"
}

Important: The request field is noteText, not incidentNoteText.

List Incident Notes

Endpoint: GET /api/utm-incident-notes

curl -sk "{{baseUrl}}/api/utm-incident-notes?incidentId.equals=3&page=0&size=50" 
  -H "Utm-Api-Key: {{apiKey}}"

Response (HTTP 200):

[
  {
    "id": 1,
    "incidentId": 3,
    "noteText": "Initial investigation shows the network configuration changes occurred during a scheduled maintenance window.",
    "noteSendDate": "2026-02-06T21:45:55.269926Z",
    "noteSendBy": "admin"
  }
]