ControlUp Events API
The System Events log reports important events and alerts in your ControlUp for Desktops environment.
The System Events log reports important events and alerts in your ControlUp for Desktops environment.
openapi: 3.2.0
info:
title: Controlup Events API
version: '1.0'
description: 'Operations tagged Events across 2 of this provider''s published API definitions: controlup-desktops-openapi.yml, controlup-dex-events-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.controlup.com/edge/api
- url: https://api.controlup.com/events/v1
tags:
- name: Events
description: The System Events log reports important events and alerts in your ControlUp for Desktops environment.
paths:
/events:
servers:
- url: https://api.controlup.com/edge/api
get:
summary: Get system events
tags:
- Events
description: 'Returns entries from the System Events log, which contains alerts, actions, configuration changes, etc. By default, the endpoint returns 10000 events starting with the oldest event. A maximum of 10000 events can be returned per request.
'
operationId: get-system-events
parameters:
- in: query
name: size
description: The number of rows returned per page.
schema:
type: integer
default: 10000
maximum: 10000
- in: query
name: page
description: The page returned. The number of rows per page is set with the `size` parameter.
schema:
type: integer
default: 1
- in: query
name: from
description: The index of the `rows` array to start returning data from. The array index starts at 0. For example, if you set `from` = 2, the first two rows are excluded.
schema:
type: integer
example: 2
- $ref: '#/components/parameters/FilterField'
- $ref: '#/components/parameters/FilterType'
- $ref: '#/components/parameters/FilterValue'
- $ref: '#/components/parameters/SorterField'
- $ref: '#/components/parameters/SorterDir'
responses:
'200':
description: System Events log contents.
content:
application/json:
schema:
type: object
properties:
rows:
type: array
items:
$ref: '#/components/schemas/Event'
'400':
description: The provided query is invalid.
security:
- bearerAuth: []
/events/query:
servers:
- url: https://api.controlup.com/edge/api
post:
summary: Get system events with query
operationId: get-system-events-query
x-readme:
explorer-enabled: false
tags:
- Events
description: Returns the same data as [GET /events](get-system-events), but lets you send an OpenSearch query in the request body.
requestBody:
description: OpenSearch query
content:
application/json:
schema:
type: object
example:
query:
term:
_id: ERhcqwwow455mzZoBiDB-aE
responses:
'200':
description: System Events log contents.
content:
application/json:
schema:
type: object
properties:
rows:
type: array
items:
$ref: '#/components/schemas/Event'
'400':
description: The provided query is invalid.
security:
- bearerAuth: []
/events/organizations/{orgId}/events:
servers:
- url: https://api.controlup.com/events/v1
post:
description: Returns a list of events based on specified time ranges and filtering criteria. This endpoint uses field projection, returning only the specific event attributes requested in the fields parameter.
operationId: EventsController_getEventsList
parameters:
- name: orgId
required: true
in: path
description: ID of your ControlUp organization. You can find your organization ID on the [API Key Management page](how-to-make-api-requests#how-to-find-your-controlup-organization-id) in the DEX platform.
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GridQueryDTO'
responses:
'200':
description: Successfully retrieved events list with cursor-based pagination
content:
application/json:
schema:
type: object
properties:
data:
type: array
description: Array of events on the current page. The event fields returned depends on the `fields` parameter.
items:
$ref: '#/components/schemas/EventEntity'
nextCursor:
type:
- string
- 'null'
description: Base64-encoded cursor for the next page. Null if this is the last page.
previousCursor:
type:
- string
- 'null'
description: Base64-encoded cursor for the previous page. Null if this is the first page.
page:
type: number
description: Current page number.
pageSize:
type: number
description: Number of items in the current page.
'400':
description: Bad Request
'401':
description: Unauthorized - Invalid or missing authentication token
'403':
description: 'Forbidden: Access to this resource is denied'
'500':
description: Internal Server Error - Unexpected server error
summary: List all Events
tags:
- Events
security:
- apiKey: []
/events/organizations/{orgId}/events/total:
servers:
- url: https://api.controlup.com/events/v1
get:
description: Returns the count of unique values (cardinality) for a specified field within a defined time range. This endpoint allows you to quantify the diversity of your event data such as counting unique users, distinct error types, or total event volume, while applying filters to narrow the scope.
operationId: EventsController_getTotalEvents
parameters:
- name: filters
required: false
in: query
description: 'To use the filter builder, you must first select a single top-level logic group (AND/OR) and then add your filter conditions within the group. All conditions in the group are evaluated together using the group''s logic operator (AND/OR).
Do not include both operator types at the top-level. If you need to combine AND/OR logic, you can switch the logic type by adding a new nested group object within the first group, such as AND[user is Bob, OR[severity is high, severity is low]]. This translates to "user is Bob AND (severity is high OR severity is low)".
Note that you can also send the filter object as a JSON-encoded string. Ensure your JSON follows the same structure as the query builder.'
style: deepObject
explode: true
schema:
type: object
properties:
and:
description: Array of filters/groups where ALL conditions must match (AND logic)
type: array
items:
type: object
properties:
filter:
description: Single filter condition
type: object
properties:
key:
description: Field name to filter on
type: string
enum:
- uuid
- timestampUtcMs
- name
- severity
- sourceName
- guestName
- userName
- type
- utcOffsetSeconds
op:
description: 'Comparison operator.
- Use equals/not_equals for exact matches (works with all fields).
- Use contains for partial string matching (only for string fields like name, userName, guestName, sourceName, NOT for severity enum).
- Use greater/less/greater_or_equals/less_or_equals for numeric comparisons.
- Use between for range queries.'
type: string
enum:
- equals
- contains
- not_equals
- between
- greater
- less
- greater_or_equals
- less_or_equals
value:
description: Value to compare against. Can be string, number, or array for between operator.
oneOf:
- type: string
- type: number
- type: array
items:
oneOf:
- type: string
- type: number
group:
description: A nested AND/OR group. Use group to create complex queries with nested AND/OR logic.
type: object
properties:
and:
type: array
description: Array of filters/groups where ALL conditions must match (AND logic)
or:
type: array
description: Array of filters/groups where ANY condition can match (OR logic)
or:
description: Array of filters/groups where ANY condition can match (OR logic)
type: array
items:
type: object
properties:
filter:
description: Single filter condition
type: object
properties:
key:
description: Field name to filter on
type: string
enum:
- uuid
- timestampUtcMs
- name
- severity
- sourceName
- guestName
- userName
- type
- utcOffsetSeconds
op:
description: 'Comparison operator.
- Use equals/not_equals for exact matches (works with all fields).
- Use contains for partial string matching (only for string fields like name, userName, guestName, sourceName, NOT for severity enum).
- Use greater/less/greater_or_equals/less_or_equals for numeric comparisons.
- Use between for range queries.'
type: string
enum:
- equals
- contains
- not_equals
- between
- greater
- less
- greater_or_equals
- less_or_equals
value:
description: Value to compare against. Can be string, number, or array for between operator.
oneOf:
- type: string
- type: number
- type: array
items:
oneOf:
- type: string
- type: number
group:
description: A nested AND/OR group. Use group to create complex queries with nested AND/OR logic.
type: object
properties:
and:
type: array
description: Array of filters/groups where ALL conditions must match (AND logic)
or:
type: array
description: Array of filters/groups where ANY condition can match (OR logic)
- name: timeFrom
required: true
in: query
description: Return events starting from the specified time in epoch timestamp (milliseconds).
schema:
example: 1705057200000
type: number
style: form
- name: timeTo
required: true
in: query
description: Return events up to the specified time in epoch timestamp (milliseconds).
schema:
example: 1705143600000
type: number
style: form
- name: field
required: true
in: query
description: The event attribute to aggregate for unique values. You can use uuid to calculate the total number of unique events.
schema:
type: string
enum:
- additionalData
- applicationName
- folderPath
- guestName
- hostName
- ipAddress
- name
- orgUuid
- publicIpAddress
- remoteSessionClientIp
- remoteVirtualSession
- sourceName
- timestampUtcMs
- triggerCondition
- type
- userName
- utcOffsetSeconds
- uuid
- severity
- sourceType
- alertId
- groupId
- fieldsUrlNames
- fieldsUrlParams
- actionUrlNames
- actionUrlParams
- tags
- groups
style: form
- name: orgId
required: true
in: path
description: ID of your ControlUp organization. You can find your organization ID on the [API Key Management page](how-to-make-api-requests#how-to-find-your-controlup-organization-id) in the DEX platform.
schema:
type: string
responses:
'200':
description: Returns total count of events
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
result:
type: number
description: Total count of events
'400':
description: Bad Request
'401':
description: Unauthorized - Invalid or missing authentication token
'403':
description: 'Forbidden: Access to this resource is denied'
'500':
description: Internal Server Error - Unexpected server error
summary: Get total count of events
tags:
- Events
security:
- apiKey: []
/events/organizations/{orgId}/events/{eventId}:
servers:
- url: https://api.controlup.com/events/v1
get:
description: Retrieves the details of a specific event.
operationId: EventsController_getEventByUUID
parameters:
- name: orgId
required: true
in: path
description: ID of your ControlUp organization. You can find your organization ID on the [API Key Management page](how-to-make-api-requests#how-to-find-your-controlup-organization-id) in the DEX platform.
schema:
type: string
- name: eventId
required: true
in: path
description: The UUID of the event to retrieve.
schema:
type: string
responses:
'200':
description: Returns a single event by UUID
content:
application/json:
schema:
$ref: '#/components/schemas/EventEntity'
'400':
description: Bad Request
'401':
description: Unauthorized - Invalid or missing authentication token
'403':
description: 'Forbidden: Access to this resource is denied'
'404':
description: Not Found - Event not found
'500':
description: Internal Server Error - Unexpected server error
summary: Retrieve an event
tags:
- Events
security:
- apiKey: []
components:
parameters:
FilterField:
name: filters[0][field]
in: query
description: 'Filters the returned data based on the specified field name. This parameter must be used in combination with `filters[0][type]` and `filters[0][value]` to define a filter condition.
You can add multiple filter conditions by changing the integer in the parameter names (for example, `filters[1][field]`).</br></br>
'
schema:
type: string
example: _created
SorterField:
name: sorters[0][field]
in: query
description: 'Sorts the returned data based on the specified field name. This parameter must be used in combination with `sorters[0][dir]` to set the sort order.
You can sort by more than one field by changing the integer in the parameter names (for example, `sorters[1][field]`). Sorters with a lower integer are applied first.</br></br>
'
schema:
type: string
example: _created
SorterDir:
name: sorters[0][dir]
in: query
description: The sort order for the corresponding field. Set to `asc` for ascending, or `desc` for descending.
schema:
type: string
example: asc
enum:
- asc
- desc
FilterValue:
name: filters[0][value]
in: query
description: 'The value used in the corresponding filter condition. The value you can use depends on the filter type.<br><br>
If you are filtering a date or text field, enter a string. If you are filtering a number field, enter a number. If you are filtering a boolean field, enter a boolean. If you are filtering a text field, you can use * as a wildcard, or begin the string with !! to exclude items that contain the string.
'
schema:
oneOf:
- type: string
title: String
- type: number
title: Number
- type: boolean
title: Boolean
FilterType:
name: filters[0][type]
in: query
description: 'The type of filter used in corresponding filter condition. The type of filter you can use depends on the data type of the field.<br><br>
`<`, `<=`, `=`, `!=`, `<=`, or `>` are used to filter numbers and dates.<br>
`boolean` is used to filter boolean fields.<br>
`like` is used to filter text fields.
'
schema:
type: string
example: '>='
enum:
- <
- <=
- '='
- '!='
- '>='
- '>'
- like
- boolean
schemas:
EventEntity:
type: object
properties:
groups:
description: A list of groups the source product belongs to.
type: array
items:
type: string
tags:
description: A list of tags associated with the source product.
type: array
items:
type: string
actionUrlParams:
type: object
description: For internal use only.
actionUrlNames:
description: For internal use only.
type: array
items:
type: string
fieldsUrlParams:
type: object
description: For internal use only.
fieldsUrlNames:
description: For internal use only.
type: array
items:
type: string
groupId:
type: string
description: Identifier for grouping related events together. Events with the same groupId are part of the same logical group or incident.
example: group-456-def
alertId:
type: string
description: Identifier of the alert rule that triggered this event. Links the event to its source alert definition.
example: alert-123-abc
sourceType:
type: string
description: Additional source type classification. Provides more granular detail about the source.
example: agent
severity:
type: string
description: 'The severity level of the event: Informational, Low, Medium, High, or Critical.'
example: High
enum:
- Informational
- Low
- Medium
- High
- Critical
uuid:
type: string
description: Unique identifier (UUID) for this event. Primary key used to retrieve the event.
example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
utcOffsetSeconds:
type: number
description: The UTC offset in seconds for the timezone where the event originated. Used to calculate local time at the source.
example: 0
userName:
type: string
description: The username of the employee associated with this event.
example: john.doe
type:
type: string
description: The category or type of the event. Used to classify events into logical groups.
example: Performance
triggerCondition:
type: string
description: A human-readable description of the conditions that triggered this event. Enriched by AI to provide a clear explanation of thresholds/rules met.
example: The trigger activates if the CPU load is 90% or more for at least 60 seconds.
timestampUtcMs:
type: number
description: The timestamp when the event occurred, as Unix epoch time in milliseconds (UTC).
example: 1705057200000
sourceName:
type: string
enum:
- SOURCE_NAME_UNSPECIFIED
- SOURCE_NAME_VDI
- SOURCE_NAME_DESKTOP
- SOURCE_NAME_SYNTHETIC
description: The ControlUp product/value stream that generated the event. SOURCE_NAME_VDI = VDI, SOURCE_NAME_DESKTOP = Devices, SOURCE_NAME_SYNTHETIC = Synthetic Monitoring.
example: SOURCE_NAME_DESKTOP
remoteVirtualSession:
type: string
description: For VDI environments, the identifier or name of the virtual session associated with this event.
example: session-123
remoteSessionClientIp:
type: string
description: For remote sessions (VDI/RDP), the IP address of the client machine connecting to the session.
example: 10.0.0.50
publicIpAddress:
type: string
description: The public-facing IP address of the device where the event occurred.
example: 203.0.113.1
ipAddress:
type: string
description: The private/internal IP address of the device where the event occurred.
example: 192.168.1.100
name:
type: string
description: The name/title of the event. Human-readable identifier for what occurred.
example: High CPU Load Detected
hostName:
type: string
description: The hostname of the machine where the event occurred. For VDI, this is the host server name.
example: host-1.example.com
guestName:
type: string
description: The name of the source device - guest machine/VM or device name where the event originated.
example: DESKTOP-ABC123
folderPath:
type: string
description: The file system path relevant to the event.
example: C:\Users\user1\Documents
applicationName:
type: string
description: The name of the application associated with the event.
example: chrome.exe
additionalData:
type: object
description: A flexible key-value map containing extra event data. May include device_id, os_version, app_version, or custom metrics.
example:
device_id: 00:1A:2B:3C:4D:0E
os_version: Windows 10 Pro
required:
- name
- sourceName
- timestampUtcMs
- utcOffsetSeconds
- uuid
- tags
- groups
GridQueryDTO:
type: object
properties:
timeFrom:
type: number
description: Return events starting from the specified time in epoch timestamp (milliseconds).
example: 1705057200000
timeTo:
type: number
description: Return events up to the specified time in epoch timestamp (milliseconds).
example: 1705143600000
sortBy:
type: string
enum:
- additionalData
- applicationName
- folderPath
- guestName
- hostName
- ipAddress
- name
- orgUuid
- publicIpAddress
- remoteSessionClientIp
- remoteVirtualSession
- sourceName
- timestampUtcMs
- triggerCondition
- type
- userName
- utcOffsetSeconds
- uuid
- severity
- sourceType
- alertId
- groupId
- fieldsUrlNames
- fieldsUrlParams
- actionUrlNames
- actionUrlParams
- tags
- groups
sortDir:
type: string
enum:
- asc
- desc
default: desc
cursor:
type: string
description: Base64-encoded cursor for pagination. Use nextCursor/previousCursor from previous response for navigation.
limit:
type: number
description: Number of items per page (1-100)
minimum: 1
maximum: 100
fields:
type: array
description: Array of fields to include in the response. Specify which event fields you want returned (e.g., uuid, name, severity, timestampUtcMs).
items:
type: string
enum:
- additionalData
- applicationName
- folderPath
- guestName
- hostName
- ipAddress
- name
- orgUuid
- publicIpAddress
- remoteSessionClientIp
- remoteVirtualSession
- sourceName
- timestampUtcMs
- triggerCondition
- type
- userName
- utcOffsetSeconds
- uuid
- severity
- sourceType
- alertId
- groupId
- fieldsUrlNames
- fieldsUrlParams
- actionUrlNames
- actionUrlParams
- tags
- groups
filters:
type: object
description: 'To use the filter builder, you must first select a single top-level logic group (AND/OR) and then add your filter conditions within the group. All conditions in the group are evaluated together using the group''s logic operator (AND/OR).
Do not include both operator types at the top-level. If you need to combine AND/OR logic, you can switch the logic type by adding a new nested group object within the first group, such as AND[user is Bob, OR[severity is high, severity is low]]. This translates to "user is Bob AND (severity is high OR severity is low)".'
properties:
and:
description: Array of filters/groups where ALL conditions must match (AND logic)
type: array
items:
type: object
properties:
filter:
description: Single filter condition
type: object
properties:
key:
description: Field name to filter on
type: string
enum:
- uuid
- timestampUtcMs
- name
- severity
- sourceName
- guestName
- userName
- type
- utcOffsetSeconds
op:
description: 'Comparison operator.
- Use equals/not_equals for exact matches (works with all fields).
- Use contains for partial string matching (only for string fields like name, userName, guestName, sourceName, NOT for severity enum).
- Use greater/less/greater_or_equals/less_or_equals for numeric comparisons.
- Use between for range queries.'
type: string
enum:
- equals
- contains
- not_equals
- between
- greater
- less
- greater_or_equals
- less_or_equals
value:
description: Value to compare against. Can be string, number, or array for between operator.
oneOf:
- type: string
- type: number
- type: array
items:
oneOf:
- type: string
- type: number
group:
type: object
description: A nested AND/OR group. Use group to create complex queries with nested AND/OR logic.
properties:
and:
description: Array of filters/groups where ALL conditions must match (AND logic)
type: array
or:
description: Array of filters/groups where ANY condition can match (OR logic)
type: array
or:
description: Array of filters/groups where ANY condition can match (OR logic)
type: array
items:
type: object
properties:
filter:
description: Single filter condition
type: object
properties:
key:
description: Field name to filter on
type: string
enum:
- uuid
- timestampUtcMs
- name
- severity
- sourceName
- guestName
- userName
- type
- utcOffsetSeconds
op:
description: 'Comparison operator.
- Use equals/not_equals for exact matches (works with all fields).
- Use contains for partial string matching (only for string fields like name, userName, guestName, sourceName, NOT for severity enum).
- Use greater/less/greater_or_equals/less_or_equals for numeric comparisons.
- Use between for range queries.'
type: string
enum:
- equals
- contains
- not_equals
- between
- greater
- less
- greater_or_equals
- less_or_equals
value:
description: Value to compare against. Can be string, number, or array for between operator.
oneOf:
- type: string
- type: number
- type: array
items:
oneOf:
- type: string
- type: number
group:
# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/controlup/refs/heads/main/openapi/controlup-events-api-openapi.yml