Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/controlup-session-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
OpenAPI Specification
openapi: 3.2.0
info:
title: VDI & DAAS Session API
version: 1.0.0
description: Session statistics report
servers:
- url: https://api.controlup.com/historical
security:
- bearer-jwt:
- read
- write
tags:
- name: Session
description: Session statistics report
paths:
/v1/sessions:
get:
tags:
- Session
summary: Get session statistics
description: Returns statistics for all user sessions. Visit the <a href='https://support.controlup.com/docs/user-sessions-activity-report' target='_blank'>Session Activity Report</a> documentation for column descriptions and more details.
operationId: getSessionsStatistics
parameters:
- name: presetType
in: query
description: Set the type of statistics to return for each user session.
required: true
schema:
type: string
enum:
- activity
- client
- cvad
- horizon
- resources
- ux
- list
- name: userAccount
in: query
description: Filter sessions by user account, provided in the Domain\username format.
required: false
schema:
type: string
- name: userName
in: query
description: Filter sessions by user display name (partial match, e.g. 'John Doe'). If both userName and userAccount are provided, userAccount takes precedence.
required: false
schema:
type: string
example: John Doe
- name: serverName
in: query
description: Filter sessions by server name. This parameter is only applicable when the preset is set to LIST.
required: false
schema:
type: string
- name: _timeFrom
in: query
description: 'Start date and time of the search period in the format: YYYY-MM-DD''T''hh:mm:ss.sssZ'
required: true
schema:
type: string
format: date-time
example: '2025-02-01T00:00:00.000Z'
- name: _timeTo
in: query
description: 'End date and time of the search period in the format: YYYY-MM-DD''T''hh:mm:ss.sssZ'
required: true
schema:
type: string
format: date-time
example: '2025-02-02T00:00:00.000Z'
- name: logonDurationgt
in: query
description: Minimum logon duration in seconds
required: false
schema:
type: integer
format: int32
- name: logonDurationlt
in: query
description: Maximum logon duration in seconds
required: false
schema:
type: integer
format: int32
- name: _page
in: query
description: The page number returned. The first page is 1.
schema:
type: integer
format: int32
minimum: 1
example: 1
- name: _limit
in: query
description: The number of items returned per page. Minimum is 1.
schema:
type: integer
format: int32
maximum: 100000
minimum: 1
example: 20
responses:
'200':
description: Successfully retrieved
content:
application/json:
schema:
type: string
oneOf:
- $ref: '#/components/schemas/SessionActivityResponse'
- $ref: '#/components/schemas/SessionCvadResponse'
- $ref: '#/components/schemas/SessionHorizonResponse'
- $ref: '#/components/schemas/SessionResourcesResponse'
- $ref: '#/components/schemas/SessionUxResponse'
- $ref: '#/components/schemas/SessionClientResponse'
- $ref: '#/components/schemas/SessionListResponse'
application/xml:
schema:
type: string
oneOf:
- $ref: '#/components/schemas/SessionActivityResponse'
- $ref: '#/components/schemas/SessionCvadResponse'
- $ref: '#/components/schemas/SessionHorizonResponse'
- $ref: '#/components/schemas/SessionResourcesResponse'
- $ref: '#/components/schemas/SessionUxResponse'
- $ref: '#/components/schemas/SessionClientResponse'
- $ref: '#/components/schemas/SessionListResponse'
'400':
description: Bad Request - one of the inputs isn't correct
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'401':
description: User is not authorized to access the resource
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'403':
description: Authorization details are not provided
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'501':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'504':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
/v1/sessions/timeline/{sessionUid}:
get:
tags:
- Session
summary: Get session timeline
description: Returns the timeline of session state changes for a specific session.
operationId: getSessionTimeline
parameters:
- name: sessionUid
in: path
description: Session UID to get timeline for
required: true
schema:
type: integer
format: int64
responses:
'200':
description: Successfully retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/SessionTimelineResponse'
application/xml:
schema:
$ref: '#/components/schemas/SessionTimelineResponse'
'400':
description: Bad Request - one of the inputs isn't correct
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'401':
description: User is not authorized to access the resource
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'403':
description: Authorization details are not provided
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'501':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'504':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
/v1/sessions/details:
get:
tags:
- Session
summary: Get individual session details
description: Returns activity details of individual session. Visit the <a href='https://support.controlup.com/docs/user-sessions-activity-report' target='_blank'>Session Activity Report</a> documentation for column descriptions and more details.
operationId: getSessionDetails
parameters:
- name: machineName
in: query
description: The name of virtual machine.
required: true
schema:
type: string
- name: computerId
in: query
description: The name of virtual machine.
required: true
schema:
type: string
- name: sessionUid
in: query
description: Session uid used to identify a session. This value is returned in the session statistics.
required: true
schema:
type: integer
format: int64
- name: isNormalLogoff
in: query
description: Was logoff explicit.
required: true
schema:
type: boolean
- name: sessionStartDateTime
in: query
description: Start datetime of requested session details.
required: true
schema:
type: string
- name: sessionEndDateTime
in: query
description: End datetime of requested session details.
required: false
schema:
type: string
- name: _page
in: query
description: The page number returned. The first page is 1.
schema:
type: integer
format: int32
minimum: 1
example: 1
- name: _limit
in: query
description: The number of items returned per page. Minimum is 1.
schema:
type: integer
format: int32
maximum: 100000
minimum: 1
example: 20
responses:
'200':
description: Successfully retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/SessionDetailsEventsResponse'
application/xml:
schema:
$ref: '#/components/schemas/SessionDetailsEventsResponse'
'400':
description: Bad Request - one of the inputs isn't correct
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'401':
description: User is not authorized to access the resource
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'403':
description: Authorization details are not provided
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'501':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'504':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
/v1/sessions/aggregated:
get:
tags:
- Session
summary: Get aggregated session activity
description: Returns aggregated session activity metrics (avg/min/max/count) grouped by a single session dimension such as folder, delivery group, site, user, protocol, or initial program. Visit the <a href='https://support.controlup.com/docs/user-sessions-activity-report' target='_blank'>Session Activity Report</a> documentation for column descriptions and more details.
operationId: getSessionsAggregated
parameters:
- name: groupBy
in: query
description: Single session dimension to group rows by.
required: true
schema:
type: string
enum:
- folderPath
- folderId
- deliveryGroup
- deliveryGroupId
- eucSiteName
- eucSiteId
- cvadSiteName
- horizonSite
- userAccount
- userFullName
- protocol
- initialProgram
- name: metrics
in: query
description: One or more session metrics to aggregate. Repeat the parameter for multiple values.
required: true
schema:
type: array
items:
type: string
enum:
- duration_in_seconds
- logon_duration
- profile_load_time
- desktop_load_time
- group_policy_load_time
- logon_duration_other
- cvad_logon_duration
- cvad_profile_load_time
- cvad_group_policy_load_time
- session_protocol_latency_avg
- session_protocol_latency_max
- session_protocol_latency_min
- rtt_avg
- rtt_max
- rtt_min
- active_time_in_seconds
- idle_time_in_seconds
- disconnected_time_in_seconds
- name: aggregations
in: query
description: 'Aggregation functions to apply to each metric. Repeat for multiple. Default: avg.'
required: false
schema:
type: array
items:
type: string
enum:
- avg
- min
- max
- count
- name: _sortBy
in: query
description: 'Response field to sort by (must equal a returned <metric>_<aggregation>, session_count, or the groupBy field). Default: <first metric>_<first aggregation>.'
required: false
schema:
type: string
- name: _sortOrder
in: query
description: 'Sort order. Default: desc.'
required: false
schema:
type: string
enum:
- asc
- desc
- name: _timeFrom
in: query
description: 'Start date and time of the search period in the format: YYYY-MM-DD''T''hh:mm:ss.sssZ'
required: true
schema:
type: string
format: date-time
example: '2025-02-01T00:00:00.000Z'
- name: _timeTo
in: query
description: 'End date and time of the search period in the format: YYYY-MM-DD''T''hh:mm:ss.sssZ'
required: true
schema:
type: string
format: date-time
example: '2025-02-02T00:00:00.000Z'
- name: userAccount
in: query
description: Filter sessions by user account, provided in the Domain\username format.
required: false
schema:
type: string
- name: serverName
in: query
description: Filter sessions by server name.
required: false
schema:
type: string
- name: logonDurationgt
in: query
description: Minimum logon duration in seconds (pre-aggregation filter).
required: false
schema:
type: integer
format: int32
- name: logonDurationlt
in: query
description: Maximum logon duration in seconds (pre-aggregation filter).
required: false
schema:
type: integer
format: int32
- name: _page
in: query
description: The page number returned. The first page is 1.
schema:
type: integer
format: int32
minimum: 1
example: 1
- name: _limit
in: query
description: The number of items returned per page. Minimum is 1.
schema:
type: integer
format: int32
maximum: 100000
minimum: 1
example: 20
responses:
'200':
description: Successfully retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/SessionAggregatedResponse'
application/xml:
schema:
$ref: '#/components/schemas/SessionAggregatedResponse'
'400':
description: Bad Request - one of the inputs isn't correct
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'401':
description: User is not authorized to access the resource
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'403':
description: Authorization details are not provided
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'501':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
'504':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
application/xml:
schema:
$ref: '#/components/schemas/HistoricalErrorResponse'
components:
schemas:
SessionDetailsResult:
type: object
properties:
session_events:
type: array
items:
$ref: '#/components/schemas/SessionState'
session_client_info:
type: array
items:
$ref: '#/components/schemas/SessionClientInfo'
active_apps:
type: array
items:
$ref: '#/components/schemas/ActiveApp'
active_urls:
type: array
items:
$ref: '#/components/schemas/ActiveUrl'
ActiveUrl:
type: object
properties:
active_url:
type: string
start_time:
type: string
end_time:
type: string
SessionAggregatedResult:
type: object
description: Aggregated session activity row. The exact set of fields returned depends on the requested groupBy, metrics and aggregations. Each request returns the group field, session_count, and one column per <metric>_<aggregation> combination.
properties:
session_count:
type: integer
format: int64
description: Number of distinct sessions in the group (COUNT(DISTINCT session_uid)). Always returned.
folder_path:
type: string
description: Folder path the session belonged to. Present when groupBy=folderPath.
folder_id:
type: integer
format: int64
description: 'Folder identifier. Present when groupBy=folderId. Numeric: folder ids fit within the 32-bit range, so they are not affected by the large-id precision issue (bug #310813).'
initial_cvad_delivery_group:
type: string
description: CVAD delivery group display name. Present when groupBy=deliveryGroup. CVAD-only.
initial_cvad_delivery_group_id:
type: string
description: 'CVAD delivery group identifier. Present when groupBy=deliveryGroupId. CVAD-only. Returned as a string: this is a 64-bit hash-based id that exceeds JavaScript''s safe integer range (bug #310813).'
euc_site_name:
type: string
description: EUC site display name. Present when groupBy=eucSiteName.
euc_site_id:
type: string
description: 'EUC site identifier. Present when groupBy=eucSiteId. Returned as a string: this is a 64-bit hash-based id that exceeds JavaScript''s safe integer range (bug #310813).'
initial_cvad_site_name:
type: string
description: CVAD site display name. Present when groupBy=cvadSiteName. CVAD-only.
hz_site:
type: string
description: Horizon site name. Present when groupBy=horizonSite. Horizon-only.
user_account:
type: string
description: User account in Domain\username form. Present when groupBy=userAccount.
user_full_name:
type: string
description: User full display name. Present when groupBy=userFullName. Not available from session_aggregation_30d.
protocol_name:
type: string
description: Display name of the connection protocol. Present when groupBy=protocol.
initial_program:
type: string
description: Initial program for the session. Present when groupBy=initialProgram. Not available from session_aggregation_30d.
duration_in_seconds_avg:
type: integer
format: int64
description: Aggregated duration_in_seconds. Suffix matches the requested aggregation (e.g. duration_in_seconds_avg).
duration_in_seconds_min:
type: integer
format: int64
duration_in_seconds_max:
type: integer
format: int64
duration_in_seconds_count:
type: integer
format: int64
logon_duration_avg:
type: integer
format: int64
description: Aggregated logon_duration. Suffix matches the requested aggregation (e.g. logon_duration_max).
logon_duration_min:
type: integer
format: int64
logon_duration_max:
type: integer
format: int64
logon_duration_count:
type: integer
format: int64
profile_load_time_avg:
type: integer
format: int64
profile_load_time_min:
type: integer
format: int64
profile_load_time_max:
type: integer
format: int64
profile_load_time_count:
type: integer
format: int64
desktop_load_time_avg:
type: integer
format: int64
desktop_load_time_min:
type: integer
format: int64
desktop_load_time_max:
type: integer
format: int64
desktop_load_time_count:
type: integer
format: int64
group_policy_load_time_avg:
type: integer
format: int64
group_policy_load_time_min:
type: integer
format: int64
group_policy_load_time_max:
type: integer
format: int64
group_policy_load_time_count:
type: integer
format: int64
logon_duration_other_avg:
type: integer
format: int64
logon_duration_other_min:
type: integer
format: int64
logon_duration_other_max:
type: integer
format: int64
logon_duration_other_count:
type: integer
format: int64
cvad_logon_duration_avg:
type: integer
format: int64
cvad_logon_duration_min:
type: integer
format: int64
cvad_logon_duration_max:
type: integer
format: int64
cvad_logon_duration_count:
type: integer
format: int64
cvad_profile_load_time_avg:
type: integer
format: int64
cvad_profile_load_time_min:
type: integer
format: int64
cvad_profile_load_time_max:
type: integer
format: int64
cvad_profile_load_time_count:
type: integer
format: int64
cvad_group_policy_load_time_avg:
type: integer
format: int64
cvad_group_policy_load_time_min:
type: integer
format: int64
cvad_group_policy_load_time_max:
type: integer
format: int64
cvad_group_policy_load_time_count:
type: integer
format: int64
session_protocol_latency_avg_avg:
type: integer
format: int64
session_protocol_latency_avg_min:
type: integer
format: int64
session_protocol_latency_avg_max:
type: integer
format: int64
session_protocol_latency_avg_count:
type: integer
format: int64
session_protocol_latency_max_avg:
type: integer
format: int64
session_protocol_latency_max_min:
type: integer
format: int64
session_protocol_latency_max_max:
type: integer
format: int64
session_protocol_latency_max_count:
type: integer
format: int64
session_protocol_latency_min_avg:
type: integer
format: int64
session_protocol_latency_min_min:
type: integer
format: int64
session_protocol_latency_min_max:
type: integer
format: int64
session_protocol_latency_min_count:
type: integer
format: int64
rtt_avg_avg:
type: integer
format: int64
rtt_avg_min:
type: integer
format: int64
rtt_avg_max:
type: integer
format: int64
rtt_avg_count:
type: integer
format: int64
rtt_max_avg:
type: integer
format: int64
rtt_max_min:
type: integer
format: int64
rtt_max_max:
type: integer
format: int64
rtt_max_count:
type: integer
format: int64
rtt_min_avg:
type: integer
format: int64
rtt_min_min:
type: integer
format: int64
rtt_min_max:
type: integer
format: int64
rtt_min_count:
type: integer
format: int64
active_time_in_seconds_avg:
type: integer
format: int64
active_time_in_seconds_min:
type: integer
format: int64
active_time_in_seconds_max:
type: integer
format: int64
active_time_in_seconds_count:
type: integer
format: int64
idle_time_in_seconds_avg:
type: integer
format: int64
idle_time_in_seconds_min:
type: integer
format: int64
idle_time_in_seconds_max:
type: integer
format: int64
idle_time_in_seconds_count:
type: integer
format: int64
disconnected_time_in_seconds_avg:
type: integer
format: int64
disconnected_time_in_seconds_min:
type: integer
format: int64
disconnected_time_in_seconds_max:
type: integer
format: int64
disconnected_time_in_seconds_count:
type: integer
format: int64
SessionClientResponse:
type: object
properties:
metadata:
$ref: '#/components/schemas/UserMetadata'
data:
type: array
items:
$ref: '#/components/schemas/SessionClientResult'
SessionTimelineResponse:
type: object
properties:
metadata:
$ref: '#/components/schemas/UserMetadata'
data:
$ref: '#/components/schemas/SessionTimelineResult'
SessionListResponse:
type: object
properties:
metadata:
$ref: '#/components/schemas/UserMetadata'
data:
type: array
items:
$ref: '#/components/schemas/SessionListResult'
ActiveApp:
type: object
properties:
active_app:
type: string
start_time:
type: string
end_time:
type: string
UserMetadata:
type: object
properties:
orgId:
type: string
infraGuid:
type: string
region:
type: string
userId:
type: string
total:
type: integer
format: int64
limitPerPage:
type: integer
format: int32
currentPageNumber:
type: integer
format: int32
currentPageSize:
type: integer
format: int32
remaining:
type: integer
format: int64
userEmail:
type: string
truncated:
type: boolean
truncationLimit:
type: integer
format: int32
timeFrom:
type: string
timeTo:
type: string
SessionResourcesResult:
type: object
properties:
user_name:
type: string
logoff_time:
type: string
user_full_name:
type: string
session_id:
type: string
login_time:
type: string
logon_duration:
type: integer
format: int64
session_protocol_latency_avg:
type: integer
format: int64
initial_program:
type: string
initial_client_ip:
type: string
user_ad_ou:
type: string
initial_client_branch_name:
type: string
session_protocol_bandwidth_usage_avg:
type: integer
format: int64
session_protocol_bandwidth_usage_max:
type: integer
format: int64
rtt_avg:
type: integer
format: int64
session_protocol_latency_max:
type: integer
format: int64
cpu_usage_avg:
type: integer
format: int64
gpu_cpu_utilization_avg:
type: integer
format: int64
memory_usage_avg:
type: integer
format: int64
desktop_load_time:
type: integer
format: int64
# --- truncated at 32 KB (46 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/controlup/refs/heads/main/openapi/controlup-session-api-openapi.yml