Reference Tables
Alert Object Structure
| Field | Type | Description |
|---|---|---|
id | string (UUID) | Unique alert identifier |
@timestamp | string (ISO 8601) | Alert timestamp |
name | string | Alert rule name |
description | string | Detailed alert description |
severity | integer | Severity code (1-4) |
severityLabel | string | Severity display label (Low, Medium, High, Critical) |
status | integer | Status code (see below) |
statusLabel | string | Status display label |
statusObservation | string | Observation text from status change |
category | string | MITRE ATT&CK tactic category |
technique | string | MITRE ATT&CK technique |
dataSource | string | Source host/system |
dataType | string | Data type (linux, wineventlog, etc.) |
isIncident | boolean | Whether alert is part of an incident |
incidentDetail | object | Incident details if linked |
tags | string[]/null | Applied tags |
notes | string | Notes added to the alert |
adversary | object | Source entity details (file, host, user) |
target | object/null | Target entity details |
impact | object | Impact scores (integrity, confidentiality, availability) |
events | array | Associated raw log events |
lastEvent | object | Most recent associated event |
reference | string[] | Reference URLs |
solution | string | Recommended solution |
Alert Status Codes
| Code | Label | Description |
|---|---|---|
1 | Automatic review | Alert under automatic review |
2 | Open | Alert is open and needs attention |
3 | In review | Alert is being reviewed by an analyst |
5 | Completed | Alert has been resolved/completed |
Status codes 4 and 6 do not exist and will return HTTP 500 if used.
Incident Status Values
| Status | Description |
|---|---|
OPEN | New/open incident |
IN_REVIEW | Under investigation |
COMPLETED | Resolved/closed |
Filter Operators
The FilterType object is used across all search, count, and chart-view endpoints.
{
"field": "<field_name>",
"operator": "<operator>",
"value": "<value_or_array>"
}| Operator | Value Type | Description | Example |
|---|---|---|---|
IS | string | Exact match | {"field":"status","operator":"IS","value":"2"} |
IS_NOT | string | Not equal | {"field":"status","operator":"IS_NOT","value":"5"} |
IS_BETWEEN | array [2] | Range (dates, numbers) | {"field":"@timestamp","operator":"IS_BETWEEN","value":["now-24h","now"]} |
IS_NOT_BETWEEN | array [2] | Outside range | {"field":"@timestamp","operator":"IS_NOT_BETWEEN","value":["start","end"]} |
CONTAIN | string | Contains substring | {"field":"name","operator":"CONTAIN","value":"Windows"} |
DOES_NOT_CONTAIN | string | Does not contain | {"field":"name","operator":"DOES_NOT_CONTAIN","value":"test"} |
IS_ONE_OF | array | Match any value | {"field":"status","operator":"IS_ONE_OF","value":["2","3"]} |
IS_NOT_ONE_OF | array | Exclude values | {"field":"status","operator":"IS_NOT_ONE_OF","value":["5"]} |
CONTAIN_ONE_OF | array | Contains any substring | {"field":"dataSource","operator":"CONTAIN_ONE_OF","value":["centos","rocky"]} |
DOES_NOT_CONTAIN_ONE_OF | array | Exclude substrings | |
EXIST | string (empty) | Field exists | {"field":"target.user","operator":"EXIST","value":""} |
DOES_NOT_EXIST | string (empty) | Field missing | {"field":"target.user","operator":"DOES_NOT_EXIST","value":""} |
START_WITH | string | Starts with prefix | {"field":"dataSource","operator":"START_WITH","value":"windows"} |
NOT_START_WITH | string | Does not start with | |
ENDS_WITH | string | Ends with suffix | {"field":"dataSource","operator":"ENDS_WITH","value":"10"} |
NOT_ENDS_WITH | string | Does not end with | |
IS_GREATER_THAN | string | Greater than | {"field":"log.eventCode","operator":"IS_GREATER_THAN","value":"5000"} |
IS_LESS_THAN_OR_EQUALS | string | Less than or equal |
Important notes:
For
IS_BETWEEN, the value must be a JSON array of two strings:["start","end"]. Using a comma-separated string causes HTTP 500 errors.For exact-match operators (
IS,IS_ONE_OF,EXIST) on text fields, use the.keywordsuffix (e.g.,dataType.keywordinstead ofdataType).For substring operators (
CONTAIN,START_WITH,ENDS_WITH), use the text field without.keyword.Multiple filters in the array are combined with AND logic.
Pass
[](empty array) for no filters.
Relative Date Expressions
Supported in @timestamp filter values:
| Expression | Meaning |
|---|---|
now | Current time |
now-1h | 1 hour ago |
now-24h | 24 hours ago |
now-7d | 7 days ago |
now-30d | 30 days ago |
now-90d | 90 days ago |
Pagination
All list endpoints support pagination via query parameters:
| Parameter | Description |
|---|---|
page | Page number (0-based) |
size | Items per page |
sort | Sort field and direction (e.g., @timestamp,desc) |
top | Maximum total results (search endpoint only) |
Response Headers:
| Header | Description |
|---|---|
X-Total-Count | Total number of matching results |
Link | Pagination links (next, prev, first, last) |
Common API Errors
| HTTP Code | Meaning | Common Cause |
|---|---|---|
| 200 | Success | Request completed successfully |
| 201 | Created | Resource created successfully |
| 400 | Bad Request | Missing required parameters, invalid request body |
| 401 | Unauthorized | Invalid or missing API key |
| 404 | Not Found | Resource not found or endpoint does not exist |
| 405 | Method Not Allowed | HTTP method not supported for this endpoint |
| 500 | Internal Server Error | Invalid filter value format, non-existent status code, or server issue |
Endpoint Summary
| Method | Endpoint | Description |
|---|---|---|
| Search & Query | ||
| POST | /api/elasticsearch/search | Search alerts or logs with filters |
| POST | /api/elasticsearch/count | Check if matching events exist |
| GET | /api/elasticsearch/index/all | List all indices |
| GET | /api/elasticsearch/index/properties | Get field mappings for an index pattern |
| GET | /api/elasticsearch/property/values | Get distinct field values |
| POST | /api/elasticsearch/property/values-with-count | Get field values with occurrence counts |
| POST | /api/log-analyzer/chart-view | Get time-bucketed event counts |
| POST | /api/elasticsearch/search/sql | SQL query interface |
| Alert Management | ||
| GET | /api/utm-alerts/count-open-alerts | Count open alerts |
| POST | /api/utm-alerts/status | Change alert status |
| POST | /api/utm-alerts/notes | Add notes to an alert |
| POST | /api/utm-alerts/tags | Add/remove tags on alerts |
| POST | /api/utm-alerts/convert-to-incident | Convert alerts to incident |
| Incident Management | ||
| GET | /api/utm-incidents | List incidents |
| GET | /api/utm-incidents/{id} | Get specific incident |
| POST | /api/utm-incidents | Create new incident |
| PUT | /api/utm-incidents/change-status | Change incident status |
| POST | /api/utm-incidents/add-alerts | Add alerts to incident |
| GET | /api/utm-incident-alerts | List alerts in an incident |
| DELETE | /api/utm-incident-alerts/{id} | Remove alert from incident |
| POST | /api/utm-incident-alerts/update-status | Update alert status in incident |
| GET | /api/utm-incident-notes | List incident notes |
| POST | /api/utm-incident-notes | Add note to incident |
| Data Sources & Agents | ||
| GET | /api/utm-data-input-statuses | List data input statuses |
| GET | /api/utm-data-input-statuses/count | Count data input statuses |
| GET | /api/agent-manager/agents | List agents |
| GET | /api/data-types | List supported data types |
| GET | /api/utm-index-patterns | List index patterns |
| System | ||
| GET | /api/ping | Health check |
| GET | /api/info/version | Get API version |