From 88d22f5d291fda217439d2da34b67ae12b04d167 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 21 Apr 2026 09:11:30 +0000 Subject: [PATCH 01/23] docs(endpointprotector): document Show notifications in Hidden Icon mode setting (ADO-373974) Adds description of the new 'Show notifications in Hidden Icon mode' toggle to the Hidden Icon client mode entry in Global Settings. The setting is disabled by default and becomes visible only when Hidden Icon mode is selected. https://claude.ai/code/session_01NnpBXPpwU4bzSQX2JfkNyL --- docs/endpointprotector/admin/dc_module/globalsettings.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/endpointprotector/admin/dc_module/globalsettings.md b/docs/endpointprotector/admin/dc_module/globalsettings.md index 920d3ef60c..5c1a082a8c 100644 --- a/docs/endpointprotector/admin/dc_module/globalsettings.md +++ b/docs/endpointprotector/admin/dc_module/globalsettings.md @@ -247,6 +247,8 @@ Select from the drop-down list a client mode to define the Endpoint Protector C - Not display system tray notifications - Apply all set rights and settings as per their configuration + When Hidden Icon mode is selected, the **Show notifications in Hidden Icon mode** setting becomes available under the Client Mode section. This setting is disabled by default. Enable it to allow client notifications to be displayed while the Endpoint Protector Client icon remains hidden. + 6. Silent - this mode is similar to Normal mode, except that pop-up notifications are not visible to the user. From 2032ba79d00f407e281911b2b6874ad2defa985e Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 21 Apr 2026 10:54:26 +0000 Subject: [PATCH 02/23] Update EPP docs for v5.9.5.3 3rd F&F release - ADO-373974: Document Show notifications in Hidden Icon mode setting - ADO-409253: Update Debug Logging default level and obfuscation defaults - ADO-412120: Add [Certificate State] to CAP SIEM Export Log Fields - ADO-379870/379934: Add [Shadow Exists] and [Repository Type] to DC and CAP SIEM fields - ADO-418090: Add migration readiness preflight checklist to backup.md - ADO-418092: New transition2509.md guide for Server 2509 migration - Date/Time(Client UTC): Update reports.md and systemmaintenance/overview.md - Logs REST API: Add logsrestapi/ section (4 new pages) - ADO-415241/320184: Add mailsettings.md, update systemsettings.md and setupwizard.md for OAuth SMTP --- docs/endpointprotector/admin/appliance.md | 5 + .../admin/dc_module/globalsettings.md | 4 +- .../admin/logsrestapi/apispecification.md | 548 ++++++++++++++++++ .../admin/logsrestapi/installation.md | 379 ++++++++++++ .../admin/logsrestapi/logrestapi.md | 306 ++++++++++ .../admin/logsrestapi/logsrestapisetup.md | 177 ++++++ docs/endpointprotector/admin/reports.md | 6 +- .../admin/systemconfiguration/mailsettings.md | 95 +++ .../systemconfiguration/systemsettings.md | 15 +- .../admin/systemmaintenance/backup.md | 25 + .../admin/systemmaintenance/overview.md | 2 + .../install/transition2509.md | 89 +++ .../install/virtualappliance/setupwizard.md | 4 + 13 files changed, 1638 insertions(+), 17 deletions(-) create mode 100644 docs/endpointprotector/admin/logsrestapi/apispecification.md create mode 100644 docs/endpointprotector/admin/logsrestapi/installation.md create mode 100644 docs/endpointprotector/admin/logsrestapi/logrestapi.md create mode 100644 docs/endpointprotector/admin/logsrestapi/logsrestapisetup.md create mode 100644 docs/endpointprotector/admin/systemconfiguration/mailsettings.md create mode 100644 docs/endpointprotector/install/transition2509.md diff --git a/docs/endpointprotector/admin/appliance.md b/docs/endpointprotector/admin/appliance.md index fd94e34959..3e5e190740 100644 --- a/docs/endpointprotector/admin/appliance.md +++ b/docs/endpointprotector/admin/appliance.md @@ -360,6 +360,8 @@ The standard format for the Device Control fields is as follows: - [Date/Time(Client)] - [Date/Time(Server UTC)] - [Date/Time(Client UTC)] +- [Shadow Exists] +- [Repository Type] #### Content Aware Protection @@ -395,6 +397,9 @@ The standard format for the Content Aware Protection fields is as follows: - [Date/Time(Client)] - [Date/Time(Server UTC)] - [Date/Time(Client UTC)] +- [Certificate State] +- [Shadow Exists] +- [Repository Type] #### E-Discovery diff --git a/docs/endpointprotector/admin/dc_module/globalsettings.md b/docs/endpointprotector/admin/dc_module/globalsettings.md index 5c1a082a8c..c24b2d776b 100644 --- a/docs/endpointprotector/admin/dc_module/globalsettings.md +++ b/docs/endpointprotector/admin/dc_module/globalsettings.md @@ -903,10 +903,10 @@ On the Global > Computer > User Settings page, configure the following settings **Step 1 –** Enable **Debug Mode** from the DEBUG logging section. **Step 2 –** Click and select an option on the **set logs level** (None, Error, Warning, -Informational, Debug) drop down. +Informational, Debug) drop down. For new deployments, the default level is **Error**. **Step 3 –** For Error, Warning, Informational, and Debug log levels select **obfuscate sensitive -data**. +data**. For new deployments, **Obfuscate Sensitive Data** is enabled by default. **Step 4 –** **Save.** diff --git a/docs/endpointprotector/admin/logsrestapi/apispecification.md b/docs/endpointprotector/admin/logsrestapi/apispecification.md new file mode 100644 index 0000000000..d799f847bd --- /dev/null +++ b/docs/endpointprotector/admin/logsrestapi/apispecification.md @@ -0,0 +1,548 @@ +--- +title: "Logs REST API Specification" +description: "Complete endpoint reference for the EPP Logs REST API including request parameters, response fields, and examples" +sidebar_position: 40 +--- + +# Logs REST API Specification + +**Version:** 1.0 +**Base URL:** `https:///api/logs/` +**Protocol:** HTTPS only (TLS 1.2+) +**Content-Type:** `application/json` + +## Authentication + +All requests require authentication via one of these methods (in order of preference): + +| Method | Format | Example | +|---|---|---| +| X-Api-Key header | `X-Api-Key: ` | `X-Api-Key: abc123def456` | +| Bearer token | `Authorization: Bearer ` | `Authorization: Bearer abc123def456` | +| Query parameter | `?api_key=` | `?api_key=abc123def456` | + +API keys are validated against the `api_key` database table. The associated user must be active in `sf_guard_user`. + +If no API key is provided or validated, the API falls back to checking for an active Symfony session cookie (useful when calling the API from the EPP web interface). + +Unauthenticated requests receive: + +```json +{ + "success": false, + "error": { + "code": 401, + "message": "Missing API key. Provide via X-Api-Key header or api_key query parameter." + } +} +``` + +## Common parameters + +All list endpoints support the following query parameters. + +### Pagination + +| Parameter | Type | Default | Description | +|---|---|---|---| +| `page` | integer | 1 | Page number (1-based) | +| `per_page` | integer | 50 | Items per page (max: 200) | + +### Sorting + +| Parameter | Type | Default | Description | +|---|---|---|---| +| `sort_by` | string | `id` | Column to sort by (must be a valid column for the endpoint) | +| `sort_order` | string | `DESC` | Sort direction: ASC or DESC | + +### Date filtering + +| Parameter | Type | Format | Description | +|---|---|---|---| +| `start_date` | string | `YYYY-MM-DD` or `YYYY-MM-DD HH:MM:SS` | Return records on or after this date | +| `end_date` | string | `YYYY-MM-DD` or `YYYY-MM-DD HH:MM:SS` | Return records on or before this date | + +The date field used for filtering varies by endpoint (documented per endpoint below). + +### Text search + +| Parameter | Type | Description | +|---|---|---| +| `search` | string | Full-text search across all filterable columns (uses LIKE matching) | + +## Response format + +**Success (single resource)** + +```json +{ + "success": true, + "data": { + "id": "1", + "name": "Example", + "created_at": "2025-01-15 10:30:00" + } +} +``` + +**Success (list with pagination)** + +```json +{ + "success": true, + "data": [ + { "id": "1", "name": "Example 1" }, + { "id": "2", "name": "Example 2" } + ], + "meta": { + "page": 1, + "per_page": 50, + "total": 128, + "total_pages": 3 + } +} +``` + +**Error** + +```json +{ + "success": false, + "error": { + "code": 404, + "message": "Resource not found" + } +} +``` + +## Error handling + +| HTTP Code | Meaning | +|---|---| +| 200 | Success | +| 400 | Bad request (invalid parameters) | +| 401 | Unauthorized (missing or invalid API key) | +| 404 | Resource not found | +| 405 | Method not allowed (only GET is supported) | +| 429 | Rate limit exceeded | +| 500 | Internal server error | + +## Endpoints + +### Event Logs + +Core device control event logs from the `log` table, joined with `event`, `clientmachine`, `clientuser`, `clientdevice`, and `devicetype` tables. + +**GET /event-logs** + +Date field: `eventtime` + +Filters: + +| Parameter | Type | Description | +|---|---|---| +| `start_date` | string | Return records on or after this date | +| `end_date` | string | Return records on or before this date | +| `machine_name` | string | Filter by machine name (partial match) | +| `client_name` | string | Filter by client name (partial match) | + +Response fields: + +| Field | Source | Description | +|---|---|---| +| `id` | `log.id` | Log entry ID | +| `machine_id` | `log.machine_id` | Machine ID | +| `machine_name` | `clientmachine.name` | Computer name (resolved via JOIN) | +| `machine_ip` | `clientmachine.ip` | Computer IP address (resolved via JOIN) | +| `client_id` | `log.client_id` | Client user ID | +| `client_username` | `clientuser.username` | Username (resolved via JOIN) | +| `device_type_id` | `log.device_type_id` | Device type ID | +| `device_type_name` | `devicetype.name` | Device type name, e.g. "USB Storage" (resolved via JOIN) | +| `device_id` | `log.device_id` | Device ID | +| `device_name` | `clientdevice.name` | Device name (resolved via JOIN) | +| `event_id` | `log.event_id` | Event ID | +| `event_name` | `event.name` | Event name (resolved via JOIN) | +| `eventtime` | `log.eventtime` | Event timestamp — server time (UTC) | +| `eventtimelocal` | `log.eventtimelocal` | Event timestamp — client local time | +| `filename` | `log.filename` | File name involved | +| `filesize` | `log.filesize` | File size in bytes | +| `filetype_extension` | `log.filetype_extension` | File extension | +| `filenameduplicate` | `log.filenameduplicate` | Duplicate file name | +| `filehash` | `log.filehash` | File hash (MD5) | +| `created_at` | `log.created_at` | Record creation timestamp | +| `created_by` | `log.created_by` | Record creator | + +Example: + +```bash +GET /api/logs/event-logs?machine_name=WORKSTATION&start_date=2025-01-01&per_page=10 +``` + +**GET /event-logs/{id}** + +Returns a single event log entry by ID with the same fields as the list endpoint. + +### Device Control Logs + +Online device tracking logs from the `olog` table, joined with `event`, `devicetype`, `clientmachine`, and `clientdevice` tables. + +**GET /device-control-logs** + +Date field: `eventtime` + +Filters: + +| Parameter | Type | Description | +|---|---|---| +| `start_date` | string | Return records on or after this date | +| `end_date` | string | Return records on or before this date | +| `machine_name` | string | Filter by machine name (partial match) | +| `client_name` | string | Filter by client name (partial match) | + +Response fields: + +| Field | Source | Description | +|---|---|---| +| `id` | `olog.id` | Log entry ID | +| `loclogid` | `olog.loclogid` | Local log ID | +| `machine_id` | `olog.machine_id` | Machine ID | +| `machine_name` | `olog.machine_name` | Computer name (denormalized) | +| `ip` | `olog.ip` | Computer IP address (denormalized) | +| `domain` | `olog.domain` | Computer domain | +| `client_id` | `olog.client_id` | Client user ID | +| `client_name` | `olog.client_name` | Username (denormalized) | +| `device_type_id` | `olog.device_type_id` | Device type ID | +| `device_type_name` | `devicetype.name` | Device type name (resolved via JOIN) | +| `device_id` | `olog.device_id` | Device ID | +| `device_name` | `olog.device_name` | Device name (denormalized) | +| `event_id` | `olog.event_id` | Event ID | +| `event_name` | `event.name` | Event name (resolved via JOIN) | +| `machine_serial_number` | `clientmachine.serial_number` | Machine serial number (resolved via JOIN) | +| `device_serial_number` | `clientdevice.serialno` | Device serial number (resolved via JOIN) | +| `eventtime` | `olog.eventtime` | Event timestamp — server time (UTC) | +| `eventtimelocal` | `olog.eventtimelocal` | Event timestamp — client local time | +| `nrfiles` | `olog.nrfiles` | Number of files | +| `alert_flag` | `olog.alert_flag` | Alert flag | +| `filename` | `olog.filename` | File name | +| `filetype` | `olog.filetype` | File type | +| `os_type` | `olog.os_type` | OS type | +| `timestamp` | `olog.timestamp` | Unix timestamp | +| `department_id` | `olog.department_id` | Department ID | + +**GET /device-control-logs/{id}** + +Returns a single device control log entry by ID with the same fields as the list endpoint. + +### Alert Statuses + +**GET /alert-statuses/{id}** + +Returns a single alert status entry by ID. + +Response fields: `id`, `alert_type`, `log_id`, `alert_id`, `status`, `email`, `timestamp` + +### System Alerts + +**GET /system-alerts** + +Lists system alerts, joined with `sys_event` for event names. + +Response fields: `id`, `name`, `sys_event_id`, `event_name` + +**GET /system-alert-logs** + +Lists system alert log entries, joined with `sys_event` for event names. + +Date field: `created_at` + +Filters: + +| Parameter | Type | Description | +|---|---|---| +| `start_date` | string | Return records on or after this date | +| `end_date` | string | Return records on or before this date | + +Response fields: `id`, `sys_alert_name`, `sys_event_id`, `sys_event_opt_id`, `created_at`, `event_name` + +### Content Filtering (CAP) Logs + +Content-Aware Protection logs and alerts, joined with `event` table for event names. + +**GET /content-filtering-logs** + +Date field: `eventtime` + +Filters: + +| Parameter | Type | Description | +|---|---|---| +| `start_date` | string | Return records on or after this date | +| `end_date` | string | Return records on or before this date | +| `machine_name` | string | Filter by machine name (partial match) | +| `client_name` | string | Filter by client name (partial match) | + +Response fields: `id`, `loclogid`, `event_id`, `machine_id`, `machine_name`, `ip`, `domain`, `client_id`, `client_name`, `destination_type`, `destination`, `filename`, `content_policy`, `content_policy_type`, `item_type`, `matched_item`, `item_details`, `eventtime`, `eventtimelocal`, `alert_flag`, `nr_reports`, `filesize`, `filehash`, `os_type`, `department_id`, `justification`, `event_name` + +:::note +Hash columns (`loghash`, `loghasht`, etc.) are excluded from list responses for performance. Use the detail endpoint to retrieve all fields. +::: + +**GET /content-filtering-logs/{id}** + +Returns a single content filtering log with all fields (including hash columns and `event_name`). + +**GET /content-filtering-alerts** + +Lists content filtering alert definitions, joined with `event` for event names. + +Date field: `created_at` + +Filters: `event_id`, `content_policy`, `department_id` + +Response fields: `id`, `name`, `department_id`, `group_id`, `machine_id`, `client_id`, `content_policy`, `event_id`, `old_alert`, `created_at`, `created_by_user_id`, `event_name` + +**GET /content-filtering-alerts/{id}** + +Returns a single content filtering alert by ID with event name. + +### Mobile Management Logs + +**GET /mobile-management-logs** + +Date field: `eventtime` + +Filters: `mm_device_id`, `action_ck`, `result_code` + +Response fields: `id`, `mm_device_id`, `action_ck`, `action`, `result_code`, `error_code`, `error_message`, `latitude`, `longitude`, `altitude`, `loctime`, `locqual`, `other`, `short_address`, `long_address`, `eventtime` + +**GET /mobile-management-alerts** + +Lists mobile management alert definitions. + +Filters: `mm_device_id`, `mm_event_id` + +Response fields: `id`, `name`, `mm_device_type_id`, `mm_device_id`, `mm_event_id` + +**GET /mobile-management-alert-logs** + +Date field: `created_at` + +Filters: `mm_device_type_id`, `mm_device_id`, `mm_event_id` + +Response fields: `id`, `mm_alert_name`, `mm_device_type_id`, `mm_device_id`, `mm_event_id`, `created_at` + +### EasyLock Logs + +**GET /easylock-alert-logs** + +Date field: `created_at` + +Filters: `el_alert_name`, `el_event_name`, `el_client_name`, `el_device_machine`, `el_device_username`, `sent` + +Response fields: `id`, `el_alert_name`, `el_event_name`, `el_client_name`, `el_device_name`, `el_device_description`, `el_ip`, `el_device_vid`, `el_device_pid`, `el_device_serial`, `el_device_machine`, `el_device_username`, `sent`, `sent_at`, `created_at` + +**GET /easylock-send-alert-logs** + +Lists EasyLock send alert log entries, joined with `el_event` for event names. + +Filters: `event_id`, `machine_id`, `user_id`, `status`, `alert_flag` + +Response fields: `id`, `event_id`, `machine_id`, `user_id`, `group_id`, `status`, `alert_flag`, `description`, `event_name` + +### Data at Rest + +**GET /data-rest-alerts/{id}** + +Returns a single Data-at-Rest alert with event name. + +Response fields: `id`, `name`, `dr_event_id`, `event_name` + +### SCIM Logs + +**GET /scim-logs** + +Lists SCIM API log entries. + +Filters: + +| Parameter | Type | Description | +|---|---|---| +| `http_method` | string | Filter by HTTP method (GET, POST, etc.) | +| `endpoint` | string | Filter by API endpoint path | +| `status_code` | string | Filter by HTTP status code | +| `actor` | string | Filter by actor/user | +| `operation` | string | Filter by SCIM operation | +| `resource_type` | string | Filter by resource type (User, Group, etc.) | + +Response fields: `id`, `timestamp`, `request_id`, `http_method`, `endpoint`, `status_code`, `actor`, `operation`, `resource_type`, `external_id`, `duration_ms`, `ip_address`, `user_agent`, `bulk_request_id`, `operation_index` + +:::note +`request_body` and `response_body` are excluded from list responses. Use the detail endpoint. +::: + +**GET /scim-logs/{id}** + +Returns a single SCIM log entry including `request_body` and `response_body`. + +### Authentication Logs + +**GET /auth-logs** + +Lists user authentication attempt logs, joined with `sf_guard_user` for usernames. + +Date field: `created_at` + +Filters: + +| Parameter | Type | Description | +|---|---|---| +| `user_id` | integer | Filter by user ID | +| `ip` | string | Filter by IP address (partial match) | +| `block` | integer | Filter by block status | + +Response fields: `id`, `user_id`, `ip`, `number_attempts`, `block`, `created_at`, `expire_at`, `username` + +### Export Logs + +**GET /export-logs/{id}** + +Returns a single export log entry including the `description` field. + +Response fields: `id`, `name`, `log_type`, `status`, `date`, `from_date`, `to_date`, `partitions`, `export_type`, `sf_guard_user_id`, `description` + +### Admin Actions + +**GET /admin-actions** + +Lists administrator action audit trail entries, joined with `sf_guard_user` for usernames. + +Date field: `created_at` + +Filters: + +| Parameter | Type | Description | +|---|---|---| +| `user_id` | integer | Filter by admin user ID | +| `section` | string | Filter by section (e.g. "Device Control") | +| `log_type` | string | Filter by log type | +| `operation` | string | Filter by operation performed | +| `search` | string | Search across section, log_type, operation, and username | + +Response fields: `id`, `user_id`, `created_at`, `section`, `log_type`, `operation`, `username` + +:::note +`before_desc` and `after_desc` LONGTEXT fields are excluded from list responses for performance. +::: + +## Usage examples + +**List recent device control logs for a specific machine** + +```bash +curl -s -k \ + -H "X-Api-Key: YOUR_API_KEY" \ + "https://epp-server/api/logs/device-control-logs?machine_name=WORKSTATION&sort_by=eventtime&sort_order=DESC&per_page=10" +``` + +**Get content filtering logs for a date range** + +```bash +curl -s -k \ + -H "X-Api-Key: YOUR_API_KEY" \ + "https://epp-server/api/logs/content-filtering-logs?start_date=2025-01-01&end_date=2025-01-31&content_policy=PCI" +``` + +**Get a specific event log entry** + +```bash +curl -s -k \ + -H "X-Api-Key: YOUR_API_KEY" \ + "https://epp-server/api/logs/event-logs/12345" +``` + +## Database tables reference + +| Endpoint Group | Primary Table | Joined Tables | +|---|---|---| +| Event Logs | `log` | `event`, `clientmachine`, `clientuser`, `clientdevice`, `devicetype` | +| Device Control | `olog` | `event`, `devicetype`, `clientmachine`, `clientdevice` | +| Alert Statuses | `alert_status` | — | +| System Alerts | `sys_alert`, `sys_alert_log` | `sys_event` | +| Content Filtering | `cf_log`, `cf_alert` | `event` | +| Mobile Management | `mm_log`, `mm_alert`, `mm_alert_log` | — | +| EasyLock | `el_alert_log`, `el_send_alert_log` | `el_event` | +| Data at Rest | `dr_alert` | `dr_event` | +| SCIM Logs | `scim_log` | — | +| Auth Logs | `sf_guard_log` | `sf_guard_user` | +| Export Logs | `export_log_list` | — | +| Admin Actions | `admin_action` | `sf_guard_user` | + +## Rate limiting + +The API enforces two independent rate limits using a fixed-window counter: + +1. **Global limit** — caps total requests across all users combined (server protection) +2. **Per-user limit** — caps requests per authenticated user or IP (fairness) + +Both checks happen on every request. Whichever limit triggers first returns a 429 response. + +### Configuration + +Rate limit parameters are configured in `api_config.php`: + +| Parameter | Type | Default | Description | +|---|---|---|---| +| `rate_limit_enabled` | boolean | `true` | Enable or disable all rate limiting | +| `rate_limit_global_requests` | integer | 200 | Max requests per window across all users | +| `rate_limit_global_window` | integer | 60 | Global window in seconds | +| `rate_limit_user_requests` | integer | 60 | Max requests per window per user | +| `rate_limit_user_window` | integer | 60 | Per-user window in seconds | + +With defaults: 200 requests/minute globally, 60 requests/minute per user. + +### Response headers + +Every API response includes per-user rate limit headers: + +| Header | Description | +|---|---| +| `X-RateLimit-Limit` | Per-user maximum requests per window | +| `X-RateLimit-Remaining` | Per-user requests remaining in the current window | +| `X-RateLimit-Reset` | Unix timestamp when the per-user window resets | + +### Rate limit exceeded (429) + +When the per-user limit is exceeded: + +```json +{ + "success": false, + "error": { + "code": 429, + "message": "Rate limit exceeded. Maximum 60 requests per 60 seconds." + } +} +``` + +When the global limit is exceeded: + +```json +{ + "success": false, + "error": { + "code": 429, + "message": "Global rate limit exceeded. Maximum 200 requests per 60 seconds across all users." + } +} +``` + +The response also includes a `Retry-After` header (in seconds) indicating when the client may retry. + +## CORS + +The API includes CORS headers allowing cross-origin requests from any origin. The OPTIONS preflight response includes: + +- `Access-Control-Allow-Origin: *` +- `Access-Control-Allow-Methods: GET, OPTIONS` +- `Access-Control-Allow-Headers: Content-Type, X-Api-Key, Authorization` +- `Access-Control-Max-Age: 86400` diff --git a/docs/endpointprotector/admin/logsrestapi/installation.md b/docs/endpointprotector/admin/logsrestapi/installation.md new file mode 100644 index 0000000000..cc01d129ba --- /dev/null +++ b/docs/endpointprotector/admin/logsrestapi/installation.md @@ -0,0 +1,379 @@ +--- +title: "Logs REST API Installation" +description: "Full installation and configuration reference for the EPP Logs REST API on nginx" +sidebar_position: 30 +--- + +# Logs REST API Installation + +This page covers the installation and configuration of the EPP Logs REST API on an Endpoint Protector server running nginx. + +## Prerequisites + +- Endpoint Protector server with nginx and PHP-FPM running +- PHP 5.6+ with the following extensions: `mysqli`, `json`, `session` +- Propel ORM configured and operational (part of the standard EPP installation) +- MySQL database with the EPP schema loaded +- SSH/root access to the EPP server + +## File deployment + +The API files are located under `sieratool/webservice/api/`. On a standard EPP server, the application root is `/var/www/EPPServer/`. + +**Step 1 –** Ensure the following directory structure exists on the server: + +``` +/var/www/EPPServer/sieratool/webservice/api/ +├── .htaccess +├── index.php +├── lib/ +│ ├── ApiAuth.php +│ ├── ApiResponse.php +│ ├── ApiRouter.php +│ └── BaseController.php +└── controllers/ + ├── AdOperationController.php + ├── AlertController.php + ├── AuthLogController.php + ├── ContentFilteringController.php + ├── DataRestController.php + ├── DeviceControlController.php + ├── DiscoveryController.php + ├── EasyLockController.php + ├── EventLogController.php + ├── ExportLogController.php + ├── MobileManagementController.php + ├── ScimLogController.php + ├── SiemLogController.php + ├── SystemAlertController.php + └── TransferLimitController.php +``` + +**Step 2 –** Set file ownership and permissions: + +```bash +chown -R www-data:www-data /var/www/EPPServer/sieratool/webservice/api/ +chmod -R 750 /var/www/EPPServer/sieratool/webservice/api/ +``` + +## Nginx configuration + +EPP uses nginx as its web server with FastCGI (PHP-FPM) for PHP processing. The main nginx site configuration is at: + +``` +/etc/nginx/sites-enabled/epp.nginx.conf +``` + +The configuration template is maintained at: + +``` +/var/www/EPPServer/appliance/resources/templates/nginx/sites-enabled/epp.nginx.conf.template +``` + +### Add the API location block + +Add the following location block to the nginx server configuration. Place it **before** the generic PHP location block (`location ~ "^(.+\.php)($|/)"`) and after the existing `/ws` blocks. + +**Step 1 –** Open the nginx config: + +```bash +vi /etc/nginx/sites-enabled/epp.nginx.conf +``` + +**Step 2 –** Add the following block after the SCIM API block (`location ^~ /scim/`) and before the Kerberos comment block: + +```nginx +# EPP Logs REST API +location ^~ /api/logs/ { + alias /var/www/EPPServer/sieratool/webservice/api/; + + location ~ ^/api/logs/(.*)$ { + include fastcgi_epp_params; + fastcgi_param SCRIPT_FILENAME /var/www/EPPServer/sieratool/webservice/api/index.php; + fastcgi_param SCRIPT_NAME /api/logs/index.php; + fastcgi_param REQUEST_URI $request_uri; + fastcgi_param PATH_INFO $uri; + + fastcgi_buffer_size 64k; + fastcgi_buffers 8 64k; + fastcgi_busy_buffers_size 128k; + } +} +``` + +### Complete configuration context + +The following shows where the API block fits relative to existing blocks: + +```nginx +# Existing webservice blocks +location /ws { + if ($ssl_client_verify != SUCCESS) { return 401; } + alias /var/www/EPPServer/sieratool/webservice; +} + +location ~ ^/ws/(.+\.php)$ { + if ($ssl_client_verify != SUCCESS) { return 401; } + alias /var/www/EPPServer/sieratool/webservice/$1; + include fastcgi_epp_params; +} + +# SCIM API (existing) +location ^~ /scim/ { + include fastcgi_epp_params; + fastcgi_param SCRIPT_FILENAME /var/www/EPPServer/sieratool/scim/public/index.php; +} + +# EPP Logs REST API — ADD HERE +location ^~ /api/logs/ { + alias /var/www/EPPServer/sieratool/webservice/api/; + + location ~ ^/api/logs/(.*)$ { + include fastcgi_epp_params; + fastcgi_param SCRIPT_FILENAME /var/www/EPPServer/sieratool/webservice/api/index.php; + fastcgi_param SCRIPT_NAME /api/logs/index.php; + fastcgi_param REQUEST_URI $request_uri; + fastcgi_param PATH_INFO $uri; + fastcgi_buffer_size 64k; + fastcgi_buffers 8 64k; + fastcgi_busy_buffers_size 128k; + } +} + +# Generic PHP handler — MUST come after the API block +location ~ "^(.+\.php)($|/)" { + fastcgi_split_path_info ^(.+\.php)(.*)$; + include fastcgi_epp_params; +} +``` + +### Update the nginx template (for persistence) + +The nginx config is regenerated from templates during certain EPP operations. To ensure the API configuration persists, also add the same location block to the template files: + +```bash +vi /var/www/EPPServer/appliance/resources/templates/nginx/sites-enabled/epp.nginx.conf.template +vi /var/www/EPPServer/appliance/resources/templates/nginx/sites-enabled/epp.nginx.conf.crc.template +``` + +### Test and reload nginx + +```bash +nginx -t +/etc/init.d/nginx reload +``` + +Expected output from `nginx -t`: + +``` +nginx: the configuration file /etc/nginx/nginx.conf syntax is ok +nginx: configuration file /etc/nginx/nginx.conf test is successful +``` + +## Database setup + +**Step 1 –** Create the `api_key` table: + +```bash +mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp < /dev/stdin <<'SQL' +CREATE TABLE IF NOT EXISTS `api_key` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `user_id` INTEGER NOT NULL, + `api_key` VARCHAR(128) NOT NULL, + `name` VARCHAR(256), + `is_active` INTEGER NOT NULL DEFAULT 1, + `created_at` DATETIME, + `last_used_at` DATETIME, + PRIMARY KEY (`id`), + UNIQUE KEY `api_key_unique` (`api_key`), + INDEX `api_key_user_id` (`user_id`), + CONSTRAINT `api_key_FK_1` + FOREIGN KEY (`user_id`) + REFERENCES `sf_guard_user` (`id`) + ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +SQL +``` + +:::note +The database name may vary. Check it in `/var/www/EPPServer/sieratool/config/databases.yml`. +::: + +## Authentication setup + +**Step 1 –** Generate a random API key: + +```bash +API_KEY=$(openssl rand -hex 32) +echo "Generated API key: ${API_KEY}" +``` + +**Step 2 –** Find the user ID for the admin user: + +```bash +mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ + "SELECT id, username FROM sf_guard_user WHERE is_active = 1;" +``` + +**Step 3 –** Insert the API key (replace `USER_ID` with the actual user ID): + +```bash +mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ + "INSERT INTO api_key (user_id, api_key, name, is_active, created_at) + VALUES (USER_ID, '${API_KEY}', 'REST API Key', 1, NOW());" +``` + +**Manage API keys** + +```bash +# List all API keys +mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ + "SELECT ak.id, gu.username, ak.name, ak.api_key, ak.is_active, ak.created_at + FROM api_key ak JOIN sf_guard_user gu ON ak.user_id = gu.id;" + +# Deactivate a key +mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ + "UPDATE api_key SET is_active = 0 WHERE id = KEY_ID;" + +# Delete a key +mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ + "DELETE FROM api_key WHERE id = KEY_ID;" +``` + +## Verification + +**Step 1 –** Test nginx is serving the API: + +```bash +curl -s -k \ + -H "X-Api-Key: YOUR_API_KEY" \ + https://localhost/api/logs/endpoints | python -m json.tool +``` + +Expected response: + +```json +{ + "success": true, + "data": { + "api_name": "EPP Logs REST API", + "version": "1.0", + "endpoints": [ + { "method": "GET", "path": "/api/logs/endpoints" }, + { "method": "GET", "path": "/api/logs/event-logs" } + ] + } +} +``` + +**Step 2 –** Test authentication failure (no key): + +```bash +curl -s -k https://localhost/api/logs/endpoints | python -m json.tool +``` + +Expected response: + +```json +{ + "success": false, + "error": { + "code": 401, + "message": "Missing API key. Provide via X-Api-Key header or api_key query parameter." + } +} +``` + +**Step 3 –** Test a data endpoint: + +```bash +curl -s -k \ + -H "X-Api-Key: YOUR_API_KEY" \ + "https://localhost/api/logs/event-logs?per_page=5" | python -m json.tool +``` + +## Troubleshooting + +**API returns 404** + +The nginx location block is missing or in the wrong position. + +1. Verify the block is present: `grep -n "api/logs" /etc/nginx/sites-enabled/epp.nginx.conf` +2. Ensure the block is placed before the generic PHP handler. +3. Test and reload: `nginx -t && /etc/init.d/nginx reload` + +**API returns 502 Bad Gateway** + +PHP-FPM is not running or not listening on the expected socket. + +1. Check PHP-FPM status: `service php5.6-fpm status` +2. Verify FastCGI is listening: `netstat -tlnp | grep 9000` +3. Check PHP-FPM error log: `tail -50 /var/log/php-fpm.log` + +**API returns 500 with database errors** + +Propel or database connection issue. + +1. Verify database credentials in `/var/www/EPPServer/sieratool/config/databases.yml` +2. Test connectivity: `mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e "SELECT 1;"` +3. Check PHP error log: `tail -100 /var/log/nginx/error.log` + +**API returns 401 for a valid API key** + +The `api_key` table does not exist or the key is deactivated. + +1. Verify the table exists: `mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e "SHOW TABLES LIKE 'api_key';"` +2. If missing, create it using the SQL in the [Database setup](#database-setup) section. +3. Verify the key is active: check `is_active = 1` and the linked user is active in `sf_guard_user`. + +**Changes lost after EPP update** + +The nginx config was regenerated from templates without the API block. + +1. Re-add the location block to `/etc/nginx/sites-enabled/epp.nginx.conf`. +2. Add the block to both template files (see [Update the nginx template](#update-the-nginx-template-for-persistence)). +3. Reload nginx: `/etc/init.d/nginx reload` + +**Slow responses on large tables** + +1. Use date filtering: `?start_date=2025-01-01&end_date=2025-01-31` +2. Reduce page size: `?per_page=20` +3. Use specific filters: `?machine_id=42&event_id=5` +4. Verify MySQL indexes: `SHOW INDEX FROM cf_log;` + +**FastCGI buffer warnings in nginx error log** + +Increase buffer sizes in the API location block: + +```nginx +fastcgi_buffer_size 128k; +fastcgi_buffers 16 128k; +fastcgi_busy_buffers_size 256k; +``` + +## Security considerations + +- **Remove any dev API keys** before deploying to production. Search for `TODO: REMOVE` in `lib/ApiAuth.php` to locate all lines that need to be removed. +- **HTTPS only** — The API is served over HTTPS via the existing EPP SSL configuration. Never expose it over plain HTTP. +- **API key rotation** — Regularly rotate API keys by creating new keys and deactivating old ones. +- **Network access** — Consider restricting API access by source IP using nginx `allow`/`deny` directives: + +```nginx +location ^~ /api/logs/ { + allow 10.0.0.0/8; + allow 192.168.0.0/16; + deny all; + # ... rest of config +} +``` + +- **Logging** — To enable access logging for the API, add an `access_log` directive: + +```nginx +location ^~ /api/logs/ { + access_log /var/log/nginx/api_access.log; + # ... rest of config +} +``` + +- **Read-only** — The API supports only GET requests. No data modification is possible through the API. diff --git a/docs/endpointprotector/admin/logsrestapi/logrestapi.md b/docs/endpointprotector/admin/logsrestapi/logrestapi.md new file mode 100644 index 0000000000..622be11e61 --- /dev/null +++ b/docs/endpointprotector/admin/logsrestapi/logrestapi.md @@ -0,0 +1,306 @@ +--- +title: "Logs REST API" +description: "Query Endpoint Protector log data over HTTPS for integrations and reporting" +sidebar_position: 10 +--- + +# Logs REST API + +## Overview + +The Logs REST API provides a read-only interface to query Endpoint Protector logs and audit trails over HTTPS in JSON format. Use it for: + +- SIEM ingestion and SOC workflows +- Custom reporting dashboards +- Incident investigations and audits +- Automation and integrations with internal tools + +:::info +The Logs REST API is read-only. It supports GET (and OPTIONS for CORS preflight). Other methods return 405 Method Not Allowed. +::: + +## Base URL and protocol + +- Base URL: `https:///api/logs/` +- HTTPS only (TLS 1.2+) +- Content-Type: `application/json` + +## Authentication + +All requests require authentication using an API key: + +| Method | Header / Format | Example | +|---|---|---| +| Recommended | `X-Api-Key: ` | `X-Api-Key: abc123...` | +| Alternative | `Authorization: Bearer ` | `Authorization: Bearer abc123...` | +| Alternative | Query parameter | `?api_key=abc123...` | + +:::note +When called from the Endpoint Protector web interface, the API can also use an active server session cookie. For external integrations, always use an API key. +::: + +## Quick start + +**1) List supported endpoints (discovery)** + +```bash +curl -s \ + -H "X-Api-Key: YOUR_API_KEY" \ + "https:///api/logs/endpoints" +``` + +:::note +If your Endpoint Protector server uses a self-signed certificate, add `-k` to the curl command to ignore TLS verification. For production environments, use a certificate trusted by your clients instead. +::: + +**2) Query recent Device Control logs** + +```bash +curl -s \ + -H "X-Api-Key: YOUR_API_KEY" \ + "https:///api/logs/device-control-logs?sort_by=eventtime&sort_order=DESC&per_page=10" +``` + +## Common query parameters + +Most list endpoints support the following parameters. + +### Pagination + +| Parameter | Type | Default | Notes | +|---|---|---|---| +| `page` | integer | 1 | 1-based | +| `per_page` | integer | 50 | Max 200 | + +### Sorting + +| Parameter | Type | Default | +|---|---|---| +| `sort_by` | string | `id` | +| `sort_order` | string | `DESC` (ASC or DESC) | + +### Date filtering + +| Parameter | Format | Notes | +|---|---|---| +| `start_date` | `YYYY-MM-DD` or `YYYY-MM-DD HH:MM:SS` | inclusive | +| `end_date` | `YYYY-MM-DD` or `YYYY-MM-DD HH:MM:SS` | inclusive | + +:::note +The date field used for filtering depends on the endpoint (documented in each endpoint section below). +::: + +### Text search + +| Parameter | Type | Notes | +|---|---|---| +| `search` | string | LIKE matching across filterable fields | + +## Response format + +**Success (single resource)** + +```json +{ + "success": true, + "data": { + "id": "1" + } +} +``` + +**Success (list with pagination)** + +```json +{ + "success": true, + "data": [ + { "id": "1" }, + { "id": "2" } + ], + "meta": { + "page": 1, + "per_page": 50, + "total": 128, + "total_pages": 3 + } +} +``` + +**Error** + +```json +{ + "success": false, + "error": { + "code": 401, + "message": "Missing API key. Provide via X-Api-Key header or api_key query parameter." + } +} +``` + +## HTTP status codes + +| Code | Meaning | +|---|---| +| 200 | Success | +| 400 | Invalid parameters | +| 401 | Missing/invalid API key | +| 404 | Resource not found | +| 405 | Method not allowed (GET-only) | +| 429 | Rate limit exceeded | +| 500 | Internal error | + +--- + +## Logs REST API Technical Reference + +### Discovery + +**GET /endpoints** + +Returns API name/version and a list of supported routes for the current server build. + +### Event Logs + +Core device control event logs. + +**GET /event-logs** + +Date field: `eventtime` + +Filters (in addition to common params): +- `machine_name` (partial match) +- `client_name` (partial match) + +**GET /event-logs/{id}** + +Returns a single event log entry by ID. + +### Device Control Logs + +Online device tracking logs. + +**GET /device-control-logs** + +Date field: `eventtime` + +Filters (in addition to common params): +- `machine_name` (partial match) +- `client_name` (partial match) + +**GET /device-control-logs/{id}** + +Returns a single device control log entry by ID. + +### Alert Statuses + +**GET /alert-statuses/{id}** + +Returns a single alert status entry by ID. + +### System Alerts + +**GET /system-alerts** + +Lists system alert definitions. + +**GET /system-alert-logs** + +Lists system alert log entries. Date field: `created_at` + +### Content Filtering (CAP) + +**GET /content-filtering-logs** + +Lists Content Aware Protection logs. Date field: `eventtime` + +Common filters include: +- `machine_name` +- `client_name` + +**GET /content-filtering-logs/{id}** + +Returns a single log entry (includes fields excluded from list responses for performance). + +**GET /content-filtering-alerts** + +Lists content filtering alert definitions. + +**GET /content-filtering-alerts/{id}** + +Returns a single alert definition. + +### Mobile Management + +**GET /mobile-management-logs** + +Date field: `eventtime` + +**GET /mobile-management-alerts** + +Lists mobile management alert definitions. + +**GET /mobile-management-alert-logs** + +Date field: `created_at` + +### EasyLock (Enforced Encryption) + +**GET /easylock-alert-logs** + +Date field: `created_at` + +**GET /easylock-send-alert-logs** + +Lists EasyLock send alert log entries. + +### Data at Rest (eDiscovery) + +**GET /data-rest-alerts/{id}** + +Returns a single Data-at-Rest alert entry by ID. + +### SCIM Provisioning Logs + +**GET /scim-logs** + +Lists SCIM API request logs. + +**GET /scim-logs/{id}** + +Returns a single SCIM log entry including request/response bodies. + +### Authentication Logs + +**GET /auth-logs** + +Lists authentication attempt logs. Date field: `created_at` + +### Export Logs + +**GET /export-logs/{id}** + +Returns a single export job log entry by ID. + +### Admin Actions + +**GET /admin-actions** + +Lists administrator actions performed in the console. Date field: `created_at` + +## Rate limiting + +The API enforces rate limiting to protect the server and ensure fair usage. When exceeded, the API returns: + +- HTTP 429 +- `Retry-After` header +- `X-RateLimit-*` headers describing the remaining request budget + +## CORS + +CORS is enabled to support browser-based integrations: + +- `Access-Control-Allow-Origin: *` +- `Access-Control-Allow-Methods: GET, OPTIONS` +- `Access-Control-Allow-Headers: Content-Type, X-Api-Key, Authorization` diff --git a/docs/endpointprotector/admin/logsrestapi/logsrestapisetup.md b/docs/endpointprotector/admin/logsrestapi/logsrestapisetup.md new file mode 100644 index 0000000000..351975f107 --- /dev/null +++ b/docs/endpointprotector/admin/logsrestapi/logsrestapisetup.md @@ -0,0 +1,177 @@ +--- +title: "Logs REST API Setup" +description: "Enable the Logs REST API and create API keys on the Endpoint Protector server" +sidebar_position: 20 +--- + +# Logs REST API Setup + +## Overview + +This page is for Endpoint Protector administrators who need to: + +- Make the Logs REST API reachable at `https:///api/logs/` +- Create and manage API keys for external integrations + +:::warning +This is an advanced procedure. It requires SSH/root access to the Endpoint Protector server and involves editing server configuration and running SQL commands. + +If you are not comfortable with these steps, contact Netwrix Support for assistance. +::: + +## Prerequisites + +- Endpoint Protector server with nginx and PHP-FPM running +- SSH/root access +- A working database connection to the Endpoint Protector MySQL database + +## Step 1 — Enable nginx routing for /api/logs/ + +**Step 1 –** SSH into the Endpoint Protector server. + +**Step 2 –** Open the nginx config: + +```bash +vi /etc/nginx/sites-enabled/epp.nginx.conf +``` + +**Step 3 –** Add the Logs REST API location block before the generic PHP handler and after existing web service blocks: + +```nginx +# EPP Logs REST API +location ^~ /api/logs/ { + alias /var/www/EPPServer/sieratool/webservice/api/; + + location ~ ^/api/logs/(.*)$ { + include fastcgi_epp_params; + fastcgi_param SCRIPT_FILENAME /var/www/EPPServer/sieratool/webservice/api/index.php; + fastcgi_param SCRIPT_NAME /api/logs/index.php; + fastcgi_param REQUEST_URI $request_uri; + fastcgi_param PATH_INFO $uri; + + fastcgi_buffer_size 64k; + fastcgi_buffers 8 64k; + fastcgi_busy_buffers_size 128k; + } +} +``` + +**Step 4 –** Validate and reload nginx: + +```bash +nginx -t && /etc/init.d/nginx reload +``` + +:::note +Some Endpoint Protector operations regenerate the nginx configuration from templates. To persist this change across updates, also add the same block to the nginx template files. See [Logs REST API Installation](/docs/endpointprotector/admin/logsrestapi/installation.md) for details. +::: + +## Step 2 — Create the api_key table (if missing) + +The Logs REST API uses a database table to store API keys. Run: + +```bash +mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp < /dev/stdin <<'SQL' +CREATE TABLE IF NOT EXISTS `api_key` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `user_id` INTEGER NOT NULL, + `api_key` VARCHAR(128) NOT NULL, + `name` VARCHAR(256), + `is_active` INTEGER NOT NULL DEFAULT 1, + `created_at` DATETIME, + `last_used_at` DATETIME, + PRIMARY KEY (`id`), + UNIQUE KEY `api_key_unique` (`api_key`), + INDEX `api_key_user_id` (`user_id`), + CONSTRAINT `api_key_FK_1` + FOREIGN KEY (`user_id`) + REFERENCES `sf_guard_user` (`id`) + ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +SQL +``` + +:::info +If your database name is not `epp`, check it in: `/var/www/EPPServer/sieratool/config/databases.yml` +::: + +## Step 3 — Create an API key for an existing admin user + +**Step 1 –** Generate a random API key: + +```bash +openssl rand -hex 32 +``` + +**Step 2 –** List active users and identify the admin user ID: + +```bash +mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ + "SELECT id, username FROM sf_guard_user WHERE is_active = 1;" +``` + +**Step 3 –** Insert the API key (replace `USER_ID` and `API_KEY_VALUE`): + +```bash +mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ + "INSERT INTO api_key (user_id, api_key, name, is_active, created_at) + VALUES (USER_ID, 'API_KEY_VALUE', 'Logs REST API Key', 1, NOW());" +``` + +## Step 4 — Test the API + +```bash +curl -s \ + -H "X-Api-Key: YOUR_API_KEY" \ + "https://localhost/api/logs/endpoints" +``` + +## Step 5 — Key management operations + +**List API keys** + +```bash +mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ + "SELECT ak.id, gu.username, ak.name, ak.api_key, ak.is_active, ak.created_at + FROM api_key ak + JOIN sf_guard_user gu ON ak.user_id = gu.id;" +``` + +**Deactivate an API key** + +```bash +mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ + "UPDATE api_key SET is_active = 0 WHERE id = KEY_ID;" +``` + +**Delete an API key** + +```bash +mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ + "DELETE FROM api_key WHERE id = KEY_ID;" +``` + +## Security recommendations + +- Keep the API HTTPS-only. +- Rotate API keys regularly. +- Consider restricting access by IP at the nginx level using `allow` / `deny` directives. +- Consider enabling a dedicated nginx access log for `/api/logs/`. + +:::warning +Never expose development-only authentication bypasses on production servers. If your build includes any hardcoded or bypass API keys for testing, remove them before production rollout. +::: + +## Troubleshooting + +**All endpoints return 404** + +Verify the nginx location block exists and is placed before the generic PHP handler. Run `nginx -t` and reload nginx. + +**502 Bad Gateway** + +Verify PHP-FPM is running and reachable by nginx. + +**401 Unauthorized (even with a valid key)** + +Verify the `api_key` table exists. Verify the API key is active (`is_active = 1`) and the linked user is active. diff --git a/docs/endpointprotector/admin/reports.md b/docs/endpointprotector/admin/reports.md index 1a21dd230f..801d56bf79 100644 --- a/docs/endpointprotector/admin/reports.md +++ b/docs/endpointprotector/admin/reports.md @@ -110,9 +110,11 @@ following information: ![Count – the number of matched items](matcheditemscount.webp) +Use the **Show/Hide Columns** dropdown to customize which columns are visible in the report. The **Date/Time(Client UTC)** column is available in this dropdown but is hidden by default. + From the Filters section, check the **Include old logs prior to 5.7** upgrade option from the filter section to include all logs in your searches. If the option is not selected, the filters will apply -only to the new structure of logs. +only to the new structure of logs. The **Date/Time(Client UTC)** field is also available as a filter option. ![Content Aware Protection Filters](capfilters.webp) @@ -132,7 +134,7 @@ You can export Content Aware Logs as an Excel, PDF, or CSV or create and export report as a CSV or XLSX file. Excel/PDF/CSV – situated above the Content Aware Reports list, this will export only the default -columns +columns. The **Date/Time(Client UTC)** column is included in exports when selected via Show/Hide Columns. ![Export Content Aware Reports](exportreports.webp) diff --git a/docs/endpointprotector/admin/systemconfiguration/mailsettings.md b/docs/endpointprotector/admin/systemconfiguration/mailsettings.md new file mode 100644 index 0000000000..c481632c58 --- /dev/null +++ b/docs/endpointprotector/admin/systemconfiguration/mailsettings.md @@ -0,0 +1,95 @@ +--- +title: "Mail Settings" +description: "Configure email server settings and OAuth 2.0 authentication for Microsoft Exchange Online" +sidebar_position: 35 +--- + +# Mail Settings + +From this section, you can configure the email server settings that Endpoint Protector uses to send notifications, alerts, and test emails. + +## E-mail Authorization Required + +When **OAuth** is selected as the E-mail Authentication Type, authorization is required to complete the email setup. Click **Sign In** to grant Endpoint Protector access to send emails on your behalf. + +## Administrator E-mail + +The test email is sent to the address configured for your administrator account. If no email address is set, the message *"There is no e-mail defined for your Administrator Account. You must setup the e-mail address from System Administrators > Edit info"* is displayed. + +To set an email address, go to **System Configuration** > **System Administrators** and select **Edit info**. + +## E-mail Server Settings + +Configure the email server that Endpoint Protector uses to send notifications and alerts. + +:::note +An active Internet connection is required to use this feature. +::: + +### E-mail Authentication Type + +Use the **E-mail Authentication Type** dropdown to select how Endpoint Protector authenticates with the email server: + +- **Basic** — standard username and password authentication. Supports native and SMTP email types, with TLS 1.3. +- **OAuth** — OAuth 2.0 authentication for Microsoft Exchange Online. Use this option to comply with Microsoft's deprecation of Basic Auth for SMTP AUTH. + +### Basic authentication + +When **Basic** is selected, configure the following fields: + +- E-mail Type — select **Native** or **SMTP** +- Hostname +- SMTP Port +- Username +- Password + +### OAuth authentication + +When **OAuth** is selected, configure the following fields: + +- **E-mail Type** — SMTP (read-only) +- **E-mail Provider** — Microsoft (read-only) +- **Hostname** — recommended: `smtp.office365.com` +- **SMTP Port** — recommended: `587` +- **Username** +- **Tenant ID** +- **Application (Client) ID** +- **Client Secret Value** +- **Redirect URI** — must match the redirect URI registered in your Microsoft Azure application + +After filling in all fields, click **Sign In** to complete OAuth authorization. + +:::note +The redirect URI saved in Mail Settings must exactly match the redirect URI registered in your Microsoft Azure application. +::: + +### Microsoft Azure prerequisites + +OAuth is supported for Microsoft Exchange Online. Your subscription must be one of the following: + +- Microsoft 365 Business Basic, Standard, or Premium +- Office 365 E1, E3, or E5 +- Microsoft 365 E3 or E5 +- Exchange Online Plan 1 or 2 + +**Step 1 –** In the Microsoft Admin Center, go to **Users** > **Active Users**, select the user, and then go to **Mail** > **Manage email apps**. Enable **Authenticated SMTP**. + +**Step 2 –** In Microsoft Azure, go to your app **Overview** > **Manage** > **Redirect URIs**. Click **Add a platform**, select **Web**, and enter the redirect URI (for example, `https://192.168.0.2/index.php`). + +**Step 3 –** Go to **Client Credentials** > **Client Secrets**. Create a new client secret and copy the value. + +**Step 4 –** Go to **API Permissions** > **Add a permission** > **Microsoft Graph** > **Delegated Permissions**. Select **SMTP.Send** and **offline_access**, then click **Grant admin consent** for the selected permissions. + +## UI messages + +The following messages are displayed during email configuration and testing: + +| Situation | Message | +|---|---| +| Test email sent successfully | A test e-mail was sent to `
` | +| No administrator email configured | There is no e-mail defined for your Administrator Account. You must setup the e-mail address from System Administrators > Edit info | +| Test email failed to send | Failed to send the test e-mail! Please verify if the E-mail Server Settings are correct! | +| OAuth authorization failed | Email authorization failed! Please check the provided credentials and try again! | +| Settings saved successfully | Changes have been saved! | +| OAuth authorization completed | Your email has been verified. Authorization complete! | +| Error saving settings | Cannot execute command! An error occurred! | diff --git a/docs/endpointprotector/admin/systemconfiguration/systemsettings.md b/docs/endpointprotector/admin/systemconfiguration/systemsettings.md index bf0e8a9787..edcc3467ef 100644 --- a/docs/endpointprotector/admin/systemconfiguration/systemsettings.md +++ b/docs/endpointprotector/admin/systemconfiguration/systemsettings.md @@ -508,22 +508,11 @@ the System Administrators section. ## E-mail Server Settings -![E-mail Server Settings](mailserversettings.webp) - -Manage Email server settings based on the email type you use - native or SMTP. - :::note -To enable this feature, you need an Internet connection. +The E-mail Server Settings have been moved to a new section. Go to **System Configuration** > **[Mail Settings](/docs/endpointprotector/admin/systemconfiguration/mailsettings.md)** to configure email server settings and authentication. ::: - -Manage email server settings based on your email type—native or SMTP, with support for TLS 1.3. - -![E-mail Server Settings](mailserversettingstwo.webp) - -![E-mail Server Settings](mailserversettingsthree.webp) - -### Proxy Server Settings +## Proxy Server Settings Configure Proxy server settings by managing the following: diff --git a/docs/endpointprotector/admin/systemmaintenance/backup.md b/docs/endpointprotector/admin/systemmaintenance/backup.md index 967331eca3..e0d8998beb 100644 --- a/docs/endpointprotector/admin/systemmaintenance/backup.md +++ b/docs/endpointprotector/admin/systemmaintenance/backup.md @@ -16,6 +16,31 @@ The System Backup feature allows you to create and manage comprehensive backups Using the web interface or administrative console, you can perform backups, restore previous versions, and set up automatic routines to ensure your data is consistently protected. +### Migration readiness checklist (preflight validation) + +Before creating a migration backup and restoring it on a new Endpoint Protector Server, validate the +items below to avoid failed imports/restores. + +#### Source appliance (current server) +- Ensure you can successfully create a **System Backup v2 (Migration)** and that you securely save + the **System Backup Key** (required for restore). +- Download any **previous System Backups** or **Audit Log Backups** you want to keep (these are not + preserved through the migration process). +- Confirm the resulting backup file is within the supported size limits (see note below). If it is not, + contact Customer Support before proceeding. + +#### Target appliance (new server) +- Deploy the new Endpoint Protector Server on a **newer version** than the source (migration restore + is intended for a newer server version). +- Ensure the new appliance has enough free disk space for the restore operation (backup file + temporary restore data). +- Plan the cutover: after restore, **power off the old appliance** and **reassign its IP** to the new one so + existing clients reconnect. + +:::warning +If your migration involves upgrading the server from a pre-5206 version to 5.7.0.0, database partitions +must be enabled prior to the upgrade. Contact Customer Support for assistance. +::: + ### Creating a System Backup v2 (Migration) You can create a new migration backup from the System Maintenance, System Backup v2 section. diff --git a/docs/endpointprotector/admin/systemmaintenance/overview.md b/docs/endpointprotector/admin/systemmaintenance/overview.md index e5ff6ad608..0182c139d3 100644 --- a/docs/endpointprotector/admin/systemmaintenance/overview.md +++ b/docs/endpointprotector/admin/systemmaintenance/overview.md @@ -102,6 +102,8 @@ The Backup export CSV file will differ based on the Endpoint Protector Server v - For Endpoint Protector 5.7.0.0, reports, only one file containing all threats discovered, separated by an underscore +When backing up Content Aware logs, the export includes the **Date/Time(Client UTC)** field. + :::warning The audit log backups feature allows you to create copies and/or dumps of logs and file shadows into an export file, either manually or on a scheduled basis. Please note that the initial storage location for these export files is not suitable for long-term storage. It is essential that administrators download and store these files in secure locations to ensure their safety. In SaaS environments, be aware that export files may be lost during the upgrade process, so regular downloading and secure storage are crucial. ::: diff --git a/docs/endpointprotector/install/transition2509.md b/docs/endpointprotector/install/transition2509.md new file mode 100644 index 0000000000..200cb258ef --- /dev/null +++ b/docs/endpointprotector/install/transition2509.md @@ -0,0 +1,89 @@ +--- +title: "Transition to Endpoint Protector Server 2509" +description: "Guided upgrade/migration path to Server 2509 (new image-based transition)" +sidebar_position: 25 +--- + +# Transition to Endpoint Protector Server 2509 + +## Why this transition is different + +Server 2509 requires deployment as a new image (not a patch-in-place upgrade). + +## Before you start (preflight checklist) + +- Confirm your current server version and the required upgrade path (you must reach 5.9.4.2 first). +- Confirm you can create a **System Backup v2 (Migration)** and that you have the **Backup Key** saved. See [Backup and Recovery Solutions](/docs/endpointprotector/admin/systemmaintenance/backup.md). +- Confirm the backup size is within supported limits, or plan a Support-assisted approach. +- Confirm your plan for IP/FQDN cutover (see the decision section below). +- Confirm licensing readiness (new license format and required fields, then re-import post-restore). See [Licensing](/docs/endpointprotector/admin/systemconfiguration/systemlicensing.md). + +## At-a-glance transition steps + +1. Upgrade your existing server to 5.9.4.2 (offline patch). +2. Create a System Backup v2 (Migration). +3. Deploy the new 2509 VM from the latest image. +4. Restore the 5.9.4.2 backup on the new server. +5. Re-import your license on 2509 and confirm the licensing state. +6. Upload client packages (if you use server-side client upgrade or distribution). +7. Re-enable client communications. +8. Validate functionality (DPI, CAP, certificates, and EE status as applicable). + +## Step-by-step guided process + +### Step 1 — Upgrade to 5.9.4.2 + +**Success:** Server version reports 5.9.4.2 and the UI is accessible. + +**If it fails:** Rollback occurs automatically. Review the offline patch logs, then retry or contact Support. See [Updates](/docs/endpointprotector/install/updates.md). + +### Step 2 — Create migration backup (System Backup v2) + +**Success:** Backup created and Backup Key stored securely. + +**If it fails:** Check available disk space. If the backup exceeds the size limit, contact Support. See [Backup and Recovery Solutions](/docs/endpointprotector/admin/systemmaintenance/backup.md). + +### Step 3 — Deploy the new 2509 VM + +**Success:** VM boots and initial setup is complete. See [Setup Wizard](/docs/endpointprotector/install/virtualappliance/setupwizard.md). + +### Step 4 — Restore the backup on 2509 + +**Success:** Import and Restore completes without errors. + +**If it fails:** Verify the source is a 5.9.4.2 backup, verify the backup key, and verify available disk space. Contact Support for large or complex restores. + +### Step 5 — Re-import license on 2509 + +**Success:** License imports cleanly and expected entitlements are shown. See [Licensing](/docs/endpointprotector/admin/systemconfiguration/systemlicensing.md). + +### Step 6 — Upload client packages (if needed) + +This step is only required if you use server-side client distribution or upgrade. + +### Step 7 — Re-enable client communications + +**Success:** Endpoints check in and start sending pending logs. + +## Decision: IP/FQDN strategy + +### Reuse same IP/FQDN (Recommended) + +Preserves trust and certificate behavior and minimizes endpoint disruption. + +### New IP/FQDN (Not recommended) + +Requires endpoint-side changes and certificate redeployment, and may disrupt Enforced Encryption trust depending on the scenario. + +## Final verification checklist + +- Server health is OK. +- Clients check in. +- Policies are visible and enforced. +- DPI, CAP, and EE status is verified (as applicable). + +## Common failure modes and fixes + +- **Restore fails** — wrong source version, wrong backup key, insufficient disk space, or oversized backup. +- **Clients don't reconnect** — IP/FQDN cutover not complete, or client communications are still blocked. +- **Unexpected license state** — wrong license file imported; re-check entitlements. diff --git a/docs/endpointprotector/install/virtualappliance/setupwizard.md b/docs/endpointprotector/install/virtualappliance/setupwizard.md index f84fdb11fe..92a5e02b07 100644 --- a/docs/endpointprotector/install/virtualappliance/setupwizard.md +++ b/docs/endpointprotector/install/virtualappliance/setupwizard.md @@ -55,3 +55,7 @@ As mentioned before, starting with version 2509, only the manual configuration o **Step 4 –** Select **Apply**. The virtual appliance is now accessible from the configured IP Address. (e.g., https:// 192.168.7.94). + +:::note +E-mail Server Settings are no longer configured in the setup wizard. To configure email server settings and authentication, go to **System Configuration** > **[Mail Settings](/docs/endpointprotector/admin/systemconfiguration/mailsettings.md)** after completing the initial setup. +::: From 35d521dc7e1dd317fc2b94ac17a7f8dee14b65a2 Mon Sep 17 00:00:00 2001 From: MRoscaNetwrix Date: Thu, 23 Apr 2026 16:28:33 +0300 Subject: [PATCH 03/23] consolidated 2509 migration, added mail settings logs and screenshots, fixed API documentation --- .../apispecification.md | 16 ++-- .../{logsrestapi => API Logs}/installation.md | 0 .../{logsrestapi => API Logs}/logrestapi.md | 16 ++-- .../logsrestapisetup.md | 2 +- .../systemconfiguration/OAuthMailSettings.png | Bin 0 -> 111561 bytes .../systemconfiguration/mailserverlogs.png | Bin 0 -> 151756 bytes .../admin/systemconfiguration/mailsettings.md | 57 +++++++++++ .../systemconfiguration/systemsettings.md | 2 +- .../install/transition2509.md | 89 ------------------ 9 files changed, 75 insertions(+), 107 deletions(-) rename docs/endpointprotector/admin/{logsrestapi => API Logs}/apispecification.md (98%) rename docs/endpointprotector/admin/{logsrestapi => API Logs}/installation.md (100%) rename docs/endpointprotector/admin/{logsrestapi => API Logs}/logrestapi.md (96%) rename docs/endpointprotector/admin/{logsrestapi => API Logs}/logsrestapisetup.md (96%) create mode 100644 docs/endpointprotector/admin/systemconfiguration/OAuthMailSettings.png create mode 100644 docs/endpointprotector/admin/systemconfiguration/mailserverlogs.png delete mode 100644 docs/endpointprotector/install/transition2509.md diff --git a/docs/endpointprotector/admin/logsrestapi/apispecification.md b/docs/endpointprotector/admin/API Logs/apispecification.md similarity index 98% rename from docs/endpointprotector/admin/logsrestapi/apispecification.md rename to docs/endpointprotector/admin/API Logs/apispecification.md index d799f847bd..18b17d66b5 100644 --- a/docs/endpointprotector/admin/logsrestapi/apispecification.md +++ b/docs/endpointprotector/admin/API Logs/apispecification.md @@ -178,7 +178,7 @@ Example: GET /api/logs/event-logs?machine_name=WORKSTATION&start_date=2025-01-01&per_page=10 ``` -**GET /event-logs/{id}** +**GET /event-logs/(id)** Returns a single event log entry by ID with the same fields as the list endpoint. @@ -229,13 +229,13 @@ Response fields: | `timestamp` | `olog.timestamp` | Unix timestamp | | `department_id` | `olog.department_id` | Department ID | -**GET /device-control-logs/{id}** +**GET /device-control-logs/(id)** Returns a single device control log entry by ID with the same fields as the list endpoint. ### Alert Statuses -**GET /alert-statuses/{id}** +**GET /alert-statuses/(id)** Returns a single alert status entry by ID. @@ -287,7 +287,7 @@ Response fields: `id`, `loclogid`, `event_id`, `machine_id`, `machine_name`, `ip Hash columns (`loghash`, `loghasht`, etc.) are excluded from list responses for performance. Use the detail endpoint to retrieve all fields. ::: -**GET /content-filtering-logs/{id}** +**GET /content-filtering-logs/(id)** Returns a single content filtering log with all fields (including hash columns and `event_name`). @@ -301,7 +301,7 @@ Filters: `event_id`, `content_policy`, `department_id` Response fields: `id`, `name`, `department_id`, `group_id`, `machine_id`, `client_id`, `content_policy`, `event_id`, `old_alert`, `created_at`, `created_by_user_id`, `event_name` -**GET /content-filtering-alerts/{id}** +**GET /content-filtering-alerts/(id)** Returns a single content filtering alert by ID with event name. @@ -351,7 +351,7 @@ Response fields: `id`, `event_id`, `machine_id`, `user_id`, `group_id`, `status` ### Data at Rest -**GET /data-rest-alerts/{id}** +**GET /data-rest-alerts/(id)** Returns a single Data-at-Rest alert with event name. @@ -380,7 +380,7 @@ Response fields: `id`, `timestamp`, `request_id`, `http_method`, `endpoint`, `st `request_body` and `response_body` are excluded from list responses. Use the detail endpoint. ::: -**GET /scim-logs/{id}** +**GET /scim-logs/(id)** Returns a single SCIM log entry including `request_body` and `response_body`. @@ -404,7 +404,7 @@ Response fields: `id`, `user_id`, `ip`, `number_attempts`, `block`, `created_at` ### Export Logs -**GET /export-logs/{id}** +**GET /export-logs/(id)** Returns a single export log entry including the `description` field. diff --git a/docs/endpointprotector/admin/logsrestapi/installation.md b/docs/endpointprotector/admin/API Logs/installation.md similarity index 100% rename from docs/endpointprotector/admin/logsrestapi/installation.md rename to docs/endpointprotector/admin/API Logs/installation.md diff --git a/docs/endpointprotector/admin/logsrestapi/logrestapi.md b/docs/endpointprotector/admin/API Logs/logrestapi.md similarity index 96% rename from docs/endpointprotector/admin/logsrestapi/logrestapi.md rename to docs/endpointprotector/admin/API Logs/logrestapi.md index 622be11e61..72f04577b7 100644 --- a/docs/endpointprotector/admin/logsrestapi/logrestapi.md +++ b/docs/endpointprotector/admin/API Logs/logrestapi.md @@ -173,7 +173,7 @@ Filters (in addition to common params): - `machine_name` (partial match) - `client_name` (partial match) -**GET /event-logs/{id}** +**GET /event-logs/(id)** Returns a single event log entry by ID. @@ -189,13 +189,13 @@ Filters (in addition to common params): - `machine_name` (partial match) - `client_name` (partial match) -**GET /device-control-logs/{id}** +**GET /device-control-logs/(id)** Returns a single device control log entry by ID. ### Alert Statuses -**GET /alert-statuses/{id}** +**GET /alert-statuses/(id)** Returns a single alert status entry by ID. @@ -219,7 +219,7 @@ Common filters include: - `machine_name` - `client_name` -**GET /content-filtering-logs/{id}** +**GET /content-filtering-logs/(id)** Returns a single log entry (includes fields excluded from list responses for performance). @@ -227,7 +227,7 @@ Returns a single log entry (includes fields excluded from list responses for per Lists content filtering alert definitions. -**GET /content-filtering-alerts/{id}** +**GET /content-filtering-alerts/(id)** Returns a single alert definition. @@ -257,7 +257,7 @@ Lists EasyLock send alert log entries. ### Data at Rest (eDiscovery) -**GET /data-rest-alerts/{id}** +**GET /data-rest-alerts/(id)** Returns a single Data-at-Rest alert entry by ID. @@ -267,7 +267,7 @@ Returns a single Data-at-Rest alert entry by ID. Lists SCIM API request logs. -**GET /scim-logs/{id}** +**GET /scim-logs/(id)** Returns a single SCIM log entry including request/response bodies. @@ -279,7 +279,7 @@ Lists authentication attempt logs. Date field: `created_at` ### Export Logs -**GET /export-logs/{id}** +**GET /export-logs/(id)** Returns a single export job log entry by ID. diff --git a/docs/endpointprotector/admin/logsrestapi/logsrestapisetup.md b/docs/endpointprotector/admin/API Logs/logsrestapisetup.md similarity index 96% rename from docs/endpointprotector/admin/logsrestapi/logsrestapisetup.md rename to docs/endpointprotector/admin/API Logs/logsrestapisetup.md index 351975f107..3a45dea80a 100644 --- a/docs/endpointprotector/admin/logsrestapi/logsrestapisetup.md +++ b/docs/endpointprotector/admin/API Logs/logsrestapisetup.md @@ -63,7 +63,7 @@ nginx -t && /etc/init.d/nginx reload ``` :::note -Some Endpoint Protector operations regenerate the nginx configuration from templates. To persist this change across updates, also add the same block to the nginx template files. See [Logs REST API Installation](/docs/endpointprotector/admin/logsrestapi/installation.md) for details. +Some Endpoint Protector operations regenerate the nginx configuration from templates. To persist this change across updates, also add the same block to the nginx template files. See the Logs REST API Installation document for details. ::: ## Step 2 — Create the api_key table (if missing) diff --git a/docs/endpointprotector/admin/systemconfiguration/OAuthMailSettings.png b/docs/endpointprotector/admin/systemconfiguration/OAuthMailSettings.png new file mode 100644 index 0000000000000000000000000000000000000000..314f74cf1cfaf1592ec79b21eb9d8e175bfd4ffb GIT binary patch literal 111561 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®Fz`TqWE(RWa|bk&;1lF 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 Nj(YvZI&%8P{{eB **Add a permission** > **Microsoft Graph** > **Delegated Permissions**. Select **SMTP.Send** and **offline_access**, then click **Grant admin consent** for the selected permissions. + +## Mail Server Logs + +![Mail Server Logs](MailServerLogs.png) + +From the **Mail Server Logs** tab you can review the errors captured when Endpoint Protector tries to send a message through the configured email server. Use this view to troubleshoot delivery failures directly from the UI instead of opening a shell on the appliance. + +Access the logs from **System Configuration** > **Mail Settings** > **Mail Server Logs** tab. + +### Log columns + +| Column | Description | +|---|---| +| Authentication Type | Whether the send attempt used **Basic** or **OAuth** authentication | +| Status | Status of the captured event (currently `error` for all entries) | +| Log Message | Human-readable error, including the SMTP return code or OAuth error code reported by the server | +| Registered at | Server timestamp when the error was captured | +| Mail Settings | Click the row to expand and review the mail server configuration in effect at the time of the error | + +### What gets logged + +The tab captures the following error categories when encountered during a send attempt: + +- **DNS / hostname resolution failures** — for example, *Could not resolve hostname `smtp.office365.com`* +- **Connection timeouts** — for example, *Connection timed out after 30 seconds while connecting to `smtp.office365.com:587`* +- **TLS/SSL handshake failures** — for example, *TLS handshake failed - peer certificate validation error* +- **SMTP server return codes** — including authentication failures (`535`), invalid recipients (`550`), service throttling (`421`), and policy rejections (`554`) +- **OAuth errors** — Microsoft Azure error codes such as `AADSTS50011` (redirect URI mismatch), `AADSTS700082` (refresh token expired), and `AADSTS7000215` (invalid client secret) + +### Row details + +Click any row to expand it and review the **Mail Settings** snapshot that was active at the time of the error. The snapshot includes: + +- **Basic** entries — Hostname, SMTP Port, Username, Encryption Type +- **OAuth** entries — Hostname, SMTP Port, Username, Tenant ID, Application (Client) ID, Redirect URI + +:::note +The Client Secret and the OAuth access and refresh tokens are never written to the logs. +::: + +### Supplemental log files + +Errors are also written to log files on the appliance for additional context and for cases not captured by the UI: + +| Scenario | Log file | +|---|---| +| OAuth errors and SMTP errors over SSL/TLS | `/var/eppfiles/epp_logger/epp_mail.log` | +| Basic authentication using SMTP with TLS 1.3 | `/var/log/mail.log` | + +:::note +Basic authentication errors that occur over SMTP with TLS 1.3 are written only to `/var/log/mail.log` and are not shown in the Mail Server Logs tab. To review those errors, open the file directly on the appliance. +::: + + ## UI messages The following messages are displayed during email configuration and testing: diff --git a/docs/endpointprotector/admin/systemconfiguration/systemsettings.md b/docs/endpointprotector/admin/systemconfiguration/systemsettings.md index edcc3467ef..d9e4ca3f8d 100644 --- a/docs/endpointprotector/admin/systemconfiguration/systemsettings.md +++ b/docs/endpointprotector/admin/systemconfiguration/systemsettings.md @@ -508,7 +508,7 @@ the System Administrators section. ## E-mail Server Settings -:::note +:::warning The E-mail Server Settings have been moved to a new section. Go to **System Configuration** > **[Mail Settings](/docs/endpointprotector/admin/systemconfiguration/mailsettings.md)** to configure email server settings and authentication. ::: diff --git a/docs/endpointprotector/install/transition2509.md b/docs/endpointprotector/install/transition2509.md deleted file mode 100644 index 200cb258ef..0000000000 --- a/docs/endpointprotector/install/transition2509.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: "Transition to Endpoint Protector Server 2509" -description: "Guided upgrade/migration path to Server 2509 (new image-based transition)" -sidebar_position: 25 ---- - -# Transition to Endpoint Protector Server 2509 - -## Why this transition is different - -Server 2509 requires deployment as a new image (not a patch-in-place upgrade). - -## Before you start (preflight checklist) - -- Confirm your current server version and the required upgrade path (you must reach 5.9.4.2 first). -- Confirm you can create a **System Backup v2 (Migration)** and that you have the **Backup Key** saved. See [Backup and Recovery Solutions](/docs/endpointprotector/admin/systemmaintenance/backup.md). -- Confirm the backup size is within supported limits, or plan a Support-assisted approach. -- Confirm your plan for IP/FQDN cutover (see the decision section below). -- Confirm licensing readiness (new license format and required fields, then re-import post-restore). See [Licensing](/docs/endpointprotector/admin/systemconfiguration/systemlicensing.md). - -## At-a-glance transition steps - -1. Upgrade your existing server to 5.9.4.2 (offline patch). -2. Create a System Backup v2 (Migration). -3. Deploy the new 2509 VM from the latest image. -4. Restore the 5.9.4.2 backup on the new server. -5. Re-import your license on 2509 and confirm the licensing state. -6. Upload client packages (if you use server-side client upgrade or distribution). -7. Re-enable client communications. -8. Validate functionality (DPI, CAP, certificates, and EE status as applicable). - -## Step-by-step guided process - -### Step 1 — Upgrade to 5.9.4.2 - -**Success:** Server version reports 5.9.4.2 and the UI is accessible. - -**If it fails:** Rollback occurs automatically. Review the offline patch logs, then retry or contact Support. See [Updates](/docs/endpointprotector/install/updates.md). - -### Step 2 — Create migration backup (System Backup v2) - -**Success:** Backup created and Backup Key stored securely. - -**If it fails:** Check available disk space. If the backup exceeds the size limit, contact Support. See [Backup and Recovery Solutions](/docs/endpointprotector/admin/systemmaintenance/backup.md). - -### Step 3 — Deploy the new 2509 VM - -**Success:** VM boots and initial setup is complete. See [Setup Wizard](/docs/endpointprotector/install/virtualappliance/setupwizard.md). - -### Step 4 — Restore the backup on 2509 - -**Success:** Import and Restore completes without errors. - -**If it fails:** Verify the source is a 5.9.4.2 backup, verify the backup key, and verify available disk space. Contact Support for large or complex restores. - -### Step 5 — Re-import license on 2509 - -**Success:** License imports cleanly and expected entitlements are shown. See [Licensing](/docs/endpointprotector/admin/systemconfiguration/systemlicensing.md). - -### Step 6 — Upload client packages (if needed) - -This step is only required if you use server-side client distribution or upgrade. - -### Step 7 — Re-enable client communications - -**Success:** Endpoints check in and start sending pending logs. - -## Decision: IP/FQDN strategy - -### Reuse same IP/FQDN (Recommended) - -Preserves trust and certificate behavior and minimizes endpoint disruption. - -### New IP/FQDN (Not recommended) - -Requires endpoint-side changes and certificate redeployment, and may disrupt Enforced Encryption trust depending on the scenario. - -## Final verification checklist - -- Server health is OK. -- Clients check in. -- Policies are visible and enforced. -- DPI, CAP, and EE status is verified (as applicable). - -## Common failure modes and fixes - -- **Restore fails** — wrong source version, wrong backup key, insufficient disk space, or oversized backup. -- **Clients don't reconnect** — IP/FQDN cutover not complete, or client communications are still blocked. -- **Unexpected license state** — wrong license file imported; re-check entitlements. From ebe51e36064785eb1bc522e3c419e9fce308b212 Mon Sep 17 00:00:00 2001 From: MRoscaNetwrix Date: Thu, 23 Apr 2026 17:25:50 +0300 Subject: [PATCH 04/23] updated NDC bit and screenshot --- .../denylistsallowlists/NDCClassification.png | Bin 189272 -> 134091 bytes .../admin/denylistsallowlists/denylists.md | 36 +++++++++++------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/docs/endpointprotector/admin/denylistsallowlists/NDCClassification.png b/docs/endpointprotector/admin/denylistsallowlists/NDCClassification.png index 01a4715d2509d549ac39c7714e14e28996508885..001189e5edce88ed58d8ee004340182349be3eea 100644 GIT binary patch literal 134091 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 Q`3T5fPgg&ebxsLQ03SEb;s5{u literal 189272 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

ap+AoU>BbhXq9C*vryb2BU_nWP4*Lh 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 bp}*?CDz5Zryt%}a0SG)@{an^LB{Ts5d831* diff --git a/docs/endpointprotector/admin/denylistsallowlists/denylists.md b/docs/endpointprotector/admin/denylistsallowlists/denylists.md index 1875b98e51..2a2e262cc2 100644 --- a/docs/endpointprotector/admin/denylistsallowlists/denylists.md +++ b/docs/endpointprotector/admin/denylistsallowlists/denylists.md @@ -401,30 +401,40 @@ future releases. ![Confguration for Microsoft Information Protection (MIP) ](mipclassification.webp) + ## NDC Classification -This section covers the use of and integration with Netwrix Data Classification, including classification within Content Aware Protection and eDiscovery policies. +This section covers the use of and integration with Netwrix Data Classification (NDC), including classification within Content Aware Protection and eDiscovery policies. -Netwrix Data Classification is a tool designed to help organizations manage and protect their data more effectively by identifying, categorizing, and tagging data based on predefined policies. It assists in understanding where sensitive and valuable data resides, how it is being used, and who has access to it. The primary goals of data classification include enhancing data security, optimizing data management, ensuring compliance with regulations, and facilitating informed decision-making. +Netwrix Data Classification helps organizations identify, categorize, and tag data based on predefined policies. With NDC, you can understand where sensitive data resides, how it is used, and who has access to it, which supports data security, regulatory compliance, and informed decision-making. -Starting with the 25.12 release, Endpoint Protector allows direct label definition for Content Aware -Protection and eDiscovery policies via the Endpoint Protector Server interface. +Starting with the 25.12 release, Endpoint Protector allows direct NDC label definition for Content Aware Protection and eDiscovery policies through the Endpoint Protector Server interface, so you do not need to build custom dictionaries to recognize labeled files. + +![Configuration for Netwrix Data Classification](NDCClassification.png) -The Endpoint Protector Server offers the option to define custom labels for policy use like for ex. "ex. Confidential" in: -- keywords field -- document label custom field -- both +### Configure an NDC label -This flexibility allows administrators to avoid creating custom dictionaries to recognize labeled files. +Each NDC entry in a denylist defines a single classification to match against Office document properties. Configure the following fields: -NDC labels can be used along other CAP conditions, including content-aware and label-aware data scanning. This enables granular control over data protection based on NDC data classifications. +- **Name** — the name of the denylist entry. +- **Description** — an optional description of the entry. +- **NDC name property value** — the **Field Name** value defined in NDC. NDC stores this as a custom property name in the Office document. Obtain the value from your NDC administrator. +- **NDC label value** — the label value assigned in NDC. NDC stores this as a custom property value in the Office document. Obtain the value from your NDC administrator. +- **Look for** — controls which properties Endpoint Protector scans. See [Look for options](#look-for-options) for the behavior of each choice. :::note -Label names can be obtained from the NDC administrator. Consider using the exact label definition, such as 'Confidential|Internal' to narrow detection. +Each NDC entry is uniquely identified by the combination of **NDC name property value** and **NDC label value**. You can configure multiple entries that share the same property name with different label values — for example, `Sensitivity = Confidential` and `Sensitivity = Restricted`. ::: -![Confguration for Netwrix Data Classification](NDCClassification.png) +### Look for options + +Use the **Look for** field to control how Endpoint Protector matches the classification on a scanned document: + +- **NDC name property value** — scans only after the NDC name property value is defined, and ignores all other properties. The **NDC label value** field can be left empty. +- **NDC label value** — scans only after the NDC label value is defined, and ignores all other properties. The **NDC name property value** field can be left empty. +- **Both NDC name property + label value** — scans for both the NDC name property and the corresponding label value, as configured. +- **Keywords** — scans only for the NDC label in the **Keywords** document property, which supports alternative NDC label detection. :::note -The NDC labeling feature is supported only on EPP Clients version 2605.x.x.x and later. +The NDC labeling feature is supported only on Endpoint Protector Client version 2605.x.x.x and later. ::: \ No newline at end of file From cdcf8f6c1091c3145325b09d04f587cedd2e9c54 Mon Sep 17 00:00:00 2001 From: MRoscaNetwrix Date: Fri, 24 Apr 2026 11:24:28 +0300 Subject: [PATCH 05/23] updated cap policies with comment related to item 433189 from ADO --- docs/endpointprotector/admin/cap_module/cappolicies.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/endpointprotector/admin/cap_module/cappolicies.md b/docs/endpointprotector/admin/cap_module/cappolicies.md index f803ecb350..0fbaccc00c 100644 --- a/docs/endpointprotector/admin/cap_module/cappolicies.md +++ b/docs/endpointprotector/admin/cap_module/cappolicies.md @@ -175,6 +175,13 @@ Flash Active X. To distinguish OneDrive for Business from OneDrive, enable Deep Packet Inspection (DPI). ::: +:::warning +If your policy uses **All Applications** and new applications are introduced in a server update, +those applications will appear as selected but won't be enforced until the policy is re-saved. +After upgrading, open any affected CAP policies and save them to apply monitoring to newly +added applications. +::: + ![Monitor transfers from the following exit points](policyexistpoints.webp) From c72cfc5299a666476a059b66938f6ec626f6a773 Mon Sep 17 00:00:00 2001 From: MRoscaNetwrix Date: Mon, 27 Apr 2026 13:25:19 +0300 Subject: [PATCH 06/23] fixed mail settings image reference --- .../endpointprotector/admin/systemconfiguration/mailsettings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpointprotector/admin/systemconfiguration/mailsettings.md b/docs/endpointprotector/admin/systemconfiguration/mailsettings.md index 2706a0bea6..ce65122af2 100644 --- a/docs/endpointprotector/admin/systemconfiguration/mailsettings.md +++ b/docs/endpointprotector/admin/systemconfiguration/mailsettings.md @@ -86,7 +86,7 @@ OAuth is supported for Microsoft Exchange Online. Your subscription must be one ## Mail Server Logs -![Mail Server Logs](MailServerLogs.png) +![Mail Server Logs](Mailserverlogs.png) From the **Mail Server Logs** tab you can review the errors captured when Endpoint Protector tries to send a message through the configured email server. Use this view to troubleshoot delivery failures directly from the UI instead of opening a shell on the appliance. From 8667cd8d0a0b8682c902b19e2783854841e152fe Mon Sep 17 00:00:00 2001 From: MRoscaNetwrix Date: Mon, 27 Apr 2026 13:42:44 +0300 Subject: [PATCH 07/23] removed mail settings image reference --- .../endpointprotector/admin/systemconfiguration/mailsettings.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/endpointprotector/admin/systemconfiguration/mailsettings.md b/docs/endpointprotector/admin/systemconfiguration/mailsettings.md index ce65122af2..5d6a537bce 100644 --- a/docs/endpointprotector/admin/systemconfiguration/mailsettings.md +++ b/docs/endpointprotector/admin/systemconfiguration/mailsettings.md @@ -86,8 +86,6 @@ OAuth is supported for Microsoft Exchange Online. Your subscription must be one ## Mail Server Logs -![Mail Server Logs](Mailserverlogs.png) - From the **Mail Server Logs** tab you can review the errors captured when Endpoint Protector tries to send a message through the configured email server. Use this view to troubleshoot delivery failures directly from the UI instead of opening a shell on the appliance. Access the logs from **System Configuration** > **Mail Settings** > **Mail Server Logs** tab. From 9f7a0e1348f6b02b1e7068087d09ab380fbcb755 Mon Sep 17 00:00:00 2001 From: Jean Perez Date: Mon, 27 Apr 2026 17:54:45 -0400 Subject: [PATCH 08/23] feat(changetracker): add interactive API reference for Hub 8.1 --- .../8.1/integration/api/api-reference.mdx | 16 + .../8.1/integration/api/overview.md | 8 +- docusaurus.config.js | 17 + package-lock.json | 1080 +- package.json | 1 + src/css/custom.css | 15 + static/openapi/changetracker-hub-8.1.yaml | 35148 ++++++++++++++++ 7 files changed, 36276 insertions(+), 9 deletions(-) create mode 100644 docs/changetracker/8.1/integration/api/api-reference.mdx create mode 100644 static/openapi/changetracker-hub-8.1.yaml diff --git a/docs/changetracker/8.1/integration/api/api-reference.mdx b/docs/changetracker/8.1/integration/api/api-reference.mdx new file mode 100644 index 0000000000..0cf6fab01d --- /dev/null +++ b/docs/changetracker/8.1/integration/api/api-reference.mdx @@ -0,0 +1,16 @@ +--- +title: API Reference +description: Interactive reference for all ChangeTracker Hub API endpoints +sidebar_position: 25 +--- + +import BrowserOnly from '@docusaurus/BrowserOnly'; + + + {() => { + window.location.replace('/docs/changetracker/8_1/integration/api/reference'); + return null; + }} + + +Redirecting to the [ChangeTracker Hub API Reference](/docs/changetracker/8_1/integration/api/reference)… diff --git a/docs/changetracker/8.1/integration/api/overview.md b/docs/changetracker/8.1/integration/api/overview.md index c853040d0c..5e29c09ebd 100644 --- a/docs/changetracker/8.1/integration/api/overview.md +++ b/docs/changetracker/8.1/integration/api/overview.md @@ -12,9 +12,15 @@ Netwrix Change Tracker provides a comprehensive REST API that allows customers t All API endpoints require authentication. See [Authentication](/docs/changetracker/8.1/integration/api/authentication.md) for an example script. +## API Reference + +For a complete interactive reference of all Hub API endpoints, see the [ChangeTracker Hub API Reference](/docs/changetracker/8_1/integration/api/api-reference). The reference is generated directly from the OpenAPI 3.0 spec served by the Hub and covers all available endpoints with request/response schemas. + +The raw OpenAPI 3.0 spec (YAML) is also available for download or import into tools like Postman and Insomnia. + ## Available Endpoints -The following API endpoints are available in Netwrix Change Tracker: +The following commonly-used API endpoints are documented in detail: - [Agents](/docs/changetracker/8.1/integration/api/agents.md) – Pull data on agent statuses, configurations, and group memberships using the agentsRanked endpoint. This API allows you to retrieve detailed information about all agents in your environment, including their group memberships and applied tracking templates. diff --git a/docusaurus.config.js b/docusaurus.config.js index e6747669b3..fd34daeb78 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -68,6 +68,23 @@ const config = { }, }), ], + [ + 'redocusaurus', + { + specs: [ + { + id: 'changetracker-hub-8-1', + spec: 'static/openapi/changetracker-hub-8.1.yaml', + route: '/docs/changetracker/8_1/integration/api/reference', + }, + ], + theme: { + options: { + scrollYOffset: '.navbar', + }, + }, + }, + ], ], plugins: [ diff --git a/package-lock.json b/package-lock.json index 5a9a634099..5eb5476574 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-typed": "^2.0.12", + "redocusaurus": "^2.5.0", "serve": "^10.0.2" }, "devDependencies": { @@ -4338,6 +4339,27 @@ "tslib": "^2.4.0" } }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz", + "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@exodus/schemasafe": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz", + "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==", + "license": "MIT" + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -4998,6 +5020,18 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@nodable/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/nodable" + } + ], + "license": "MIT" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -5228,6 +5262,78 @@ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", "license": "MIT" }, + "node_modules/@redocly/ajv": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.18.3.tgz", + "integrity": "sha512-l42u0of3hY98sN2A+M4qTX1O/KrpgGH32Hu9kP2GtHyD5Dfqq86PKFLe5dwaD8DEnNmlOlll2BAmeEtf0DaySg==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@redocly/config": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.6.3.tgz", + "integrity": "sha512-hGWJgCsXRw0Ow4rplqRlUQifZvoSwZipkYnt11e3SeH1Eb23VUIDBcRuaQOUqy1wn0eevXkU2GzzQ8fbKdQ7Mg==", + "license": "MIT" + }, + "node_modules/@redocly/openapi-core": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.16.0.tgz", + "integrity": "sha512-z06h+svyqbUcdAaePq8LPSwTPlm6Ig7j2VlL8skPBYnJvyaQ2IN7x/JkOvRL4ta+wcOCBdAex5JWnZbKaNktJg==", + "license": "MIT", + "dependencies": { + "@redocly/ajv": "^8.11.0", + "@redocly/config": "^0.6.0", + "colorette": "^1.2.0", + "https-proxy-agent": "^7.0.4", + "js-levenshtein": "^1.1.6", + "js-yaml": "^4.1.0", + "lodash.isequal": "^4.5.0", + "minimatch": "^5.0.1", + "node-fetch": "^2.6.1", + "pluralize": "^8.0.0", + "yaml-ast-parser": "0.0.43" + }, + "engines": { + "node": ">=14.19.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "license": "MIT" + }, + "node_modules/@redocly/openapi-core/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@rsdoctor/client": { "version": "0.4.13", "resolved": "https://registry.npmjs.org/@rsdoctor/client/-/client-0.4.13.tgz", @@ -7325,6 +7431,15 @@ "node": ">= 10.0.0" } }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -8032,6 +8147,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "license": "MIT" + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -8063,6 +8184,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -8284,6 +8414,12 @@ "node": ">=8" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", @@ -8520,6 +8656,57 @@ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "license": "ISC" }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -9065,6 +9252,15 @@ "node": ">=4" } }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, "node_modules/css-declaration-sorter": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.4.0.tgz", @@ -9268,6 +9464,17 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "node_modules/css-tree": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", @@ -9452,9 +9659,9 @@ "license": "CC0-1.0" }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, "node_modules/cytoscape": { @@ -10006,6 +10213,11 @@ } } }, + "node_modules/decko": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decko/-/decko-1.2.0.tgz", + "integrity": "sha512-m8FnyHXV1QX+S1cl+KPFDIl6NMkxtKsy6+U/aYyjrOqWMuwAwYWu7ePqrsUHtDR5Y8Yk2pi/KIDSgF+vT4cPOQ==" + }, "node_modules/decode-named-character-reference": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", @@ -10271,6 +10483,243 @@ "node": ">=6" } }, + "node_modules/docusaurus-plugin-redoc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/docusaurus-plugin-redoc/-/docusaurus-plugin-redoc-2.5.0.tgz", + "integrity": "sha512-44sDhuXvItHnUuPdKswF3cRhiN5UW3YZxmMBsQLSfCYKcYr9tgWF2qvDfQoZO9i1DwpaYbIZ/RKMrSgny/iWYA==", + "license": "MIT", + "dependencies": { + "@redocly/openapi-core": "1.16.0", + "redoc": "2.4.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@docusaurus/utils": "^3.6.0" + } + }, + "node_modules/docusaurus-plugin-redoc/node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/docusaurus-plugin-redoc/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/docusaurus-plugin-redoc/node_modules/redoc": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.4.0.tgz", + "integrity": "sha512-rFlfzFVWS9XJ6aYAs/bHnLhHP5FQEhwAHDBVgwb9L2FqDQ8Hu8rQ1G84iwaWXxZfPP9UWn7JdWkxI6MXr2ZDjw==", + "license": "MIT", + "dependencies": { + "@redocly/openapi-core": "^1.4.0", + "classnames": "^2.3.2", + "decko": "^1.2.0", + "dompurify": "^3.0.6", + "eventemitter3": "^5.0.1", + "json-pointer": "^0.6.2", + "lunr": "^2.3.9", + "mark.js": "^8.11.1", + "marked": "^4.3.0", + "mobx-react": "^9.1.1", + "openapi-sampler": "^1.5.0", + "path-browserify": "^1.0.1", + "perfect-scrollbar": "^1.5.5", + "polished": "^4.2.2", + "prismjs": "^1.29.0", + "prop-types": "^15.8.1", + "react-tabs": "^6.0.2", + "slugify": "~1.4.7", + "stickyfill": "^1.1.1", + "swagger2openapi": "^7.0.8", + "url-template": "^2.0.8" + }, + "engines": { + "node": ">=6.9", + "npm": ">=3.0.0" + }, + "peerDependencies": { + "core-js": "^3.1.4", + "mobx": "^6.0.4", + "react": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "styled-components": "^4.1.1 || ^5.1.1 || ^6.0.5" + } + }, + "node_modules/docusaurus-plugin-redoc/node_modules/styled-components": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.4.1.tgz", + "integrity": "sha512-ADu2dF53esUzzM4I0ewxhxFtsDd6v4V6dNkg3vG0iFKhnt06sJneTZnRvujAosZwW0XD58IKgGMQoqri4wHRqg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@emotion/is-prop-valid": "1.4.0", + "css-to-react-native": "3.2.0", + "csstype": "3.2.3", + "stylis": "4.3.6" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "css-to-react-native": ">= 3.2.0", + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0", + "react-native": ">= 0.68.0" + }, + "peerDependenciesMeta": { + "css-to-react-native": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/docusaurus-theme-redoc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/docusaurus-theme-redoc/-/docusaurus-theme-redoc-2.5.0.tgz", + "integrity": "sha512-ykLmnnvE20Im3eABlIpUnXnT2gSHVAjgyy2fU2G8yecu7zqIE+G/SiBpBg/hrWMUycL31a8VSG7Ehkf3pg1u+A==", + "license": "MIT", + "dependencies": { + "@redocly/openapi-core": "1.16.0", + "clsx": "^1.2.1", + "lodash": "^4.17.21", + "mobx": "^6.12.4", + "postcss": "^8.4.45", + "postcss-prefix-selector": "^1.16.1", + "redoc": "2.4.0", + "styled-components": "^6.1.11" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@docusaurus/theme-common": "^3.6.0", + "webpack": "^5.0.0" + } + }, + "node_modules/docusaurus-theme-redoc/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/docusaurus-theme-redoc/node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/docusaurus-theme-redoc/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/docusaurus-theme-redoc/node_modules/redoc": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.4.0.tgz", + "integrity": "sha512-rFlfzFVWS9XJ6aYAs/bHnLhHP5FQEhwAHDBVgwb9L2FqDQ8Hu8rQ1G84iwaWXxZfPP9UWn7JdWkxI6MXr2ZDjw==", + "license": "MIT", + "dependencies": { + "@redocly/openapi-core": "^1.4.0", + "classnames": "^2.3.2", + "decko": "^1.2.0", + "dompurify": "^3.0.6", + "eventemitter3": "^5.0.1", + "json-pointer": "^0.6.2", + "lunr": "^2.3.9", + "mark.js": "^8.11.1", + "marked": "^4.3.0", + "mobx-react": "^9.1.1", + "openapi-sampler": "^1.5.0", + "path-browserify": "^1.0.1", + "perfect-scrollbar": "^1.5.5", + "polished": "^4.2.2", + "prismjs": "^1.29.0", + "prop-types": "^15.8.1", + "react-tabs": "^6.0.2", + "slugify": "~1.4.7", + "stickyfill": "^1.1.1", + "swagger2openapi": "^7.0.8", + "url-template": "^2.0.8" + }, + "engines": { + "node": ">=6.9", + "npm": ">=3.0.0" + }, + "peerDependencies": { + "core-js": "^3.1.4", + "mobx": "^6.0.4", + "react": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "styled-components": "^4.1.1 || ^5.1.1 || ^6.0.5" + } + }, + "node_modules/docusaurus-theme-redoc/node_modules/styled-components": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.4.1.tgz", + "integrity": "sha512-ADu2dF53esUzzM4I0ewxhxFtsDd6v4V6dNkg3vG0iFKhnt06sJneTZnRvujAosZwW0XD58IKgGMQoqri4wHRqg==", + "license": "MIT", + "dependencies": { + "@emotion/is-prop-valid": "1.4.0", + "css-to-react-native": "3.2.0", + "csstype": "3.2.3", + "stylis": "4.3.6" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "css-to-react-native": ">= 3.2.0", + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0", + "react-native": ">= 0.68.0" + }, + "peerDependenciesMeta": { + "css-to-react-native": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -10599,6 +11048,12 @@ "node": ">= 0.4" } }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "license": "MIT" + }, "node_modules/esast-util-from-estree": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", @@ -11094,6 +11549,12 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "license": "MIT" }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" + }, "node_modules/fast-uri": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", @@ -11125,11 +11586,47 @@ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "license": "MIT" }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "license": "ISC", + "node_modules/fast-xml-builder": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.5.tgz", + "integrity": "sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "path-expression-matcher": "^1.1.3" + } + }, + "node_modules/fast-xml-parser": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz", + "integrity": "sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "@nodable/entities": "^2.1.0", + "fast-xml-builder": "^1.1.5", + "path-expression-matcher": "^1.5.0", + "strnum": "^2.2.3" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -11391,6 +11888,12 @@ } } }, + "node_modules/foreach": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", + "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", + "license": "MIT" + }, "node_modules/form-data": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", @@ -11501,6 +12004,15 @@ "node": ">=6.9.0" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-east-asian-width": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", @@ -12330,6 +12842,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/http2-client": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", + "integrity": "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==", + "license": "MIT" + }, "node_modules/http2-wrapper": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", @@ -12343,6 +12861,19 @@ "node": ">=10.19.0" } }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -12950,6 +13481,15 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -13001,6 +13541,15 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "license": "MIT" }, + "node_modules/json-pointer": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", + "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", + "license": "MIT", + "dependencies": { + "foreach": "^2.0.4" + } + }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -13482,6 +14031,13 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -13602,6 +14158,18 @@ "yallist": "^3.0.2" } }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "license": "MIT" + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "license": "MIT" + }, "node_modules/markdown-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", @@ -16082,6 +16650,66 @@ "ufo": "^1.6.3" } }, + "node_modules/mobx": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.15.0.tgz", + "integrity": "sha512-UczzB+0nnwGotYSgllfARAqWCJ5e/skuV2K/l+Zyck/H6pJIhLXuBnz+6vn2i211o7DtbE78HQtsYEKICHGI+g==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + } + }, + "node_modules/mobx-react": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-9.2.1.tgz", + "integrity": "sha512-WJNNm0FB2n0Z0u+jS1QHmmWyV8l2WiAj8V8I/96kbUEN2YbYCoKW+hbbqKKRUBqElu0llxM7nWKehvRIkhBVJw==", + "license": "MIT", + "dependencies": { + "mobx-react-lite": "^4.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + }, + "peerDependencies": { + "mobx": "^6.9.0", + "react": "^16.8.0 || ^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/mobx-react-lite": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-4.1.1.tgz", + "integrity": "sha512-iUxiMpsvNraCKXU+yPotsOncNNmyeS2B5DKL+TL6Tar/xm+wwNJAubJmtRSeAoYawdZqwv8Z/+5nPRHeQxTiXg==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + }, + "peerDependencies": { + "mobx": "^6.9.0", + "react": "^16.8.0 || ^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -16168,6 +16796,47 @@ "node": ">=18" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-h2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", + "integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==", + "license": "MIT", + "dependencies": { + "http2-client": "^1.2.5" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-readfiles": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz", + "integrity": "sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==", + "license": "MIT", + "dependencies": { + "es6-promise": "^3.2.1" + } + }, "node_modules/node-releases": { "version": "2.0.36", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", @@ -16294,6 +16963,76 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/oas-kit-common": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", + "integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==", + "license": "BSD-3-Clause", + "dependencies": { + "fast-safe-stringify": "^2.0.7" + } + }, + "node_modules/oas-linter": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.2.tgz", + "integrity": "sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@exodus/schemasafe": "^1.0.0-rc.2", + "should": "^13.2.1", + "yaml": "^1.10.0" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-resolver": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz", + "integrity": "sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==", + "license": "BSD-3-Clause", + "dependencies": { + "node-fetch-h2": "^2.3.0", + "oas-kit-common": "^1.0.8", + "reftools": "^1.1.9", + "yaml": "^1.10.0", + "yargs": "^17.0.1" + }, + "bin": { + "resolve": "resolve.js" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-schema-walker": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", + "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==", + "license": "BSD-3-Clause", + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, + "node_modules/oas-validator": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/oas-validator/-/oas-validator-5.0.8.tgz", + "integrity": "sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==", + "license": "BSD-3-Clause", + "dependencies": { + "call-me-maybe": "^1.0.1", + "oas-kit-common": "^1.0.8", + "oas-linter": "^3.2.2", + "oas-resolver": "^2.5.6", + "oas-schema-walker": "^1.1.5", + "reftools": "^1.1.9", + "should": "^13.2.1", + "yaml": "^1.10.0" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -16403,6 +17142,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/openapi-sampler": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/openapi-sampler/-/openapi-sampler-1.7.2.tgz", + "integrity": "sha512-OKytvqB5XIaTgA9xtw8W8UTar+uymW2xPVpFN0NihMtuHPdPTGxBEhGnfFnJW5g/gOSIvkP+H0Xh3XhVI9/n7g==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.7", + "fast-xml-parser": "^5.5.1", + "json-pointer": "0.6.2" + } + }, "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", @@ -16828,6 +17578,21 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/path-expression-matcher": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz", + "integrity": "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", @@ -16873,6 +17638,12 @@ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "license": "MIT" }, + "node_modules/perfect-scrollbar": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.6.tgz", + "integrity": "sha512-rixgxw3SxyJbCaSpo1n35A/fwI1r2rdwMKOTCg/AcG+xOEyZcE8UHVjpZMFCVImzsFoCZeJTT+M/rdEIQYO2nw==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -16934,6 +17705,15 @@ "node": ">=16.0.0" } }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/points-on-curve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", @@ -16950,6 +17730,18 @@ "points-on-curve": "0.2.0" } }, + "node_modules/polished": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", + "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.17.8" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/postcss": { "version": "8.5.9", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.9.tgz", @@ -18122,6 +18914,15 @@ "postcss": "^8.4" } }, + "node_modules/postcss-prefix-selector": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.1.tgz", + "integrity": "sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==", + "license": "MIT", + "peerDependencies": { + "postcss": ">4 <9" + } + }, "node_modules/postcss-preset-env": { "version": "10.6.1", "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.6.1.tgz", @@ -18842,6 +19643,19 @@ "react": ">=15" } }, + "node_modules/react-tabs": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-6.1.1.tgz", + "integrity": "sha512-CPiuKoMFf89B7QlbFfdBD9XmUWiE3qudQputMVZB8GQvPJZRX/gqjDaDWOPDwGinEfpJKEuBCkGt83Tt4efeyA==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "prop-types": "^15.5.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0" + } + }, "node_modules/react-typed": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/react-typed/-/react-typed-2.0.12.tgz", @@ -18944,12 +19758,38 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/redocusaurus": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/redocusaurus/-/redocusaurus-2.5.0.tgz", + "integrity": "sha512-QWJX2hgnEfSDb7fZzS4iZe6aqdAvm/XLCsNv6RkgDw6Pl/lsTZKipP2n1r5QS1CC5hY8eAwsjVXeF7B03vkz2g==", + "license": "MIT", + "dependencies": { + "docusaurus-plugin-redoc": "2.5.0", + "docusaurus-theme-redoc": "2.5.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@docusaurus/theme-common": "^3.6.0", + "@docusaurus/utils": "^3.6.0" + } + }, "node_modules/reflect-metadata": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, + "node_modules/reftools": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", + "integrity": "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==", + "license": "BSD-3-Clause", + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -19313,6 +20153,15 @@ "node": ">=0.10" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -20294,6 +21143,60 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "license": "MIT", + "dependencies": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "node_modules/should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "license": "MIT", + "dependencies": { + "should-type": "^1.4.0" + } + }, + "node_modules/should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", + "license": "MIT", + "dependencies": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "node_modules/should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", + "license": "MIT" + }, + "node_modules/should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "license": "MIT", + "dependencies": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "node_modules/should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "license": "MIT" + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -20456,6 +21359,15 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/slugify": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.7.tgz", + "integrity": "sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", @@ -20693,6 +21605,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stickyfill": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stickyfill/-/stickyfill-1.1.1.tgz", + "integrity": "sha512-GCp7vHAfpao+Qh/3Flh9DXEJ/qSi0KJwJw6zYlZOtRYXWUIpMM6mC2rIep/dK8RQqwW0KxGJIllmjPIBOGN8AA==" + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -20825,6 +21742,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.3.tgz", + "integrity": "sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/style-to-js": { "version": "1.1.17", "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz", @@ -20929,6 +21858,33 @@ "node": ">= 10" } }, + "node_modules/swagger2openapi": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz", + "integrity": "sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==", + "license": "BSD-3-Clause", + "dependencies": { + "call-me-maybe": "^1.0.1", + "node-fetch": "^2.6.1", + "node-fetch-h2": "^2.3.0", + "node-readfiles": "^0.2.0", + "oas-kit-common": "^1.0.8", + "oas-resolver": "^2.5.6", + "oas-schema-walker": "^1.1.5", + "oas-validator": "^5.0.8", + "reftools": "^1.1.9", + "yaml": "^1.10.0", + "yargs": "^17.0.1" + }, + "bin": { + "boast": "boast.js", + "oas-validate": "oas-validate.js", + "swagger2openapi": "swagger2openapi.js" + }, + "funding": { + "url": "https://github.com/Mermade/oas-kit?sponsor=1" + } + }, "node_modules/swc-loader": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.7.tgz", @@ -21301,6 +22257,12 @@ "node": ">=6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, "node_modules/tree-dump": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", @@ -21824,6 +22786,21 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", + "license": "BSD" + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -22131,6 +23108,12 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, "node_modules/webpack": { "version": "5.106.2", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.106.2.tgz", @@ -22558,6 +23541,16 @@ "node": ">=0.8.0" } }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -22737,12 +23730,83 @@ "xml-js": "bin/cli.js" } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "license": "ISC" }, + "node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", + "license": "Apache-2.0" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yocto-queue": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", diff --git a/package.json b/package.json index 071a6885dc..ddcbef27d5 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-typed": "^2.0.12", + "redocusaurus": "^2.5.0", "serve": "^10.0.2" }, "devDependencies": { diff --git a/src/css/custom.css b/src/css/custom.css index 64c9272c6a..09161ffb7d 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -529,3 +529,18 @@ html { .DocSearch-Dropdown::-webkit-scrollbar-thumb:hover { background: var(--docsearch-primary-color); } + +/* Fix Redoc sidebar navigation: .api-content uses overflow:hidden + contain:layout + which intercepts scrollIntoView and prevents click-to-scroll from reaching the window. + Also, html has scroll-behavior:smooth (Docusaurus default) but Redoc's scroll correction + (scrollBy(0, -59)) fires synchronously after scrollIntoView(), cancelling the animation. + Forcing auto on the Redoc page makes the scroll instant so the offset correction applies + at the correct position. The html.plugin-redoc class is set only on the API reference page. */ +.api-content { + overflow: visible !important; + contain: none !important; +} + +html.plugin-redoc { + scroll-behavior: auto !important; +} diff --git a/static/openapi/changetracker-hub-8.1.yaml b/static/openapi/changetracker-hub-8.1.yaml new file mode 100644 index 0000000000..1d8380417e --- /dev/null +++ b/static/openapi/changetracker-hub-8.1.yaml @@ -0,0 +1,35148 @@ +openapi: 3.0.1 +info: + title: ChangeTracker + version: '1.0' +servers: + - url: https://localhost:5001/api +paths: + '/command/tasks/poll/{AgentId}': + get: + tags: + - command + summary: 'Called by the agent, this returns a list of AgentTasks and latest tracking template definition dates for all the devices the agent manages.' + description: 'Called by the agent, this returns a list of AgentTasks and latest tracking template definition dates for all the devices the agent manages.' + operationId: GetAgentPolltaskspollAgentId_Get + parameters: + - name: UniqueId + in: query + description: Specifies the agent unique reference id. This is supplied in the return from the initial RegisterAgent call. + required: true + schema: + type: string + - name: AgentId + in: query + description: 'Specifies the agent id. Note: this the agent id excluding the device id: the poll returns tasks and configuration dates for all devices registered under this agent id.' + required: true + schema: + type: string + - name: LegacyId + in: query + description: 'The legacy v6.5 RA agent id. Note: this is only present for upgrade purposes.' + schema: + type: string + - name: PollTimeUtc + in: query + description: Specifies the local agent Utc time. Used to detect system time differences between agent and hub. + required: true + schema: + type: DateTime + format: date-time + x-nullable: false + - name: AgentVersion + in: query + description: Specifies the agent version. This is optional and typically only sent on initial poll. + schema: + type: string + - name: AgentMacAddresses + in: query + description: Specifies the agent physical/MAC addresses. This is optional and typically only sent on an initial poll or when the list changes. + schema: + type: string + - name: AgentIPv4 + in: query + description: Specifies the agent IP v4 addresses. This is optional and typically only sent on initial poll or when the list changes. + schema: + type: string + - name: AgentIPv6 + in: query + description: Specifies the agent IP v6 addresses. This is optional and typically only sent on initial poll or when the list changes. + schema: + type: string + - name: MachineName + in: query + description: 'Specifies the agent machine name including custom prefix, and domain prefix, if used. This is optional and typically only sent on initial poll or when the it changes.' + schema: + type: string + - name: FullyQualifiedDomainName + in: query + description: Specifies the fully qualified domain name. This is optional and typically only sent on initial poll or when the it changes. + schema: + type: string + - name: AgentType + in: query + description: Specifies the type of agent + schema: + enum: + - Unknown + - NetDesktop + - Mono + - NetCore + - ExpressAgent + type: string + x-nullable: false + - name: Os + in: query + description: Specifies the agent operating system. This is optional and typically only sent on initial poll or when the it changes. + schema: + type: string + - name: DeviceIds + in: query + description: Specifies the deviceIds of the devices online that the agent is proxying. This is optional and typically only sent by a proxying agent. + style: form + schema: + type: array + items: + type: string + - name: ReturnXml + in: query + description: Specifies whether to return the report task template xml in the response. This is optional and defaults to true. It can be used to prevent xml download on agents that implement a local cache of report definitions. + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetAgentPoll + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentPollResponse' + security: + - Bearer: [ ] + post: + tags: + - command + summary: 'Called by the agent, this returns a list of AgentTasks and latest tracking template definition dates for all the devices the agent manages.' + description: 'Called by the agent, this returns a list of AgentTasks and latest tracking template definition dates for all the devices the agent manages.' + operationId: GetAgentPolltaskspollAgentId_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentPoll' + x-bodyName: body + responses: + '200': + description: The response object for GetAgentPoll + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentPollResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/command/tasks/agent/{AgentId}': + get: + tags: + - command + summary: Requests information about tasks for the given agent. + description: Requests information about tasks for the given agent. + operationId: GetAgentTaskstasksagentAgentId_Get + parameters: + - name: AgentId + in: query + description: Specifies the agent's AgentId. + schema: + type: string + - name: DeviceId + in: query + description: Specifies the agent's DeviceId. + schema: + type: string + - name: TaskStatuses + in: query + description: Specifies a value indicating the task statuses to filter by. + style: form + schema: + type: array + items: + type: string + x-nullable: false + - name: TaskIds + in: query + description: Specifies value indicating the task ids to look for. + style: form + schema: + type: array + items: + type: integer + format: int32 + x-nullable: false + - name: PolicyRunId + in: query + description: Specifies the policy run id associated with the last run of the report etc. use this to find tasks started by a given scheduled policy. + schema: + type: integer + format: int32 + - name: TaskType + in: query + description: Specifies the specific task type to retrieve details for + schema: + type: string + - name: Concise + in: query + description: Return a concise view of the tasks? i.e not the Text and ResultData properties + schema: + type: boolean + x-nullable: false + - name: IgnoreActiveDates + in: query + description: 'By default only AgentTasks that are currently between their StartDate and EndDate values are returned, this flag returns tasks irrespective of dates.' + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetAgentTasks + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTasksResponse' + security: + - Bearer: [ ] + post: + tags: + - command + summary: Requests information about tasks for the given agent. + description: Requests information about tasks for the given agent. + operationId: GetAgentTaskstasksagentAgentId_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentTasks' + x-bodyName: body + responses: + '200': + description: The response object for GetAgentTasks + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTasksResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/submitAgentTaskResultStream/{AgentId}/{DeviceId}/{TaskId}': + post: + tags: + - submitAgentTaskResultStream + summary: Used to submit agent task result data to the hub as a stream. + description: Used to submit agent task result data to the hub as a stream. + operationId: SubmitAgentTaskResultStreamAgentIdDeviceIdTaskId_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SubmitAgentTaskResultStream' + x-bodyName: body + responses: + '200': + description: The response object for SubmitAgentTaskResultsStream. + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitAgentTaskResultStreamResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /submitAgentTaskResultData: + get: + tags: + - submitAgentTaskResultData + summary: 'Adds report result data for the given agent report, called by the agent. This is the new format used by the Gen 7 agent.' + description: 'Adds report result data for the given agent report, called by the agent. This is the new format used by the Gen 7 agent.' + operationId: SubmitAgentTaskResultData_Get + parameters: + - name: AgentId + in: query + description: 'Specifies the agent id. This required for external api callers, but optional internally because the system may update / expire tasks without knowing the AgentId, but external api entry points should ensure it is set to prevent tampering with tasks not owned by the caller.' + schema: + type: string + - name: DeviceId + in: query + description: 'Specifies the device id. Note: this is optional as the system knows the device id from the task.' + schema: + type: string + - name: TaskId + in: query + description: Specifies the task id that this data relates to. + schema: + type: integer + format: int32 + x-nullable: false + - name: DataValues + in: query + description: Specifies the result data items. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/VariableDataValue' + - name: Status + in: query + description: 'Specifies the status of the task. e.g complete, or error.' + schema: + enum: + - AwaitingPickup + - InProgress + - Complete + - Error + - Deleted + - ProcessingResults + type: string + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - submitAgentTaskResultData + summary: 'Adds report result data for the given agent report, called by the agent. This is the new format used by the Gen 7 agent.' + description: 'Adds report result data for the given agent report, called by the agent. This is the new format used by the Gen 7 agent.' + operationId: SubmitAgentTaskResultData_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SubmitAgentTaskResultData' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /submitAgentTaskResult: + get: + tags: + - submitAgentTaskResult + summary: 'Adds task result data for the given agent task, called by the agent.' + description: 'Adds task result data for the given agent task, called by the agent.' + operationId: SubmitAgentTaskResult_Get + parameters: + - name: AgentId + in: query + description: Specifies the agent id. + required: true + schema: + type: string + - name: DeviceId + in: query + description: Specifies the device id. + required: true + schema: + type: string + - name: TaskId + in: query + description: Specifies the task id. + required: true + schema: + type: integer + format: int32 + x-nullable: false + - name: ResultData + in: query + description: Specifies the result data. If the task result is a single string it may be specified here. Otherwise specify it in ResultDataItems or RuleItemResults. + schema: + type: string + - name: ResultDataItems + in: query + description: 'Specifies the result data items, when the task result is a list of data items (eg get processes).' + style: form + schema: + type: array + items: + $ref: '#/components/schemas/AgentDataItem' + - name: Status + in: query + description: Specifies the task status. + schema: + enum: + - AwaitingPickup + - InProgress + - Complete + - Error + - Deleted + - ProcessingResults + type: string + x-nullable: false + - name: StatusMessage + in: query + description: 'Specifies the additional status message, if any.' + schema: + type: string + - name: ReportResultSummary + in: query + description: Specifies the report result summary when this task represents a 'AgentTaskType.ReportExecutionRequest'. + schema: + $ref: '#/components/schemas/ReportResultSummary' + - name: RuleItemResults + in: query + description: Specifies the rule item results when this task represents a 'AgentTaskType.ReportExecutionRequest'. + schema: + title: 'Dictionary>' + type: object + additionalProperties: + type: array + items: + $ref: '#/components/schemas/RuleItemResult' + description: 'Dictionary>' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - submitAgentTaskResult + summary: 'Adds task result data for the given agent task, called by the agent.' + description: 'Adds task result data for the given agent task, called by the agent.' + operationId: SubmitAgentTaskResult_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SubmitAgentTaskResult' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /credential: + get: + tags: + - credential + summary: Get specific credentials for requested type and key (name). + description: Get specific credentials for requested type and key (name). + operationId: GetCredentials_Get + parameters: + - name: CredentialsType + in: query + description: Specifies the credentials type. + schema: + enum: + - Unknown + - Shell + - Database + - FTP + - Cloud + - ESX + - ITSM + - Splunk + type: string + x-nullable: false + - name: Key + in: query + description: Specifies the key (name) of the required credentials. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Represents some credentials used to connect to a remote service (e.g SSH, database etc).' + content: + application/json: + schema: + $ref: '#/components/schemas/Credentials' + security: + - Bearer: [ ] + post: + tags: + - credential + summary: Get specific credentials for requested type and key (name). + description: Get specific credentials for requested type and key (name). + operationId: GetCredentials_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetCredentials' + x-bodyName: body + responses: + '200': + description: 'Represents some credentials used to connect to a remote service (e.g SSH, database etc).' + content: + application/json: + schema: + $ref: '#/components/schemas/Credentials' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /policyTemplates: + get: + tags: + - policyTemplates + summary: Gets matching config templates. + description: Gets matching config templates. + operationId: GetPolicyTemplates_Get + parameters: + - name: Name + in: query + description: Specifies a single policy name (id) to search for. + schema: + type: string + - name: NameContains + in: query + description: Specifies the text the name contains. Used to search for partial match if 'Name' not specified. + schema: + type: string + - name: Names + in: query + description: Specifies a list of policy names (ids) to search for. + style: form + schema: + type: array + items: + type: string + - name: ReturnXml + in: query + description: Specifies a value indicating whether to return the template xml in the response. Defaults to false. + schema: + type: boolean + x-nullable: false + - name: ReturnSignatures + in: query + description: Specifies a value indicating whether to calculate and return the template signatures in the response. Defaults to false. + schema: + type: boolean + x-nullable: false + - name: IsActive + in: query + description: Get the Active version of a template + schema: + type: boolean + - name: IsLatest + in: query + description: Get the Latest version of a template + schema: + type: boolean + - name: IsSystem + in: query + description: Get System supplied templates + schema: + type: boolean + - name: HasRules + in: query + description: Get templates with Rules + schema: + type: boolean + - name: HasTrackers + in: query + description: Get templates with Trackers + schema: + type: boolean + - name: TemplateTrackerTypes + in: query + description: Specifies the template's tracker types. + style: form + schema: + type: array + items: + type: string + - name: TemplateVersion + in: query + description: Specifies the template version to get. + schema: + type: string + - name: UsageTags + in: query + description: Specifies the policy usage types to get. + style: form + schema: + type: array + items: + type: string + - name: IsTrusted + in: query + description: Policy templates which contains commands that are trusted + schema: + type: boolean + - name: NotificationRefId + in: query + description: Policy templates associated with the supplied notification ref id + schema: + type: string + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Response to a request for matching config templates. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPolicyTemplatesResponse' + security: + - Bearer: [ ] + post: + tags: + - policyTemplates + summary: Gets matching config templates. + description: Gets matching config templates. + operationId: GetPolicyTemplates_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetPolicyTemplates' + x-bodyName: body + responses: + '200': + description: Response to a request for matching config templates. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPolicyTemplatesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /policyTemplateVariables: + get: + tags: + - policyTemplateVariables + summary: A request to get a list of variable definitions from a named report to be collected by the agent. + description: A request to get a list of variable definitions from a named report to be collected by the agent. + operationId: GetPolicyTemplateVariables_Get + parameters: + - name: PolicyTemplateName + in: query + description: Specifies the report template name. + schema: + type: string + - name: ReturnConfigAsXml + in: query + description: 'For any config that needs to be applied, return as XML.' + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The list of variable definitions from a named report to be collected by the agent. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPolicyTemplateVariablesResponse' + security: + - Bearer: [ ] + post: + tags: + - policyTemplateVariables + summary: A request to get a list of variable definitions from a named report to be collected by the agent. + description: A request to get a list of variable definitions from a named report to be collected by the agent. + operationId: GetPolicyTemplateVariables_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetPolicyTemplateVariables' + x-bodyName: body + responses: + '200': + description: The list of variable definitions from a named report to be collected by the agent. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPolicyTemplateVariablesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceCredentials: + get: + tags: + - deviceCredentials + summary: A request to get the names of credentials associated with an agent. + description: A request to get the names of credentials associated with an agent. + operationId: GetCredentialsForAgentDevice_Get + parameters: + - name: AgentDevice + in: query + description: Specifies the agent device. + schema: + $ref: '#/components/schemas/AgentDevice' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + type: string + security: + - Bearer: [ ] + post: + tags: + - deviceCredentials + summary: A request to get the names of credentials associated with an agent. + description: A request to get the names of credentials associated with an agent. + operationId: GetCredentialsForAgentDevice_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetCredentialsForAgentDevice' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + type: string + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceDbCredentials: + get: + tags: + - deviceDbCredentials + summary: A request to get the database credentials associated with a database proxied agent. + description: A request to get the database credentials associated with a database proxied agent. + operationId: GetDbCredentialForDatabaseAgentDevice_Get + parameters: + - name: AgentDevice + in: query + description: Specifies the agent device. + schema: + $ref: '#/components/schemas/AgentDevice' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Represents some credentials used to connect to a remote service (e.g SSH, database etc).' + content: + application/json: + schema: + $ref: '#/components/schemas/Credentials' + security: + - Bearer: [ ] + post: + tags: + - deviceDbCredentials + summary: A request to get the database credentials associated with a database proxied agent. + description: A request to get the database credentials associated with a database proxied agent. + operationId: GetDbCredentialForDatabaseAgentDevice_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetDbCredentialForDatabaseAgentDevice' + x-bodyName: body + responses: + '200': + description: 'Represents some credentials used to connect to a remote service (e.g SSH, database etc).' + content: + application/json: + schema: + $ref: '#/components/schemas/Credentials' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groupMemberships: + get: + tags: + - groupMemberships + summary: 'A request to return groups this agent or group is a member of, including parents of parents etc.' + description: 'A request to return groups this agent or group is a member of, including parents of parents etc.' + operationId: GroupMemberships_Get + parameters: + - name: MemberName + in: query + description: Specifies the member name to retrieve group memberships for. + schema: + type: string + - name: MemberType + in: query + description: Specifies the member type of the member specified by MemberName (AgentDevice or Group). + schema: + enum: + - None + - AgentDevice + - Group + type: string + x-nullable: false + - name: ExcludeInherited + in: query + description: 'Specifies a value indicating whether to exclude inherited groups. This defaults to false meaning that all groups including those that are parents of thoseexplicitly set are returned, for example if Windows 7 group is a member of Windows group, and a device is explicitly a member of Windows 7the function will return ''Windows, Windows 7''. If ''ExcludeInherited'' is true, only ''Windows 7'' will be returned.' + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + type: string + security: + - Bearer: [ ] + post: + tags: + - groupMemberships + summary: 'A request to return groups this agent or group is a member of, including parents of parents etc.' + description: 'A request to return groups this agent or group is a member of, including parents of parents etc.' + operationId: GroupMemberships_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GroupMemberships' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + type: string + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agents: + get: + tags: + - agents + summary: A request to return agents matching the device filter. + description: A request to return agents matching the device filter. + operationId: GetAgents_Get + parameters: + - name: ExcludeTotalCount + in: query + description: Specifies a value indicating whether to calculate the total count returned in the GetAgentsResponse.Total + schema: + type: boolean + x-nullable: false + - name: DeviceFilter + in: query + description: Specifies the agents to search for by id or group membership. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: GetAgentGroupDetails + in: query + description: Specifies a value indicating whether to get agent group details. + schema: + type: boolean + x-nullable: false + - name: GetRelatedCredentials + in: query + description: Specifies a value indicating whether to get related credentials. + schema: + type: boolean + x-nullable: false + - name: GetRelatedPlannedChanges + in: query + description: Specifies a value indicating whether to get related planned changes. + schema: + type: boolean + x-nullable: false + - name: GetRelatedProxyAgents + in: query + description: Specifies a value indicating whether to get related proxy agents. + schema: + type: boolean + x-nullable: false + - name: GetRelatedTemplates + in: query + description: Specifies a value indicating whether to get templates applied to the returned agents. + schema: + type: boolean + x-nullable: false + - name: IncludeMasterInFilter + in: query + description: Specifies a value indicating whether to include proxy master devices in filters that match a child proxied device but would not otherwise return the proxying master. + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetAgents + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentsResponse' + security: + - Bearer: [ ] + post: + tags: + - agents + summary: A request to return agents matching the device filter. + description: A request to return agents matching the device filter. + operationId: GetAgents_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgents' + x-bodyName: body + responses: + '200': + description: The response object for GetAgents + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agents/register: + get: + tags: + - agents + summary: Registers the details of an Agent with the system. + description: Registers the details of an Agent with the system. + operationId: RegisterAgentregister_Get + parameters: + - name: CanProxy + in: query + description: Specifies a value indicating whether the agent can proxy connections to other devices. + schema: + type: boolean + x-nullable: false + - name: CredentialKey + in: query + description: Specifies the credential key. Only allowed for proxied devices. + schema: + type: string + - name: DbConnection + in: query + description: Specifies the details for a database connection. + schema: + $ref: '#/components/schemas/DbConnection' + - name: DeviceName + in: query + description: Specifies the device name. + schema: + type: string + - name: GroupNames + in: query + description: Specifies the group names. Only allowed for proxied devices. + style: form + schema: + type: array + items: + type: string + - name: HostName + in: query + description: Specifies the host name. This is the name or IP address used for agentless access to this device by a proxy. + schema: + type: string + - name: HostType + in: query + description: Specifies the host type. + schema: + enum: + - Unknown + - Unix + - Windows + - Network + - Database + - Cloud + - ESX + - Splunk + type: string + x-nullable: false + - name: MacAddresses + in: query + description: Specifies the mac addresses. + schema: + type: string + - name: IPv4 + in: query + description: Specifies the v4 ip address. + schema: + type: string + - name: IPv6 + in: query + description: Specifies the v6 ip address. + schema: + type: string + - name: LegacyHubId + in: query + description: Specifies the legacy hub id. + schema: + type: string + - name: DiscoveryId + in: query + description: Specifies the internal discovery-based id. + schema: + type: string + - name: DiscoveryTaskId + in: query + description: Specifies the internal discovery task id. + schema: + type: string + - name: OnlineDetection + in: query + description: Specifies the method to use when detecting if a proxed device is online + schema: + enum: + - None + - Ping + - TcpConnect + type: string + x-nullable: false + - name: Os + in: query + description: Specifies the Operating System full description as reported by the device. + schema: + type: string + - name: KnownOsName + in: query + description: Specifies the Operating System from the list of known Os names. + schema: + type: string + - name: OsUserSpecified + in: query + description: 'Specifies the operating system as entered by the user. This will override the discovered Os in the UI, if specified.' + schema: + type: string + - name: PollPeriodSeconds + in: query + description: Specifies the poll period in seconds. + schema: + type: integer + format: int32 + - name: ProxiedByAgentId + in: query + description: Specifies the agent id of the proxy agent this device will be proxied by. + schema: + type: string + - name: Registered + in: query + description: Specifies a value indicating whether registered. + schema: + type: boolean + x-nullable: false + - name: BaselineSendEnabled + in: query + description: Specifies that the agent send baseline events flag should be set according to the value specified in the Agent property. + schema: + type: boolean + x-nullable: false + - name: UniqueId + in: query + description: 'Specifies a value uniquely identifying the agent independent of name or agent id from a previous registration. Used to detect a need to re-register when underlying hub store has been emptied, otherwise the autoincrementing agent id counter can result in clashes as already used ids are reissued to different agents.' + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Represents a remote NNT Agent. May be a 1.x Agent, Gen7 Agent or Express Agent or a proxied device.' + content: + application/json: + schema: + $ref: '#/components/schemas/Agent' + security: + - Bearer: [ ] + post: + tags: + - agents + summary: Registers the details of an Agent with the system. + description: Registers the details of an Agent with the system. + operationId: RegisterAgentregister_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/RegisterAgent' + x-bodyName: body + responses: + '200': + description: 'Represents a remote NNT Agent. May be a 1.x Agent, Gen7 Agent or Express Agent or a proxied device.' + content: + application/json: + schema: + $ref: '#/components/schemas/Agent' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agents/update: + get: + tags: + - agents + summary: Update an Agent's details. + description: Update an Agent's details. + operationId: UpdateAgentupdate_Get + parameters: + - name: Agent + in: query + description: Specifies the agent being updated + schema: + $ref: '#/components/schemas/Agent' + - name: CredentialKey + in: query + description: Specifies the credential key to associate with this agent. e.g ssh credentials. + schema: + type: string + - name: DbConnection + in: query + description: Specifies the details for a database connection. + schema: + $ref: '#/components/schemas/DbConnection' + - name: GroupNames + in: query + description: Specifies a list of group names this agent belongs to. + style: form + schema: + type: array + items: + type: string + - name: UpdateAgentDeviceName + in: query + description: Specifies that the agent device name should be updated according to the value specified in the Agent property. + schema: + type: boolean + x-nullable: false + - name: UpdateAgentHostType + in: query + description: Specifies that the agent host type should be updated according to the value specified in the Agent property. + schema: + type: boolean + x-nullable: false + - name: UpdateCredentialKey + in: query + description: Specifies that the agent credential key should be updated according to the value specified. + schema: + type: boolean + x-nullable: false + - name: UpdateDbConnectionDetails + in: query + description: Specifies that the agent database connection details should be updated according to the values specified. + schema: + type: boolean + x-nullable: false + - name: UpdateDiagnosticModeEnabled + in: query + description: Specifies that the agent diagnostic mode flag should be updated according to the value specified in the Agent property. + schema: + type: boolean + x-nullable: false + - name: UpdateEventBlockEnabled + in: query + description: Specifies that the agent events blocked flag should be updated according to the value specified in the Agent property. + schema: + type: boolean + x-nullable: false + - name: UpdateGroupNames + in: query + description: Specifies that the agent group names should be updated according to the value specified. + schema: + type: boolean + x-nullable: false + - name: UpdateHostName + in: query + description: Specifies that the agent host name should be updated according to the value specified in the Agent property. + schema: + type: boolean + x-nullable: false + - name: UpdateIPv4 + in: query + description: Specifies that the IPv4 should be updated according to the value specified in the Agent property. + schema: + type: boolean + x-nullable: false + - name: UpdateOnlineDetection + in: query + description: Specifies that the agentonline detection mode should be updated according to the value specified in the Agent property. + schema: + type: boolean + x-nullable: false + - name: UpdateOsUserSpecified + in: query + description: Specifies that the agent user specified os type should be updated according to the value specified in the Agent property. + schema: + type: boolean + x-nullable: false + - name: UpdateBaselineSendEnabled + in: query + description: Specifies that the agent send baseline events flag should be updated according to the value specified in the Agent property. + schema: + type: boolean + x-nullable: false + - name: ClearUniqueId + in: query + description: 'Specifies that the agent UniqueId should be cleared, allowing registration by another device of the same name, but different UniqueId.' + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetAgents + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentsResponse' + security: + - Bearer: [ ] + post: + tags: + - agents + summary: Update an Agent's details. + description: Update an Agent's details. + operationId: UpdateAgentupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateAgent' + x-bodyName: body + responses: + '200': + description: The response object for GetAgents + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agents/search: + get: + tags: + - agents + summary: A request to find agents matching the device filter and search criteria. + description: A request to find agents matching the device filter and search criteria. + operationId: SearchAgentssearch_Get + parameters: + - name: DeviceFilter + in: query + description: Limits the agents to search for by id or group membership. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: MatchText + in: query + description: Text to search for in the Agents fields. + schema: + type: string + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for SearchAgents + content: + application/json: + schema: + $ref: '#/components/schemas/SearchAgentsResponse' + security: + - Bearer: [ ] + post: + tags: + - agents + summary: A request to find agents matching the device filter and search criteria. + description: A request to find agents matching the device filter and search criteria. + operationId: SearchAgentssearch_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SearchAgents' + x-bodyName: body + responses: + '200': + description: The response object for SearchAgents + content: + application/json: + schema: + $ref: '#/components/schemas/SearchAgentsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agents/preRegister: + get: + tags: + - agents + summary: Registers the details of the specified Agents with the system. + description: Registers the details of the specified Agents with the system. + operationId: PreRegisterAgentspreRegister_Get + parameters: + - name: Agents + in: query + description: A list of agents to pre-register at the hub. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/RegisterAgent' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for PreRegisterAgents + content: + application/json: + schema: + $ref: '#/components/schemas/PreRegisterAgentsResponse' + security: + - Bearer: [ ] + post: + tags: + - agents + summary: Registers the details of the specified Agents with the system. + description: Registers the details of the specified Agents with the system. + operationId: PreRegisterAgentspreRegister_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PreRegisterAgents' + x-bodyName: body + responses: + '200': + description: The response object for PreRegisterAgents + content: + application/json: + schema: + $ref: '#/components/schemas/PreRegisterAgentsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceConfig: + get: + tags: + - deviceConfig + summary: Get the tracking configuration template from the merged result of the group configurations for the groups the device is in. + description: Get the tracking configuration template from the merged result of the group configurations for the groups the device is in. + operationId: GetDeviceConfig_Get + parameters: + - name: AgentDevice + in: query + description: Specifies the agent and device id. Either 'AgentDevice' or 'AgentDeviceId' can be used. + schema: + $ref: '#/components/schemas/AgentDevice' + - name: AgentDeviceId + in: query + description: 'Specifies the combined agent and device id, for example 1,1.' + schema: + type: string + - name: ReturnDocument + in: query + description: Specifies a value indicating whether return to return a device template object in GetDeviceConfigResponse.DeviceTemplate if trueor an xml string in GetDeviceConfigResponse.Xml if false. + schema: + type: boolean + x-nullable: false + - name: ReturnDocumentAsPolicyRuleSet + in: query + description: Specifies a value indicating whether return to return a device template rule-set object in GetDeviceConfigResponse.DeviceTemplate if trueor an xml string in GetDeviceConfigResponse.Xml if false. + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Represents the tracking configuration template from the merged result of the group configurations for the groups the device is in. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceConfigResponse' + security: + - Bearer: [ ] + post: + tags: + - deviceConfig + summary: Get the tracking configuration template from the merged result of the group configurations for the groups the device is in. + description: Get the tracking configuration template from the merged result of the group configurations for the groups the device is in. + operationId: GetDeviceConfig_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetDeviceConfig' + x-bodyName: body + responses: + '200': + description: Represents the tracking configuration template from the merged result of the group configurations for the groups the device is in. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceConfigResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceSettings: + get: + tags: + - deviceSettings + summary: 'Gets the device settings for the device or group, based on the global device settings and any group specific overrides.' + description: 'Gets the device settings for the device or group, based on the global device settings and any group specific overrides.' + operationId: GetDeviceSettings_Get + parameters: + - name: AgentId + in: query + description: Specifies the id of the agent. Either AgentId and DeviceId or GroupName must be supplied. + schema: + type: string + - name: DeviceId + in: query + description: Specifies the id of the device. Either AgentId and DeviceId or GroupName must be supplied. + schema: + type: string + - name: GroupName + in: query + description: Specifies the group name. Either AgentId and DeviceId or GroupName must be supplied. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Represents the device specific options such as customised local ui password details, and tracker performance settings.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceSettingsResponse' + security: + - Bearer: [ ] + post: + tags: + - deviceSettings + summary: 'Gets the device settings for the device or group, based on the global device settings and any group specific overrides.' + description: 'Gets the device settings for the device or group, based on the global device settings and any group specific overrides.' + operationId: GetDeviceSettings_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetDeviceSettings' + x-bodyName: body + responses: + '200': + description: 'Represents the device specific options such as customised local ui password details, and tracker performance settings.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceSettingsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /events: + get: + tags: + - events + summary: Retrieves a list of events from the hub service. + description: Retrieves a list of events from the hub service. + operationId: GetEvents_Get + parameters: + - name: Comment + in: query + description: Gets or sets the query comment so that when slow / repeated queries are identified in the database we can trace them back to a specific query in the code more easily + schema: + type: string + - name: TimeZoneId + in: query + description: 'Gets or sets the user time zone id. Optional, if supplied the returned Events'' DateTimeLocal property is populated with a calculated equivalent local time based on the event DateTimeUtc.' + schema: + type: string + - name: DeviceFilter + in: query + description: 'Gets or sets the device selection, null implies all devices.' + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: EventFilter + in: query + description: 'Gets or sets the event selection, null implies all events.' + schema: + $ref: '#/components/schemas/EventFilter' + - name: StartUtc + in: query + description: ' Gets or sets the start of the period to return events for, null implies all.' + schema: + type: string + format: date-time + - name: EndUtc + in: query + description: 'Gets or sets the end of the period to return events for, null implies up to current time.' + schema: + type: string + format: date-time + - name: StartOffsetSeconds + in: query + description: If this is supplied then the StartUtc is going to based on a time this many seconds ago (to allow 'rolling' queries) + schema: + type: integer + format: int32 + - name: EndOffsetSeconds + in: query + description: If this is supplied then the EndUtc is going to be based on a time this many seconds ago (to allow 'rolling' queries) + schema: + type: integer + format: int32 + - name: Status + in: query + description: Only get events of a certain status + schema: + type: string + - name: TextSearch + in: query + description: Gets or sets the text search value. + schema: + type: string + - name: ReturnedEventType + in: query + description: ' Gets or sets the returned event type.' + schema: + enum: + - None + - DeviceEvent + - AlertEvent + - ErrorEvent + - AuditEvent + - RuleSetResultEvent + - RuleResultEvent + - DataResultsEvent + - ScheduledPolicyResultEvent + - RuleSetScoreEvent + - CommsEvent + - BaselineEvent + - GroupReportResultEvent + type: string + x-nullable: false + - name: EventId + in: query + description: Gets or sets the specific event id. + schema: + type: string + - name: ExcludeTotalCount + in: query + description: ' Gets or sets a value indicating whether to calculate the total count returned in the GetEventsResponse.Total' + schema: + type: boolean + x-nullable: false + - name: IncludeHistory + in: query + description: Gets or sets a value indicating wether or not to return event history with the events. + schema: + type: boolean + x-nullable: false + - name: RulesFromBaselinePolicyName + in: query + description: Gets or sets a value indicating wether or not to return event history with the events. + schema: + type: string + - name: ReturnAllEvents + in: query + description: 'Gets or sets a value indicating whether to populate the AllEvents list ' + schema: + type: boolean + x-nullable: false + - name: CountTimeMilliseconds + in: query + description: Gets or sets a value indicating how long to spend calculating a count of results before timing out. + schema: + type: number + format: double + - name: FormatDiffs + in: query + description: 'Gets or sets a value indicating whether to format the attribute text that contains process output content differences. ' + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The Events response. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventsResponse' + security: + - Bearer: [ ] + post: + tags: + - events + summary: Retrieves a list of events from the hub service. + description: Retrieves a list of events from the hub service. + operationId: GetEvents_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetEvents' + x-bodyName: body + responses: + '200': + description: The Events response. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/events/start/{StartUtc}': + get: + tags: + - events + summary: Retrieves a list of events from the hub service. + description: Retrieves a list of events from the hub service. + operationId: GetEventsstartStartUtc_Get + parameters: + - name: Comment + in: query + description: Gets or sets the query comment so that when slow / repeated queries are identified in the database we can trace them back to a specific query in the code more easily + schema: + type: string + - name: TimeZoneId + in: query + description: 'Gets or sets the user time zone id. Optional, if supplied the returned Events'' DateTimeLocal property is populated with a calculated equivalent local time based on the event DateTimeUtc.' + schema: + type: string + - name: DeviceFilter + in: query + description: 'Gets or sets the device selection, null implies all devices.' + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: EventFilter + in: query + description: 'Gets or sets the event selection, null implies all events.' + schema: + $ref: '#/components/schemas/EventFilter' + - name: StartUtc + in: query + description: ' Gets or sets the start of the period to return events for, null implies all.' + schema: + type: string + format: date-time + - name: EndUtc + in: query + description: 'Gets or sets the end of the period to return events for, null implies up to current time.' + schema: + type: string + format: date-time + - name: StartOffsetSeconds + in: query + description: If this is supplied then the StartUtc is going to based on a time this many seconds ago (to allow 'rolling' queries) + schema: + type: integer + format: int32 + - name: EndOffsetSeconds + in: query + description: If this is supplied then the EndUtc is going to be based on a time this many seconds ago (to allow 'rolling' queries) + schema: + type: integer + format: int32 + - name: Status + in: query + description: Only get events of a certain status + schema: + type: string + - name: TextSearch + in: query + description: Gets or sets the text search value. + schema: + type: string + - name: ReturnedEventType + in: query + description: ' Gets or sets the returned event type.' + schema: + enum: + - None + - DeviceEvent + - AlertEvent + - ErrorEvent + - AuditEvent + - RuleSetResultEvent + - RuleResultEvent + - DataResultsEvent + - ScheduledPolicyResultEvent + - RuleSetScoreEvent + - CommsEvent + - BaselineEvent + - GroupReportResultEvent + type: string + x-nullable: false + - name: EventId + in: query + description: Gets or sets the specific event id. + schema: + type: string + - name: ExcludeTotalCount + in: query + description: ' Gets or sets a value indicating whether to calculate the total count returned in the GetEventsResponse.Total' + schema: + type: boolean + x-nullable: false + - name: IncludeHistory + in: query + description: Gets or sets a value indicating wether or not to return event history with the events. + schema: + type: boolean + x-nullable: false + - name: RulesFromBaselinePolicyName + in: query + description: Gets or sets a value indicating wether or not to return event history with the events. + schema: + type: string + - name: ReturnAllEvents + in: query + description: 'Gets or sets a value indicating whether to populate the AllEvents list ' + schema: + type: boolean + x-nullable: false + - name: CountTimeMilliseconds + in: query + description: Gets or sets a value indicating how long to spend calculating a count of results before timing out. + schema: + type: number + format: double + - name: FormatDiffs + in: query + description: 'Gets or sets a value indicating whether to format the attribute text that contains process output content differences. ' + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The Events response. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventsResponse' + security: + - Bearer: [ ] + post: + tags: + - events + summary: Retrieves a list of events from the hub service. + description: Retrieves a list of events from the hub service. + operationId: GetEventsstartStartUtc_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetEvents' + x-bodyName: body + responses: + '200': + description: The Events response. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/events/end/{End}': + get: + tags: + - events + summary: Retrieves a list of events from the hub service. + description: Retrieves a list of events from the hub service. + operationId: GetEventsendEnd_Get + parameters: + - name: Comment + in: query + description: Gets or sets the query comment so that when slow / repeated queries are identified in the database we can trace them back to a specific query in the code more easily + schema: + type: string + - name: TimeZoneId + in: query + description: 'Gets or sets the user time zone id. Optional, if supplied the returned Events'' DateTimeLocal property is populated with a calculated equivalent local time based on the event DateTimeUtc.' + schema: + type: string + - name: DeviceFilter + in: query + description: 'Gets or sets the device selection, null implies all devices.' + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: EventFilter + in: query + description: 'Gets or sets the event selection, null implies all events.' + schema: + $ref: '#/components/schemas/EventFilter' + - name: StartUtc + in: query + description: ' Gets or sets the start of the period to return events for, null implies all.' + schema: + type: string + format: date-time + - name: EndUtc + in: query + description: 'Gets or sets the end of the period to return events for, null implies up to current time.' + schema: + type: string + format: date-time + - name: StartOffsetSeconds + in: query + description: If this is supplied then the StartUtc is going to based on a time this many seconds ago (to allow 'rolling' queries) + schema: + type: integer + format: int32 + - name: EndOffsetSeconds + in: query + description: If this is supplied then the EndUtc is going to be based on a time this many seconds ago (to allow 'rolling' queries) + schema: + type: integer + format: int32 + - name: Status + in: query + description: Only get events of a certain status + schema: + type: string + - name: TextSearch + in: query + description: Gets or sets the text search value. + schema: + type: string + - name: ReturnedEventType + in: query + description: ' Gets or sets the returned event type.' + schema: + enum: + - None + - DeviceEvent + - AlertEvent + - ErrorEvent + - AuditEvent + - RuleSetResultEvent + - RuleResultEvent + - DataResultsEvent + - ScheduledPolicyResultEvent + - RuleSetScoreEvent + - CommsEvent + - BaselineEvent + - GroupReportResultEvent + type: string + x-nullable: false + - name: EventId + in: query + description: Gets or sets the specific event id. + schema: + type: string + - name: ExcludeTotalCount + in: query + description: ' Gets or sets a value indicating whether to calculate the total count returned in the GetEventsResponse.Total' + schema: + type: boolean + x-nullable: false + - name: IncludeHistory + in: query + description: Gets or sets a value indicating wether or not to return event history with the events. + schema: + type: boolean + x-nullable: false + - name: RulesFromBaselinePolicyName + in: query + description: Gets or sets a value indicating wether or not to return event history with the events. + schema: + type: string + - name: ReturnAllEvents + in: query + description: 'Gets or sets a value indicating whether to populate the AllEvents list ' + schema: + type: boolean + x-nullable: false + - name: CountTimeMilliseconds + in: query + description: Gets or sets a value indicating how long to spend calculating a count of results before timing out. + schema: + type: number + format: double + - name: FormatDiffs + in: query + description: 'Gets or sets a value indicating whether to format the attribute text that contains process output content differences. ' + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The Events response. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventsResponse' + security: + - Bearer: [ ] + post: + tags: + - events + summary: Retrieves a list of events from the hub service. + description: Retrieves a list of events from the hub service. + operationId: GetEventsendEnd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetEvents' + x-bodyName: body + responses: + '200': + description: The Events response. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/events/start/{StartUtc}/end/{End}': + get: + tags: + - events + summary: Retrieves a list of events from the hub service. + description: Retrieves a list of events from the hub service. + operationId: GetEventsstartStartUtcendEnd_Get + parameters: + - name: Comment + in: query + description: Gets or sets the query comment so that when slow / repeated queries are identified in the database we can trace them back to a specific query in the code more easily + schema: + type: string + - name: TimeZoneId + in: query + description: 'Gets or sets the user time zone id. Optional, if supplied the returned Events'' DateTimeLocal property is populated with a calculated equivalent local time based on the event DateTimeUtc.' + schema: + type: string + - name: DeviceFilter + in: query + description: 'Gets or sets the device selection, null implies all devices.' + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: EventFilter + in: query + description: 'Gets or sets the event selection, null implies all events.' + schema: + $ref: '#/components/schemas/EventFilter' + - name: StartUtc + in: query + description: ' Gets or sets the start of the period to return events for, null implies all.' + schema: + type: string + format: date-time + - name: EndUtc + in: query + description: 'Gets or sets the end of the period to return events for, null implies up to current time.' + schema: + type: string + format: date-time + - name: StartOffsetSeconds + in: query + description: If this is supplied then the StartUtc is going to based on a time this many seconds ago (to allow 'rolling' queries) + schema: + type: integer + format: int32 + - name: EndOffsetSeconds + in: query + description: If this is supplied then the EndUtc is going to be based on a time this many seconds ago (to allow 'rolling' queries) + schema: + type: integer + format: int32 + - name: Status + in: query + description: Only get events of a certain status + schema: + type: string + - name: TextSearch + in: query + description: Gets or sets the text search value. + schema: + type: string + - name: ReturnedEventType + in: query + description: ' Gets or sets the returned event type.' + schema: + enum: + - None + - DeviceEvent + - AlertEvent + - ErrorEvent + - AuditEvent + - RuleSetResultEvent + - RuleResultEvent + - DataResultsEvent + - ScheduledPolicyResultEvent + - RuleSetScoreEvent + - CommsEvent + - BaselineEvent + - GroupReportResultEvent + type: string + x-nullable: false + - name: EventId + in: query + description: Gets or sets the specific event id. + schema: + type: string + - name: ExcludeTotalCount + in: query + description: ' Gets or sets a value indicating whether to calculate the total count returned in the GetEventsResponse.Total' + schema: + type: boolean + x-nullable: false + - name: IncludeHistory + in: query + description: Gets or sets a value indicating wether or not to return event history with the events. + schema: + type: boolean + x-nullable: false + - name: RulesFromBaselinePolicyName + in: query + description: Gets or sets a value indicating wether or not to return event history with the events. + schema: + type: string + - name: ReturnAllEvents + in: query + description: 'Gets or sets a value indicating whether to populate the AllEvents list ' + schema: + type: boolean + x-nullable: false + - name: CountTimeMilliseconds + in: query + description: Gets or sets a value indicating how long to spend calculating a count of results before timing out. + schema: + type: number + format: double + - name: FormatDiffs + in: query + description: 'Gets or sets a value indicating whether to format the attribute text that contains process output content differences. ' + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The Events response. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventsResponse' + security: + - Bearer: [ ] + post: + tags: + - events + summary: Retrieves a list of events from the hub service. + description: Retrieves a list of events from the hub service. + operationId: GetEventsstartStartUtcendEnd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetEvents' + x-bodyName: body + responses: + '200': + description: The Events response. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/events/skip/{Skip}/take/{Take}': + get: + tags: + - events + summary: Retrieves a list of events from the hub service. + description: Retrieves a list of events from the hub service. + operationId: GetEventsskipSkiptakeTake_Get + parameters: + - name: Comment + in: query + description: Gets or sets the query comment so that when slow / repeated queries are identified in the database we can trace them back to a specific query in the code more easily + schema: + type: string + - name: TimeZoneId + in: query + description: 'Gets or sets the user time zone id. Optional, if supplied the returned Events'' DateTimeLocal property is populated with a calculated equivalent local time based on the event DateTimeUtc.' + schema: + type: string + - name: DeviceFilter + in: query + description: 'Gets or sets the device selection, null implies all devices.' + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: EventFilter + in: query + description: 'Gets or sets the event selection, null implies all events.' + schema: + $ref: '#/components/schemas/EventFilter' + - name: StartUtc + in: query + description: ' Gets or sets the start of the period to return events for, null implies all.' + schema: + type: string + format: date-time + - name: EndUtc + in: query + description: 'Gets or sets the end of the period to return events for, null implies up to current time.' + schema: + type: string + format: date-time + - name: StartOffsetSeconds + in: query + description: If this is supplied then the StartUtc is going to based on a time this many seconds ago (to allow 'rolling' queries) + schema: + type: integer + format: int32 + - name: EndOffsetSeconds + in: query + description: If this is supplied then the EndUtc is going to be based on a time this many seconds ago (to allow 'rolling' queries) + schema: + type: integer + format: int32 + - name: Status + in: query + description: Only get events of a certain status + schema: + type: string + - name: TextSearch + in: query + description: Gets or sets the text search value. + schema: + type: string + - name: ReturnedEventType + in: query + description: ' Gets or sets the returned event type.' + schema: + enum: + - None + - DeviceEvent + - AlertEvent + - ErrorEvent + - AuditEvent + - RuleSetResultEvent + - RuleResultEvent + - DataResultsEvent + - ScheduledPolicyResultEvent + - RuleSetScoreEvent + - CommsEvent + - BaselineEvent + - GroupReportResultEvent + type: string + x-nullable: false + - name: EventId + in: query + description: Gets or sets the specific event id. + schema: + type: string + - name: ExcludeTotalCount + in: query + description: ' Gets or sets a value indicating whether to calculate the total count returned in the GetEventsResponse.Total' + schema: + type: boolean + x-nullable: false + - name: IncludeHistory + in: query + description: Gets or sets a value indicating wether or not to return event history with the events. + schema: + type: boolean + x-nullable: false + - name: RulesFromBaselinePolicyName + in: query + description: Gets or sets a value indicating wether or not to return event history with the events. + schema: + type: string + - name: ReturnAllEvents + in: query + description: 'Gets or sets a value indicating whether to populate the AllEvents list ' + schema: + type: boolean + x-nullable: false + - name: CountTimeMilliseconds + in: query + description: Gets or sets a value indicating how long to spend calculating a count of results before timing out. + schema: + type: number + format: double + - name: FormatDiffs + in: query + description: 'Gets or sets a value indicating whether to format the attribute text that contains process output content differences. ' + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The Events response. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventsResponse' + security: + - Bearer: [ ] + post: + tags: + - events + summary: Retrieves a list of events from the hub service. + description: Retrieves a list of events from the hub service. + operationId: GetEventsskipSkiptakeTake_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetEvents' + x-bodyName: body + responses: + '200': + description: The Events response. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/events/{EventId}': + get: + tags: + - events + summary: Retrieves a list of events from the hub service. + description: Retrieves a list of events from the hub service. + operationId: GetEventsEventId_Get + parameters: + - name: Comment + in: query + description: Gets or sets the query comment so that when slow / repeated queries are identified in the database we can trace them back to a specific query in the code more easily + schema: + type: string + - name: TimeZoneId + in: query + description: 'Gets or sets the user time zone id. Optional, if supplied the returned Events'' DateTimeLocal property is populated with a calculated equivalent local time based on the event DateTimeUtc.' + schema: + type: string + - name: DeviceFilter + in: query + description: 'Gets or sets the device selection, null implies all devices.' + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: EventFilter + in: query + description: 'Gets or sets the event selection, null implies all events.' + schema: + $ref: '#/components/schemas/EventFilter' + - name: StartUtc + in: query + description: ' Gets or sets the start of the period to return events for, null implies all.' + schema: + type: string + format: date-time + - name: EndUtc + in: query + description: 'Gets or sets the end of the period to return events for, null implies up to current time.' + schema: + type: string + format: date-time + - name: StartOffsetSeconds + in: query + description: If this is supplied then the StartUtc is going to based on a time this many seconds ago (to allow 'rolling' queries) + schema: + type: integer + format: int32 + - name: EndOffsetSeconds + in: query + description: If this is supplied then the EndUtc is going to be based on a time this many seconds ago (to allow 'rolling' queries) + schema: + type: integer + format: int32 + - name: Status + in: query + description: Only get events of a certain status + schema: + type: string + - name: TextSearch + in: query + description: Gets or sets the text search value. + schema: + type: string + - name: ReturnedEventType + in: query + description: ' Gets or sets the returned event type.' + schema: + enum: + - None + - DeviceEvent + - AlertEvent + - ErrorEvent + - AuditEvent + - RuleSetResultEvent + - RuleResultEvent + - DataResultsEvent + - ScheduledPolicyResultEvent + - RuleSetScoreEvent + - CommsEvent + - BaselineEvent + - GroupReportResultEvent + type: string + x-nullable: false + - name: EventId + in: query + description: Gets or sets the specific event id. + schema: + type: string + - name: ExcludeTotalCount + in: query + description: ' Gets or sets a value indicating whether to calculate the total count returned in the GetEventsResponse.Total' + schema: + type: boolean + x-nullable: false + - name: IncludeHistory + in: query + description: Gets or sets a value indicating wether or not to return event history with the events. + schema: + type: boolean + x-nullable: false + - name: RulesFromBaselinePolicyName + in: query + description: Gets or sets a value indicating wether or not to return event history with the events. + schema: + type: string + - name: ReturnAllEvents + in: query + description: 'Gets or sets a value indicating whether to populate the AllEvents list ' + schema: + type: boolean + x-nullable: false + - name: CountTimeMilliseconds + in: query + description: Gets or sets a value indicating how long to spend calculating a count of results before timing out. + schema: + type: number + format: double + - name: FormatDiffs + in: query + description: 'Gets or sets a value indicating whether to format the attribute text that contains process output content differences. ' + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The Events response. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventsResponse' + security: + - Bearer: [ ] + post: + tags: + - events + summary: Retrieves a list of events from the hub service. + description: Retrieves a list of events from the hub service. + operationId: GetEventsEventId_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetEvents' + x-bodyName: body + responses: + '200': + description: The Events response. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /alertEvents/add: + get: + tags: + - alertEvents + summary: Adds a list of alert events to the system. + description: Adds a list of alert events to the system. + operationId: SubmitAlertEventsadd_Get + parameters: + - name: Events + in: query + description: Specifies the list of alert events for the hub to process. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/AlertEvent' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - alertEvents + summary: Adds a list of alert events to the system. + description: Adds a list of alert events to the system. + operationId: SubmitAlertEventsadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SubmitAlertEvents' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /alertEvents/limitedAdd: + get: + tags: + - alertEvents + summary: Adds a list of alert events to the system. The response can indicate a rate-limiting back off time. + description: Adds a list of alert events to the system. The response can indicate a rate-limiting back off time. + operationId: SubmitAlertEventsLimitedlimitedAdd_Get + parameters: + - name: Events + in: query + description: Specifies the list of alert events for the hub to process. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/AlertEvent' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitAlertEventsLimitedResponse' + security: + - Bearer: [ ] + post: + tags: + - alertEvents + summary: Adds a list of alert events to the system. The response can indicate a rate-limiting back off time. + description: Adds a list of alert events to the system. The response can indicate a rate-limiting back off time. + operationId: SubmitAlertEventsLimitedlimitedAdd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SubmitAlertEventsLimited' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitAlertEventsLimitedResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /baselineEvents/add: + get: + tags: + - baselineEvents + summary: Adds a list of baseline events to the system. + description: Adds a list of baseline events to the system. + operationId: SubmitBaselineEventsadd_Get + parameters: + - name: Events + in: query + description: Specifies the list of baseline events for the hub to process. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/BaselineEvent' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - baselineEvents + summary: Adds a list of baseline events to the system. + description: Adds a list of baseline events to the system. + operationId: SubmitBaselineEventsadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SubmitBaselineEvents' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /baselineEvents/limitedAdd: + get: + tags: + - baselineEvents + summary: Adds a list of baseline events to the system. The response can indicate a rate-limiting back off time. + description: Adds a list of baseline events to the system. The response can indicate a rate-limiting back off time. + operationId: SubmitBaselineEventsLimitedlimitedAdd_Get + parameters: + - name: Events + in: query + description: Specifies the list of baseline events for the hub to process. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/BaselineEvent' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitBaselineEventsLimitedResponse' + security: + - Bearer: [ ] + post: + tags: + - baselineEvents + summary: Adds a list of baseline events to the system. The response can indicate a rate-limiting back off time. + description: Adds a list of baseline events to the system. The response can indicate a rate-limiting back off time. + operationId: SubmitBaselineEventsLimitedlimitedAdd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SubmitBaselineEventsLimited' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitBaselineEventsLimitedResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceEvents/add: + get: + tags: + - deviceEvents + summary: Adds a list of device change events to the system. + description: Adds a list of device change events to the system. + operationId: SubmitDeviceEventsadd_Get + parameters: + - name: Events + in: query + description: Specifies the list of device events for the hub to process. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/DeviceEvent' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - deviceEvents + summary: Adds a list of device change events to the system. + description: Adds a list of device change events to the system. + operationId: SubmitDeviceEventsadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SubmitDeviceEvents' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceEvents/limitedAdd: + get: + tags: + - deviceEvents + summary: Adds a list of device change events to the system. The response can indicate a rate-limiting back off time. + description: Adds a list of device change events to the system. The response can indicate a rate-limiting back off time. + operationId: SubmitDeviceEventsLimitedlimitedAdd_Get + parameters: + - name: Events + in: query + description: Specifies the list of device events for the hub to process. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/DeviceEvent' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitDeviceEventsLimitedResponse' + security: + - Bearer: [ ] + post: + tags: + - deviceEvents + summary: Adds a list of device change events to the system. The response can indicate a rate-limiting back off time. + description: Adds a list of device change events to the system. The response can indicate a rate-limiting back off time. + operationId: SubmitDeviceEventsLimitedlimitedAdd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SubmitDeviceEventsLimited' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitDeviceEventsLimitedResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /status/ready: + get: + tags: + - status + summary: Gets whether system is booted and ready for login. + description: Gets whether system is booted and ready for login. + operationId: SystemReadyready_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Indicates if system is booted and ready for login. + content: + application/json: + schema: + $ref: '#/components/schemas/SystemReadyResponse' + post: + tags: + - status + summary: Gets whether system is booted and ready for login. + description: Gets whether system is booted and ready for login. + operationId: SystemReadyready_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SystemReady' + x-bodyName: body + responses: + '200': + description: Indicates if system is booted and ready for login. + content: + application/json: + schema: + $ref: '#/components/schemas/SystemReadyResponse' + parameters: + - $ref: '#/components/parameters/Accept' + /status/system: + get: + tags: + - status + summary: Gets system version and config settings once logged in. + description: Gets system version and config settings once logged in. + operationId: SystemDetailssystem_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: System version and config settings. + content: + application/json: + schema: + $ref: '#/components/schemas/SystemDetailsResponse' + security: + - Bearer: [ ] + post: + tags: + - status + summary: Gets system version and config settings once logged in. + description: Gets system version and config settings once logged in. + operationId: SystemDetailssystem_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SystemDetails' + x-bodyName: body + responses: + '200': + description: System version and config settings. + content: + application/json: + schema: + $ref: '#/components/schemas/SystemDetailsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /status/backgroundtasks: + get: + tags: + - status + summary: 'Retrieves a list of background, potentially long-running, tasks the hub has performed and their associated status.' + description: 'Retrieves a list of background, potentially long-running, tasks the hub has performed and their associated status.' + operationId: GetBackgroundTaskStatusesbackgroundtasks_Get + parameters: + - name: UserName + in: query + description: 'Specifies a specific user name to retrieve tasks for (Optional, but only Admin users can retrieve tasks for other users or internal system tasks).' + schema: + type: string + - name: StartDateTimeUtc + in: query + description: Specifies the start time (in UTC) for a task to be retrieved (Optional). + schema: + type: string + format: date-time + - name: EndDateTimeUtc + in: query + description: Specifies the end time (in UTC) for a task to be retrieved (Optional). + schema: + type: string + format: date-time + - name: Statuses + in: query + description: Specifies the status of tasks to be retrieved (Optional). + style: form + schema: + type: array + items: + type: string + x-nullable: false + - name: TaskIds + in: query + description: Specifies a list of specific task ids to retrieved (Optional). + style: form + schema: + type: array + items: + type: string + - name: TaskTypes + in: query + description: Specifies a list of specific task types to be retrieved (Optional). + style: form + schema: + type: array + items: + type: string + - name: IncludeDependentTasks + in: query + description: Specifies whether to return the tasks that each task depends on in its DependentTasks property (Optional). + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/BackgroundTaskDetails' + security: + - Bearer: [ ] + post: + tags: + - status + summary: 'Retrieves a list of background, potentially long-running, tasks the hub has performed and their associated status.' + description: 'Retrieves a list of background, potentially long-running, tasks the hub has performed and their associated status.' + operationId: GetBackgroundTaskStatusesbackgroundtasks_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetBackgroundTaskStatuses' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/BackgroundTaskDetails' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /status/eventsOnIncomingQueue: + get: + tags: + - status + summary: Gets the number of events currently in the processing queue. + description: Gets the number of events currently in the processing queue. + operationId: EventsOnIncomingQueueeventsOnIncomingQueue_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: integer + format: int32 + security: + - Bearer: [ ] + post: + tags: + - status + summary: Gets the number of events currently in the processing queue. + description: Gets the number of events currently in the processing queue. + operationId: EventsOnIncomingQueueeventsOnIncomingQueue_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/EventsOnIncomingQueue' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: integer + format: int32 + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /status/messageStatus: + get: + tags: + - status + summary: 'Returns the number of internal event notification messages received, processed or failed.' + description: 'Returns the number of internal event notification messages received, processed or failed.' + operationId: EventMessageStatusmessageStatus_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Dictionary' + content: + application/json: + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + security: + - Bearer: [ ] + post: + tags: + - status + summary: 'Returns the number of internal event notification messages received, processed or failed.' + description: 'Returns the number of internal event notification messages received, processed or failed.' + operationId: EventMessageStatusmessageStatus_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/EventMessageStatus' + x-bodyName: body + responses: + '200': + description: 'Dictionary' + content: + application/json: + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /status/pipeline: + get: + tags: + - status + summary: 'Gets the pipeline status, returning a dictionary of pipeline components and their current status.' + description: 'Gets the pipeline status, returning a dictionary of pipeline components and their current status.' + operationId: GetPipelineStatuspipeline_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Dictionary' + content: + application/json: + schema: + title: 'Dictionary' + type: object + additionalProperties: + enum: + - Unknown + - Starting + - Up + - Stopping + - Down + - Busy + - Fault + - RequiresUpgrade + type: string + description: 'Dictionary' + security: + - Bearer: [ ] + post: + tags: + - status + summary: 'Gets the pipeline status, returning a dictionary of pipeline components and their current status.' + description: 'Gets the pipeline status, returning a dictionary of pipeline components and their current status.' + operationId: GetPipelineStatuspipeline_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetPipelineStatus' + x-bodyName: body + responses: + '200': + description: 'Dictionary' + content: + application/json: + schema: + title: 'Dictionary' + type: object + additionalProperties: + enum: + - Unknown + - Starting + - Up + - Stopping + - Down + - Busy + - Fault + - RequiresUpgrade + type: string + description: 'Dictionary' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /status/pipelineMetrics: + get: + tags: + - status + summary: Gets system performance metrics. + description: Gets system performance metrics. + operationId: GetPipelineMetricspipelineMetrics_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/PerformanceSnapshot' + security: + - Bearer: [ ] + post: + tags: + - status + summary: Gets system performance metrics. + description: Gets system performance metrics. + operationId: GetPipelineMetricspipelineMetrics_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetPipelineMetrics' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/PerformanceSnapshot' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /status/workload: + get: + tags: + - status + summary: Returns the pipeline workload. + description: Returns the pipeline workload. + operationId: GetWorkloadStatsworkload_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Dictionary' + content: + application/json: + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: number + format: double + x-nullable: false + description: 'Dictionary' + security: + - Bearer: [ ] + post: + tags: + - status + summary: Returns the pipeline workload. + description: Returns the pipeline workload. + operationId: GetWorkloadStatsworkload_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetWorkloadStats' + x-bodyName: body + responses: + '200': + description: 'Dictionary' + content: + application/json: + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: number + format: double + x-nullable: false + description: 'Dictionary' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /status/cache: + get: + tags: + - status + summary: Returns the cache statistics. + description: Returns the cache statistics. + operationId: GetCacheStatscache_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The cache statistics. + content: + application/json: + schema: + $ref: '#/components/schemas/GetCacheStatsResponse' + security: + - Bearer: [ ] + post: + tags: + - status + summary: Returns the cache statistics. + description: Returns the cache statistics. + operationId: GetCacheStatscache_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetCacheStats' + x-bodyName: body + responses: + '200': + description: The cache statistics. + content: + application/json: + schema: + $ref: '#/components/schemas/GetCacheStatsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /openapi3.yaml: + get: + tags: + - openapi3.yaml + operationId: GetOpenApi3Yaml_Get + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + parameters: + - $ref: '#/components/parameters/Accept' + /reports/availableTypes: + get: + tags: + - reports + summary: Report Service + description: Report Service + operationId: GetAvailableReportTypesavailableTypes_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetAvailableReportTypesResponse' + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Report Service + description: Report Service + operationId: GetAvailableReportTypesavailableTypes_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAvailableReportTypes' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetAvailableReportTypesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/template: + get: + tags: + - reports + summary: Report Service + description: Report Service + operationId: GetReportTemplatetemplate_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: String + type: string + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Report Service + description: Report Service + operationId: GetReportTemplatetemplate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetReportTemplate' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: String + type: string + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/templates: + get: + tags: + - reports + summary: Report Service + description: Report Service + operationId: GetReportTemplatestemplates_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetReportTemplatesResponse' + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Report Service + description: Report Service + operationId: GetReportTemplatestemplates_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetReportTemplates' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetReportTemplatesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/scheduled: + get: + tags: + - reports + summary: Report Service + description: Report Service + operationId: GetScheduledReportsscheduled_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'The response to requests to add, query or update scheduled reports, listing the new states of the reports affected' + content: + application/json: + schema: + $ref: '#/components/schemas/GetScheduledReportsResponse' + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Report Service + description: Report Service + operationId: GetScheduledReportsscheduled_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetScheduledReports' + x-bodyName: body + responses: + '200': + description: 'The response to requests to add, query or update scheduled reports, listing the new states of the reports affected' + content: + application/json: + schema: + $ref: '#/components/schemas/GetScheduledReportsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/updatetemplate: + get: + tags: + - reports + summary: Report Service + description: Report Service + operationId: UpdateReportTemplateupdatetemplate_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateReportTemplateResponse' + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Report Service + description: Report Service + operationId: UpdateReportTemplateupdatetemplate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateReportTemplate' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateReportTemplateResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/uploadreporttemplate: + post: + tags: + - reports + summary: Report Service + description: Report Service + operationId: UploadReportTemplateuploadreporttemplate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UploadReportTemplate' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/deletecustomreporttemplate: + get: + tags: + - reports + summary: Deletes a report layout template of the specified type and name + description: Deletes a report layout template of the specified type and name + operationId: DeleteCustomReportTemplatedeletecustomreporttemplate_Get + parameters: + - name: ReportTemplateType + in: query + description: Gets or sets the ReportTemplateType of the report template to delete. + required: true + schema: + enum: + - None + - ErrorReport + - AggregateReportTemplate + - EventsReport + - PlannedChangeReport + - TrackingTemplateReport + - ExecutiveSummaryReport + - ComplianceReport + - DeviceReport + - ScheduledItemsReport + - VulnerabilitySummaryReport + type: string + x-nullable: false + - name: TemplateName + in: query + description: Gets or sets the name of the report template to delete. + required: true + schema: + type: string + - name: TemplateVersion + in: query + description: Gets or sets the version of the report template to delete. + required: true + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Deletes a report layout template of the specified type and name + description: Deletes a report layout template of the specified type and name + operationId: DeleteCustomReportTemplatedeletecustomreporttemplate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteCustomReportTemplate' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/devicemonitoring: + get: + tags: + - reports + summary: A request to gets the data for a device monitoring report + description: A request to gets the data for a device monitoring report + operationId: DataSpecDeviceMonitoringReportdevicemonitoring_Get + parameters: + - name: DateRange + in: query + description: Provides information about how to calculate the start and end dates when performing the query + required: true + schema: + $ref: '#/components/schemas/ReportDateRange' + - name: OnlineStatuses + in: query + description: Gets or sets the online statuses of the devices to return. Optional. + style: form + schema: + type: array + items: + type: string + x-nullable: false + - name: DeviceFilter + in: query + description: 'Gets or sets the device selection, null implies all devices.' + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: Id + in: query + description: Specifies the Id of the data query specification + schema: + type: string + - name: Type + in: query + description: The Type name of the data query specification + schema: + type: string + - name: IteratorValues + in: query + description: 'Used to specify the list of items to report on, for data query specifications that support this. If this is not supplied, SelectionQuery can be used to specify a query to be performed to find the list of ids to report on' + style: form + schema: + type: array + items: + type: string + - name: SelectionQuery + in: query + description: 'The SelectionQuery is an alternative to supplying a list of values to report on in IteratorValues. It can be used to represent a query such as ''find Planned Change Instances where the name starts with XYZ'', returning a set of Planned Change Instance ids to report on.' + schema: + $ref: '#/components/schemas/SelectionQuery' + - name: Groups + in: query + description: Specifies the Groups (and implicitly and child groups) to be reported on in the report. + style: form + schema: + type: array + items: + type: string + - name: ItemName + in: query + description: 'Specifies the descriptive name of the result item, for example ''report'', ''planned change'', ''event'' etc.' + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The returned data for populating a device monitoring report + content: + application/json: + schema: + $ref: '#/components/schemas/DataSpecDeviceMonitoringReportResponse' + security: + - Bearer: [ ] + post: + tags: + - reports + summary: A request to gets the data for a device monitoring report + description: A request to gets the data for a device monitoring report + operationId: DataSpecDeviceMonitoringReportdevicemonitoring_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DataSpecDeviceMonitoringReport' + x-bodyName: body + responses: + '200': + description: The returned data for populating a device monitoring report + content: + application/json: + schema: + $ref: '#/components/schemas/DataSpecDeviceMonitoringReportResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/ruleresults: + get: + tags: + - reports + operationId: GetRuleResultsruleresults_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetRuleResultsResponse' + security: + - Bearer: [ ] + post: + tags: + - reports + operationId: GetRuleResultsruleresults_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetRuleResults' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetRuleResultsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /stats/compliancesummarydata: + get: + tags: + - stats + operationId: GetComplianceReportSummaryDatacompliancesummarydata_Get + parameters: + - name: ReportItemId + in: query + description: Specifies the scheduled report item id. + required: true + schema: + type: string + - name: ReportInstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ComplianceReportSummaryResponse' + security: + - Bearer: [ ] + post: + tags: + - stats + operationId: GetComplianceReportSummaryDatacompliancesummarydata_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetComplianceReportSummaryData' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ComplianceReportSummaryResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /stats/plannedChanges: + get: + tags: + - stats + summary: Stats Service + description: Stats Service + operationId: GetCurrentPlannedChangesplannedChanges_Get + parameters: + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetCurrentPlannedChangesResponse' + security: + - Bearer: [ ] + post: + tags: + - stats + summary: Stats Service + description: Stats Service + operationId: GetCurrentPlannedChangesplannedChanges_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetCurrentPlannedChanges' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetCurrentPlannedChangesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /stats/compliancedata: + get: + tags: + - stats + summary: 'Get report summaries by report, for either individual devices, or as group average.' + description: 'Get report summaries by report, for either individual devices, or as group average.' + operationId: GetComplianceDatacompliancedata_Get + parameters: + - name: ReportItemId + in: query + description: Specifies the scheduled report item id. + required: true + schema: + type: string + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Compliance data by report, for either individual devices, or as group average.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetComplianceDataResponse' + security: + - Bearer: [ ] + post: + tags: + - stats + summary: 'Get report summaries by report, for either individual devices, or as group average.' + description: 'Get report summaries by report, for either individual devices, or as group average.' + operationId: GetComplianceDatacompliancedata_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetComplianceData' + x-bodyName: body + responses: + '200': + description: 'Compliance data by report, for either individual devices, or as group average.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetComplianceDataResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /stats/getavailablecompliancedata: + get: + tags: + - stats + summary: Get a list of groups or devices that have report data available for them + description: Get a list of groups or devices that have report data available for them + operationId: GetAvailableComplianceDatagetavailablecompliancedata_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetAvailableComplianceDataResponse' + security: + - Bearer: [ ] + post: + tags: + - stats + summary: Get a list of groups or devices that have report data available for them + description: Get a list of groups or devices that have report data available for them + operationId: GetAvailableComplianceDatagetavailablecompliancedata_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAvailableComplianceData' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetAvailableComplianceDataResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /stats/deviceActivity: + get: + tags: + - stats + summary: Gets a list of inactive devices matching the filter. + description: Gets a list of inactive devices matching the filter. + operationId: GetDeviceActivitydeviceActivity_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Represents the list of devices matching the request criteria that have been inactive in the specified period. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceActivityResponse' + security: + - Bearer: [ ] + post: + tags: + - stats + summary: Gets a list of inactive devices matching the filter. + description: Gets a list of inactive devices matching the filter. + operationId: GetDeviceActivitydeviceActivity_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetDeviceActivity' + x-bodyName: body + responses: + '200': + description: Represents the list of devices matching the request criteria that have been inactive in the specified period. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceActivityResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /stats/events: + get: + tags: + - stats + summary: 'Gets a summary of event counts for the devices or groups specified by the DeviceFilter, for the specified time period.' + description: 'Gets a summary of event counts for the devices or groups specified by the DeviceFilter, for the specified time period.' + operationId: GetEventCountsevents_Get + parameters: + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Represents a summary of event counts for the devices or groups specified by the DeviceFilter, for the specified time period.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventCountsResponse' + security: + - Bearer: [ ] + post: + tags: + - stats + summary: 'Gets a summary of event counts for the devices or groups specified by the DeviceFilter, for the specified time period.' + description: 'Gets a summary of event counts for the devices or groups specified by the DeviceFilter, for the specified time period.' + operationId: GetEventCountsevents_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetEventCounts' + x-bodyName: body + responses: + '200': + description: 'Represents a summary of event counts for the devices or groups specified by the DeviceFilter, for the specified time period.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventCountsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /stats/noisydevices: + get: + tags: + - stats + summary: 'Gets a summary of event counts for top N noisiest devices in the specified group, for the specified time period.' + description: 'Gets a summary of event counts for top N noisiest devices in the specified group, for the specified time period.' + operationId: GetNoisyDevicesnoisydevices_Get + parameters: + - name: TopN + in: query + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/GetEventCountsResponse' + security: + - Bearer: [ ] + post: + tags: + - stats + summary: 'Gets a summary of event counts for top N noisiest devices in the specified group, for the specified time period.' + description: 'Gets a summary of event counts for top N noisiest devices in the specified group, for the specified time period.' + operationId: GetNoisyDevicesnoisydevices_Post + parameters: + - name: TopN + in: query + schema: + type: integer + format: int32 + x-nullable: false + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetNoisyDevices' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/GetEventCountsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reportExecute: + get: + tags: + - reportExecute + summary: Report Service + description: Report Service + operationId: ExecuteReport_Get + parameters: + - name: ReportItemId + in: query + description: Specifies the scheduled report item id. + required: true + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ExecuteReportResponse' + security: + - Bearer: [ ] + post: + tags: + - reportExecute + summary: Report Service + description: Report Service + operationId: ExecuteReport_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ExecuteReport' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ExecuteReportResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reportRenderIsCached: + get: + tags: + - reportRenderIsCached + summary: Report Service + description: Report Service + operationId: RenderReportIsCached_Get + parameters: + - name: ReportItemId + in: query + description: Specifies the scheduled report item id. + schema: + type: string + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + schema: + type: string + - name: RuleSetResultEventId + in: query + description: 'For compliance reports only, if the InstanceId and ReportItemId are not available, the id of a previously stored RuleSetResultEvent can be supplied in this parameter.' + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: boolean + security: + - Bearer: [ ] + post: + tags: + - reportRenderIsCached + summary: Report Service + description: Report Service + operationId: RenderReportIsCached_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/RenderReportIsCached' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: boolean + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reportRender: + get: + tags: + - reportRender + summary: Report Service + description: Report Service + operationId: RenderReport_Get + parameters: + - name: ReportItemId + in: query + description: Specifies the scheduled report item id. + required: true + schema: + type: string + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: RuleSetResultEventId + in: query + description: 'For compliance reports only, if the InstanceId and ReportItemId are not available, the id of a previously stored RuleSetResultEvent can be supplied in this parameter.' + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: String + type: string + security: + - Bearer: [ ] + post: + tags: + - reportRender + summary: Report Service + description: Report Service + operationId: RenderReport_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/RenderReport' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: String + type: string + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reportRenderStart: + get: + tags: + - reportRenderStart + summary: Report Service + description: Report Service + operationId: RenderReportStart_Get + parameters: + - name: ReportItemId + in: query + description: Specifies the scheduled report item id. + required: true + schema: + type: string + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: RuleSetResultEventId + in: query + description: 'For compliance reports only, if the InstanceId and ReportItemId are not available, the id of a previously stored RuleSetResultEvent can be supplied in this parameter.' + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: String + type: string + security: + - Bearer: [ ] + post: + tags: + - reportRenderStart + summary: Report Service + description: Report Service + operationId: RenderReportStart_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/RenderReportStart' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: String + type: string + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/scheduled/instances/rendered/download: + get: + tags: + - reports + summary: Gets a previously generated report output file + description: Gets a previously generated report output file + operationId: GetScheduledInstanceOutputscheduledinstancesrendereddownload_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: String + type: string + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Gets a previously generated report output file + description: Gets a previously generated report output file + operationId: GetScheduledInstanceOutputscheduledinstancesrendereddownload_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetScheduledInstanceOutput' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: String + type: string + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/scheduled/instances/rendered/delete: + get: + tags: + - reports + summary: Deletes previously generated report output files + description: Deletes previously generated report output files + operationId: DeleteScheduledInstanceOutputsscheduledinstancesrendereddelete_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Deletes previously generated report output files + description: Deletes previously generated report output files + operationId: DeleteScheduledInstanceOutputsscheduledinstancesrendereddelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteScheduledInstanceOutputs' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/scheduled/instances/delete: + get: + tags: + - reports + summary: Report Service + description: Report Service + operationId: DeleteScheduledInstancescheduledinstancesdelete_Get + parameters: + - name: ReportItemId + in: query + description: Specifies the scheduled report item id. + required: true + schema: + type: string + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Report Service + description: Report Service + operationId: DeleteScheduledInstancescheduledinstancesdelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteScheduledInstance' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/scheduled/instance/updateLifetime: + get: + tags: + - reports + summary: Report Service + description: Report Service + operationId: UpdateScheduledInstanceLifetimescheduledinstanceupdateLifetime_Get + parameters: + - name: ReportItemId + in: query + description: Specifies the scheduled report item id. + required: true + schema: + type: string + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetScheduledInstancesResponse' + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Report Service + description: Report Service + operationId: UpdateScheduledInstanceLifetimescheduledinstanceupdateLifetime_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateScheduledInstanceLifetime' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetScheduledInstancesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/scheduled/instances/rendered: + get: + tags: + - reports + summary: Report Service + description: Report Service + operationId: GetScheduledInstanceRenderedscheduledinstancesrendered_Get + parameters: + - name: ReportItemId + in: query + description: Specifies the scheduled report item id. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetScheduledInstanceRenderedResponse' + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Report Service + description: Report Service + operationId: GetScheduledInstanceRenderedscheduledinstancesrendered_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetScheduledInstanceRendered' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetScheduledInstanceRenderedResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/scheduled/add: + get: + tags: + - reports + summary: Adds a new schedulable report of the type specified by the Id parameter + description: Adds a new schedulable report of the type specified by the Id parameter + operationId: AddScheduledReportscheduledadd_Get + parameters: + - name: Id + in: query + description: 'The id of the type of report to add, from the list supplied by GetAvailableReportTypes' + required: true + schema: + type: string + - name: IsPublic + in: query + description: Indicates whether the report/query can be seen by everyone + schema: + type: boolean + x-nullable: false + - name: IsEditable + in: query + description: 'Indicates whether the report/query can be edited/deleted by everyone. Note, if this is true, IsPublic must also be true' + schema: + type: boolean + x-nullable: false + - name: IsHidden + in: query + description: Indicates whether the report/query is visible in the reports list. Used to create temporary items for interactive 'export to csv' functions. + schema: + type: boolean + x-nullable: false + - name: AsCopyOf + in: query + description: Specifies as a copy of an existing the report/query with this Id + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'The response to requests to add, query or update scheduled reports, listing the new states of the reports affected' + content: + application/json: + schema: + $ref: '#/components/schemas/GetScheduledReportsResponse' + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Adds a new schedulable report of the type specified by the Id parameter + description: Adds a new schedulable report of the type specified by the Id parameter + operationId: AddScheduledReportscheduledadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddScheduledReport' + x-bodyName: body + responses: + '200': + description: 'The response to requests to add, query or update scheduled reports, listing the new states of the reports affected' + content: + application/json: + schema: + $ref: '#/components/schemas/GetScheduledReportsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/scheduled/update: + get: + tags: + - reports + summary: Report Service + description: Report Service + operationId: UpdateScheduledReportscheduledupdate_Get + parameters: + - name: ShowTableOfContents + in: query + description: Specifies the updated setting for when a table of content page is shown. + schema: + enum: + - None + - Always + - Auto + type: string + x-nullable: false + - name: ContainerReport + in: query + description: Specifies the updated definition of the container report. + schema: + $ref: '#/components/schemas/ReportSpecification' + - name: Reports + in: query + description: Specifies the updated definition of the sub reports. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/ReportSpecification' + - name: KeepUnscheduledResultsForMinutes + in: query + description: 'Specifies how long to keep ''adhoc'' (ie non-scheduled) report results for, in minutes.' + schema: + type: integer + format: int32 + x-nullable: false + - name: KeepScheduledResultsForMinutes + in: query + description: 'Specifies how long to keep scheduled report results for, in minutes.' + schema: + type: integer + format: int32 + x-nullable: false + - name: WaitForAdhocResultsMinutes + in: query + description: 'Specifies long to wait for a run''s queries to complete, in minutes.' + schema: + type: integer + format: int32 + x-nullable: false + - name: OverrideWaitForResults + in: query + description: Specifies whether to override the default behaviour for scheduled queries of waiting until the next scheduled run and use the value specified by WaitForAdhocResultsMinutes instead. + schema: + type: boolean + x-nullable: false + - name: Schedule + in: query + description: Specifies the updated schedule on which the report is run. + schema: + $ref: '#/components/schemas/ReportSchedule' + - name: EmailDelivery + in: query + description: Specifies the updated email delivery settings. + schema: + $ref: '#/components/schemas/ReportEmailDelivery' + - name: IsPublic + in: query + description: Specifies whether the report/query can be seen by everyone. + schema: + type: boolean + x-nullable: false + - name: IsEditable + in: query + description: Specifies whether the report/query can be edited by everyone. + schema: + type: boolean + x-nullable: false + - name: IsHidden + in: query + description: Specifies whether the report/query can be seen in the UI. + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'The response to requests to add, query or update scheduled reports, listing the new states of the reports affected' + content: + application/json: + schema: + $ref: '#/components/schemas/GetScheduledReportsResponse' + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Report Service + description: Report Service + operationId: UpdateScheduledReportscheduledupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateScheduledReport' + x-bodyName: body + responses: + '200': + description: 'The response to requests to add, query or update scheduled reports, listing the new states of the reports affected' + content: + application/json: + schema: + $ref: '#/components/schemas/GetScheduledReportsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/scheduled/delete: + get: + tags: + - reports + summary: Report Service + description: Report Service + operationId: DeleteScheduledReportsscheduleddelete_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: boolean + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Report Service + description: Report Service + operationId: DeleteScheduledReportsscheduleddelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteScheduledReports' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: boolean + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reports/scheduled/instances: + get: + tags: + - reports + summary: Report Service + description: Report Service + operationId: GetScheduledInstancesscheduledinstances_Get + parameters: + - name: SummaryOnly + in: query + description: Returns only summary information for use in reporting UI page + schema: + type: boolean + x-nullable: false + - name: ReportItemId + in: query + description: Specifies the scheduled report item id. + required: true + schema: + type: string + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetScheduledInstancesResponse' + security: + - Bearer: [ ] + post: + tags: + - reports + summary: Report Service + description: Report Service + operationId: GetScheduledInstancesscheduledinstances_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetScheduledInstances' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetScheduledInstancesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /uploadAgentUpdate: + get: + tags: + - uploadAgentUpdate + summary: Upload an Agent Update + description: Upload an Agent Update + operationId: UploadAgentUpdate_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - uploadAgentUpdate + summary: Upload an Agent Update + description: Upload an Agent Update + operationId: UploadAgentUpdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UploadAgentUpdate' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /updatehubdetails: + get: + tags: + - updatehubdetails + summary: Update the HUbDetails.xml file for the specified agents / groups + description: Update the HUbDetails.xml file for the specified agents / groups + operationId: UpdateHubDetails_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - updatehubdetails + summary: Update the HUbDetails.xml file for the specified agents / groups + description: Update the HUbDetails.xml file for the specified agents / groups + operationId: UpdateHubDetails_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateHubDetails' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/downloadAgentUpdate/{VersionRequested}': + get: + tags: + - downloadAgentUpdate + summary: Download an update package for the agent. + description: Download an update package for the agent. + operationId: DownloadUpdateVersionRequested_Get + parameters: + - name: VersionRequested + in: query + description: 'Used when requesting an update file from the hub, specifies the specific version required.' + schema: + type: string + - name: UpdateType + in: query + description: 'Specifies the update type to download (e,g RPM, DEB etc).' + schema: + enum: + - Unknown + - MultiPlatform + - Windows + - WindowsNetCore + - LinuxRPM + - LinuxRPMNetCore + - UbuntuDEB + - UbuntuDEBNetCore + - MacOSXPKG + - MacOSXPKGNetCore + - AIXRPM + - SolarisPKG + - WindowsNetCoreArm + - LinuxRPMNetCoreArm + - UbuntuDEBNetCoreArm + - MacOSXPKGNetCoreArm + type: string + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + post: + tags: + - downloadAgentUpdate + summary: Download an update package for the agent. + description: Download an update package for the agent. + operationId: DownloadUpdateVersionRequested_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DownloadUpdate' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/downloadAgentUpdate/{VersionRequested}/{UpdateType}': + get: + tags: + - downloadAgentUpdate + summary: Download an update package for the agent. + description: Download an update package for the agent. + operationId: DownloadUpdateVersionRequestedUpdateType_Get + parameters: + - name: VersionRequested + in: query + description: 'Used when requesting an update file from the hub, specifies the specific version required.' + schema: + type: string + - name: UpdateType + in: query + description: 'Specifies the update type to download (e,g RPM, DEB etc).' + schema: + enum: + - Unknown + - MultiPlatform + - Windows + - WindowsNetCore + - LinuxRPM + - LinuxRPMNetCore + - UbuntuDEB + - UbuntuDEBNetCore + - MacOSXPKG + - MacOSXPKGNetCore + - AIXRPM + - SolarisPKG + - WindowsNetCoreArm + - LinuxRPMNetCoreArm + - UbuntuDEBNetCoreArm + - MacOSXPKGNetCoreArm + type: string + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + post: + tags: + - downloadAgentUpdate + summary: Download an update package for the agent. + description: Download an update package for the agent. + operationId: DownloadUpdateVersionRequestedUpdateType_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DownloadUpdate' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agentUpdates/delete: + get: + tags: + - agentUpdates + summary: Deletes the specified Agent update. + description: Deletes the specified Agent update. + operationId: DeleteAgentUpdatedelete_Get + parameters: + - name: Id + in: query + description: Specifies the agent update ID to delete. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - agentUpdates + summary: Deletes the specified Agent update. + description: Deletes the specified Agent update. + operationId: DeleteAgentUpdatedelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteAgentUpdate' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agentUpdates: + get: + tags: + - agentUpdates + summary: 'Gets a list of Agent updates, by version or specific ID.' + description: 'Gets a list of Agent updates, by version or specific ID.' + operationId: GetAgentUpdates_Get + parameters: + - name: VersionRequested + in: query + description: Specifies the (optional) version to get details for. + schema: + type: string + - name: Id + in: query + description: Specifies the specific agent update ID to get. + schema: + type: string + - name: UpdateType + in: query + description: 'Gets or sets the update type (deb, rpm etc)' + schema: + enum: + - Unknown + - MultiPlatform + - Windows + - WindowsNetCore + - LinuxRPM + - LinuxRPMNetCore + - UbuntuDEB + - UbuntuDEBNetCore + - MacOSXPKG + - MacOSXPKGNetCore + - AIXRPM + - SolarisPKG + - WindowsNetCoreArm + - LinuxRPMNetCoreArm + - UbuntuDEBNetCoreArm + - MacOSXPKGNetCoreArm + type: string + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/AgentSoftwareUpdate' + security: + - Bearer: [ ] + post: + tags: + - agentUpdates + summary: 'Gets a list of Agent updates, by version or specific ID.' + description: 'Gets a list of Agent updates, by version or specific ID.' + operationId: GetAgentUpdates_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentUpdates' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/AgentSoftwareUpdate' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agentSoftwareUpdateSchedules: + get: + tags: + - agentSoftwareUpdateSchedules + summary: Gets the agent software update schedule for a group. + description: Gets the agent software update schedule for a group. + operationId: GetAgentSoftwareUpdateScheduleForGroup_Get + parameters: + - name: GroupName + in: query + description: Specifies the group name to remove the schedule for. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/GroupAgentUpdateSchedule' + security: + - Bearer: [ ] + post: + tags: + - agentSoftwareUpdateSchedules + summary: Gets the agent software update schedule for a group. + description: Gets the agent software update schedule for a group. + operationId: GetAgentSoftwareUpdateScheduleForGroup_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentSoftwareUpdateScheduleForGroup' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/GroupAgentUpdateSchedule' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agentSoftwareUpdateSchedules/delete: + get: + tags: + - agentSoftwareUpdateSchedules + summary: Remove (delete) the agent software update schedule for a group. + description: Remove (delete) the agent software update schedule for a group. + operationId: DeleteAgentSoftwareUpdateScheduleFromGroupdelete_Get + parameters: + - name: GroupName + in: query + description: Specifies the group name to remove the schedule for. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - agentSoftwareUpdateSchedules + summary: Remove (delete) the agent software update schedule for a group. + description: Remove (delete) the agent software update schedule for a group. + operationId: DeleteAgentSoftwareUpdateScheduleFromGroupdelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteAgentSoftwareUpdateScheduleFromGroup' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agentSoftwareUpdateSchedules/update: + get: + tags: + - agentSoftwareUpdateSchedules + summary: Update the agent software update schedule for a group. + description: Update the agent software update schedule for a group. + operationId: UpdateAgentSoftwareUpdateScheduleForGroupupdate_Get + parameters: + - name: GroupName + in: query + description: Gets or sets the group name that the update scheduled applies to. + schema: + type: string + - name: AgentUpdateSchedule + in: query + description: Specifies the update schedule that is being requested for the group. + schema: + $ref: '#/components/schemas/GroupAgentUpdateSchedule' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - agentSoftwareUpdateSchedules + summary: Update the agent software update schedule for a group. + description: Update the agent software update schedule for a group. + operationId: UpdateAgentSoftwareUpdateScheduleForGroupupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateAgentSoftwareUpdateScheduleForGroup' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agentSoftwareUpdateSchedules/add: + get: + tags: + - agentSoftwareUpdateSchedules + summary: Add (set) an agent update schedule for a specific group. Only one schedule is permitted per group at the current time. + description: Add (set) an agent update schedule for a specific group. Only one schedule is permitted per group at the current time. + operationId: SetAgentSoftwareUpdateScheduleForGroupadd_Get + parameters: + - name: GroupName + in: query + description: Specifies the group name to associate this schedule with. + schema: + type: string + - name: AgentUpdateSchedule + in: query + description: Defines the schedule + schema: + $ref: '#/components/schemas/GroupAgentUpdateSchedule' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/GroupAgentUpdateSchedule' + security: + - Bearer: [ ] + post: + tags: + - agentSoftwareUpdateSchedules + summary: Add (set) an agent update schedule for a specific group. Only one schedule is permitted per group at the current time. + description: Add (set) an agent update schedule for a specific group. Only one schedule is permitted per group at the current time. + operationId: SetAgentSoftwareUpdateScheduleForGroupadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SetAgentSoftwareUpdateScheduleForGroup' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/GroupAgentUpdateSchedule' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /syncServiceConfigItems: + get: + tags: + - syncServiceConfigItems + summary: Retrieves a list of SyncService configuration items. + description: Retrieves a list of SyncService configuration items. + operationId: GetSyncServiceConfigItems_Get + parameters: + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Response for retrieving SyncService configuration items + content: + application/json: + schema: + $ref: '#/components/schemas/GetSyncServiceConfigItemsResponse' + security: + - Bearer: [ ] + post: + tags: + - syncServiceConfigItems + summary: Retrieves a list of SyncService configuration items. + description: Retrieves a list of SyncService configuration items. + operationId: GetSyncServiceConfigItems_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetSyncServiceConfigItems' + x-bodyName: body + responses: + '200': + description: Response for retrieving SyncService configuration items + content: + application/json: + schema: + $ref: '#/components/schemas/GetSyncServiceConfigItemsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /syncServiceConfigItems/add: + post: + tags: + - syncServiceConfigItems + summary: Adds a new SyncService configuration item. + description: Adds a new SyncService configuration item. + operationId: AddSyncServiceConfigItemadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddSyncServiceConfigItem' + x-bodyName: body + responses: + '200': + description: Response for adding a SyncService configuration item + content: + application/json: + schema: + $ref: '#/components/schemas/AddSyncServiceConfigItemResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /syncServiceConfigItems/update: + post: + tags: + - syncServiceConfigItems + summary: Updates an existing SyncService configuration item. + description: Updates an existing SyncService configuration item. + operationId: UpdateSyncServiceConfigItemupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateSyncServiceConfigItem' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /syncServiceConfigItems/delete: + post: + tags: + - syncServiceConfigItems + summary: Deletes a SyncService configuration item. + description: Deletes a SyncService configuration item. + operationId: DeleteSyncServiceConfigItemdelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteSyncServiceConfigItem' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /configItems: + get: + tags: + - configItems + summary: Retrieves a list of hub configuration parameters. + description: Retrieves a list of hub configuration parameters. + operationId: GetConfigItems_Get + parameters: + - name: Id + in: query + description: Specifies a specific configuration item to retrieve (Optional). + schema: + type: string + - name: Key + in: query + description: Specifies a specific configuration parameter 'Key' to retrieved (Optional). + schema: + type: string + - name: KeyList + in: query + description: Specifies a list of specific configuration parameter 'Keys' to retrieved (Optional). + style: form + schema: + type: array + items: + type: string + - name: IncludeHidden + in: query + description: 'Include hidden, ''system'', parameters.' + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Describes the hub configuration parameters. + content: + application/json: + schema: + $ref: '#/components/schemas/GetConfigItemsResponse' + security: + - Bearer: [ ] + post: + tags: + - configItems + summary: Retrieves a list of hub configuration parameters. + description: Retrieves a list of hub configuration parameters. + operationId: GetConfigItems_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetConfigItems' + x-bodyName: body + responses: + '200': + description: Describes the hub configuration parameters. + content: + application/json: + schema: + $ref: '#/components/schemas/GetConfigItemsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /configItems/add: + get: + tags: + - configItems + summary: Add a list of hub configuration parameters. + description: Add a list of hub configuration parameters. + operationId: AddConfigItemsadd_Get + parameters: + - name: ConfigItems + in: query + description: A list of config items to add in bulk + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Dictionary' + content: + application/json: + schema: + title: 'Dictionary' + type: object + additionalProperties: + $ref: '#/components/schemas/NewId' + description: 'Dictionary' + security: + - Bearer: [ ] + post: + tags: + - configItems + summary: Add a list of hub configuration parameters. + description: Add a list of hub configuration parameters. + operationId: AddConfigItemsadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddConfigItems' + x-bodyName: body + responses: + '200': + description: 'Dictionary' + content: + application/json: + schema: + title: 'Dictionary' + type: object + additionalProperties: + $ref: '#/components/schemas/NewId' + description: 'Dictionary' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /configItems/update: + get: + tags: + - configItems + summary: Update a a list of hub configuration parameters. + description: Update a a list of hub configuration parameters. + operationId: UpdateConfigItemsupdate_Get + parameters: + - name: ConfigItems + in: query + description: A list of config items to update. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/UpdateConfigItem' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - configItems + summary: Update a a list of hub configuration parameters. + description: Update a a list of hub configuration parameters. + operationId: UpdateConfigItemsupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateConfigItems' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /configItems/delete: + get: + tags: + - configItems + summary: Remove a hub configuration parameter by either ID or Key. + description: Remove a hub configuration parameter by either ID or Key. + operationId: DeleteConfigItemdelete_Get + parameters: + - name: Id + in: query + description: Specifies the specific config item to remove. + schema: + type: string + - name: Key + in: query + description: 'Specifies the config item key to remove. Note : will remove all instances of config items with the same key.' + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - configItems + summary: Remove a hub configuration parameter by either ID or Key. + description: Remove a hub configuration parameter by either ID or Key. + operationId: DeleteConfigItemdelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteConfigItem' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /configItem/update: + get: + tags: + - configItem + summary: Update a single hub configuration parameter by either ID or Key. + description: Update a single hub configuration parameter by either ID or Key. + operationId: UpdateConfigItemupdate_Get + parameters: + - name: Id + in: query + description: The specific config value to update (can be used if a multi-value key is being updated or if a key is to be changed). + schema: + type: string + - name: Key + in: query + description: The new key value in the case of updating by Id or a the key to search for if updating by key. + schema: + type: string + - name: Value + in: query + description: The new value for this config key / id. + schema: + type: string + - name: Hidden + in: query + description: A boolean indicating whether or not to hide this config item from the UI. + schema: + type: boolean + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - configItem + summary: Update a single hub configuration parameter by either ID or Key. + description: Update a single hub configuration parameter by either ID or Key. + operationId: UpdateConfigItemupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateConfigItem' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /configItem/add: + get: + tags: + - configItem + summary: Add a hub configuration parameter by Key. + description: Add a hub configuration parameter by Key. + operationId: AddConfigItemadd_Get + parameters: + - name: Key + in: query + description: The configuration key you wish to add + schema: + type: string + - name: Value + in: query + description: The value of the key + schema: + type: string + - name: Hidden + in: query + description: A boolean indicating whether or not this is a 'hidden' key (i.e internal not intended for users to change) + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response delivered after adding a new config key / value. + content: + application/json: + schema: + $ref: '#/components/schemas/AddConfigItemResponse' + security: + - Bearer: [ ] + post: + tags: + - configItem + summary: Add a hub configuration parameter by Key. + description: Add a hub configuration parameter by Key. + operationId: AddConfigItemadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddConfigItem' + x-bodyName: body + responses: + '200': + description: The response delivered after adding a new config key / value. + content: + application/json: + schema: + $ref: '#/components/schemas/AddConfigItemResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /misc/dateTransmissionTest: + get: + tags: + - misc + summary: Echos the specified date/time value to ensure that no serialization issues exist between hub and client. + description: Echos the specified date/time value to ensure that no serialization issues exist between hub and client. + operationId: DateTransmissionTestdateTransmissionTest_Get + parameters: + - name: DateTime + in: query + description: The date to send to the hub that will be then sent back as the response to ensure no loss of accuracy occurs + schema: + type: string + format: date-time + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: string + format: date-time + security: + - Bearer: [ ] + post: + tags: + - misc + summary: Echos the specified date/time value to ensure that no serialization issues exist between hub and client. + description: Echos the specified date/time value to ensure that no serialization issues exist between hub and client. + operationId: DateTransmissionTestdateTransmissionTest_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DateTransmissionTest' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: string + format: date-time + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /credentials/add: + get: + tags: + - credentials + summary: Add credentials for specified type and key. + description: Add credentials for specified type and key. + operationId: AddCredentialsadd_Get + parameters: + - name: Credentials + in: query + description: Specifies the credentials. + schema: + $ref: '#/components/schemas/Credentials' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Represents some credentials used to connect to a remote service (e.g SSH, database etc).' + content: + application/json: + schema: + $ref: '#/components/schemas/Credentials' + security: + - Bearer: [ ] + post: + tags: + - credentials + summary: Add credentials for specified type and key. + description: Add credentials for specified type and key. + operationId: AddCredentialsadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddCredentials' + x-bodyName: body + responses: + '200': + description: 'Represents some credentials used to connect to a remote service (e.g SSH, database etc).' + content: + application/json: + schema: + $ref: '#/components/schemas/Credentials' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /credentials/update: + get: + tags: + - credentials + summary: Update credentials for specified type and key. + description: Update credentials for specified type and key. + operationId: UpdateCredentialsupdate_Get + parameters: + - name: CredentialsType + in: query + description: Specifies the original credential type. + schema: + enum: + - Unknown + - Shell + - Database + - FTP + - Cloud + - ESX + - ITSM + - Splunk + type: string + x-nullable: false + - name: Key + in: query + description: Specifies the original key + schema: + type: string + - name: Credentials + in: query + description: Specifies the credentials. + schema: + $ref: '#/components/schemas/Credentials' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Represents some credentials used to connect to a remote service (e.g SSH, database etc).' + content: + application/json: + schema: + $ref: '#/components/schemas/Credentials' + security: + - Bearer: [ ] + post: + tags: + - credentials + summary: Update credentials for specified type and key. + description: Update credentials for specified type and key. + operationId: UpdateCredentialsupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateCredentials' + x-bodyName: body + responses: + '200': + description: 'Represents some credentials used to connect to a remote service (e.g SSH, database etc).' + content: + application/json: + schema: + $ref: '#/components/schemas/Credentials' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /credentials/delete: + get: + tags: + - credentials + summary: Remove credentials for specified type and key. + description: Remove credentials for specified type and key. + operationId: RemoveCredentialsdelete_Get + parameters: + - name: CredentialsType + in: query + description: Specifies the credentials type. + schema: + enum: + - Unknown + - Shell + - Database + - FTP + - Cloud + - ESX + - ITSM + - Splunk + type: string + x-nullable: false + - name: Key + in: query + description: Specifies the key. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - credentials + summary: Remove credentials for specified type and key. + description: Remove credentials for specified type and key. + operationId: RemoveCredentialsdelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/RemoveCredentials' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /credentialsKeyedByType: + get: + tags: + - credentialsKeyedByType + summary: 'Get a list of all the known credentials, keyed by the type.' + description: 'Get a list of all the known credentials, keyed by the type.' + operationId: GetCredentialsKeyedByType_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Dictionary>' + content: + application/json: + schema: + title: 'Dictionary>' + type: object + additionalProperties: + type: array + items: + type: string + description: 'Dictionary>' + security: + - Bearer: [ ] + post: + tags: + - credentialsKeyedByType + summary: 'Get a list of all the known credentials, keyed by the type.' + description: 'Get a list of all the known credentials, keyed by the type.' + operationId: GetCredentialsKeyedByType_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetCredentialsKeyedByType' + x-bodyName: body + responses: + '200': + description: 'Dictionary>' + content: + application/json: + schema: + title: 'Dictionary>' + type: object + additionalProperties: + type: array + items: + type: string + description: 'Dictionary>' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /credentials: + get: + tags: + - credentials + summary: Gets a list of all credentials of the specified type. + description: Gets a list of all credentials of the specified type. + operationId: GetCredentialsList_Get + parameters: + - name: CredentialType + in: query + description: Specifies the type of credentials to return + schema: + enum: + - Unknown + - Shell + - Database + - FTP + - Cloud + - ESX + - ITSM + - Splunk + type: string + x-nullable: false + - name: DeviceFilter + in: query + description: Specifies the credentials to search for by associated agent id or group membership. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/Credentials' + security: + - Bearer: [ ] + post: + tags: + - credentials + summary: Gets a list of all credentials of the specified type. + description: Gets a list of all credentials of the specified type. + operationId: GetCredentialsList_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetCredentialsList' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/Credentials' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /command/tasks/status: + get: + tags: + - command + summary: 'Requests information about the given tasks'' status. If a PolicyRunId is supplied, the tasks associated with it are returned.' + description: 'Requests information about the given tasks'' status. If a PolicyRunId is supplied, the tasks associated with it are returned.' + operationId: GetAgentTaskStatusestasksstatus_Get + parameters: + - name: Ids + in: query + description: Specifies the task ids. + style: form + schema: + type: array + items: + type: integer + format: int32 + x-nullable: false + - name: PolicyRunId + in: query + description: Specifies the policy run id. + schema: + type: integer + format: int32 + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetAgentTaskStatuses + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTaskStatusesResponse' + security: + - Bearer: [ ] + post: + tags: + - command + summary: 'Requests information about the given tasks'' status. If a PolicyRunId is supplied, the tasks associated with it are returned.' + description: 'Requests information about the given tasks'' status. If a PolicyRunId is supplied, the tasks associated with it are returned.' + operationId: GetAgentTaskStatusestasksstatus_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentTaskStatuses' + x-bodyName: body + responses: + '200': + description: The response object for GetAgentTaskStatuses + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTaskStatusesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/command/tasks/status/ids/{Ids}': + get: + tags: + - command + summary: 'Requests information about the given tasks'' status. If a PolicyRunId is supplied, the tasks associated with it are returned.' + description: 'Requests information about the given tasks'' status. If a PolicyRunId is supplied, the tasks associated with it are returned.' + operationId: GetAgentTaskStatusestasksstatusidsIds_Get + parameters: + - name: Ids + in: query + description: Specifies the task ids. + style: form + schema: + type: array + items: + type: integer + format: int32 + x-nullable: false + - name: PolicyRunId + in: query + description: Specifies the policy run id. + schema: + type: integer + format: int32 + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetAgentTaskStatuses + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTaskStatusesResponse' + security: + - Bearer: [ ] + post: + tags: + - command + summary: 'Requests information about the given tasks'' status. If a PolicyRunId is supplied, the tasks associated with it are returned.' + description: 'Requests information about the given tasks'' status. If a PolicyRunId is supplied, the tasks associated with it are returned.' + operationId: GetAgentTaskStatusestasksstatusidsIds_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentTaskStatuses' + x-bodyName: body + responses: + '200': + description: The response object for GetAgentTaskStatuses + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTaskStatusesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/command/tasks/add/agent/{AgentId}': + get: + tags: + - command + summary: Adds a list of tasks for the given agent. + description: Adds a list of tasks for the given agent. + operationId: SubmitAgentTaskstasksaddagentAgentId_Get + parameters: + - name: Tasks + in: query + description: Specifies the list of tasks that will be submitted. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/AgentTask' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for SubmitAgentTasks. + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitAgentTasksResponse' + security: + - Bearer: [ ] + post: + tags: + - command + summary: Adds a list of tasks for the given agent. + description: Adds a list of tasks for the given agent. + operationId: SubmitAgentTaskstasksaddagentAgentId_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SubmitAgentTasks' + x-bodyName: body + responses: + '200': + description: The response object for SubmitAgentTasks. + content: + application/json: + schema: + $ref: '#/components/schemas/SubmitAgentTasksResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/command/tasks/agent/legacy/{LegacyId}': + get: + tags: + - command + summary: Requests information about tasks for the given agent. + description: Requests information about tasks for the given agent. + operationId: GetAgentTaskstasksagentlegacyLegacyId_Get + parameters: + - name: AgentId + in: query + description: Specifies the agent's AgentId. + schema: + type: string + - name: DeviceId + in: query + description: Specifies the agent's DeviceId. + schema: + type: string + - name: TaskStatuses + in: query + description: Specifies a value indicating the task statuses to filter by. + style: form + schema: + type: array + items: + type: string + x-nullable: false + - name: TaskIds + in: query + description: Specifies value indicating the task ids to look for. + style: form + schema: + type: array + items: + type: integer + format: int32 + x-nullable: false + - name: PolicyRunId + in: query + description: Specifies the policy run id associated with the last run of the report etc. use this to find tasks started by a given scheduled policy. + schema: + type: integer + format: int32 + - name: TaskType + in: query + description: Specifies the specific task type to retrieve details for + schema: + type: string + - name: Concise + in: query + description: Return a concise view of the tasks? i.e not the Text and ResultData properties + schema: + type: boolean + x-nullable: false + - name: IgnoreActiveDates + in: query + description: 'By default only AgentTasks that are currently between their StartDate and EndDate values are returned, this flag returns tasks irrespective of dates.' + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetAgentTasks + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTasksResponse' + security: + - Bearer: [ ] + post: + tags: + - command + summary: Requests information about tasks for the given agent. + description: Requests information about tasks for the given agent. + operationId: GetAgentTaskstasksagentlegacyLegacyId_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentTasks' + x-bodyName: body + responses: + '200': + description: The response object for GetAgentTasks + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTasksResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/command/tasks/agent/{AgentId}/all/{AllTasks}': + get: + tags: + - command + summary: Requests information about tasks for the given agent. + description: Requests information about tasks for the given agent. + operationId: GetAgentTaskstasksagentAgentIdallAllTasks_Get + parameters: + - name: AgentId + in: query + description: Specifies the agent's AgentId. + schema: + type: string + - name: DeviceId + in: query + description: Specifies the agent's DeviceId. + schema: + type: string + - name: TaskStatuses + in: query + description: Specifies a value indicating the task statuses to filter by. + style: form + schema: + type: array + items: + type: string + x-nullable: false + - name: TaskIds + in: query + description: Specifies value indicating the task ids to look for. + style: form + schema: + type: array + items: + type: integer + format: int32 + x-nullable: false + - name: PolicyRunId + in: query + description: Specifies the policy run id associated with the last run of the report etc. use this to find tasks started by a given scheduled policy. + schema: + type: integer + format: int32 + - name: TaskType + in: query + description: Specifies the specific task type to retrieve details for + schema: + type: string + - name: Concise + in: query + description: Return a concise view of the tasks? i.e not the Text and ResultData properties + schema: + type: boolean + x-nullable: false + - name: IgnoreActiveDates + in: query + description: 'By default only AgentTasks that are currently between their StartDate and EndDate values are returned, this flag returns tasks irrespective of dates.' + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetAgentTasks + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTasksResponse' + security: + - Bearer: [ ] + post: + tags: + - command + summary: Requests information about tasks for the given agent. + description: Requests information about tasks for the given agent. + operationId: GetAgentTaskstasksagentAgentIdallAllTasks_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentTasks' + x-bodyName: body + responses: + '200': + description: The response object for GetAgentTasks + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTasksResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/command/tasks/agent/{AgentId}/single/{TaskId}': + get: + tags: + - command + summary: Requests information about tasks for the given agent. + description: Requests information about tasks for the given agent. + operationId: GetAgentTaskstasksagentAgentIdsingleTaskId_Get + parameters: + - name: AgentId + in: query + description: Specifies the agent's AgentId. + schema: + type: string + - name: DeviceId + in: query + description: Specifies the agent's DeviceId. + schema: + type: string + - name: TaskStatuses + in: query + description: Specifies a value indicating the task statuses to filter by. + style: form + schema: + type: array + items: + type: string + x-nullable: false + - name: TaskIds + in: query + description: Specifies value indicating the task ids to look for. + style: form + schema: + type: array + items: + type: integer + format: int32 + x-nullable: false + - name: PolicyRunId + in: query + description: Specifies the policy run id associated with the last run of the report etc. use this to find tasks started by a given scheduled policy. + schema: + type: integer + format: int32 + - name: TaskType + in: query + description: Specifies the specific task type to retrieve details for + schema: + type: string + - name: Concise + in: query + description: Return a concise view of the tasks? i.e not the Text and ResultData properties + schema: + type: boolean + x-nullable: false + - name: IgnoreActiveDates + in: query + description: 'By default only AgentTasks that are currently between their StartDate and EndDate values are returned, this flag returns tasks irrespective of dates.' + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetAgentTasks + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTasksResponse' + security: + - Bearer: [ ] + post: + tags: + - command + summary: Requests information about tasks for the given agent. + description: Requests information about tasks for the given agent. + operationId: GetAgentTaskstasksagentAgentIdsingleTaskId_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentTasks' + x-bodyName: body + responses: + '200': + description: The response object for GetAgentTasks + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTasksResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/command/tasks/agent/legacy/{LegacyId}/all/{AllTasks}': + get: + tags: + - command + summary: Requests information about tasks for the given agent. + description: Requests information about tasks for the given agent. + operationId: GetAgentTaskstasksagentlegacyLegacyIdallAllTasks_Get + parameters: + - name: AgentId + in: query + description: Specifies the agent's AgentId. + schema: + type: string + - name: DeviceId + in: query + description: Specifies the agent's DeviceId. + schema: + type: string + - name: TaskStatuses + in: query + description: Specifies a value indicating the task statuses to filter by. + style: form + schema: + type: array + items: + type: string + x-nullable: false + - name: TaskIds + in: query + description: Specifies value indicating the task ids to look for. + style: form + schema: + type: array + items: + type: integer + format: int32 + x-nullable: false + - name: PolicyRunId + in: query + description: Specifies the policy run id associated with the last run of the report etc. use this to find tasks started by a given scheduled policy. + schema: + type: integer + format: int32 + - name: TaskType + in: query + description: Specifies the specific task type to retrieve details for + schema: + type: string + - name: Concise + in: query + description: Return a concise view of the tasks? i.e not the Text and ResultData properties + schema: + type: boolean + x-nullable: false + - name: IgnoreActiveDates + in: query + description: 'By default only AgentTasks that are currently between their StartDate and EndDate values are returned, this flag returns tasks irrespective of dates.' + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetAgentTasks + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTasksResponse' + security: + - Bearer: [ ] + post: + tags: + - command + summary: Requests information about tasks for the given agent. + description: Requests information about tasks for the given agent. + operationId: GetAgentTaskstasksagentlegacyLegacyIdallAllTasks_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentTasks' + x-bodyName: body + responses: + '200': + description: The response object for GetAgentTasks + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTasksResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/command/tasks/agent/legacy/{LegacyId}/single/{TaskId}': + get: + tags: + - command + summary: Requests information about tasks for the given agent. + description: Requests information about tasks for the given agent. + operationId: GetAgentTaskstasksagentlegacyLegacyIdsingleTaskId_Get + parameters: + - name: AgentId + in: query + description: Specifies the agent's AgentId. + schema: + type: string + - name: DeviceId + in: query + description: Specifies the agent's DeviceId. + schema: + type: string + - name: TaskStatuses + in: query + description: Specifies a value indicating the task statuses to filter by. + style: form + schema: + type: array + items: + type: string + x-nullable: false + - name: TaskIds + in: query + description: Specifies value indicating the task ids to look for. + style: form + schema: + type: array + items: + type: integer + format: int32 + x-nullable: false + - name: PolicyRunId + in: query + description: Specifies the policy run id associated with the last run of the report etc. use this to find tasks started by a given scheduled policy. + schema: + type: integer + format: int32 + - name: TaskType + in: query + description: Specifies the specific task type to retrieve details for + schema: + type: string + - name: Concise + in: query + description: Return a concise view of the tasks? i.e not the Text and ResultData properties + schema: + type: boolean + x-nullable: false + - name: IgnoreActiveDates + in: query + description: 'By default only AgentTasks that are currently between their StartDate and EndDate values are returned, this flag returns tasks irrespective of dates.' + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetAgentTasks + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTasksResponse' + security: + - Bearer: [ ] + post: + tags: + - command + summary: Requests information about tasks for the given agent. + description: Requests information about tasks for the given agent. + operationId: GetAgentTaskstasksagentlegacyLegacyIdsingleTaskId_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentTasks' + x-bodyName: body + responses: + '200': + description: The response object for GetAgentTasks + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentTasksResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/downloadFileHash/{HostType}/{OperatingSystem}/{Variant}': + get: + tags: + - downloadFileHash + summary: Download the filehasing utility app for remote monitoring. + description: Download the filehasing utility app for remote monitoring. + operationId: DownloadFileHashBinaryHostTypeOperatingSystemVariant_Get + parameters: + - name: ReturnUrl + in: query + description: Specifies a flag that indicates wether or not to return a URL or the file directly + schema: + type: boolean + x-nullable: false + - name: HostType + in: query + description: 'Specifies the host type the file hash binary is required for (e.g Unix, Windows etc)' + schema: + enum: + - Unknown + - Unix + - Windows + - Network + - Database + - Cloud + - ESX + - Splunk + type: string + x-nullable: false + - name: OperatingSystem + in: query + description: Specifies the operating system naame (as defined in KnownOsNames). Optional + schema: + type: string + - name: Variant + in: query + description: 'Specifies the operating system / host variant. e.g x64, 10 SPARC etc' + schema: + type: string + - name: FileId + in: query + description: Specifies the specific file id + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + post: + tags: + - downloadFileHash + summary: Download the filehasing utility app for remote monitoring. + description: Download the filehasing utility app for remote monitoring. + operationId: DownloadFileHashBinaryHostTypeOperatingSystemVariant_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DownloadFileHashBinary' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/downloadFileHashById/{FileId}': + get: + tags: + - downloadFileHashById + summary: Download the filehasing utility app for remote monitoring. + description: Download the filehasing utility app for remote monitoring. + operationId: DownloadFileHashBinaryFileId_Get + parameters: + - name: ReturnUrl + in: query + description: Specifies a flag that indicates wether or not to return a URL or the file directly + schema: + type: boolean + x-nullable: false + - name: HostType + in: query + description: 'Specifies the host type the file hash binary is required for (e.g Unix, Windows etc)' + schema: + enum: + - Unknown + - Unix + - Windows + - Network + - Database + - Cloud + - ESX + - Splunk + type: string + x-nullable: false + - name: OperatingSystem + in: query + description: Specifies the operating system naame (as defined in KnownOsNames). Optional + schema: + type: string + - name: Variant + in: query + description: 'Specifies the operating system / host variant. e.g x64, 10 SPARC etc' + schema: + type: string + - name: FileId + in: query + description: Specifies the specific file id + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + post: + tags: + - downloadFileHashById + summary: Download the filehasing utility app for remote monitoring. + description: Download the filehasing utility app for remote monitoring. + operationId: DownloadFileHashBinaryFileId_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DownloadFileHashBinary' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /getFileHashBinaries: + get: + tags: + - getFileHashBinaries + summary: Retrieves the list of file hash binaries available to download from the hub. + description: Retrieves the list of file hash binaries available to download from the hub. + operationId: GetFileHashBinaries_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/FileHashBinary' + security: + - Bearer: [ ] + post: + tags: + - getFileHashBinaries + summary: Retrieves the list of file hash binaries available to download from the hub. + description: Retrieves the list of file hash binaries available to download from the hub. + operationId: GetFileHashBinaries_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetFileHashBinaries' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/FileHashBinary' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChangeInstances/members: + get: + tags: + - plannedChangeInstances + summary: Gets the group and device members of the specified planned change instance. + description: Gets the group and device members of the specified planned change instance. + operationId: GetPlannedChangeInstanceMembersmembers_Get + parameters: + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangeInstanceMembersResponse' + security: + - Bearer: [ ] + post: + tags: + - plannedChangeInstances + summary: Gets the group and device members of the specified planned change instance. + description: Gets the group and device members of the specified planned change instance. + operationId: GetPlannedChangeInstanceMembersmembers_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetPlannedChangeInstanceMembers' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangeInstanceMembersResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChangeInstances/delete: + get: + tags: + - plannedChangeInstances + summary: Deletes an instance of a planned change from the system. + description: Deletes an instance of a planned change from the system. + operationId: DeletePlannedChangeInstancedelete_Get + parameters: + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: DeletePlannedChange + in: query + description: Delete the 'parent' planned change also? + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - plannedChangeInstances + summary: Deletes an instance of a planned change from the system. + description: Deletes an instance of a planned change from the system. + operationId: DeletePlannedChangeInstancedelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeletePlannedChangeInstance' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChangeInstances/deleteMember: + get: + tags: + - plannedChangeInstances + summary: Removes a group or device from a planned change + description: Removes a group or device from a planned change + operationId: DeletePlannedChangeInstanceMemberdeleteMember_Get + parameters: + - name: GroupName + in: query + description: Specifies the group to remove from the planned change. + schema: + type: string + - name: AgentDeviceId + in: query + description: Specifies individual device remove from the planned change. + schema: + type: string + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - plannedChangeInstances + summary: Removes a group or device from a planned change + description: Removes a group or device from a planned change + operationId: DeletePlannedChangeInstanceMemberdeleteMember_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeletePlannedChangeInstanceMember' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChangeInstances/add: + get: + tags: + - plannedChangeInstances + summary: Add a planned change instance. + description: Add a planned change instance. + operationId: AddPlannedChangeInstanceadd_Get + parameters: + - name: PlannedChangeName + in: query + description: 'Specifies the planned change definition name. Optional, if not supplied a new empty planned change ruleset is created and returned in the response.' + schema: + type: string + - name: DisplayName + in: query + description: Specifies the DisplayName. Required. + schema: + type: string + - name: Description + in: query + description: Specifies the description. Required. + schema: + type: string + - name: AssignedTo + in: query + description: Specifies the Assigned To Name. + schema: + type: string + - name: Origin + in: query + description: 'Specifies the origin of the planned change. Optional, this can be ''Interactive'' for UI created, or the name of an ITSM instance when created by sync service.' + schema: + type: string + - name: MemberGroups + in: query + description: Specifies the groups that are members of the planned change. Optional. + style: form + schema: + type: array + items: + type: string + - name: MemberAgentDeviceIds + in: query + description: Specifies the devices that are explicit members of the planned change. Optional. + style: form + schema: + type: array + items: + type: string + - name: StartTimeUtc + in: query + description: Specifies the UTC start time of the instance. Optional. + schema: + type: string + format: date-time + - name: EndTimeUtc + in: query + description: Specifies the UTC end time of the instance. Optional. + schema: + type: string + format: date-time + - name: PeriodicityCount + in: query + description: Specifies a value indicating the periodicity of the planned change. When PeriodicityCount is greater then zero the planned change is active every PeriodicityCount PeriodicityUnits for PeriodDurationCount PeriodDurationUnits starting from StartTimeUtc. + schema: + type: integer + format: int32 + x-nullable: false + - name: PeriodicityUnit + in: query + description: Specifies a value indicating the periodicity unit. + schema: + enum: + - None + - Second + - Minute + - Hour + - Day + - Week + type: string + x-nullable: false + - name: PeriodDurationCount + in: query + description: Specifies a value indicating the period duration of the planned change. When PeriodicityCount is greater then zero the planned change is active every PeriodicityCount PeriodicityUnits for PeriodDurationCount PeriodDurationUnits starting from StartTimeUtc. + schema: + type: integer + format: int32 + x-nullable: false + - name: PeriodDurationUnit + in: query + description: Specifies a value indicating the period duration unit. + schema: + enum: + - None + - Second + - Minute + - Hour + - Day + - Week + type: string + x-nullable: false + - name: Disabled + in: query + description: Specifies a value indicating whether to create the planned change instance in a disabled state. + schema: + type: boolean + x-nullable: false + - name: DisallowRules + in: query + description: 'Specifies a value indicating whether the planned change is allowed to have rules, or is a just container for manually added events.' + schema: + type: boolean + x-nullable: false + - name: UseAttributeRules + in: query + description: 'TODO: How do we deal with this? TEMP used to trigger the new file hash based attribute rule generation. Eventually this will be the norm and this property can be removed.' + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Describes planned change instances, filtered by name, id or groups that are members.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesInstancesResponse' + security: + - Bearer: [ ] + post: + tags: + - plannedChangeInstances + summary: Add a planned change instance. + description: Add a planned change instance. + operationId: AddPlannedChangeInstanceadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddPlannedChangeInstance' + x-bodyName: body + responses: + '200': + description: 'Describes planned change instances, filtered by name, id or groups that are members.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesInstancesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChangeInstances/update: + get: + tags: + - plannedChangeInstances + summary: Update a planned change instance + description: Update a planned change instance + operationId: UpdatePlannedChangeInstanceupdate_Get + parameters: + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: Description + in: query + description: Specifies the description. Optional. + schema: + type: string + - name: PlannedChangeName + in: query + description: Specifies the id (Name) of the ruleset used by this planned change. Optional. + schema: + type: string + - name: AssignedTo + in: query + description: Specifies the Assigned To Name. + schema: + type: string + - name: MemberGroups + in: query + description: Specifies the groups that are members of the planned change. Optional. + style: form + schema: + type: array + items: + type: string + - name: StartTimeUtc + in: query + description: Specifies the UTC start time of the instance. Optional. + schema: + type: string + format: date-time + - name: EndTimeUtc + in: query + description: Specifies the UTC end time of the instance. Optional. + schema: + type: string + format: date-time + - name: Started + in: query + description: Specifies a value indicating whether the planned change has been started. Optional. + schema: + type: boolean + - name: Ended + in: query + description: Specifies a value indicating whether the planned change has been ended. Optional. + schema: + type: boolean + - name: Disabled + in: query + description: Specifies a value indicating whether the planned change instance is disabled. Optional. + schema: + type: boolean + - name: DisallowRules + in: query + description: 'Specifies a value indicating whether the planned change is allowed to have rules, or is a just container for manually added events. Optional.' + schema: + type: boolean + - name: PeriodicityCount + in: query + description: Specifies a value indicating the periodicity of the planned change. When PeriodicityCount is greater then zero the planned change is active every PeriodicityCount PeriodicityUnits for PeriodDurationCount PeriodDurationUnits starting from StartTimeUtc. + schema: + type: integer + format: int32 + - name: PeriodicityUnit + in: query + description: Specifies a value indicating the periodicity unit. + schema: + type: string + - name: PeriodDurationCount + in: query + description: Specifies a value indicating the period duration of the planned change. When PeriodicityCount is greater then zero the planned change is active every PeriodicityCount PeriodicityUnits for PeriodDurationCount PeriodDurationUnits starting from StartTimeUtc. + schema: + type: integer + format: int32 + - name: PeriodDurationUnit + in: query + description: Specifies a value indicating the period duration unit. + schema: + type: string + - name: DisplayName + in: query + description: Specifies the Display Name. + schema: + type: string + - name: MemberAgentDeviceIds + in: query + description: Specifies the devices that are explicit members of the planned change. Optional. + style: form + schema: + type: array + items: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Describes planned change instances, filtered by name, id or groups that are members.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesInstancesResponse' + security: + - Bearer: [ ] + post: + tags: + - plannedChangeInstances + summary: Update a planned change instance + description: Update a planned change instance + operationId: UpdatePlannedChangeInstanceupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdatePlannedChangeInstance' + x-bodyName: body + responses: + '200': + description: 'Describes planned change instances, filtered by name, id or groups that are members.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesInstancesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChangeInstances/clone: + get: + tags: + - plannedChangeInstances + summary: Clone a planned change instance. + description: Clone a planned change instance. + operationId: ClonePlannedChangeInstanceclone_Get + parameters: + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: CloneDefinition + in: query + description: Specifies the whether to clone the associated PlannedChangeDefinition + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Describes planned change instances, filtered by name, id or groups that are members.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesInstancesResponse' + security: + - Bearer: [ ] + post: + tags: + - plannedChangeInstances + summary: Clone a planned change instance. + description: Clone a planned change instance. + operationId: ClonePlannedChangeInstanceclone_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ClonePlannedChangeInstance' + x-bodyName: body + responses: + '200': + description: 'Describes planned change instances, filtered by name, id or groups that are members.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesInstancesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChangeInstances/nameValue: + get: + tags: + - plannedChangeInstances + summary: 'Gets planned change instances name and id, filtering by name, id or groups that are members.' + description: 'Gets planned change instances name and id, filtering by name, id or groups that are members.' + operationId: GetPlannedChangeInstancesNameValuenameValue_Get + parameters: + - name: InstanceIds + in: query + description: Specifies the instance id. Optional. + style: form + schema: + type: array + items: + type: string + - name: MemberGroups + in: query + description: Specifies the member groups to filter by. This is a list of groups that are members of the planned changes instances returned. Optional. + style: form + schema: + type: array + items: + type: string + - name: MemberAgentDeviceIds + in: query + description: Specifies the ids of member devices. + style: form + schema: + type: array + items: + type: string + - name: Description + in: query + description: Specifies the planned change instance description to find. Optional. + schema: + type: string + - name: PlannedChangeName + in: query + description: Specifies the planned change definition name to find instances of. Optional. + schema: + type: string + - name: DisplayName + in: query + description: Specifies the planned change display name to find instances of. Optional. + schema: + type: string + - name: DisplayNameContains + in: query + description: Specifies the planned change instance name fragment to find. Optional. + schema: + type: string + - name: ExcludeDisabled + in: query + description: 'Specifies a value indicating whether to exclude disabled instances from the list. Optional, defaults to false.' + schema: + type: boolean + x-nullable: false + - name: ExcludeOutOfSchedule + in: query + description: 'Specifies a value indicating whether to exclude instances whose schedule is not currently active from the list. Optional, defaults to false.' + schema: + type: boolean + x-nullable: false + - name: DisallowRules + in: query + description: Specifies an optional value indicating whether the planned change instances returned are allowed to have rules. + schema: + type: boolean + - name: StartDateUtc + in: query + description: Gets or sets the Date/Time of the start date UTC of the Planned Changes to be returned. + schema: + type: string + format: date-time + - name: EndDateUtc + in: query + description: Gets or sets the Date/Time of the end date UTC of the Planned Changes to be returned. + schema: + type: string + format: date-time + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Describes planned change instances, filtered by name, id or groups that are members.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangeInstancesNameValueResponse' + security: + - Bearer: [ ] + post: + tags: + - plannedChangeInstances + summary: 'Gets planned change instances name and id, filtering by name, id or groups that are members.' + description: 'Gets planned change instances name and id, filtering by name, id or groups that are members.' + operationId: GetPlannedChangeInstancesNameValuenameValue_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetPlannedChangeInstancesNameValue' + x-bodyName: body + responses: + '200': + description: 'Describes planned change instances, filtered by name, id or groups that are members.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangeInstancesNameValueResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChangeInstances/addMembers: + get: + tags: + - plannedChangeInstances + summary: Add a list of groups to a planned change + description: Add a list of groups to a planned change + operationId: AddPlannedChangeInstanceMemberaddMembers_Get + parameters: + - name: MemberGroups + in: query + description: Specifies names of groups of devices to add to the planned change. + style: form + schema: + type: array + items: + type: string + - name: MemberAgentDeviceIds + in: query + description: Specifies individual device ids to add to the planned change. + style: form + schema: + type: array + items: + type: string + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - plannedChangeInstances + summary: Add a list of groups to a planned change + description: Add a list of groups to a planned change + operationId: AddPlannedChangeInstanceMemberaddMembers_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddPlannedChangeInstanceMember' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChangeInstances/addOrUpdateFromEvents: + get: + tags: + - plannedChangeInstances + summary: A request to add a new planned change and planned change instance based on the given events. + description: A request to add a new planned change and planned change instance based on the given events. + operationId: AddOrUpdatePlannedChangeInstanceFromEventsaddOrUpdateFromEvents_Get + parameters: + - name: AllEventsSelected + in: query + description: Indicates that the All Events option has been selected. + schema: + type: boolean + x-nullable: false + - name: EventsQuery + in: query + description: Specifies the events query criteria which is a requirement when AllEventsSelected is true. + schema: + $ref: '#/components/schemas/GetEvents' + - name: Name + in: query + description: Specifies the name of the 'PlannedChangeDefinition' to create. + schema: + type: string + - name: UpdateExisting + in: query + description: Specifies the flag indicating whether or not we're updating an existing planned change + schema: + type: boolean + x-nullable: false + - name: UseMinimumRules + in: query + description: Specifies a value indicating whether to use the minimum possible number rules to match the items. + schema: + type: boolean + x-nullable: false + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: MemberGroups + in: query + description: Specifies the groups that are members of the planned change. Optional. + style: form + schema: + type: array + items: + type: string + - name: MemberAgentDeviceIds + in: query + description: Specifies the devices that are explicit members of the planned change. Optional. + style: form + schema: + type: array + items: + type: string + - name: ReconsiderEventsFromUtc + in: query + description: Specifies the UTC time to reconsider matching events from. If null no events are reprocessed. + schema: + type: string + format: date-time + - name: RuleBuilderItems + in: query + description: Specifies the events that make up the initial filter rules of the new 'PlannedChangeInstance'. The matching 'PlannedChangeFilterRuleInferenceOptions' provide details about how the event filter rule is to be constructed. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/RuleBuilderItem' + - name: PreviewOnly + in: query + description: Specifies a value indicating whether to preview the settings for the resulting 'PlannedChangeInstance' or to really created it + schema: + type: boolean + x-nullable: false + - name: EndDateUtc + in: query + description: Specifies the UTC end date for the new PlannedChangeInstance. If this is null the PlannedChangeInstance is open-ended. + schema: + type: string + format: date-time + - name: Origin + in: query + description: 'Specifies the origin of the planned change. Optional, this can be ''Interactive'' for UI created, or the name of an ITSM instance when creates by sync service.' + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AddOrUpdatePlannedChangeInstanceFromEventsResponse' + security: + - Bearer: [ ] + post: + tags: + - plannedChangeInstances + summary: A request to add a new planned change and planned change instance based on the given events. + description: A request to add a new planned change and planned change instance based on the given events. + operationId: AddOrUpdatePlannedChangeInstanceFromEventsaddOrUpdateFromEvents_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddOrUpdatePlannedChangeInstanceFromEvents' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AddOrUpdatePlannedChangeInstanceFromEventsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChangeInstances/reevaluateEvents: + get: + tags: + - plannedChangeInstances + summary: A request to re-evaluate the events associated with the specified planned change. + description: A request to re-evaluate the events associated with the specified planned change. + operationId: AddReEvaluationOfPlannedChangeInstanceEventsreevaluateEvents_Get + parameters: + - name: InstanceId + in: query + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + required: true + schema: + type: string + - name: EarliestEventTimeUtc + in: query + description: Specifies the earliest UTC event time. This is the time of earliest events to re-consider for retrospective inclusion in the planned change. + schema: + type: string + format: date-time + - name: LastEventTimeUtc + in: query + description: Specifies the latest UTC event time. This is the time of the last events to re-consider for retrospective inclusion in the planned change. + schema: + type: string + format: date-time + - name: PlannedChangeManual + in: query + description: Indicates whether to further restrict the event query to events that were either added to the planned change manually or not (i.e. were added by a rule) + schema: + type: boolean + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - plannedChangeInstances + summary: A request to re-evaluate the events associated with the specified planned change. + description: A request to re-evaluate the events associated with the specified planned change. + operationId: AddReEvaluationOfPlannedChangeInstanceEventsreevaluateEvents_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddReEvaluationOfPlannedChangeInstanceEvents' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChangeInstances: + get: + tags: + - plannedChangeInstances + summary: 'Gets planned change instances, filtering by name, id or groups that are members.' + description: 'Gets planned change instances, filtering by name, id or groups that are members.' + operationId: GetPlannedChangeInstances_Get + parameters: + - name: InstanceIds + in: query + description: Specifies the instance id. Optional. + style: form + schema: + type: array + items: + type: string + - name: MemberGroups + in: query + description: Specifies the member groups to filter by. This is a list of groups that are members of the planned changes instances returned. Optional. + style: form + schema: + type: array + items: + type: string + - name: MemberAgentDeviceIds + in: query + description: Specifies the ids of member devices. + style: form + schema: + type: array + items: + type: string + - name: Description + in: query + description: Specifies the planned change instance description to find. Optional. + schema: + type: string + - name: PlannedChangeName + in: query + description: Specifies the planned change definition name to find instances of. Optional. + schema: + type: string + - name: DisplayName + in: query + description: Specifies the planned change display name to find instances of. Optional. + schema: + type: string + - name: DisplayNameContains + in: query + description: Specifies the planned change instance name fragment to find. Optional. + schema: + type: string + - name: ExcludeDisabled + in: query + description: 'Specifies a value indicating whether to exclude disabled instances from the list. Optional, defaults to false.' + schema: + type: boolean + x-nullable: false + - name: ExcludeOutOfSchedule + in: query + description: 'Specifies a value indicating whether to exclude instances whose schedule is not currently active from the list. Optional, defaults to false.' + schema: + type: boolean + x-nullable: false + - name: DisallowRules + in: query + description: Specifies an optional value indicating whether the planned change instances returned are allowed to have rules. + schema: + type: boolean + - name: OmitPlannedChangeDefinitions + in: query + description: 'Specifies an optional value indicating whether to omit returning the PlannedChangeDefinition on the returned PlannedChangeInstance, useful if you only want a list of instances without the potentially large definitions embedded.' + schema: + type: boolean + x-nullable: false + - name: StartDateUtc + in: query + description: Gets or sets the Date/Time of the start date UTC of the Planned Changes to be returned. + schema: + type: string + format: date-time + - name: EndDateUtc + in: query + description: Gets or sets the Date/Time of the end date UTC of the Planned Changes to be returned. + schema: + type: string + format: date-time + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Describes planned change instances, filtered by name, id or groups that are members.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesInstancesResponse' + security: + - Bearer: [ ] + post: + tags: + - plannedChangeInstances + summary: 'Gets planned change instances, filtering by name, id or groups that are members.' + description: 'Gets planned change instances, filtering by name, id or groups that are members.' + operationId: GetPlannedChangeInstances_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetPlannedChangeInstances' + x-bodyName: body + responses: + '200': + description: 'Describes planned change instances, filtered by name, id or groups that are members.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesInstancesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChanges/add: + get: + tags: + - plannedChanges + summary: Add a planned change definition. + description: Add a planned change definition. + operationId: AddPlannedChangeadd_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + - name: Name + in: query + description: Specifies the internally identifying name. + schema: + type: string + - name: DisplayName + in: query + description: Specifies the display name. + schema: + type: string + - name: Description + in: query + description: Specifies the description text. + schema: + type: string + - name: Origin + in: query + description: 'Specifies the origin of the planned change ruleset. Optional, this can be ''Interactive'' for UI created, or the name of an ITSM instance when creates by sync service.' + schema: + type: string + - name: CreationDateUtc + in: query + description: Specifies the UTC creation date of the planned change. + schema: + type: string + format: date-time + x-nullable: false + - name: LastModifiedDateUtc + in: query + description: Specifies the UTC last modified date of the planned change. + schema: + type: string + format: date-time + x-nullable: false + - name: DisallowRules + in: query + description: 'Specifies a value indicating whether the planned change is allowed to have rules, or is a just container for manually added events.' + schema: + type: boolean + x-nullable: false + - name: Rules + in: query + description: Specifies the dictionary of 'PlannedChangeRule.Id' to 'PlannedChangeRule' rules. + schema: + title: 'Dictionary' + type: object + additionalProperties: + $ref: '#/components/schemas/PlannedChangeRule' + description: 'Dictionary' + - name: RuleCombinationOperator + in: query + description: Specifies the rule combination operator. If this is And it means an event must satisfy all the'Rules'. + schema: + enum: + - And + - Or + - LogicExpression + type: string + x-nullable: false + responses: + '200': + description: Specifies returned a planned change definitions. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesResponse' + security: + - Bearer: [ ] + post: + tags: + - plannedChanges + summary: Add a planned change definition. + description: Add a planned change definition. + operationId: AddPlannedChangeadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddPlannedChange' + x-bodyName: body + responses: + '200': + description: Specifies returned a planned change definitions. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChanges/upload: + post: + tags: + - plannedChanges + summary: Upload a planned change ruleset json file + description: Upload a planned change ruleset json file + operationId: UploadPlannedChangeupload_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UploadPlannedChange' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChanges/download: + get: + tags: + - plannedChanges + summary: Download a planned change ruleset json file + description: Download a planned change ruleset json file + operationId: DownloadPlannedChangedownload_Get + parameters: + - name: Id + in: query + description: Specifies the planned change rule set id + schema: + type: string + - name: IncludeAttributeRuleList + in: query + description: Specifies whether to return the List property for attribute list rules. Defaults to false. + schema: + type: boolean + x-nullable: false + - name: IncludeAttributeRuleText + in: query + description: Specifies whether to return the list in the MatchText property for attribute list rules. Defaults to true. + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + post: + tags: + - plannedChanges + summary: Download a planned change ruleset json file + description: Download a planned change ruleset json file + operationId: DownloadPlannedChangedownload_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DownloadPlannedChange' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChanges/update: + get: + tags: + - plannedChanges + summary: Update a planned change definition + description: Update a planned change definition + operationId: UpdatePlannedChangeupdate_Get + parameters: + - name: Name + in: query + description: Specifies the internal Name identifying the planned change. This cannot be updated. + schema: + type: string + - name: DisplayName + in: query + description: Specifies the display name. + schema: + type: string + - name: Description + in: query + description: Specifies the description text. + schema: + type: string + - name: RuleCombinationOperator + in: query + description: Specifies the rule combination operator. If this is And it means an event must satisfy all the 'PlannedChangeDefinition.Rules'. + schema: + type: string + - name: DisallowRules + in: query + description: 'Specifies a value indicating whether the planned change is allowed to have rules, or is a just container for manually added events.' + schema: + type: boolean + - name: Rules + in: query + description: Specifies the dictionary of 'PlannedChangeRule.Id' to 'PlannedChangeRule' rules. + schema: + title: 'Dictionary' + type: object + additionalProperties: + $ref: '#/components/schemas/PlannedChangeRule' + description: 'Dictionary' + - name: Origin + in: query + description: 'Specifies the origin of the planned change update. Optional, this can be ''Interactive'' for UI created, or the name of an ITSM instance when updated by sync service.' + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Specifies returned a planned change definitions. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesResponse' + security: + - Bearer: [ ] + post: + tags: + - plannedChanges + summary: Update a planned change definition + description: Update a planned change definition + operationId: UpdatePlannedChangeupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdatePlannedChange' + x-bodyName: body + responses: + '200': + description: Specifies returned a planned change definitions. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChanges/clone: + get: + tags: + - plannedChanges + summary: Clone a planned change definition. + description: Clone a planned change definition. + operationId: ClonePlannedChangeclone_Get + parameters: + - name: Name + in: query + description: Specifies the internal Name identifying the planned change to clone. This cannot be updated. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Specifies returned a planned change definitions. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesResponse' + security: + - Bearer: [ ] + post: + tags: + - plannedChanges + summary: Clone a planned change definition. + description: Clone a planned change definition. + operationId: ClonePlannedChangeclone_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ClonePlannedChange' + x-bodyName: body + responses: + '200': + description: Specifies returned a planned change definitions. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChanges/analyze: + get: + tags: + - plannedChanges + summary: 'Create rule reduction plans, which can be used to simplify rulesets associated with the specified planned change.' + description: 'Create rule reduction plans, which can be used to simplify rulesets associated with the specified planned change.' + operationId: AnalyzePlannedChangeanalyze_Get + parameters: + - name: Name + in: query + description: Specifies the planned change Name. This cannot be updated. + schema: + type: string + - name: ReduceRuleIds + in: query + description: Specifies the list of rule ids to be automatically reduced to the minimum set to catch at least the same events. For example two exact name matches of files in the same directory will be reduced to one rule that matches any file in the directory. + style: form + schema: + type: array + items: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AnalyzePlannedChangeResponse' + security: + - Bearer: [ ] + post: + tags: + - plannedChanges + summary: 'Create rule reduction plans, which can be used to simplify rulesets associated with the specified planned change.' + description: 'Create rule reduction plans, which can be used to simplify rulesets associated with the specified planned change.' + operationId: AnalyzePlannedChangeanalyze_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AnalyzePlannedChange' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AnalyzePlannedChangeResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChanges/applyPlan: + get: + tags: + - plannedChanges + summary: 'Apply rule reduction plans to the specified planned change, simplifying the associated rulesets.' + description: 'Apply rule reduction plans to the specified planned change, simplifying the associated rulesets.' + operationId: ApplyPlannedChangePlanapplyPlan_Get + parameters: + - name: Name + in: query + description: Specifies the planned change Name. This cannot be updated. + schema: + type: string + - name: RuleIdsToRemove + in: query + description: Specifies the rule ids to remove. + style: form + schema: + type: array + items: + type: string + - name: RuleReductionPlan + in: query + description: Specifies the rule reduction plan. + schema: + $ref: '#/components/schemas/RuleReductionPlan2' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - plannedChanges + summary: 'Apply rule reduction plans to the specified planned change, simplifying the associated rulesets.' + description: 'Apply rule reduction plans to the specified planned change, simplifying the associated rulesets.' + operationId: ApplyPlannedChangePlanapplyPlan_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ApplyPlannedChangePlan' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChanges/updateRule: + get: + tags: + - plannedChanges + summary: Updates a rule in a planned change + description: Updates a rule in a planned change + operationId: UpdatePlannedChangeRuleupdateRule_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - plannedChanges + summary: Updates a rule in a planned change + description: Updates a rule in a planned change + operationId: UpdatePlannedChangeRuleupdateRule_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdatePlannedChangeRule' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChanges/updateRules: + get: + tags: + - plannedChanges + summary: Updates the entire rule set in a planned change + description: Updates the entire rule set in a planned change + operationId: UpdatePlannedChangeRulesupdateRules_Get + parameters: + - name: PlannedChangeName + in: query + description: Specifies the planned change definition name. + schema: + type: string + - name: Rules + in: query + description: Specifies the dictionary of 'PlannedChangeRule.Id' to 'PlannedChangeRule' rules. + schema: + title: 'Dictionary' + type: object + additionalProperties: + $ref: '#/components/schemas/PlannedChangeRule' + description: 'Dictionary' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: A named Planned Change definition. + content: + application/json: + schema: + $ref: '#/components/schemas/PlannedChangeDefinition' + deprecated: true + security: + - Bearer: [ ] + post: + tags: + - plannedChanges + summary: Updates the entire rule set in a planned change + description: Updates the entire rule set in a planned change + operationId: UpdatePlannedChangeRulesupdateRules_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdatePlannedChangeRules' + x-bodyName: body + responses: + '200': + description: A named Planned Change definition. + content: + application/json: + schema: + $ref: '#/components/schemas/PlannedChangeDefinition' + deprecated: true + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChanges/deleteRule: + get: + tags: + - plannedChanges + summary: Removes a rule from a planned change + description: Removes a rule from a planned change + operationId: DeletePlannedChangeRuledeleteRule_Get + parameters: + - name: PlannedChangeName + in: query + description: Specifies the planned change definition name. + schema: + type: string + - name: Id + in: query + description: Specifies the rule id. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - plannedChanges + summary: Removes a rule from a planned change + description: Removes a rule from a planned change + operationId: DeletePlannedChangeRuledeleteRule_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeletePlannedChangeRule' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChanges/delete: + get: + tags: + - plannedChanges + summary: Delete a planned change ruleset definition from the system. + description: Delete a planned change ruleset definition from the system. + operationId: DeletePlannedChangedelete_Get + parameters: + - name: Name + in: query + description: Specifies the planned change ruleset definition name to remove. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - plannedChanges + summary: Delete a planned change ruleset definition from the system. + description: Delete a planned change ruleset definition from the system. + operationId: DeletePlannedChangedelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeletePlannedChange' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChangeRule/add: + get: + tags: + - plannedChangeRule + summary: Add a rule to a planned change + description: Add a rule to a planned change + operationId: AddPlannedChangeRuleadd_Get + parameters: + - name: PlannedChangeName + in: query + description: Specifies the name of the planned change to which the new rule will be added. + schema: + type: string + - name: Rule + in: query + description: Specifies the new rule being added. + schema: + $ref: '#/components/schemas/PlannedChangeRule' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The id of the new item created. + content: + application/json: + schema: + $ref: '#/components/schemas/NewId' + security: + - Bearer: [ ] + post: + tags: + - plannedChangeRule + summary: Add a rule to a planned change + description: Add a rule to a planned change + operationId: AddPlannedChangeRuleadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddPlannedChangeRule' + x-bodyName: body + responses: + '200': + description: The id of the new item created. + content: + application/json: + schema: + $ref: '#/components/schemas/NewId' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /plannedChanges: + get: + tags: + - plannedChanges + summary: 'Gets a list of planned change ruleset definitions, filtered by name or id.' + description: 'Gets a list of planned change ruleset definitions, filtered by name or id.' + operationId: GetPlannedChanges_Get + parameters: + - name: Name + in: query + description: Specifies the planned change definition name to find. + schema: + type: string + - name: DisplayName + in: query + description: Specifies the planned change display name to find. + schema: + type: string + - name: DisplayNameContains + in: query + description: Specifies the partial planned change display name to find. + schema: + type: string + - name: DisallowRules + in: query + description: Specifies an optional value indicating whether the planned changes returned are allowed to have rules. + schema: + type: boolean + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Specifies returned a planned change definitions. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesResponse' + security: + - Bearer: [ ] + post: + tags: + - plannedChanges + summary: 'Gets a list of planned change ruleset definitions, filtered by name or id.' + description: 'Gets a list of planned change ruleset definitions, filtered by name or id.' + operationId: GetPlannedChanges_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetPlannedChanges' + x-bodyName: body + responses: + '200': + description: Specifies returned a planned change definitions. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPlannedChangesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /commandParser/parse: + get: + tags: + - commandParser + summary: 'Attempts to parse the supplied commandline, returning a list of disallowed command fragments on failure.' + description: 'Attempts to parse the supplied commandline, returning a list of disallowed command fragments on failure.' + operationId: ParseCommandsparse_Get + parameters: + - name: CommandLines + in: query + description: Specifies the command line + style: form + schema: + type: array + items: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ParseCommandResponse' + security: + - Bearer: [ ] + post: + tags: + - commandParser + summary: 'Attempts to parse the supplied commandline, returning a list of disallowed command fragments on failure.' + description: 'Attempts to parse the supplied commandline, returning a list of disallowed command fragments on failure.' + operationId: ParseCommandsparse_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ParseCommands' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ParseCommandResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /commandParser/whitelist: + get: + tags: + - commandParser + summary: Gets the whitelisted command component. + description: Gets the whitelisted command component. + operationId: GetWhitelistedCommandComponentwhitelist_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The paging response base. + content: + application/json: + schema: + $ref: '#/components/schemas/WhitelistCommandComponentResponse' + security: + - Bearer: [ ] + post: + tags: + - commandParser + summary: Attempts to whitelist the supplied command component. + description: Attempts to whitelist the supplied command component. + operationId: CreateWhitelistedCommandComponentwhitelist_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/CreateWhitelistedCommandComponent' + x-bodyName: body + responses: + '200': + description: The paging response base. + content: + application/json: + schema: + $ref: '#/components/schemas/WhitelistCommandComponentResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /commandParser/whitelist/all: + get: + tags: + - commandParser + summary: Attempts to get all the whitelisted command components. + description: Attempts to get all the whitelisted command components. + operationId: GetAllWhitelistedCommandComponentswhitelistall_Get + parameters: + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The paging response base. + content: + application/json: + schema: + $ref: '#/components/schemas/WhitelistCommandComponentResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /commandParser/whitelist/update: + post: + tags: + - commandParser + summary: Attempts to update the supplied command component by id. + description: Attempts to update the supplied command component by id. + operationId: UpdateWhitelistedCommandComponentwhitelistupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateWhitelistedCommandComponent' + x-bodyName: body + responses: + '200': + description: The paging response base. + content: + application/json: + schema: + $ref: '#/components/schemas/WhitelistCommandComponentResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /commandParser/whitelist/updateMany: + post: + tags: + - commandParser + summary: Attempts to bulk update the whitelisted command component with the supplied ids. + description: Attempts to bulk update the whitelisted command component with the supplied ids. + operationId: UpdateWhitelistedCommandComponentswhitelistupdateMany_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateWhitelistedCommandComponents' + x-bodyName: body + responses: + '200': + description: The paging response base. + content: + application/json: + schema: + $ref: '#/components/schemas/WhitelistCommandComponentResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /commandParser/commandComponent/addTemplates: + post: + tags: + - commandParser + summary: Adds the given template(s) to a command component. + description: Adds the given template(s) to a command component. + operationId: AddTemplatesToCommandComponentcommandComponentaddTemplates_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddTemplatesToCommandComponent' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/CommandComponentTemplateResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /commandParser/commandComponent/removeTemplates: + post: + tags: + - commandParser + summary: Attempts to remove the given template(s) from a command component. + description: Attempts to remove the given template(s) from a command component. + operationId: RemoveTemplatesFromCommandComponentcommandComponentremoveTemplates_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/RemoveTemplatesFromCommandComponent' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/CommandComponentTemplateResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /commandParser/commandComponent/templates: + get: + tags: + - commandParser + summary: Gets all templates of a command component. + description: Gets all templates of a command component. + operationId: GetAllCommandComponentTemplatescommandComponenttemplates_Get + parameters: + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The paging response base. + content: + application/json: + schema: + $ref: '#/components/schemas/GetAllCommandComponentTemplatesResponse' + security: + - Bearer: [ ] + post: + tags: + - commandParser + summary: 'Attempts to set the given template(s) to a command component, clearing old templates if they exist.' + description: 'Attempts to set the given template(s) to a command component, clearing old templates if they exist.' + operationId: SetAllTemplatesOfCommandComponentcommandComponenttemplates_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SetAllTemplatesOfCommandComponent' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/CommandComponentTemplateResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /commandParser/commandComponentMany/templates: + post: + tags: + - commandParser + summary: Gets all templates of multiple command components. + description: Gets all templates of multiple command components. + operationId: GetAllCommandComponentsTemplatescommandComponentManytemplates_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAllCommandComponentsTemplates' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetAllCommandComponentsTemplatesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /cloudTemplate/status: + get: + tags: + - cloudTemplate + summary: Provide a ProspectiveName for the Cloud System or a ReportSpecId to identify the associated cloud report but never both. Gets the state of progress in the creation of a new cloud report policy. For example it may be only partially configured and require the addition of credentials before it can be run. + description: Provide a ProspectiveName for the Cloud System or a ReportSpecId to identify the associated cloud report but never both. Gets the state of progress in the creation of a new cloud report policy. For example it may be only partially configured and require the addition of credentials before it can be run. + operationId: GetCloudTemplateCreationStatusstatus_Get + parameters: + - name: ProspectiveName + in: query + description: Specifies the prospective name of a Cloud System so that a check can be made to determine if any of the components already exist + schema: + type: string + - name: ReportSpecId + in: query + description: Specifies the id of the ReportSpecification representing this scheduled cloud report + schema: + type: string + - name: IncludeIfHidden + in: query + description: Whether or not the report associated with the ReportSpecification id will get found if it's in a hidden state + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetCloudTemplateCreationStatusResponse' + security: + - Bearer: [ ] + post: + tags: + - cloudTemplate + summary: Provide a ProspectiveName for the Cloud System or a ReportSpecId to identify the associated cloud report but never both. Gets the state of progress in the creation of a new cloud report policy. For example it may be only partially configured and require the addition of credentials before it can be run. + description: Provide a ProspectiveName for the Cloud System or a ReportSpecId to identify the associated cloud report but never both. Gets the state of progress in the creation of a new cloud report policy. For example it may be only partially configured and require the addition of credentials before it can be run. + operationId: GetCloudTemplateCreationStatusstatus_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetCloudTemplateCreationStatus' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetCloudTemplateCreationStatusResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /policyTemplate/setup: + get: + tags: + - policyTemplate + summary: Ensures that the specified baseline template has the required source and members groups and related scheduled compliance report configured. + description: Ensures that the specified baseline template has the required source and members groups and related scheduled compliance report configured. + operationId: SetupPolicyTemplatesetup_Get + parameters: + - name: PolicyTemplateName + in: query + description: Specifies the policy template name + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/SetupPolicyTemplateResponse' + security: + - Bearer: [ ] + post: + tags: + - policyTemplate + summary: Ensures that the specified baseline template has the required source and members groups and related scheduled compliance report configured. + description: Ensures that the specified baseline template has the required source and members groups and related scheduled compliance report configured. + operationId: SetupPolicyTemplatesetup_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SetupPolicyTemplate' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/SetupPolicyTemplateResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /policyTemplate/status: + get: + tags: + - policyTemplate + summary: Gets the state of progress in the creation of a new policy. For example it may be only partially configured and require the addition of rules before it can be applied to devices. + description: Gets the state of progress in the creation of a new policy. For example it may be only partially configured and require the addition of rules before it can be applied to devices. + operationId: GetPolicyTemplateCreationStatusstatus_Get + parameters: + - name: PolicyTemplateName + in: query + description: Specifies the policy template name to query + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetPolicyTemplateCreationStatusResponse' + security: + - Bearer: [ ] + post: + tags: + - policyTemplate + summary: Gets the state of progress in the creation of a new policy. For example it may be only partially configured and require the addition of rules before it can be applied to devices. + description: Gets the state of progress in the creation of a new policy. For example it may be only partially configured and require the addition of rules before it can be applied to devices. + operationId: GetPolicyTemplateCreationStatusstatus_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetPolicyTemplateCreationStatus' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetPolicyTemplateCreationStatusResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /policyTemplate/add: + get: + tags: + - policyTemplate + summary: Adds a device config template. + description: Adds a device config template. + operationId: AddPolicyTemplateadd_Get + parameters: + - name: Template + in: query + description: Specifies the template. + schema: + $ref: '#/components/schemas/PolicyTemplateRuleSet' + - name: UsageTags + in: query + description: 'Specifies the policy usages type to store on the Template e.g. Baseline, Tracking etc...' + style: form + schema: + type: array + items: + type: string + - name: ChangeComment + in: query + description: Specifies a short description of the change for auditing purposes. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Response to a request for matching config templates. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPolicyTemplatesResponse' + security: + - Bearer: [ ] + post: + tags: + - policyTemplate + summary: Adds a device config template. + description: Adds a device config template. + operationId: AddPolicyTemplateadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddPolicyTemplate' + x-bodyName: body + responses: + '200': + description: Response to a request for matching config templates. + content: + application/json: + schema: + $ref: '#/components/schemas/GetPolicyTemplatesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /policyRecent: + get: + tags: + - policyRecent + summary: Gets the most recent policy run results for each matching policy in the time range. + description: Gets the most recent policy run results for each matching policy in the time range. + operationId: GetMostRecentPolicyResults_Get + parameters: + - name: UsageTag + in: query + description: Restricts the results returned to compliance policies marked with the specified UsageTagsApplicable. + schema: + enum: + - All + - Database + - Linux + - Network + - OSX + - Unix + - Windows + - Baseline + - Compliance + - Tracking + - Hardening + - Cloud + type: string + x-nullable: false + - name: GroupName + in: query + description: Specifies the group name. + schema: + type: string + - name: ExcludePoliciesWithNoDevices + in: query + description: Restricts the results returned to policies run on groups containing at least one device. + schema: + type: boolean + x-nullable: false + - name: ExcludePoliciesNotSetup + in: query + description: Baselines only - excludes policies not yet fully setup from the results. + schema: + type: boolean + x-nullable: false + - name: ExcludePoliciesWithNoResults + in: query + description: Baselines only - excludes policies with no results in the time period from the results. + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Response to a request for matching config templates. + content: + application/json: + schema: + $ref: '#/components/schemas/GetMostRecentPolicyResultsResponse' + security: + - Bearer: [ ] + post: + tags: + - policyRecent + summary: Gets the most recent policy run results for each matching policy in the time range. + description: Gets the most recent policy run results for each matching policy in the time range. + operationId: GetMostRecentPolicyResults_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetMostRecentPolicyResults' + x-bodyName: body + responses: + '200': + description: Response to a request for matching config templates. + content: + application/json: + schema: + $ref: '#/components/schemas/GetMostRecentPolicyResultsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /policyTemplate/add/rules: + get: + tags: + - policyTemplate + summary: Add a rules to a baseline policy based on events + description: Add a rules to a baseline policy based on events + operationId: AddPolicyTemplateRulesaddrules_Get + parameters: + - name: Name + in: query + description: Specifies the policy template name to add rules to + schema: + type: string + - name: AddDeviceInformationRule + in: query + description: Specifies whether to add the device information section at the start of the report + schema: + type: boolean + x-nullable: false + - name: ChangeComment + in: query + description: Specifies a short description of the change for auditing purposes. + schema: + type: string + - name: PreviewChanges + in: query + description: Specifies if the rule changes should only be previewed and not saved to the template. + schema: + type: boolean + x-nullable: false + - name: StartUtc + in: query + description: 'Gets or sets the start of the period to return events for, null implies all.' + schema: + type: string + format: date-time + - name: RuleOptions + in: query + description: Specifies any Rule Builder Options. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/RuleBuilderOptions' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AddPolicyTemplateRulesResponse' + security: + - Bearer: [ ] + post: + tags: + - policyTemplate + summary: Add a rules to a baseline policy based on events + description: Add a rules to a baseline policy based on events + operationId: AddPolicyTemplateRulesaddrules_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddPolicyTemplateRules' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AddPolicyTemplateRulesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /devicePolicyTemplate/add: + get: + tags: + - devicePolicyTemplate + summary: Adds a device policy template to the system. The specified template should be supplied as Xml. + description: Adds a device policy template to the system. The specified template should be supplied as Xml. + operationId: AddPolicyTemplateXmladd_Get + parameters: + - name: Name + in: query + description: Specifies the name. + schema: + type: string + - name: Xml + in: query + description: Specifies the xml. + schema: + type: string + - name: PassMark + in: query + description: Specifies the pass mark. Only relevant for 'TemplateType' of 'PolicyTemplateType.ComplianceReport'. + schema: + type: number + format: double + x-nullable: false + - name: AsCopyOf + in: query + description: Specifies as a copy of an existing template named this + schema: + type: string + - name: CopyTemplateValues + in: query + description: 'Specifies a copy of an existing template should only copy the tracking information, not the values' + schema: + type: boolean + x-nullable: false + - name: AsCopyOfVersion + in: query + description: Specifies version to copy when using AsCopyOf + schema: + type: string + - name: AdditionalUsageTags + in: query + description: 'Specifies extra UsageTagsApplicable to record against the template, in addition to those specified in the Xml' + style: form + schema: + type: array + items: + type: string + x-nullable: false + - name: OverwriteIfExists + in: query + description: Specifies a flag to indicate whether or not not overwrite the report / config if it already exists + schema: + type: boolean + x-nullable: false + - name: ExternalDataFileId + in: query + description: Specifies an external file id if the XML is not provided 'in line' + schema: + type: string + - name: IsSystem + in: query + description: Specifies a flag to indicate whether or not the template is part of the standard system set or a customized version + schema: + type: boolean + x-nullable: false + - name: IsUiUpload + in: query + description: Specifies a flag to indicate whether or not the template is has been uploaded from the UI + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Response to adding a device policy template to the system. + content: + application/json: + schema: + $ref: '#/components/schemas/AddPolicyTemplateResponse' + security: + - Bearer: [ ] + post: + tags: + - devicePolicyTemplate + summary: Adds a device policy template to the system. The specified template should be supplied as Xml. + description: Adds a device policy template to the system. The specified template should be supplied as Xml. + operationId: AddPolicyTemplateXmladd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddPolicyTemplateXml' + x-bodyName: body + responses: + '200': + description: Response to adding a device policy template to the system. + content: + application/json: + schema: + $ref: '#/components/schemas/AddPolicyTemplateResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /devicePolicyTemplate/delete: + get: + tags: + - devicePolicyTemplate + summary: Deletes a device policy template from the system. The specified template can be either config or a compliance report template. + description: Deletes a device policy template from the system. The specified template can be either config or a compliance report template. + operationId: DeletePolicyTemplatedelete_Get + parameters: + - name: Name + in: query + description: Specifies the policy template name to delete + schema: + type: string + - name: TemplateVersion + in: query + description: 'Specifies the policy template version to delete. Optional, if not supplied all versions of the template are removed.' + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - devicePolicyTemplate + summary: Deletes a device policy template from the system. The specified template can be either config or a compliance report template. + description: Deletes a device policy template from the system. The specified template can be either config or a compliance report template. + operationId: DeletePolicyTemplatedelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeletePolicyTemplate' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /uploadPolicyTemplate: + post: + tags: + - uploadPolicyTemplate + summary: Upload a policy template file + description: Upload a policy template file + operationId: UploadPolicyTemplate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UploadPolicyTemplate' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UploadPolicyTemplateResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /policyTemplateAsFile: + get: + tags: + - policyTemplateAsFile + summary: Returns a policy template as an xml file in the Http Response stream. + description: Returns a policy template as an xml file in the Http Response stream. + operationId: GetPolicyTemplateAsFile_Get + parameters: + - name: Name + in: query + description: Specifies the templatem name to retrieve. + schema: + type: string + - name: AgentDeviceId + in: query + description: Specifies the agent device id to get the current combined template for. Note either this or the 'Name' should be specified. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + post: + tags: + - policyTemplateAsFile + summary: Returns a policy template as an xml file in the Http Response stream. + description: Returns a policy template as an xml file in the Http Response stream. + operationId: GetPolicyTemplateAsFile_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetPolicyTemplateAsFile' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agentProcesses: + get: + tags: + - agentProcesses + summary: Get the list of running processes from a specified agent / device.Used to enable 'white-listing' if existing processes from a running agent when building device config. + description: Get the list of running processes from a specified agent / device.Used to enable 'white-listing' if existing processes from a running agent when building device config. + operationId: GetAgentProcesses_Get + parameters: + - name: AgentDevice + in: query + description: Specifies the agent/device to get the processes from + schema: + $ref: '#/components/schemas/AgentDevice' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Describes the list of running processes on a device. + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentProcessesResponse' + security: + - Bearer: [ ] + post: + tags: + - agentProcesses + summary: Get the list of running processes from a specified agent / device.Used to enable 'white-listing' if existing processes from a running agent when building device config. + description: Get the list of running processes from a specified agent / device.Used to enable 'white-listing' if existing processes from a running agent when building device config. + operationId: GetAgentProcesses_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentProcesses' + x-bodyName: body + responses: + '200': + description: Describes the list of running processes on a device. + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentProcessesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /startAgentTracker: + get: + tags: + - startAgentTracker + summary: Ask an agent to start a specified tracker. + description: Ask an agent to start a specified tracker. + operationId: StartAgentTracker_Get + parameters: + - name: AgentDevice + in: query + description: Specifies the agent the tracker will be started on. Alternative to AgentDeviceId. + schema: + $ref: '#/components/schemas/AgentDevice' + - name: AgentDeviceId + in: query + description: Specifies the agent id the tracker will be started on. Alternative to AgentDevice. + schema: + type: string + - name: TrackerName + in: query + description: Specifies the tracker to be started + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/StartAgentTrackerResponse' + security: + - Bearer: [ ] + post: + tags: + - startAgentTracker + summary: Ask an agent to start a specified tracker. + description: Ask an agent to start a specified tracker. + operationId: StartAgentTracker_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/StartAgentTracker' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/StartAgentTrackerResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agentServices: + get: + tags: + - agentServices + summary: Get the list of running Services from a specified agent/device. Used to enable 'white - listing' if existing Service from a running agent when building device config. + description: Get the list of running Services from a specified agent/device. Used to enable 'white - listing' if existing Service from a running agent when building device config. + operationId: GetAgentServices_Get + parameters: + - name: AgentDevice + in: query + description: Specifies the agent/device to get the Services from + schema: + $ref: '#/components/schemas/AgentDevice' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Describes the list of running services on a device. + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentServicesResponse' + security: + - Bearer: [ ] + post: + tags: + - agentServices + summary: Get the list of running Services from a specified agent/device. Used to enable 'white - listing' if existing Service from a running agent when building device config. + description: Get the list of running Services from a specified agent/device. Used to enable 'white - listing' if existing Service from a running agent when building device config. + operationId: GetAgentServices_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentServices' + x-bodyName: body + responses: + '200': + description: Describes the list of running services on a device. + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentServicesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /policyTemplates/activeVersion: + get: + tags: + - policyTemplates + summary: Sets a specific version of a named policy template as the active one. + description: Sets a specific version of a named policy template as the active one. + operationId: SetActivePolicyTemplateactiveVersion_Get + parameters: + - name: TemplateName + in: query + description: Specifies the template name. + schema: + type: string + - name: ActiveVersion + in: query + description: Specifies the version of the template to make active. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - policyTemplates + summary: Sets a specific version of a named policy template as the active one. + description: Sets a specific version of a named policy template as the active one. + operationId: SetActivePolicyTemplateactiveVersion_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SetActivePolicyTemplate' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /policyTemplates/update: + get: + tags: + - policyTemplates + summary: Update matching config templates. + description: Update matching config templates. + operationId: UpdatePolicyTemplatesupdate_Get + parameters: + - name: Name + in: query + description: Specifies the name (id) to search for. + schema: + type: string + - name: NameContains + in: query + description: Specifies the text the name contains. Used to search for partial match if 'Name' not specified. + schema: + type: string + - name: ReturnXml + in: query + description: Specifies a value indicating whether to return the template xml in the response. Defaults to false. + schema: + type: boolean + x-nullable: false + - name: ReturnSignatures + in: query + description: Specifies a value indicating whether to calculate and return the template signatures in the response. Defaults to false. + schema: + type: boolean + x-nullable: false + - name: IsActive + in: query + description: Get the Active version of a template + schema: + type: boolean + - name: IsLatest + in: query + description: Get the Latest version of a template + schema: + type: boolean + - name: HasRules + in: query + description: Get templates with Rules + schema: + type: boolean + - name: HasTrackers + in: query + description: Get templates with Trackers + schema: + type: boolean + - name: TemplateTrackerTypes + in: query + description: Specifies the template's tracker types. + style: form + schema: + type: array + items: + type: string + - name: TemplateVersion + in: query + description: Specifies the template version to get. + schema: + type: string + - name: UsageTags + in: query + description: Specifies the policy usage types to get. + style: form + schema: + type: array + items: + type: string + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - policyTemplates + summary: Update matching config templates. + description: Update matching config templates. + operationId: UpdatePolicyTemplatesupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdatePolicyTemplates' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceConfigTemplate: + get: + tags: + - deviceConfigTemplate + summary: Gets a named device config template. + description: Gets a named device config template. + operationId: GetDeviceConfigTemplate_Get + parameters: + - name: Name + in: query + description: Specifies the template name. + schema: + type: string + - name: IncludeSystemFilters + in: query + description: Specifies a value indicating whether to include system defined filters and path match definitions. + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Represents a named policy tracking configuration and rule-set template. + content: + application/json: + schema: + $ref: '#/components/schemas/PolicyTemplateRuleSet' + security: + - Bearer: [ ] + post: + tags: + - deviceConfigTemplate + summary: Gets a named device config template. + description: Gets a named device config template. + operationId: GetDeviceConfigTemplate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetDeviceConfigTemplate' + x-bodyName: body + responses: + '200': + description: Represents a named policy tracking configuration and rule-set template. + content: + application/json: + schema: + $ref: '#/components/schemas/PolicyTemplateRuleSet' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceConfigTemplateNames: + get: + tags: + - deviceConfigTemplateNames + summary: 'Gets a list of device tracking template names, optionally filtering by trackers contained (e.g. find templates with a process tracker).' + description: 'Gets a list of device tracking template names, optionally filtering by trackers contained (e.g. find templates with a process tracker).' + operationId: GetDeviceConfigTemplateNames_Get + parameters: + - name: TrackersContained + in: query + description: Specifies the trackers contained. Optional. If specified this filters the returned list of template names to include only those containing the named trackers (eg 'processtracker'). + style: form + schema: + type: array + items: + type: string + - name: AgentDeviceIds + in: query + description: 'Specifies the agent devices. Optional. If specified this filters the returned list of template names to include only those currently applied to ALL the listed devices due to their group memberships, i.e. an intersection of group membership sets.' + style: form + schema: + type: array + items: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + type: string + security: + - Bearer: [ ] + post: + tags: + - deviceConfigTemplateNames + summary: 'Gets a list of device tracking template names, optionally filtering by trackers contained (e.g. find templates with a process tracker).' + description: 'Gets a list of device tracking template names, optionally filtering by trackers contained (e.g. find templates with a process tracker).' + operationId: GetDeviceConfigTemplateNames_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetDeviceConfigTemplateNames' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + type: string + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /addDeviceConfigProcessRules: + get: + tags: + - addDeviceConfigProcessRules + summary: Adds white/grey/black listing to process rules in the specified device tracking configuration template. + description: Adds white/grey/black listing to process rules in the specified device tracking configuration template. + operationId: AddDeviceConfigProcessRules_Get + parameters: + - name: DeviceTemplateName + in: query + description: The name of the device tracking configuration template + schema: + type: string + - name: Rules + in: query + description: A list of all the Rules + style: form + schema: + type: array + items: + $ref: '#/components/schemas/Process' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - addDeviceConfigProcessRules + summary: Adds white/grey/black listing to process rules in the specified device tracking configuration template. + description: Adds white/grey/black listing to process rules in the specified device tracking configuration template. + operationId: AddDeviceConfigProcessRules_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddDeviceConfigProcessRules' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groupPolicy: + get: + tags: + - groupPolicy + summary: Get the configured config policy template for the specified group or by individual template name. + description: Get the configured config policy template for the specified group or by individual template name. + operationId: GetGroupPolicy_Get + parameters: + - name: GroupName + in: query + description: Specifies the group name. Optional. + schema: + type: string + - name: GroupNames + in: query + description: Specifies the group names. Optional. + style: form + schema: + type: array + items: + type: string + - name: PolicyTemplateName + in: query + description: Specifies the policy template name. Optional. + schema: + type: string + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response to the request for configured policy templates on the group. + content: + application/json: + schema: + $ref: '#/components/schemas/GetGroupPolicyResponse' + security: + - Bearer: [ ] + post: + tags: + - groupPolicy + summary: Get the configured config policy template for the specified group or by individual template name. + description: Get the configured config policy template for the specified group or by individual template name. + operationId: GetGroupPolicy_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetGroupPolicy' + x-bodyName: body + responses: + '200': + description: The response to the request for configured policy templates on the group. + content: + application/json: + schema: + $ref: '#/components/schemas/GetGroupPolicyResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groupPolicyNames: + get: + tags: + - groupPolicyNames + summary: Get the configured config policy template names for the specified groups. + description: Get the configured config policy template names for the specified groups. + operationId: GetGroupPolicyConfigNames_Get + parameters: + - name: GroupNames + in: query + description: Specifies the list of group names to get the config for + style: form + schema: + type: array + items: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Dictionary>' + content: + application/json: + schema: + title: 'Dictionary>' + type: object + additionalProperties: + type: array + items: + type: string + description: 'Dictionary>' + security: + - Bearer: [ ] + post: + tags: + - groupPolicyNames + summary: Get the configured config policy template names for the specified groups. + description: Get the configured config policy template names for the specified groups. + operationId: GetGroupPolicyConfigNames_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetGroupPolicyConfigNames' + x-bodyName: body + responses: + '200': + description: 'Dictionary>' + content: + application/json: + schema: + title: 'Dictionary>' + type: object + additionalProperties: + type: array + items: + type: string + description: 'Dictionary>' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groupPolicy/add: + get: + tags: + - groupPolicy + summary: Adds a config template to a group. + description: Adds a config template to a group. + operationId: AddGroupPolicyadd_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + - name: GroupName + in: query + description: Specifies the group name. + schema: + type: string + - name: GroupDisplayName + in: query + description: Specifies the group display name. + schema: + type: string + - name: PolicyTemplateName + in: query + description: Specifies the policy template name. + schema: + type: string + - name: PolicyTemplateDisplayName + in: query + description: Specifies the policy template display name. + schema: + type: string + - name: IsTrusted + in: query + description: Specifies if policy template contains trusted commands. + schema: + type: boolean + responses: + '200': + description: The response to the request to add a configured policy template to the group. + content: + application/json: + schema: + $ref: '#/components/schemas/AddGroupPolicyResponse' + security: + - Bearer: [ ] + post: + tags: + - groupPolicy + summary: Adds a config template to a group. + description: Adds a config template to a group. + operationId: AddGroupPolicyadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddGroupPolicy' + x-bodyName: body + responses: + '200': + description: The response to the request to add a configured policy template to the group. + content: + application/json: + schema: + $ref: '#/components/schemas/AddGroupPolicyResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groupPolicy/delete: + get: + tags: + - groupPolicy + summary: Removes a config template from a group. + description: Removes a config template from a group. + operationId: DeleteGroupPolicydelete_Get + parameters: + - name: GroupName + in: query + description: Specifies the group name to delete the policy from. + schema: + type: string + - name: PolicyTemplateName + in: query + description: Specifies the policy template name to remove from the group. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - groupPolicy + summary: Removes a config template from a group. + description: Removes a config template from a group. + operationId: DeleteGroupPolicydelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteGroupPolicy' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reParentDevices: + get: + tags: + - reParentDevices + summary: Re-parents the given devices to the specified Agent. + description: Re-parents the given devices to the specified Agent. + operationId: ReParentDevices_Get + parameters: + - name: Devices + in: query + description: A list of agent device IDs to be re-parented. + style: form + schema: + type: array + items: + type: string + - name: AgentDeviceId + in: query + description: The agent device id to re-parent the devices to. + schema: + type: string + - name: MigrateEvents + in: query + description: A boolean that controls wether to migrate any 'old' events to the new agent device id combination. + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Dictionary' + content: + application/json: + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + security: + - Bearer: [ ] + post: + tags: + - reParentDevices + summary: Re-parents the given devices to the specified Agent. + description: Re-parents the given devices to the specified Agent. + operationId: ReParentDevices_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ReParentDevices' + x-bodyName: body + responses: + '200': + description: 'Dictionary' + content: + application/json: + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /exportAgents: + get: + tags: + - exportAgents + summary: Export a list of agent details. + description: Export a list of agent details. + operationId: ExportAgents_Get + parameters: + - name: DeviceFilter + in: query + description: Specifies the device filter used to control the list of agents + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: ExportFormat + in: query + description: Specifies the export format + schema: + enum: + - Default + - Excel + - PDF + - HTML + - CSV + - JSON + - CSVXlsx + type: string + x-nullable: false + - name: ReportTitle + in: query + description: Specifies the title for the report + schema: + type: string + - name: TimeZoneId + in: query + description: Specifies the timezone id to do the export in + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + post: + tags: + - exportAgents + summary: Export a list of agent details. + description: Export a list of agent details. + operationId: ExportAgents_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ExportAgents' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agentsRanked: + get: + tags: + - agentsRanked + summary: A request to return agents matching the device filter. + description: A request to return agents matching the device filter. + operationId: GetAgentsRanked_Get + parameters: + - name: DeviceFilter + in: query + description: Specifies the agents to search for by id or group membership. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: GetAgentGroupDetails + in: query + description: Specifies a value indicating whether to get agent group details. + schema: + type: boolean + x-nullable: false + - name: GetRelatedCredentials + in: query + description: Specifies a value indicating whether to get related credentials. + schema: + type: boolean + x-nullable: false + - name: GetRelatedPlannedChanges + in: query + description: Specifies a value indicating whether to get related planned changes. + schema: + type: boolean + x-nullable: false + - name: GetRelatedTemplates + in: query + description: Specifies a value indicating whether to get templates applied to the returned agents. + schema: + type: boolean + x-nullable: false + - name: IncludeMasterInFilter + in: query + description: Specifies a value indicating whether to include proxy master devices in filters that match a child proxied device but would not otherwise return the proxying master. + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response objeect for GetAgentsRanked + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentsRankedResponse' + security: + - Bearer: [ ] + post: + tags: + - agentsRanked + summary: A request to return agents matching the device filter. + description: A request to return agents matching the device filter. + operationId: GetAgentsRanked_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentsRanked' + x-bodyName: body + responses: + '200': + description: The response objeect for GetAgentsRanked + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentsRankedResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groupMembers: + get: + tags: + - groupMembers + summary: A request to return group members matching the criteria. + description: A request to return group members matching the criteria. + operationId: GroupMembers_Get + parameters: + - name: GroupName + in: query + description: The name of the group to query. + schema: + type: string + - name: MemberType + in: query + description: Specifies the member type to return (AgentDevice or Group). + schema: + enum: + - None + - AgentDevice + - Group + type: string + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response to group members request. + content: + application/json: + schema: + $ref: '#/components/schemas/GroupMembersResponse' + security: + - Bearer: [ ] + post: + tags: + - groupMembers + summary: A request to return group members matching the criteria. + description: A request to return group members matching the criteria. + operationId: GroupMembers_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GroupMembers' + x-bodyName: body + responses: + '200': + description: The response to group members request. + content: + application/json: + schema: + $ref: '#/components/schemas/GroupMembersResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groups: + get: + tags: + - groups + summary: A request to return groups matching the criteria. + description: A request to return groups matching the criteria. + operationId: GetGroups_Get + parameters: + - name: Name + in: query + description: The internal name of the group to find. + schema: + type: string + - name: DisplayName + in: query + description: The display name of the group to find. + schema: + type: string + - name: DisplayNameContains + in: query + description: A fragment of the display name in the groups to find. + schema: + type: string + - name: UserName + in: query + description: The alternative user name to retrieve groups for. Note that the returned list will also be filtered by the visibility of groups the authenticated user has. + schema: + type: string + - name: MemberOf + in: query + description: 'The groups of which the returned groups must be a member. If null, members of any group can be returned, if an empty list only groups which are members of no groups (i.e. have no parent) are returned.' + style: form + schema: + type: array + items: + type: string + - name: OnlyGroupsWithUpdate + in: query + description: Gets or sets the a flag indicating whether to only return groups with an agent update scheduled. + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response to a get groups request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetGroupsResponse' + security: + - Bearer: [ ] + post: + tags: + - groups + summary: A request to return groups matching the criteria. + description: A request to return groups matching the criteria. + operationId: GetGroups_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetGroups' + x-bodyName: body + responses: + '200': + description: The response to a get groups request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetGroupsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groupsTree: + get: + tags: + - groupsTree + summary: Gets a tree structure representing the groups hierarchy. + description: Gets a tree structure representing the groups hierarchy. + operationId: GetGroupsTree_Get + responses: + '200': + description: A returned tree structure representing the groups hierarchy. + content: + application/json: + schema: + $ref: '#/components/schemas/GetGroupsTreeResponse' + security: + - Bearer: [ ] + post: + tags: + - groupsTree + summary: Gets a tree structure representing the groups hierarchy. + description: Gets a tree structure representing the groups hierarchy. + operationId: GetGroupsTree_Post + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetGroupsTree' + x-bodyName: body + responses: + '200': + description: A returned tree structure representing the groups hierarchy. + content: + application/json: + schema: + $ref: '#/components/schemas/GetGroupsTreeResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groups/delete: + get: + tags: + - groups + summary: Represents a request to delete a group matching the criteria. + description: Represents a request to delete a group matching the criteria. + operationId: DeleteGroupdelete_Get + parameters: + - name: Name + in: query + description: Gets or sets the Group Matching Name. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - groups + summary: Represents a request to delete a group matching the criteria. + description: Represents a request to delete a group matching the criteria. + operationId: DeleteGroupdelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteGroup' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groups/add: + get: + tags: + - groups + summary: Adds a new Group definition. + description: Adds a new Group definition. + operationId: AddGroupadd_Get + parameters: + - name: ParentGroupName + in: query + description: Optionally specifies a parent group for the new group. If this is not supplied the group is automatically added as a child of the root 'All Devices' group unless NoParent is set + schema: + type: string + - name: DisplayName + in: query + description: Specifies the display name of the new group + schema: + type: string + - name: GroupType + in: query + description: Specifies the type of members allowed in the new group. Can be a combination of the allowed values + required: true + schema: + enum: + - None + - UserContainer + - DeviceContainer + - GroupContainer + type: int + x-nullable: false + - name: IsSystem + in: query + description: Specifies a flag indicating if this is a 'system' group or not + schema: + type: boolean + x-nullable: false + - name: Members + in: query + description: Specifies the list of ids of 'child group' members of the new group + style: form + schema: + type: array + items: + type: string + - name: RiskScore + in: query + description: Specifies the risk score of the group. + schema: + enum: + - Undefined + - Low + - MediumLow + - Medium + - MediumHigh + - High + type: string + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Represents a response to adding a new group + content: + application/json: + schema: + $ref: '#/components/schemas/AddGroupResponse' + security: + - Bearer: [ ] + post: + tags: + - groups + summary: Adds a new Group definition. + description: Adds a new Group definition. + operationId: AddGroupadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddGroup' + x-bodyName: body + responses: + '200': + description: Represents a response to adding a new group + content: + application/json: + schema: + $ref: '#/components/schemas/AddGroupResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groups/update: + get: + tags: + - groups + summary: Updates a Group definition. + description: Updates a Group definition. + operationId: UpdateGroupupdate_Get + parameters: + - name: Name + in: query + description: Specifies the name of the group to update + required: true + schema: + type: string + - name: DisplayName + in: query + description: Specifies the new display name of the group + schema: + type: string + - name: Members + in: query + description: Specifies the list of 'child group' members + style: form + schema: + type: array + items: + type: string + - name: RiskScore + in: query + description: Specifies the risk score of the group + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - groups + summary: Updates a Group definition. + description: Updates a Group definition. + operationId: UpdateGroupupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateGroup' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /devices/delete: + get: + tags: + - devices + summary: Represents a request to delete devices matching the criteria. Note that when a device is deleted it is moved to the Deleted group and is no longer included in the licensed device count. + description: Represents a request to delete devices matching the criteria. Note that when a device is deleted it is moved to the Deleted group and is no longer included in the licensed device count. + operationId: DeleteDevicesdelete_Get + parameters: + - name: AgentDeviceIds + in: query + description: 'The agent device ids to delete from their current groups, moving them to the Deleted group.' + style: form + schema: + type: array + items: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - devices + summary: Represents a request to delete devices matching the criteria. Note that when a device is deleted it is moved to the Deleted group and is no longer included in the licensed device count. + description: Represents a request to delete devices matching the criteria. Note that when a device is deleted it is moved to the Deleted group and is no longer included in the licensed device count. + operationId: DeleteDevicesdelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteDevices' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /devices/overdue: + get: + tags: + - devices + summary: Gets devices that have not polled in for the specified amount of time. + description: Gets devices that have not polled in for the specified amount of time. + operationId: GetOverdueDevicesoverdue_Get + parameters: + - name: OfflineSeconds + in: query + description: Specifies the number of seconds the offline device must have been offline for. + required: true + schema: + type: integer + format: int32 + x-nullable: false + - name: MemberOfGroups + in: query + description: Specifies optional list of groups the devices must be a member of. + style: form + schema: + type: array + items: + type: string + - name: NotMemberOfGroups + in: query + description: Specifies optional list of groups the devices must not be a member of. + style: form + schema: + type: array + items: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Lists devices that have not polled in for the specified amount of time. + content: + application/json: + schema: + $ref: '#/components/schemas/GetOverdueDevicesResponse' + security: + - Bearer: [ ] + post: + tags: + - devices + summary: Gets devices that have not polled in for the specified amount of time. + description: Gets devices that have not polled in for the specified amount of time. + operationId: GetOverdueDevicesoverdue_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetOverdueDevices' + x-bodyName: body + responses: + '200': + description: Lists devices that have not polled in for the specified amount of time. + content: + application/json: + schema: + $ref: '#/components/schemas/GetOverdueDevicesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /device/deletePermanently: + get: + tags: + - device + summary: 'Delete the specified Agent from the system. On first call the system will issue a challenge which must be answered and the response supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + description: 'Delete the specified Agent from the system. On first call the system will issue a challenge which must be answered and the response supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + operationId: DeleteDevicePermanentlydeletePermanently_Get + parameters: + - name: AgentId + in: query + description: Specifies the id of the agent. + schema: + type: string + - name: DeviceId + in: query + description: Specifies the id of the device. + schema: + type: string + - name: GroupName + in: query + description: Specifies the group name. + schema: + type: string + - name: Response + in: query + description: The response to a previously issued challenge for this request. Without this the call will return a challenge for which the response must be supplied on a subsequently call. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'The response to a request to delete a specified Agent from the system. On first call the system will issue a challenge which must be responded to and supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + content: + application/json: + schema: + $ref: '#/components/schemas/DeleteDevicePermanentlyResponse' + security: + - Bearer: [ ] + post: + tags: + - device + summary: 'Delete the specified Agent from the system. On first call the system will issue a challenge which must be answered and the response supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + description: 'Delete the specified Agent from the system. On first call the system will issue a challenge which must be answered and the response supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + operationId: DeleteDevicePermanentlydeletePermanently_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteDevicePermanently' + x-bodyName: body + responses: + '200': + description: 'The response to a request to delete a specified Agent from the system. On first call the system will issue a challenge which must be responded to and supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + content: + application/json: + schema: + $ref: '#/components/schemas/DeleteDevicePermanentlyResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /device/reRegister: + get: + tags: + - device + summary: Represents a request to re-register a list of previously deleted devices matching the criteria. + description: Represents a request to re-register a list of previously deleted devices matching the criteria. + operationId: ReRegisterDevicereRegister_Get + parameters: + - name: AgentDeviceIds + in: query + description: Specifies the list of combined agent and device ids. + style: form + schema: + type: array + items: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - device + summary: Represents a request to re-register a list of previously deleted devices matching the criteria. + description: Represents a request to re-register a list of previously deleted devices matching the criteria. + operationId: ReRegisterDevicereRegister_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ReRegisterDevice' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /group/deleteMembersPermanently: + get: + tags: + - group + summary: 'Delete all the specified group members from the system. On first call the system will issue a challenge which must be answered and the response supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + description: 'Delete all the specified group members from the system. On first call the system will issue a challenge which must be answered and the response supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + operationId: DeleteGroupMembersPermanentlydeleteMembersPermanently_Get + parameters: + - name: GroupName + in: query + description: Specifies the group name. + schema: + type: string + - name: Response + in: query + description: The response to a previously issued challenge for this request. Without this the call will return a challenge for which the response must be supplied on a subsequently call. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'The response to a request to delete a specified Agent from the system. On first call the system will issue a challenge which must be responded to and supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + content: + application/json: + schema: + $ref: '#/components/schemas/DeleteDevicePermanentlyResponse' + security: + - Bearer: [ ] + post: + tags: + - group + summary: 'Delete all the specified group members from the system. On first call the system will issue a challenge which must be answered and the response supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + description: 'Delete all the specified group members from the system. On first call the system will issue a challenge which must be answered and the response supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + operationId: DeleteGroupMembersPermanentlydeleteMembersPermanently_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteGroupMembersPermanently' + x-bodyName: body + responses: + '200': + description: 'The response to a request to delete a specified Agent from the system. On first call the system will issue a challenge which must be responded to and supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + content: + application/json: + schema: + $ref: '#/components/schemas/DeleteDevicePermanentlyResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceFilter/add: + get: + tags: + - deviceFilter + summary: Represents a request to add a DeviceFilter. + description: Represents a request to add a DeviceFilter. + operationId: AddDeviceFilteradd_Get + parameters: + - name: DeviceFilter + in: query + description: Specifies the device filter to add. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response to a get defvice filters request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceFiltersResponse' + security: + - Bearer: [ ] + post: + tags: + - deviceFilter + summary: Represents a request to add a DeviceFilter. + description: Represents a request to add a DeviceFilter. + operationId: AddDeviceFilteradd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddDeviceFilter' + x-bodyName: body + responses: + '200': + description: The response to a get defvice filters request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceFiltersResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceFilter/update: + get: + tags: + - deviceFilter + summary: Represents a request to update a DeviceFilter matching the given id. + description: Represents a request to update a DeviceFilter matching the given id. + operationId: UpdateDeviceFilterupdate_Get + parameters: + - name: Name + in: query + description: Specifies the name of the device filter to update. + schema: + type: string + - name: DeviceFilter + in: query + description: Specifies the new device filter. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response to a get defvice filters request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceFiltersResponse' + security: + - Bearer: [ ] + post: + tags: + - deviceFilter + summary: Represents a request to update a DeviceFilter matching the given id. + description: Represents a request to update a DeviceFilter matching the given id. + operationId: UpdateDeviceFilterupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateDeviceFilter' + x-bodyName: body + responses: + '200': + description: The response to a get defvice filters request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceFiltersResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceFilter/promote: + get: + tags: + - deviceFilter + summary: 'Represents a request to bring the named filter to the head of the list, or to create it at the head of the list if it doesn''t exist.' + description: 'Represents a request to bring the named filter to the head of the list, or to create it at the head of the list if it doesn''t exist.' + operationId: PromoteDeviceFilterpromote_Get + parameters: + - name: DeviceFilter + in: query + description: Specifies the device filter. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response to a get defvice filters request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceFiltersResponse' + security: + - Bearer: [ ] + post: + tags: + - deviceFilter + summary: 'Represents a request to bring the named filter to the head of the list, or to create it at the head of the list if it doesn''t exist.' + description: 'Represents a request to bring the named filter to the head of the list, or to create it at the head of the list if it doesn''t exist.' + operationId: PromoteDeviceFilterpromote_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PromoteDeviceFilter' + x-bodyName: body + responses: + '200': + description: The response to a get defvice filters request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceFiltersResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceFilter/delete: + get: + tags: + - deviceFilter + summary: Represents a request to delete a DeviceFilter matching the criteria. + description: Represents a request to delete a DeviceFilter matching the criteria. + operationId: DeleteDeviceFilterdelete_Get + parameters: + - name: Name + in: query + description: Specifies the name of the device filter to delete. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - deviceFilter + summary: Represents a request to delete a DeviceFilter matching the criteria. + description: Represents a request to delete a DeviceFilter matching the criteria. + operationId: DeleteDeviceFilterdelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteDeviceFilter' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceFilters: + get: + tags: + - deviceFilters + summary: Returns a paged list of DeviceFilter definitions matching the optional name criteria. + description: Returns a paged list of DeviceFilter definitions matching the optional name criteria. + operationId: GetDeviceFilters_Get + parameters: + - name: NameContains + in: query + description: Specifies text to search for in the filter Name + schema: + type: string + - name: Name + in: query + description: Specifies an exact filter Name to search for + schema: + type: string + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response to a get defvice filters request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceFiltersResponse' + security: + - Bearer: [ ] + post: + tags: + - deviceFilters + summary: Returns a paged list of DeviceFilter definitions matching the optional name criteria. + description: Returns a paged list of DeviceFilter definitions matching the optional name criteria. + operationId: GetDeviceFilters_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetDeviceFilters' + x-bodyName: body + responses: + '200': + description: The response to a get defvice filters request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceFiltersResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groupMembers/add: + get: + tags: + - groupMembers + summary: A request to add the specified Groups and Agents group members to the named group. + description: A request to add the specified Groups and Agents group members to the named group. + operationId: AddGroupMembersadd_Get + parameters: + - name: GroupName + in: query + description: The internal name/id of the group to add to. + schema: + type: string + - name: Groups + in: query + description: The names of groups to add to the parent. + style: form + schema: + type: array + items: + type: string + - name: Agents + in: query + description: The Agents to add to the parent. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/Agent' + - name: AgentDeviceIds + in: query + description: The AgentDeviceIds of agents to add to the parent. Used as an alternative to Agents property. + style: form + schema: + type: array + items: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - groupMembers + summary: A request to add the specified Groups and Agents group members to the named group. + description: A request to add the specified Groups and Agents group members to the named group. + operationId: AddGroupMembersadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddGroupMembers' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groupMembers/delete: + get: + tags: + - groupMembers + summary: A request to remove group or device members from the named group. + description: A request to remove group or device members from the named group. + operationId: DeleteGroupMembersdelete_Get + parameters: + - name: GroupName + in: query + description: The name of the parent group to remove from. + schema: + type: string + - name: Groups + in: query + description: The names of groups to remove from the parent. + style: form + schema: + type: array + items: + type: string + - name: AgentDeviceIds + in: query + description: The agent device ids to remove from the parent. + style: form + schema: + type: array + items: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - groupMembers + summary: A request to remove group or device members from the named group. + description: A request to remove group or device members from the named group. + operationId: DeleteGroupMembersdelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteGroupMembers' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceOnlineStatus: + get: + tags: + - deviceOnlineStatus + summary: Gets an indication of the device's online/offline status + description: Gets an indication of the device's online/offline status + operationId: GetDeviceOnlineStatus_Get + parameters: + - name: AgentId + in: query + description: Specifies the id of the agent. + schema: + type: string + - name: DeviceId + in: query + description: Specifies the id of the device. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: string + security: + - Bearer: [ ] + post: + tags: + - deviceOnlineStatus + summary: Gets an indication of the device's online/offline status + description: Gets an indication of the device's online/offline status + operationId: GetDeviceOnlineStatus_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetDeviceOnlineStatus' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: string + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceSettings/update: + get: + tags: + - deviceSettings + summary: 'Gets the device settings for the device, based on the global device settings and any device specific overrides.' + description: 'Gets the device settings for the device, based on the global device settings and any device specific overrides.' + operationId: UpdateDeviceSettingsupdate_Get + parameters: + - name: AgentId + in: query + description: Specifies the id of the agent. Either AgentId and DeviceId or GroupName must be supplied. + schema: + type: string + - name: DeviceId + in: query + description: Specifies the id of the device. Either AgentId and DeviceId or GroupName must be supplied. + schema: + type: string + - name: FileLiveTrackingRequiresBaselineCompletion + in: query + description: Specifies whether a full baseline must be completed before live file tracking can be started. Optional + schema: + type: boolean + - name: GroupName + in: query + description: Specifies the group name. Either AgentId and DeviceId or GroupName must be supplied. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'The device settings represents the device specific options such as customised local ui password details, and tracker performance settings.' + content: + application/json: + schema: + $ref: '#/components/schemas/DeviceSettings' + security: + - Bearer: [ ] + post: + tags: + - deviceSettings + summary: 'Gets the device settings for the device, based on the global device settings and any device specific overrides.' + description: 'Gets the device settings for the device, based on the global device settings and any device specific overrides.' + operationId: UpdateDeviceSettingsupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateDeviceSettings' + x-bodyName: body + responses: + '200': + description: 'The device settings represents the device specific options such as customised local ui password details, and tracker performance settings.' + content: + application/json: + schema: + $ref: '#/components/schemas/DeviceSettings' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceCredentials/add: + get: + tags: + - deviceCredentials + summary: A request to associate named credentials with an agent. + description: A request to associate named credentials with an agent. + operationId: AddCredentialsToAgentDeviceadd_Get + parameters: + - name: AgentDevice + in: query + description: Specifies the agent device. + schema: + $ref: '#/components/schemas/AgentDevice' + - name: CredentialsKey + in: query + description: Specifies the credentials key. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - deviceCredentials + summary: A request to associate named credentials with an agent. + description: A request to associate named credentials with an agent. + operationId: AddCredentialsToAgentDeviceadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddCredentialsToAgentDevice' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceCredentials/delete: + get: + tags: + - deviceCredentials + summary: A request to remove named credentials from an agent. + description: A request to remove named credentials from an agent. + operationId: RemoveCredentialsFromAgentDevicedelete_Get + parameters: + - name: AgentDevice + in: query + description: Specifies the agent device. + schema: + $ref: '#/components/schemas/AgentDevice' + - name: CredentialKey + in: query + description: Specifies the credential key. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - deviceCredentials + summary: A request to remove named credentials from an agent. + description: A request to remove named credentials from an agent. + operationId: RemoveCredentialsFromAgentDevicedelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/RemoveCredentialsFromAgentDevice' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceName/update: + get: + tags: + - deviceName + summary: A request to update the display name of an agent. + description: A request to update the display name of an agent. + operationId: SetAgentDeviceNameupdate_Get + parameters: + - name: AgentDevice + in: query + description: Specifies the agent device. + schema: + $ref: '#/components/schemas/AgentDevice' + - name: DeviceName + in: query + description: Specifies the device name. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - deviceName + summary: A request to update the display name of an agent. + description: A request to update the display name of an agent. + operationId: SetAgentDeviceNameupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SetAgentDeviceName' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /deviceHostType/update: + get: + tags: + - deviceHostType + summary: A request to update the host type of an agent. + description: A request to update the host type of an agent. + operationId: SetAgentHostTypeupdate_Get + parameters: + - name: AgentDevice + in: query + description: Specifies the agent device. + schema: + $ref: '#/components/schemas/AgentDevice' + - name: HostType + in: query + description: Specifies the device type. + schema: + enum: + - Unknown + - Unix + - Windows + - Network + - Database + - Cloud + - ESX + - Splunk + type: string + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - deviceHostType + summary: A request to update the host type of an agent. + description: A request to update the host type of an agent. + operationId: SetAgentHostTypeupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SetAgentHostType' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /testAgentCredentials: + get: + tags: + - testAgentCredentials + summary: Ask an agent to test the credentials for a device it is proxying. + description: Ask an agent to test the credentials for a device it is proxying. + operationId: TestAgentCredentials_Get + parameters: + - name: AgentDeviceId + in: query + description: Specifies the agent device id whose credentials are to be tested. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/TestAgentCredentialsResponse' + security: + - Bearer: [ ] + post: + tags: + - testAgentCredentials + summary: Ask an agent to test the credentials for a device it is proxying. + description: Ask an agent to test the credentials for a device it is proxying. + operationId: TestAgentCredentials_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TestAgentCredentials' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/TestAgentCredentialsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /ipBlocking: + get: + tags: + - ipBlocking + summary: Gets details of ip addresses that have been blocked. + description: Gets details of ip addresses that have been blocked. + operationId: GetIpBlocking_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/IpAddressBlockingStatus' + security: + - Bearer: [ ] + post: + tags: + - ipBlocking + summary: Gets details of ip addresses that have been blocked. + description: Gets details of ip addresses that have been blocked. + operationId: GetIpBlocking_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetIpBlocking' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/IpAddressBlockingStatus' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /ipBlocking/add: + get: + tags: + - ipBlocking + summary: Adds manual blocking of a specified ip address until a specified time. + description: Adds manual blocking of a specified ip address until a specified time. + operationId: AddIpBlockingadd_Get + parameters: + - name: IpAddress + in: query + description: Gets or sets the ip address. + schema: + type: string + - name: ExpiresUtc + in: query + description: Gets or sets the expiry date time in UTC. + schema: + type: string + format: date-time + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/IpAddressBlockingStatus' + security: + - Bearer: [ ] + post: + tags: + - ipBlocking + summary: Adds manual blocking of a specified ip address until a specified time. + description: Adds manual blocking of a specified ip address until a specified time. + operationId: AddIpBlockingadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddIpBlocking' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/IpAddressBlockingStatus' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /ipBlocking/delete: + get: + tags: + - ipBlocking + summary: Removes blocking of a specified ip address. + description: Removes blocking of a specified ip address. + operationId: DeleteIpBlockingdelete_Get + parameters: + - name: IpAddress + in: query + description: Gets or sets the ip address to remove blocking from. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/IpAddressBlockingStatus' + security: + - Bearer: [ ] + post: + tags: + - ipBlocking + summary: Removes blocking of a specified ip address. + description: Removes blocking of a specified ip address. + operationId: DeleteIpBlockingdelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteIpBlocking' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/IpAddressBlockingStatus' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /discoverDevices: + get: + tags: + - discoverDevices + summary: Discovers devices to be added as proxied devices to a master device. + description: Discovers devices to be added as proxied devices to a master device. + operationId: DiscoverDevices_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/DiscoverDevicesResponse' + security: + - Bearer: [ ] + post: + tags: + - discoverDevices + summary: Discovers devices to be added as proxied devices to a master device. + description: Discovers devices to be added as proxied devices to a master device. + operationId: DiscoverDevices_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DiscoverDevices' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/DiscoverDevicesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /discoveredDevices: + get: + tags: + - discoveredDevices + summary: Submits discovered devices as a response to a DiscoverDevices request. + description: Submits discovered devices as a response to a DiscoverDevices request. + operationId: SubmitDiscoveredDevices_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - discoveredDevices + summary: Submits discovered devices as a response to a DiscoverDevices request. + description: Submits discovered devices as a response to a DiscoverDevices request. + operationId: SubmitDiscoveredDevices_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SubmitDiscoveredDevices' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /acknowledgeEvents: + get: + tags: + - acknowledgeEvents + summary: Acknowledge a list of events as 'planned'. + description: Acknowledge a list of events as 'planned'. + operationId: AcknowledgeEvents_Get + parameters: + - name: EventIds + in: query + description: Specifies the event ids to update. + style: form + schema: + type: array + items: + type: string + - name: PlannedChangeId + in: query + description: Specifies the planned change instance id to acknowledge these events under. + schema: + type: string + - name: NewStatus + in: query + description: Specifies the new status for the alert events. + schema: + enum: + - Unknown + - NotRelevant + - Planned + - Unplanned + - UnderInvestigation + - Acknowledged + type: string + x-nullable: false + - name: DeviceFilter + in: query + description: 'Gets or sets the device selection, null implies all devices.' + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: EventFilter + in: query + description: 'Gets or sets the event selection, null implies all events.' + schema: + $ref: '#/components/schemas/EventFilter' + - name: StartUtc + in: query + description: 'Gets or sets the start of the period to return events for, null implies all.' + schema: + type: string + format: date-time + - name: EndUtc + in: query + description: 'Gets or sets the end of the period to return events for, null implies up to current time.' + schema: + type: string + format: date-time + - name: TextSearch + in: query + description: Gets or sets the text search value. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - acknowledgeEvents + summary: Acknowledge a list of events as 'planned'. + description: Acknowledge a list of events as 'planned'. + operationId: AcknowledgeEvents_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AcknowledgeEvents' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /resubmitEvents: + get: + tags: + - resubmitEvents + summary: 'Re-submit the specified events (i.e for re-consideration by the pipeline re: planned changes).' + description: 'Re-submit the specified events (i.e for re-consideration by the pipeline re: planned changes).' + operationId: ResubmitEvents_Get + parameters: + - name: GetEvents + in: query + description: Gets or sets the event IDs to re-submit + schema: + $ref: '#/components/schemas/GetEvents' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - resubmitEvents + summary: 'Re-submit the specified events (i.e for re-consideration by the pipeline re: planned changes).' + description: 'Re-submit the specified events (i.e for re-consideration by the pipeline re: planned changes).' + operationId: ResubmitEvents_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ResubmitEvents' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/event/history/{EventId}': + get: + tags: + - event + summary: Get the event history for one specific event. + description: Get the event history for one specific event. + operationId: GetEventHistoryhistoryEventId_Get + parameters: + - name: EventId + in: query + description: Specifies the specific event id to retrieve history for. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Describes an event's history. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventHistoryResponse' + security: + - Bearer: [ ] + post: + tags: + - event + summary: Get the event history for one specific event. + description: Get the event history for one specific event. + operationId: GetEventHistoryhistoryEventId_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetEventHistory' + x-bodyName: body + responses: + '200': + description: Describes an event's history. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventHistoryResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /eventDeviceGroups: + get: + tags: + - eventDeviceGroups + summary: 'Gets the list of groups that the devices associated with the given events are members of. If Intersection is true, only the groups of which all devices are a member are returned. This function is used to determine the possible groups to associate a new planned change with, such that the events will be covered by it.' + description: 'Gets the list of groups that the devices associated with the given events are members of. If Intersection is true, only the groups of which all devices are a member are returned. This function is used to determine the possible groups to associate a new planned change with, such that the events will be covered by it.' + operationId: GetEventDeviceGroups_Get + parameters: + - name: EventIds + in: query + description: ' Gets or sets the event ids.' + style: form + schema: + type: array + items: + type: string + - name: Intersection + in: query + description: ' Gets or sets a value indicating whether the returned set of groups is the intersection of the event''s device memberships, if true, or the union. If intersection, only the groups of which all devices are a member are returned.' + schema: + type: boolean + x-nullable: false + - name: DeviceFilter + in: query + description: 'Gets or sets the device selection, null implies all devices.' + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: EventFilter + in: query + description: 'Gets or sets the event selection, null implies all events.' + schema: + $ref: '#/components/schemas/EventFilter' + - name: StartUtc + in: query + description: 'Gets or sets the start of the period to return events for, null implies all.' + schema: + type: string + format: date-time + - name: EndUtc + in: query + description: 'Gets or sets the end of the period to return events for, null implies up to current time.' + schema: + type: string + format: date-time + - name: TextSearch + in: query + description: Gets or sets the text search value. + schema: + type: string + - name: GroupFindMode + in: query + description: Gets or sets how the returned group list is built. + schema: + enum: + - GroupFindFromAgents + - GroupFindFromEvents + type: string + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Represents the list of groups that the devices associated with the given events are members of. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventDeviceGroupsResponse' + security: + - Bearer: [ ] + post: + tags: + - eventDeviceGroups + summary: 'Gets the list of groups that the devices associated with the given events are members of. If Intersection is true, only the groups of which all devices are a member are returned. This function is used to determine the possible groups to associate a new planned change with, such that the events will be covered by it.' + description: 'Gets the list of groups that the devices associated with the given events are members of. If Intersection is true, only the groups of which all devices are a member are returned. This function is used to determine the possible groups to associate a new planned change with, such that the events will be covered by it.' + operationId: GetEventDeviceGroups_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetEventDeviceGroups' + x-bodyName: body + responses: + '200': + description: Represents the list of groups that the devices associated with the given events are members of. + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventDeviceGroupsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /setCommentsForEvents: + get: + tags: + - setCommentsForEvents + summary: Set comments for events + description: Set comments for events + operationId: SetCommentForEvents_Get + parameters: + - name: GetEvents + in: query + description: Event filter to specify the events to set the comment for + schema: + $ref: '#/components/schemas/GetEvents' + - name: Comment + in: query + description: The comment + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - setCommentsForEvents + summary: Set comments for events + description: Set comments for events + operationId: SetCommentForEvents_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SetCommentForEvents' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /inventory: + get: + tags: + - inventory + summary: Retrieves a list of inventory items from the hub service. + description: Retrieves a list of inventory items from the hub service. + operationId: GetInventory_Get + parameters: + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The paging response base. + content: + application/json: + schema: + $ref: '#/components/schemas/GetInventoryResponse' + security: + - Bearer: [ ] + post: + tags: + - inventory + summary: Retrieves a list of inventory items from the hub service. + description: Retrieves a list of inventory items from the hub service. + operationId: GetInventory_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetInventory' + x-bodyName: body + responses: + '200': + description: The paging response base. + content: + application/json: + schema: + $ref: '#/components/schemas/GetInventoryResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agentInventoryGrouped: + get: + tags: + - agentInventoryGrouped + summary: Retrieves a list of agent inventory items grouped by their inventory item ids from the hub service. + description: Retrieves a list of agent inventory items grouped by their inventory item ids from the hub service. + operationId: GetAgentInventoryItemsGrouped_Get + parameters: + - name: DeviceFilter + in: query + description: Specifies the agents to search for by id or group membership. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The paging response base. + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentInventoryItemsGroupedResponse' + security: + - Bearer: [ ] + post: + tags: + - agentInventoryGrouped + summary: Retrieves a list of agent inventory items grouped by their inventory item ids from the hub service. + description: Retrieves a list of agent inventory items grouped by their inventory item ids from the hub service. + operationId: GetAgentInventoryItemsGrouped_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentInventoryItemsGrouped' + x-bodyName: body + responses: + '200': + description: The paging response base. + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentInventoryItemsGroupedResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /agentInventoryAgentsDetail: + get: + tags: + - agentInventoryAgentsDetail + summary: Retrieves a list of agents with a specific inventory item id from the hub service. + description: Retrieves a list of agents with a specific inventory item id from the hub service. + operationId: GetAgentInventoryAgentsDetail_Get + parameters: + - name: DeviceFilter + in: query + description: Specifies the agents to search for by id or group membership. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The paging response base. + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentInventoryAgentsDetailResponse' + security: + - Bearer: [ ] + post: + tags: + - agentInventoryAgentsDetail + summary: Retrieves a list of agents with a specific inventory item id from the hub service. + description: Retrieves a list of agents with a specific inventory item id from the hub service. + operationId: GetAgentInventoryAgentsDetail_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAgentInventoryAgentsDetail' + x-bodyName: body + responses: + '200': + description: The paging response base. + content: + application/json: + schema: + $ref: '#/components/schemas/GetAgentInventoryAgentsDetailResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /inventory/vulnerabilityOverview: + get: + tags: + - inventory + summary: A request to return the vulnerability overview matching the device filter. + description: A request to return the vulnerability overview matching the device filter. + operationId: GetVulnerabilityOverviewvulnerabilityOverview_Get + parameters: + - name: DeviceFilter + in: query + description: Specifies the agents to search for by id or group membership. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: StartDateUtc + in: query + description: Specifies the Utc start date from which the vulnerability changes are retrieved. + schema: + type: string + format: date-time + x-nullable: false + - name: ShowIgnored + in: query + description: Specifies whether to include excluded/suppressed Cves in the overview statistics. + schema: + type: boolean + x-nullable: false + - name: GetStatus + in: query + description: Get the vulnerability scanner status as well + schema: + type: boolean + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetVulnerabilityOverview + content: + application/json: + schema: + $ref: '#/components/schemas/GetVulnerabilityOverviewResponse' + security: + - Bearer: [ ] + post: + tags: + - inventory + summary: A request to return the vulnerability overview matching the device filter. + description: A request to return the vulnerability overview matching the device filter. + operationId: GetVulnerabilityOverviewvulnerabilityOverview_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetVulnerabilityOverview' + x-bodyName: body + responses: + '200': + description: The response object for GetVulnerabilityOverview + content: + application/json: + schema: + $ref: '#/components/schemas/GetVulnerabilityOverviewResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /inventory/vulnerabilities: + get: + tags: + - inventory + summary: A request to return the vulnerabilities in an estate matching the device and vulnerability filters. + description: A request to return the vulnerabilities in an estate matching the device and vulnerability filters. + operationId: GetVulnerabilityvulnerabilities_Get + parameters: + - name: DeviceFilter + in: query + description: Specifies the agents to search for by id or group membership. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetVulnerability + content: + application/json: + schema: + $ref: '#/components/schemas/GetVulnerabilityResponse' + security: + - Bearer: [ ] + post: + tags: + - inventory + summary: A request to return the vulnerabilities in an estate matching the device and vulnerability filters. + description: A request to return the vulnerabilities in an estate matching the device and vulnerability filters. + operationId: GetVulnerabilityvulnerabilities_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetVulnerability' + x-bodyName: body + responses: + '200': + description: The response object for GetVulnerability + content: + application/json: + schema: + $ref: '#/components/schemas/GetVulnerabilityResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /inventory/softwareVulnerability: + get: + tags: + - inventory + summary: A request to return the software vulnerability matching the device filter. + description: A request to return the software vulnerability matching the device filter. + operationId: GetSoftwareVulnerabilitysoftwareVulnerability_Get + parameters: + - name: DeviceFilter + in: query + description: Specifies the agents to search for by id or group membership. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: StartDateUtc + in: query + description: Specifies the Utc start date from which the vulnerability changes are retrieved. + schema: + type: string + format: date-time + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetSoftwareVulnerability + content: + application/json: + schema: + $ref: '#/components/schemas/GetSoftwareVulnerabilityResponse' + security: + - Bearer: [ ] + post: + tags: + - inventory + summary: A request to return the software vulnerability matching the device filter. + description: A request to return the software vulnerability matching the device filter. + operationId: GetSoftwareVulnerabilitysoftwareVulnerability_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetSoftwareVulnerability' + x-bodyName: body + responses: + '200': + description: The response object for GetSoftwareVulnerability + content: + application/json: + schema: + $ref: '#/components/schemas/GetSoftwareVulnerabilityResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /inventory/update: + get: + tags: + - inventory + summary: Marks an inventory item a requiring an update / refresh. + description: Marks an inventory item a requiring an update / refresh. + operationId: MarkInventoryItemsRequiringUpdateupdate_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + post: + tags: + - inventory + summary: Marks an inventory item a requiring an update / refresh. + description: Marks an inventory item a requiring an update / refresh. + operationId: MarkInventoryItemsRequiringUpdateupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/MarkInventoryItemsRequiringUpdate' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /inventory/softwareVulnerabilityDetail: + get: + tags: + - inventory + summary: A request to return the software vulnerability matching the device filter. + description: A request to return the software vulnerability matching the device filter. + operationId: GetSoftwareVulnerabilityDetailsoftwareVulnerabilityDetail_Get + parameters: + - name: SoftwareId + in: query + description: Specifies the software item to search for. + schema: + type: string + - name: CpeName + in: query + description: Specifies the CPE Name to search for. + schema: + type: string + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetSoftwareVulnerabilityDetail + content: + application/json: + schema: + $ref: '#/components/schemas/GetSoftwareVulnerabilityDetailResponse' + security: + - Bearer: [ ] + post: + tags: + - inventory + summary: A request to return the software vulnerability matching the device filter. + description: A request to return the software vulnerability matching the device filter. + operationId: GetSoftwareVulnerabilityDetailsoftwareVulnerabilityDetail_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetSoftwareVulnerabilityDetail' + x-bodyName: body + responses: + '200': + description: The response object for GetSoftwareVulnerabilityDetail + content: + application/json: + schema: + $ref: '#/components/schemas/GetSoftwareVulnerabilityDetailResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /inventory/deviceVulnerability: + get: + tags: + - inventory + summary: A request to return the device vulnerability matching the device filter. + description: A request to return the device vulnerability matching the device filter. + operationId: GetDeviceVulnerabilitydeviceVulnerability_Get + parameters: + - name: DeviceFilter + in: query + description: Specifies the agents to search for by id or group membership. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: StartDateUtc + in: query + description: Specifies the Utc start date from which the vulnerability changes are retrieved. + schema: + type: string + format: date-time + x-nullable: false + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetDeviceVulnerability + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceVulnerabilityResponse' + security: + - Bearer: [ ] + post: + tags: + - inventory + summary: A request to return the device vulnerability matching the device filter. + description: A request to return the device vulnerability matching the device filter. + operationId: GetDeviceVulnerabilitydeviceVulnerability_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetDeviceVulnerability' + x-bodyName: body + responses: + '200': + description: The response object for GetDeviceVulnerability + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceVulnerabilityResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /inventory/deviceVulnerabilityDetail: + get: + tags: + - inventory + summary: A request to return the device vulnerability matching the device filter. + description: A request to return the device vulnerability matching the device filter. + operationId: GetDeviceVulnerabilityDetaildeviceVulnerabilityDetail_Get + parameters: + - name: AgentDeviceId + in: query + description: Specifies the agents to search for by id or group membership. + schema: + type: string + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetDeviceVulnerabilityDetail + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceVulnerabilityDetailResponse' + security: + - Bearer: [ ] + post: + tags: + - inventory + summary: A request to return the device vulnerability matching the device filter. + description: A request to return the device vulnerability matching the device filter. + operationId: GetDeviceVulnerabilityDetaildeviceVulnerabilityDetail_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetDeviceVulnerabilityDetail' + x-bodyName: body + responses: + '200': + description: The response object for GetDeviceVulnerabilityDetail + content: + application/json: + schema: + $ref: '#/components/schemas/GetDeviceVulnerabilityDetailResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /inventory/relatedSoftwareVulnerabilityDetail: + get: + tags: + - inventory + summary: Get a list of CVEs that are related to the specified CPE but not directly (e.g previous versions etc) + description: Get a list of CVEs that are related to the specified CPE but not directly (e.g previous versions etc) + operationId: GetCvesForRelatedCpesrelatedSoftwareVulnerabilityDetail_Get + parameters: + - name: CpeName + in: query + schema: + type: string + - name: InventoryItemId + in: query + schema: + type: string + - name: MaxItemsToReturn + in: query + schema: + type: integer + format: int32 + x-nullable: false + - name: ReturnFullCveData + in: query + schema: + type: boolean + x-nullable: false + - name: VulnerabilityFilter + in: query + schema: + type: string + responses: + '200': + description: The response object for GetCvesForRelatedCpes + content: + application/json: + schema: + $ref: '#/components/schemas/GetCvesForRelatedCpesResponse' + security: + - Bearer: [ ] + post: + tags: + - inventory + summary: Get a list of CVEs that are related to the specified CPE but not directly (e.g previous versions etc) + description: Get a list of CVEs that are related to the specified CPE but not directly (e.g previous versions etc) + operationId: GetCvesForRelatedCpesrelatedSoftwareVulnerabilityDetail_Post + parameters: + - name: CpeName + in: query + schema: + type: string + - name: InventoryItemId + in: query + schema: + type: string + - name: MaxItemsToReturn + in: query + schema: + type: integer + format: int32 + x-nullable: false + - name: ReturnFullCveData + in: query + schema: + type: boolean + x-nullable: false + - name: VulnerabilityFilter + in: query + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetCvesForRelatedCpes' + x-bodyName: body + responses: + '200': + description: The response object for GetCvesForRelatedCpes + content: + application/json: + schema: + $ref: '#/components/schemas/GetCvesForRelatedCpesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /inventory/vulnerableDeviceDetail: + get: + tags: + - inventory + summary: A request to return the vulnerable devices matching the CVE. + description: A request to return the vulnerable devices matching the CVE. + operationId: GetVulnerableDeviceDetailvulnerableDeviceDetail_Get + parameters: + - name: CveId + in: query + description: Specifies the cve to search for vulnerable devices. + schema: + type: string + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetDeviceVulnerabilityDetail + content: + application/json: + schema: + $ref: '#/components/schemas/GetVulnerableDeviceDetailResponse' + security: + - Bearer: [ ] + post: + tags: + - inventory + summary: A request to return the vulnerable devices matching the CVE. + description: A request to return the vulnerable devices matching the CVE. + operationId: GetVulnerableDeviceDetailvulnerableDeviceDetail_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetVulnerableDeviceDetail' + x-bodyName: body + responses: + '200': + description: The response object for GetDeviceVulnerabilityDetail + content: + application/json: + schema: + $ref: '#/components/schemas/GetVulnerableDeviceDetailResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /inventory/ignoreCves: + get: + tags: + - inventory + summary: A request to ignore one or more Cves until a given data. + description: A request to ignore one or more Cves until a given data. + operationId: IgnoreCveItemignoreCves_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + post: + tags: + - inventory + summary: A request to ignore one or more Cves until a given data. + description: A request to ignore one or more Cves until a given data. + operationId: IgnoreCveItemignoreCves_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/IgnoreCveItem' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /vulnerabilityscanstatus: + get: + tags: + - vulnerabilityscanstatus + summary: A request to return the software vulnerability scan status. + description: A request to return the software vulnerability scan status. + operationId: GetVulnerabilityScanStatus_Get + parameters: + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response object for GetVulnerabilityStatus + content: + application/json: + schema: + $ref: '#/components/schemas/GetVulnerabilityScanStatusResponse' + security: + - Bearer: [ ] + post: + tags: + - vulnerabilityscanstatus + summary: A request to return the software vulnerability scan status. + description: A request to return the software vulnerability scan status. + operationId: GetVulnerabilityScanStatus_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetVulnerabilityScanStatus' + x-bodyName: body + responses: + '200': + description: The response object for GetVulnerabilityStatus + content: + application/json: + schema: + $ref: '#/components/schemas/GetVulnerabilityScanStatusResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /log4netConfigs/all: + get: + tags: + - log4netConfigs + summary: Retrieves a list of log4net logger configurations + description: Retrieves a list of log4net logger configurations + operationId: GetAllLog4NetConfigItemsall_Get + responses: + '200': + description: Response for getting log4net configuration items + content: + application/json: + schema: + $ref: '#/components/schemas/GetAllLog4NetConfigItemsResponse' + security: + - Bearer: [ ] + post: + tags: + - log4netConfigs + summary: Retrieves a list of log4net logger configurations + description: Retrieves a list of log4net logger configurations + operationId: GetAllLog4NetConfigItemsall_Post + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetAllLog4NetConfigItems' + x-bodyName: body + responses: + '200': + description: Response for getting log4net configuration items + content: + application/json: + schema: + $ref: '#/components/schemas/GetAllLog4NetConfigItemsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /log4netConfigs/add: + post: + tags: + - log4netConfigs + operationId: AddLog4NetConfigItemadd_Post + parameters: + - name: LoggerName + in: query + schema: + type: string + - name: LogLevel + in: query + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/AddLog4NetConfigItem' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AddLog4NetConfigItemResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /log4netConfigs/update: + post: + tags: + - log4netConfigs + operationId: UpdateLog4NetConfigItemupdate_Post + parameters: + - name: Id + in: query + schema: + type: string + - name: LoggerName + in: query + schema: + type: string + - name: LogLevel + in: query + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateLog4NetConfigItem' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateLog4NetConfigItemResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /log4netConfigs/delete: + post: + tags: + - log4netConfigs + operationId: DeleteLog4NetConfigItemdelete_Post + parameters: + - name: Id + in: query + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DeleteLog4NetConfigItem' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/DeleteLog4NetConfigItemResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /log4netConfigs: + get: + tags: + - log4netConfigs + summary: Retrieves a list of log4net logger configurations with pagination support. + description: Retrieves a list of log4net logger configurations with pagination support. + operationId: GetLog4NetConfigItems_Get + parameters: + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Response for getting log4net configuration items with pagination support + content: + application/json: + schema: + $ref: '#/components/schemas/GetLog4NetConfigItemsResponse' + security: + - Bearer: [ ] + post: + tags: + - log4netConfigs + summary: Retrieves a list of log4net logger configurations with pagination support. + description: Retrieves a list of log4net logger configurations with pagination support. + operationId: GetLog4NetConfigItems_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetLog4NetConfigItems' + x-bodyName: body + responses: + '200': + description: Response for getting log4net configuration items with pagination support + content: + application/json: + schema: + $ref: '#/components/schemas/GetLog4NetConfigItemsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reportDescription: + get: + tags: + - reportDescription + summary: Returns a description for the specified report. + description: Returns a description for the specified report. + operationId: GetReportDescription_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + post: + tags: + - reportDescription + summary: Returns a description for the specified report. + description: Returns a description for the specified report. + operationId: GetReportDescription_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetReportDescription' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /reportDifferences: + get: + tags: + - reportDifferences + summary: Get a list of differences between two reports runs. + description: Get a list of differences between two reports runs. + operationId: GetReportChangeDetails_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/ReportChangeDetail' + security: + - Bearer: [ ] + post: + tags: + - reportDifferences + summary: Get a list of differences between two reports runs. + description: Get a list of differences between two reports runs. + operationId: GetReportChangeDetails_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetReportChangeDetails' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/ReportChangeDetail' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/reportData/{reportId}': + get: + tags: + - reportData + summary: 'Gets report results for the specified agent, device or task id.' + description: 'Gets report results for the specified agent, device or task id.' + operationId: GetReportDatareportId_Get + parameters: + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: A returned list of report results for displaying in a grid. + content: + application/json: + schema: + $ref: '#/components/schemas/GetReportDataResponse' + security: + - Bearer: [ ] + post: + tags: + - reportData + summary: 'Gets report results for the specified agent, device or task id.' + description: 'Gets report results for the specified agent, device or task id.' + operationId: GetReportDatareportId_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetReportData' + x-bodyName: body + responses: + '200': + description: A returned list of report results for displaying in a grid. + content: + application/json: + schema: + $ref: '#/components/schemas/GetReportDataResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /availableReports: + get: + tags: + - availableReports + summary: ' Gets a list of available reports for a specified group or agent.' + description: ' Gets a list of available reports for a specified group or agent.' + operationId: GetAvailableReports_Get + parameters: + - name: DeviceFilter + in: query + description: Specifies the devices for which to retrieve the available reports. + schema: + $ref: '#/components/schemas/DeviceFilter' + - name: StartDateUtc + in: query + description: Specifies a start date to search from. + schema: + type: string + format: date-time + - name: EndDateUtc + in: query + description: Specifies a start date to search up to. + schema: + type: string + format: date-time + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Describes the available reports for the specified devices. + content: + application/json: + schema: + $ref: '#/components/schemas/GetAvailableReportsResponse' + security: + - Bearer: [ ] + post: + tags: + - availableReports + summary: ' Gets a list of available reports for a specified group or agent.' + description: ' Gets a list of available reports for a specified group or agent.' + operationId: GetAvailableReports_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetAvailableReports' + x-bodyName: body + responses: + '200': + description: Describes the available reports for the specified devices. + content: + application/json: + schema: + $ref: '#/components/schemas/GetAvailableReportsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userDashboard: + get: + tags: + - userDashboard + summary: Gets the user dashboard widget layout. + description: Gets the user dashboard widget layout. + operationId: GetUserDashboard_Get + parameters: + - name: Id + in: query + description: The identifier of the dashboard to get. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Details of a specific dashboard layout. + content: + application/json: + schema: + $ref: '#/components/schemas/DashboardLayout' + security: + - Bearer: [ ] + post: + tags: + - userDashboard + summary: Gets the user dashboard widget layout. + description: Gets the user dashboard widget layout. + operationId: GetUserDashboard_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetUserDashboard' + x-bodyName: body + responses: + '200': + description: Details of a specific dashboard layout. + content: + application/json: + schema: + $ref: '#/components/schemas/DashboardLayout' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userDashboard/named: + get: + tags: + - userDashboard + summary: Gets the user dashboard widget layout by name. + description: Gets the user dashboard widget layout by name. + operationId: GetUserDashboardByNamenamed_Get + parameters: + - name: Name + in: query + description: The name of the dashboard to get. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Details of a specific dashboard layout. + content: + application/json: + schema: + $ref: '#/components/schemas/DashboardLayout' + security: + - Bearer: [ ] + post: + tags: + - userDashboard + summary: Gets the user dashboard widget layout by name. + description: Gets the user dashboard widget layout by name. + operationId: GetUserDashboardByNamenamed_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetUserDashboardByName' + x-bodyName: body + responses: + '200': + description: Details of a specific dashboard layout. + content: + application/json: + schema: + $ref: '#/components/schemas/DashboardLayout' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userDashboard/save: + get: + tags: + - userDashboard + summary: Stores the user dashboard widget layout. + description: Stores the user dashboard widget layout. + operationId: SaveUserDashboardsave_Get + parameters: + - name: Id + in: query + description: 'The identifier of the dashboard to get. If not supplied a new record is created, else existing is updated.' + schema: + type: string + - name: Name + in: query + description: The name of the dashboard. + schema: + type: string + - name: Widgets + in: query + description: The widgets. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/DashboardWidgetSpec' + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Response to the SaveUserDashboard request. + content: + application/json: + schema: + $ref: '#/components/schemas/SaveUserDashboardResponse' + security: + - Bearer: [ ] + post: + tags: + - userDashboard + summary: Stores the user dashboard widget layout. + description: Stores the user dashboard widget layout. + operationId: SaveUserDashboardsave_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SaveUserDashboard' + x-bodyName: body + responses: + '200': + description: Response to the SaveUserDashboard request. + content: + application/json: + schema: + $ref: '#/components/schemas/SaveUserDashboardResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userDashboard/delete: + get: + tags: + - userDashboard + summary: Deletes the user dashboard widget layout. + description: Deletes the user dashboard widget layout. + operationId: DeleteUserDashboarddelete_Get + parameters: + - name: Id + in: query + description: The identifier of the dashboard to delete. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - userDashboard + summary: Deletes the user dashboard widget layout. + description: Deletes the user dashboard widget layout. + operationId: DeleteUserDashboarddelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteUserDashboard' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userSettings: + get: + tags: + - userSettings + summary: Gets the user settings and selections. + description: Gets the user settings and selections. + operationId: GetUserSettings_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Response to the GetUserSettings request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetUserSettingsResponse' + security: + - Bearer: [ ] + post: + tags: + - userSettings + summary: Gets the user settings and selections. + description: Gets the user settings and selections. + operationId: GetUserSettings_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetUserSettings' + x-bodyName: body + responses: + '200': + description: Response to the GetUserSettings request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetUserSettingsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userSettings/save: + get: + tags: + - userSettings + summary: Stores the user settings and selections. + description: Stores the user settings and selections. + operationId: SaveUserSettingssave_Get + parameters: + - name: DashboardId + in: query + description: The user's default dashboard identifier. + schema: + type: string + - name: ThemeId + in: query + description: The user's default theme identifier. + schema: + type: string + - name: HideWelcomePopup + in: query + description: Indicates whether the user has opted to skip the welcome wizard. + schema: + type: boolean + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Response to the GetUserSettings request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetUserSettingsResponse' + security: + - Bearer: [ ] + post: + tags: + - userSettings + summary: Stores the user settings and selections. + description: Stores the user settings and selections. + operationId: SaveUserSettingssave_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/SaveUserSettings' + x-bodyName: body + responses: + '200': + description: Response to the GetUserSettings request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetUserSettingsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /dashboard/widgetTemplates: + get: + tags: + - dashboard + summary: Gets the dashboard widgets. + description: Gets the dashboard widgets. + operationId: GetDashboardWidgetswidgetTemplates_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Response to the GetDashboardWidgets request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDashboardWidgetsResponse' + security: + - Bearer: [ ] + post: + tags: + - dashboard + summary: Gets the dashboard widgets. + description: Gets the dashboard widgets. + operationId: GetDashboardWidgetswidgetTemplates_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetDashboardWidgets' + x-bodyName: body + responses: + '200': + description: Response to the GetDashboardWidgets request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetDashboardWidgetsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/stats/plannedChanges/hours/{PeriodHours}': + get: + tags: + - stats + summary: Stats Service + description: Stats Service + operationId: GetCurrentPlannedChangesplannedChangeshoursPeriodHours_Get + parameters: + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetCurrentPlannedChangesResponse' + security: + - Bearer: [ ] + post: + tags: + - stats + summary: Stats Service + description: Stats Service + operationId: GetCurrentPlannedChangesplannedChangeshoursPeriodHours_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetCurrentPlannedChanges' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetCurrentPlannedChangesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/stats/compliancedata/start/{Start}': + get: + tags: + - stats + summary: 'Get report summaries by report, for either individual devices, or as group average.' + description: 'Get report summaries by report, for either individual devices, or as group average.' + operationId: GetComplianceDatacompliancedatastartStart_Get + parameters: + - name: ReportItemId + in: query + description: Specifies the scheduled report item id. + required: true + schema: + type: string + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Compliance data by report, for either individual devices, or as group average.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetComplianceDataResponse' + security: + - Bearer: [ ] + post: + tags: + - stats + summary: 'Get report summaries by report, for either individual devices, or as group average.' + description: 'Get report summaries by report, for either individual devices, or as group average.' + operationId: GetComplianceDatacompliancedatastartStart_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetComplianceData' + x-bodyName: body + responses: + '200': + description: 'Compliance data by report, for either individual devices, or as group average.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetComplianceDataResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/stats/compliancedata/end/{End}': + get: + tags: + - stats + summary: 'Get report summaries by report, for either individual devices, or as group average.' + description: 'Get report summaries by report, for either individual devices, or as group average.' + operationId: GetComplianceDatacompliancedataendEnd_Get + parameters: + - name: ReportItemId + in: query + description: Specifies the scheduled report item id. + required: true + schema: + type: string + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Compliance data by report, for either individual devices, or as group average.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetComplianceDataResponse' + security: + - Bearer: [ ] + post: + tags: + - stats + summary: 'Get report summaries by report, for either individual devices, or as group average.' + description: 'Get report summaries by report, for either individual devices, or as group average.' + operationId: GetComplianceDatacompliancedataendEnd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetComplianceData' + x-bodyName: body + responses: + '200': + description: 'Compliance data by report, for either individual devices, or as group average.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetComplianceDataResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/stats/compliancedata/start/{Start}/end/{End}': + get: + tags: + - stats + summary: 'Get report summaries by report, for either individual devices, or as group average.' + description: 'Get report summaries by report, for either individual devices, or as group average.' + operationId: GetComplianceDatacompliancedatastartStartendEnd_Get + parameters: + - name: ReportItemId + in: query + description: Specifies the scheduled report item id. + required: true + schema: + type: string + - name: CountOnly + in: query + description: A value indicating whether to return a count of results only. + schema: + type: boolean + x-nullable: false + - name: Sort + in: query + description: 'The dictionary of sort fields and sort directions for the query. For example a key value pair might be "ColumnName", "ASC".' + schema: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + - name: Skip + in: query + description: The offset into the result set to start at. + schema: + type: integer + format: int32 + - name: Take + in: query + description: The limit number of rows to return. + schema: + type: integer + format: int32 + - name: GenericFilters + in: query + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + style: form + schema: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + - name: GenericFilterLogic + in: query + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: 'Compliance data by report, for either individual devices, or as group average.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetComplianceDataResponse' + security: + - Bearer: [ ] + post: + tags: + - stats + summary: 'Get report summaries by report, for either individual devices, or as group average.' + description: 'Get report summaries by report, for either individual devices, or as group average.' + operationId: GetComplianceDatacompliancedatastartStartendEnd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetComplianceData' + x-bodyName: body + responses: + '200': + description: 'Compliance data by report, for either individual devices, or as group average.' + content: + application/json: + schema: + $ref: '#/components/schemas/GetComplianceDataResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /stats/events/invalidate: + get: + tags: + - stats + summary: Represents a request to invalidate the eventcount stats for a group for a specific set of periods. + description: Represents a request to invalidate the eventcount stats for a group for a specific set of periods. + operationId: InvalidateEventCountseventsinvalidate_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - stats + summary: Represents a request to invalidate the eventcount stats for a group for a specific set of periods. + description: Represents a request to invalidate the eventcount stats for a group for a specific set of periods. + operationId: InvalidateEventCountseventsinvalidate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/InvalidateEventCounts' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /testSmtpConnection: + get: + tags: + - testSmtpConnection + summary: Tests the specified SMTP details. + description: Tests the specified SMTP details. + operationId: TestSmtpConnection_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + post: + tags: + - testSmtpConnection + summary: Tests the specified SMTP details. + description: Tests the specified SMTP details. + operationId: TestSmtpConnection_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TestSmtpConnection' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /testFastConnection: + get: + tags: + - testFastConnection + summary: Tests the configured Fast service can be contacted. + description: Tests the configured Fast service can be contacted. + operationId: TestFastConnection_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + post: + tags: + - testFastConnection + summary: Tests the configured Fast service can be contacted. + description: Tests the configured Fast service can be contacted. + operationId: TestFastConnection_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TestFastConnection' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /testFastCustomerConnection: + get: + tags: + - testFastCustomerConnection + summary: Tests the configured Fast service can be contacted using customer credentials. + description: Tests the configured Fast service can be contacted using customer credentials. + operationId: TestFastCustomerConnection_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + post: + tags: + - testFastCustomerConnection + summary: Tests the configured Fast service can be contacted using customer credentials. + description: Tests the configured Fast service can be contacted using customer credentials. + operationId: TestFastCustomerConnection_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TestFastCustomerConnection' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /testSyslogConnection: + get: + tags: + - testSyslogConnection + summary: Tests the specified SysLog details. + description: Tests the specified SysLog details. + operationId: TestSyslogConnection_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + post: + tags: + - testSyslogConnection + summary: Tests the specified SysLog details. + description: Tests the specified SysLog details. + operationId: TestSyslogConnection_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TestSyslogConnection' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /testServiceNowConnection: + get: + tags: + - testServiceNowConnection + summary: Tests the specified ServiceNow details. + description: Tests the specified ServiceNow details. + operationId: TestServiceNowConnection_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + post: + tags: + - testServiceNowConnection + summary: Tests the specified ServiceNow details. + description: Tests the specified ServiceNow details. + operationId: TestServiceNowConnection_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TestServiceNowConnection' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /testAuditorConnection: + get: + tags: + - testAuditorConnection + summary: Tests the specified Auditor details. + description: Tests the specified Auditor details. + operationId: TestAuditorConnection_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + post: + tags: + - testAuditorConnection + summary: Tests the specified Auditor details. + description: Tests the specified Auditor details. + operationId: TestAuditorConnection_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/TestAuditorConnection' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResponseStatus' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /pipelineNodes: + get: + tags: + - pipelineNodes + summary: Gets a list of pipeline node names. + description: Gets a list of pipeline node names. + operationId: GetPipelineNodeList_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + type: string + security: + - Bearer: [ ] + post: + tags: + - pipelineNodes + summary: Gets a list of pipeline node names. + description: Gets a list of pipeline node names. + operationId: GetPipelineNodeList_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetPipelineNodeList' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + type: string + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /users/add/: + get: + tags: + - users + summary: Add a user. + description: Add a user. + operationId: AddUseradd_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetails' + security: + - Bearer: [ ] + post: + tags: + - users + summary: Add a user. + description: Add a user. + operationId: AddUseradd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddUser' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetails' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /users/twoFactorStatus: + post: + tags: + - users + summary: Represents a pre-authentication request to query the user's Two-factor authentication status. Counts as a sign-in attempt. + description: Represents a pre-authentication request to query the user's Two-factor authentication status. Counts as a sign-in attempt. + operationId: GetUserTwoFactorStatustwoFactorStatus_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetUserTwoFactorStatus' + x-bodyName: body + responses: + '200': + description: Response to the GetUserTwoFactorStatus request. + content: + application/json: + schema: + $ref: '#/components/schemas/GetUserTwoFactorStatusResponse' + parameters: + - $ref: '#/components/parameters/Accept' + /users/elevateTwoFactorStatus: + post: + tags: + - users + summary: Represents a post-authentication request to elevate the user's Two-factor authentication status. Counts as a sign-in attempt. + description: Represents a post-authentication request to elevate the user's Two-factor authentication status. Counts as a sign-in attempt. + operationId: ElevateUserTwoFactorStatuselevateTwoFactorStatus_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ElevateUserTwoFactorStatus' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AuthenticateResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /users/validatePassword/: + get: + tags: + - users + summary: Validates a user password. + description: Validates a user password. + operationId: ValidateUserPasswordvalidatePassword_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + post: + tags: + - users + summary: Validates a user password. + description: Validates a user password. + operationId: ValidateUserPasswordvalidatePassword_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ValidateUserPassword' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + parameters: + - $ref: '#/components/parameters/Accept' + /users/delete/: + get: + tags: + - users + summary: Delete a user. + description: Delete a user. + operationId: DeleteUserdelete_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - users + summary: Delete a user. + description: Delete a user. + operationId: DeleteUserdelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteUser' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/users/{UserName}': + get: + tags: + - users + summary: Get a user's details. + description: Get a user's details. + operationId: GetUserUserName_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetails' + security: + - Bearer: [ ] + post: + tags: + - users + summary: Get a user's details. + description: Get a user's details. + operationId: GetUserUserName_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetUser' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetails' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /users/update/: + get: + tags: + - users + summary: Updates stored user details. Note that UserManage permissions are required to manage any user other than the caller. + description: Updates stored user details. Note that UserManage permissions are required to manage any user other than the caller. + operationId: UpdateUserupdate_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - users + summary: Updates stored user details. Note that UserManage permissions are required to manage any user other than the caller. + description: Updates stored user details. Note that UserManage permissions are required to manage any user other than the caller. + operationId: UpdateUserupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateUser' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /users/updatePassword/: + get: + tags: + - users + summary: Updates stored user password. CurrentPassword property should contain the password of the user attempting to make the change. Note that UserManage permissions are required to manage any user password other than caller's. + description: Updates stored user password. CurrentPassword property should contain the password of the user attempting to make the change. Note that UserManage permissions are required to manage any user password other than caller's. + operationId: UpdateUserPasswordupdatePassword_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - users + summary: Updates stored user password. CurrentPassword property should contain the password of the user attempting to make the change. Note that UserManage permissions are required to manage any user password other than caller's. + description: Updates stored user password. CurrentPassword property should contain the password of the user attempting to make the change. Note that UserManage permissions are required to manage any user password other than caller's. + operationId: UpdateUserPasswordupdatePassword_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateUserPassword' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /users/reset/: + get: + tags: + - users + summary: Resets a user. Note that UserManage permissions are required to manage any user other than the caller. + description: Resets a user. Note that UserManage permissions are required to manage any user other than the caller. + operationId: ResetUserreset_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - users + summary: Resets a user. Note that UserManage permissions are required to manage any user other than the caller. + description: Resets a user. Note that UserManage permissions are required to manage any user other than the caller. + operationId: ResetUserreset_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ResetUser' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /users/resetPassword/: + get: + tags: + - users + summary: Resets a user password. Note that this operation is intended to manage any user other than the caller. + description: Resets a user password. Note that this operation is intended to manage any user other than the caller. + operationId: ResetUserPasswordresetPassword_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResetUserPasswordResponse' + security: + - Bearer: [ ] + post: + tags: + - users + summary: Resets a user password. Note that this operation is intended to manage any user other than the caller. + description: Resets a user password. Note that this operation is intended to manage any user other than the caller. + operationId: ResetUserPasswordresetPassword_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ResetUserPassword' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/ResetUserPasswordResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /users/previewResetPassword/: + post: + tags: + - users + summary: Generates a reset password for preview without applying it. Pass the returned PreviewToken to resetPassword to apply it. + description: Generates a reset password for preview without applying it. Pass the returned PreviewToken to resetPassword to apply it. + operationId: PreviewResetUserPasswordpreviewResetPassword_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/PreviewResetUserPassword' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/PreviewResetUserPasswordResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /users/reset2fa/: + get: + tags: + - users + summary: Resets a user's 2FA . Note that UserManage permissions are required to manage any user other than the caller. + description: Resets a user's 2FA . Note that UserManage permissions are required to manage any user other than the caller. + operationId: ResetUser2fareset2fa_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - users + summary: Resets a user's 2FA . Note that UserManage permissions are required to manage any user other than the caller. + description: Resets a user's 2FA . Note that UserManage permissions are required to manage any user other than the caller. + operationId: ResetUser2fareset2fa_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ResetUser2fa' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /exportUserNotifications/: + get: + tags: + - exportUserNotifications + summary: Export users and the notifications they are configured to receive + description: Export users and the notifications they are configured to receive + operationId: ExportUserNotifications_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + post: + tags: + - exportUserNotifications + summary: Export users and the notifications they are configured to receive + description: Export users and the notifications they are configured to receive + operationId: ExportUserNotifications_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ExportUserNotifications' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /timezones: + get: + tags: + - timezones + summary: Gets a list of possible time zone names. + description: Gets a list of possible time zone names. + operationId: GetTimeZoneIds_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/TimeZoneDetail' + security: + - Bearer: [ ] + post: + tags: + - timezones + summary: Gets a list of possible time zone names. + description: Gets a list of possible time zone names. + operationId: GetTimeZoneIds_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetTimeZoneIds' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/TimeZoneDetail' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userHasChangedPassword: + get: + tags: + - userHasChangedPassword + summary: Has the current user changed their password from any system assigned one? + description: Has the current user changed their password from any system assigned one? + operationId: UserHasChangedPassword_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: boolean + security: + - Bearer: [ ] + post: + tags: + - userHasChangedPassword + summary: Has the current user changed their password from any system assigned one? + description: Has the current user changed their password from any system assigned one? + operationId: UserHasChangedPassword_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UserHasChangedPassword' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: boolean + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groupAlerts/add: + get: + tags: + - groupAlerts + summary: Add a group alert to a user. + description: Add a group alert to a user. + operationId: AddGroupAlertToUseradd_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetails' + security: + - Bearer: [ ] + post: + tags: + - groupAlerts + summary: Add a group alert to a user. + description: Add a group alert to a user. + operationId: AddGroupAlertToUseradd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddGroupAlertToUser' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UserDetails' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groupAlerts/delete: + get: + tags: + - groupAlerts + summary: Remove a group notification from a user + description: Remove a group notification from a user + operationId: DeleteGroupAlertFromUserdelete_Get + parameters: + - name: UserName + in: query + description: Specifies the user name to delete group alerts / notifications for. + schema: + type: string + - name: Id + in: query + description: Specifies the specific alert / notification to remove. + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - groupAlerts + summary: Remove a group notification from a user + description: Remove a group notification from a user + operationId: DeleteGroupAlertFromUserdelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteGroupAlertFromUser' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groupAlerts/update: + get: + tags: + - groupAlerts + summary: Update a group notification from a user + description: Update a group notification from a user + operationId: UpdateGroupAlertForUserupdate_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - groupAlerts + summary: Update a group notification from a user + description: Update a group notification from a user + operationId: UpdateGroupAlertForUserupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateGroupAlertForUser' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /groupAlerts: + get: + tags: + - groupAlerts + summary: Get the configured notifications for the specified group. + description: Get the configured notifications for the specified group. + operationId: GetGroupAlertsForGroup_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/GroupAlert' + security: + - Bearer: [ ] + post: + tags: + - groupAlerts + summary: Get the configured notifications for the specified group. + description: Get the configured notifications for the specified group. + operationId: GetGroupAlertsForGroup_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetGroupAlertsForGroup' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/GroupAlert' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /users/: + get: + tags: + - users + summary: Get a list of user names. + description: Get a list of user names. + operationId: GetUserList_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/UserDetails' + security: + - Bearer: [ ] + post: + tags: + - users + summary: Get a list of user names. + description: Get a list of user names. + operationId: GetUserList_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetUserList' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + $ref: '#/components/schemas/UserDetails' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /resetAdminPassword: + get: + tags: + - resetAdminPassword + summary: 'Resets the admin (or named account) password, returning a new temporary password in the response. Can only be called from the local hub console.' + description: 'Resets the admin (or named account) password, returning a new temporary password in the response. Can only be called from the local hub console.' + operationId: ResetAdminPassword_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + post: + tags: + - resetAdminPassword + summary: 'Resets the admin (or named account) password, returning a new temporary password in the response. Can only be called from the local hub console.' + description: 'Resets the admin (or named account) password, returning a new temporary password in the response. Can only be called from the local hub console.' + operationId: ResetAdminPassword_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ResetAdminPassword' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + parameters: + - $ref: '#/components/parameters/Accept' + '/resetAdminPassword/{AdminName}': + get: + tags: + - resetAdminPassword + summary: 'Resets the admin (or named account) password, returning a new temporary password in the response. Can only be called from the local hub console.' + description: 'Resets the admin (or named account) password, returning a new temporary password in the response. Can only be called from the local hub console.' + operationId: ResetAdminPasswordAdminName_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + post: + tags: + - resetAdminPassword + summary: 'Resets the admin (or named account) password, returning a new temporary password in the response. Can only be called from the local hub console.' + description: 'Resets the admin (or named account) password, returning a new temporary password in the response. Can only be called from the local hub console.' + operationId: ResetAdminPasswordAdminName_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ResetAdminPassword' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + parameters: + - $ref: '#/components/parameters/Accept' + '/resetAdminPassword/{OrganizationId}/{AdminName}': + get: + tags: + - resetAdminPassword + summary: 'Resets the admin (or named account) password, returning a new temporary password in the response. Can only be called from the local hub console.' + description: 'Resets the admin (or named account) password, returning a new temporary password in the response. Can only be called from the local hub console.' + operationId: ResetAdminPasswordOrganizationIdAdminName_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + post: + tags: + - resetAdminPassword + summary: 'Resets the admin (or named account) password, returning a new temporary password in the response. Can only be called from the local hub console.' + description: 'Resets the admin (or named account) password, returning a new temporary password in the response. Can only be called from the local hub console.' + operationId: ResetAdminPasswordOrganizationIdAdminName_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/ResetAdminPassword' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/Object' + parameters: + - $ref: '#/components/parameters/Accept' + /userRoles: + get: + tags: + - userRoles + summary: Get a list of user roles defined in the system. + description: Get a list of user roles defined in the system. + operationId: GetUserRoles_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetUserRolesResponse' + security: + - Bearer: [ ] + post: + tags: + - userRoles + summary: Get a list of user roles defined in the system. + description: Get a list of user roles defined in the system. + operationId: GetUserRoles_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetUserRoles' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetUserRolesResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /permissions/: + get: + tags: + - permissions + summary: Gets a list of permissions names defined in the system. + description: Gets a list of permissions names defined in the system. + operationId: GetPermissions_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + type: string + security: + - Bearer: [ ] + post: + tags: + - permissions + summary: Gets a list of permissions names defined in the system. + description: Gets a list of permissions names defined in the system. + operationId: GetPermissions_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetPermissions' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: List + type: array + items: + type: string + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userRoles/add: + get: + tags: + - userRoles + summary: Adds a custom user role + description: Adds a custom user role + operationId: AddUserRoleadd_Get + parameters: + - name: Name + in: query + description: Specifies the unique internal name for the role. If this is not supplied the DisplayName is used. + schema: + type: string + - name: DisplayName + in: query + description: Specifies the display name for the role. + required: true + schema: + type: string + - name: ExternalName + in: query + description: Specifies the role name in an external identity provider that corresponds to this role. + schema: + type: string + - name: Permissions + in: query + description: Specifies the list of names of permissions associated with the role. + style: form + schema: + type: array + items: + type: string + - name: ReadOnly + in: query + description: 'Specifies whether the role is read only, or can be edited.' + required: true + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AddUserRoleResponse' + security: + - Bearer: [ ] + post: + tags: + - userRoles + summary: Adds a custom user role + description: Adds a custom user role + operationId: AddUserRoleadd_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/AddUserRole' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AddUserRoleResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userRoles/update: + get: + tags: + - userRoles + summary: Update a user role + description: Update a user role + operationId: UpdateUserRoleupdate_Get + parameters: + - name: Name + in: query + description: Specifies the unique internal name for the role. + required: true + schema: + type: string + - name: DisplayName + in: query + description: Specifies the display name for the role. + required: true + schema: + type: string + - name: ExternalName + in: query + description: Specifies the role name in an external identity provider that corresponds to this role. + schema: + type: string + - name: Permissions + in: query + description: Specifies the list of names of permissions associated with the role. + required: true + style: form + schema: + type: array + items: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateUserRoleResponse' + security: + - Bearer: [ ] + post: + tags: + - userRoles + summary: Update a user role + description: Update a user role + operationId: UpdateUserRoleupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateUserRole' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UpdateUserRoleResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userRoles/clone: + get: + tags: + - userRoles + summary: Clone an existing user role. + description: Clone an existing user role. + operationId: CloneUserRoleclone_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UserRole' + security: + - Bearer: [ ] + post: + tags: + - userRoles + summary: Clone an existing user role. + description: Clone an existing user role. + operationId: CloneUserRoleclone_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/CloneUserRole' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/UserRole' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userRoles/delete: + get: + tags: + - userRoles + summary: Delete a user role. + description: Delete a user role. + operationId: DeleteUserRoledelete_Get + parameters: + - name: Name + in: query + description: Specifies the internal name of the role to delete. + required: true + schema: + type: string + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - userRoles + summary: Delete a user role. + description: Delete a user role. + operationId: DeleteUserRoledelete_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/DeleteUserRole' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /licenseInfo: + get: + tags: + - licenseInfo + summary: Represents a request to get an Organization's license info. + description: Represents a request to get an Organization's license info. + operationId: GetLicenseInfo_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The response to a request to get an Organization's license info. + content: + application/json: + schema: + $ref: '#/components/schemas/GetLicenseInfoResponse' + security: + - Bearer: [ ] + post: + tags: + - licenseInfo + summary: Represents a request to get an Organization's license info. + description: Represents a request to get an Organization's license info. + operationId: GetLicenseInfo_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetLicenseInfo' + x-bodyName: body + responses: + '200': + description: The response to a request to get an Organization's license info. + content: + application/json: + schema: + $ref: '#/components/schemas/GetLicenseInfoResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /organization/update: + get: + tags: + - organization + summary: 'Represents a request to update an Organization, used to set the license.' + description: 'Represents a request to update an Organization, used to set the license.' + operationId: UpdateOrganizationupdate_Get + parameters: + - name: License + in: query + description: Specifies the license. + schema: + type: string + - name: AllowInvalidLicense + in: query + description: Specifies a value indicating whether to allow an invalid license in the License. + schema: + type: boolean + x-nullable: false + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + post: + tags: + - organization + summary: 'Represents a request to update an Organization, used to set the license.' + description: 'Represents a request to update an Organization, used to set the license.' + operationId: UpdateOrganizationupdate_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/UpdateOrganization' + x-bodyName: body + responses: + '204': + description: No Content + content: + application/json: { } + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userRolesPermisions/check: + get: + tags: + - userRolesPermisions + summary: 'Checks whether the caller, or the named user if supplied, has the specified roles and permissions.' + description: 'Checks whether the caller, or the named user if supplied, has the specified roles and permissions.' + operationId: HasRoleOrPermissioncheck_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: boolean + security: + - Bearer: [ ] + post: + tags: + - userRolesPermisions + summary: 'Checks whether the caller, or the named user if supplied, has the specified roles and permissions.' + description: 'Checks whether the caller, or the named user if supplied, has the specified roles and permissions.' + operationId: HasRoleOrPermissioncheck_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/HasRoleOrPermission' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: boolean + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userRolesPermissions/check: + get: + tags: + - userRolesPermissions + summary: 'Checks whether the caller, or the named user if supplied, has the specified roles and permissions.' + description: 'Checks whether the caller, or the named user if supplied, has the specified roles and permissions.' + operationId: HasRoleOrPermissioncheck2_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: boolean + security: + - Bearer: [ ] + post: + tags: + - userRolesPermissions + summary: 'Checks whether the caller, or the named user if supplied, has the specified roles and permissions.' + description: 'Checks whether the caller, or the named user if supplied, has the specified roles and permissions.' + operationId: HasRoleOrPermissioncheck2_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/HasRoleOrPermission' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + title: string + type: boolean + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userRolesPermisions: + get: + tags: + - userRolesPermisions + summary: 'Gets roles and permissions for the caller, or the named user if supplied.' + description: 'Gets roles and permissions for the caller, or the named user if supplied.' + operationId: GetRolesAndPermissions_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The roles and permissions for the user. + content: + application/json: + schema: + $ref: '#/components/schemas/GetRolesAndPermissionsResponse' + security: + - Bearer: [ ] + post: + tags: + - userRolesPermisions + summary: 'Gets roles and permissions for the caller, or the named user if supplied.' + description: 'Gets roles and permissions for the caller, or the named user if supplied.' + operationId: GetRolesAndPermissions_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetRolesAndPermissions' + x-bodyName: body + responses: + '200': + description: The roles and permissions for the user. + content: + application/json: + schema: + $ref: '#/components/schemas/GetRolesAndPermissionsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + /userRolesPermissions: + get: + tags: + - userRolesPermissions + summary: 'Gets roles and permissions for the caller, or the named user if supplied.' + description: 'Gets roles and permissions for the caller, or the named user if supplied.' + operationId: GetRolesAndPermissions2_Get + parameters: + - name: Version + in: query + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + schema: + type: integer + format: int32 + x-nullable: false + responses: + '200': + description: The roles and permissions for the user. + content: + application/json: + schema: + $ref: '#/components/schemas/GetRolesAndPermissionsResponse' + security: + - Bearer: [ ] + post: + tags: + - userRolesPermissions + summary: 'Gets roles and permissions for the caller, or the named user if supplied.' + description: 'Gets roles and permissions for the caller, or the named user if supplied.' + operationId: GetRolesAndPermissions2_Post + requestBody: + content: + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/GetRolesAndPermissions' + x-bodyName: body + responses: + '200': + description: The roles and permissions for the user. + content: + application/json: + schema: + $ref: '#/components/schemas/GetRolesAndPermissionsResponse' + security: + - Bearer: [ ] + parameters: + - $ref: '#/components/parameters/Accept' + '/auth/{provider}': + get: + tags: + - auth + summary: Sign In + description: Sign In + operationId: Authenticateprovider_Get + parameters: + - name: provider + in: path + required: true + schema: + type: string + - name: UserName + in: query + schema: + type: string + - name: Password + in: query + schema: + type: string + - name: RememberMe + in: query + schema: + type: boolean + - name: AccessToken + in: query + schema: + type: string + - name: AccessTokenSecret + in: query + schema: + type: string + - name: ReturnUrl + in: query + schema: + type: string + - name: ErrorView + in: query + schema: + type: string + - name: Meta + in: query + schema: + type: string + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AuthenticateResponse' + post: + tags: + - auth + summary: Sign In + description: Sign In + operationId: Authenticateprovider_Post + parameters: + - name: provider + in: path + required: true + schema: + type: string + - name: UserName + in: query + schema: + type: string + - name: Password + in: query + schema: + type: string + - name: RememberMe + in: query + schema: + type: boolean + - name: AccessToken + in: query + schema: + type: string + - name: AccessTokenSecret + in: query + schema: + type: string + - name: ReturnUrl + in: query + schema: + type: string + - name: ErrorView + in: query + schema: + type: string + - name: Meta + in: query + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Authenticate' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AuthenticateResponse' + parameters: + - $ref: '#/components/parameters/Accept' + /auth: + get: + tags: + - auth + summary: Sign In + description: Sign In + operationId: Authenticate_Get + parameters: + - name: provider + in: query + schema: + type: string + - name: UserName + in: query + schema: + type: string + - name: Password + in: query + schema: + type: string + - name: RememberMe + in: query + schema: + type: boolean + - name: AccessToken + in: query + schema: + type: string + - name: AccessTokenSecret + in: query + schema: + type: string + - name: ReturnUrl + in: query + schema: + type: string + - name: ErrorView + in: query + schema: + type: string + - name: Meta + in: query + schema: + type: string + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AuthenticateResponse' + post: + tags: + - auth + summary: Sign In + description: Sign In + operationId: Authenticate_Post + parameters: + - name: provider + in: query + schema: + type: string + - name: UserName + in: query + schema: + type: string + - name: Password + in: query + schema: + type: string + - name: RememberMe + in: query + schema: + type: boolean + - name: AccessToken + in: query + schema: + type: string + - name: AccessTokenSecret + in: query + schema: + type: string + - name: ReturnUrl + in: query + schema: + type: string + - name: ErrorView + in: query + schema: + type: string + - name: Meta + in: query + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Authenticate' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/AuthenticateResponse' + parameters: + - $ref: '#/components/parameters/Accept' + /access-token: + get: + tags: + - auth + operationId: GetAccessToken_Get + parameters: + - name: RefreshToken + in: query + schema: + type: string + - name: Meta + in: query + schema: + type: string + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetAccessTokenResponse' + put: + tags: + - auth + operationId: GetAccessToken_Create + parameters: + - name: RefreshToken + in: query + schema: + type: string + - name: Meta + in: query + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetAccessToken' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetAccessTokenResponse' + post: + tags: + - auth + operationId: GetAccessToken_Post + parameters: + - name: RefreshToken + in: query + schema: + type: string + - name: Meta + in: query + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GetAccessToken' + x-bodyName: body + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetAccessTokenResponse' + delete: + tags: + - auth + operationId: GetAccessToken_Delete + parameters: + - name: RefreshToken + in: query + schema: + type: string + - name: Meta + in: query + schema: + type: string + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/GetAccessTokenResponse' + parameters: + - $ref: '#/components/parameters/Accept' +components: + schemas: + Object: + type: object + description: Object + GetAgentPoll: + title: GetAgentPoll + required: + - UniqueId + - AgentId + - PollTimeUtc + type: object + properties: + UniqueId: + type: string + description: Specifies the agent unique reference id. This is supplied in the return from the initial RegisterAgent call. + AgentId: + type: string + description: 'Specifies the agent id. Note: this the agent id excluding the device id: the poll returns tasks and configuration dates for all devices registered under this agent id.' + LegacyId: + type: string + description: 'The legacy v6.5 RA agent id. Note: this is only present for upgrade purposes.' + PollTimeUtc: + type: DateTime + description: Specifies the local agent Utc time. Used to detect system time differences between agent and hub. + format: date-time + x-nullable: false + AgentVersion: + type: string + description: Specifies the agent version. This is optional and typically only sent on initial poll. + AgentMacAddresses: + type: string + description: Specifies the agent physical/MAC addresses. This is optional and typically only sent on an initial poll or when the list changes. + AgentIPv4: + type: string + description: Specifies the agent IP v4 addresses. This is optional and typically only sent on initial poll or when the list changes. + AgentIPv6: + type: string + description: Specifies the agent IP v6 addresses. This is optional and typically only sent on initial poll or when the list changes. + MachineName: + type: string + description: 'Specifies the agent machine name including custom prefix, and domain prefix, if used. This is optional and typically only sent on initial poll or when the it changes.' + FullyQualifiedDomainName: + type: string + description: Specifies the fully qualified domain name. This is optional and typically only sent on initial poll or when the it changes. + AgentType: + type: string + description: Specifies the type of agent + Os: + type: string + description: Specifies the agent operating system. This is optional and typically only sent on initial poll or when the it changes. + DeviceIds: + type: array + items: + type: string + description: Specifies the deviceIds of the devices online that the agent is proxying. This is optional and typically only sent by a proxying agent. + ReturnXml: + type: boolean + description: Specifies whether to return the report task template xml in the response. This is optional and defaults to true. It can be used to prevent xml download on agents that implement a local cache of report definitions. + x-nullable: false + DeviceConfigIds: + $ref: '#/components/schemas/Dictionary_String_String_' + MainDeviceActivity: + $ref: '#/components/schemas/DeviceActivity' + ProxiedDeviceActivity: + type: array + items: + $ref: '#/components/schemas/DeviceActivity' + PublicKeyStringsInUse: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Called by the agent, this returns a list of AgentTasks and latest tracking template definition dates for all the devices the agent manages.' + Dictionary_String_String_: + title: 'Dictionary' + type: object + additionalProperties: + type: string + description: 'Dictionary' + DeviceActivity: + title: DeviceActivity + type: object + properties: + AgentDeviceId: + type: string + LastUpdatedUtc: + type: string + format: date-time + x-nullable: false + ConfigDateUtc: + type: string + format: date-time + LoginName: + type: string + ProcessId: + type: integer + format: int32 + x-nullable: false + description: A representation of an agent's current status and activities. + GetAgentTasks: + title: GetAgentTasks + type: object + properties: + AgentId: + type: string + description: Specifies the agent's AgentId. + DeviceId: + type: string + description: Specifies the agent's DeviceId. + TaskStatuses: + type: array + items: + type: string + x-nullable: false + description: Specifies a value indicating the task statuses to filter by. + TaskIds: + type: array + items: + type: integer + format: int32 + x-nullable: false + description: Specifies value indicating the task ids to look for. + PolicyRunId: + type: integer + description: Specifies the policy run id associated with the last run of the report etc. use this to find tasks started by a given scheduled policy. + format: int32 + TaskType: + type: string + description: Specifies the specific task type to retrieve details for + Concise: + type: boolean + description: Return a concise view of the tasks? i.e not the Text and ResultData properties + x-nullable: false + IgnoreActiveDates: + type: boolean + description: 'By default only AgentTasks that are currently between their StartDate and EndDate values are returned, this flag returns tasks irrespective of dates.' + x-nullable: false + TaskTextMatchesOneOf: + type: array + items: + type: string + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Requests information about tasks for the given agent. + PagingQueryFilter: + title: PagingQueryFilter + type: object + properties: + Value: + type: string + description: Gets or sets the value. + Operator: + type: string + description: Gets or sets the operator. + Field: + type: string + description: Gets or sets the field. + IgnoreCase: + type: boolean + description: Gets or sets a value indicating whether to ignore case. + x-nullable: false + description: The paging query filter represents the column filtering options as sent from a Kendo Grid. + SubmitAgentTaskResultStream: + title: SubmitAgentTaskResultStream + required: + - AgentId + - DeviceId + - TaskId + type: object + properties: + RequestStream: + $ref: '#/components/schemas/Stream' + AgentId: + type: string + description: Specifies the id of the agent. + DeviceId: + type: string + description: Specifies the id of the device. + TaskId: + type: integer + description: Specifies the id of the task. + format: int32 + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Used to submit agent task result data to the hub as a stream. + Stream: + title: Stream + type: object + description: Stream + SubmitAgentTaskResultData: + title: SubmitAgentTaskResultData + type: object + properties: + AgentId: + type: string + description: 'Specifies the agent id. This required for external api callers, but optional internally because the system may update / expire tasks without knowing the AgentId, but external api entry points should ensure it is set to prevent tampering with tasks not owned by the caller.' + DeviceId: + type: string + description: 'Specifies the device id. Note: this is optional as the system knows the device id from the task.' + TaskId: + type: integer + description: Specifies the task id that this data relates to. + format: int32 + x-nullable: false + DataValues: + type: array + items: + $ref: '#/components/schemas/VariableDataValue' + description: Specifies the result data items. + Status: + type: string + description: 'Specifies the status of the task. e.g complete, or error.' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Adds report result data for the given agent report, called by the agent. This is the new format used by the Gen 7 agent.' + VariableDataValue: + title: VariableDataValue + type: object + properties: + Requirement: + $ref: '#/components/schemas/VariableDataRequirement' + ItemNameToAttributeValues: + $ref: '#/components/schemas/Dictionary_String_Dictionary_String_String__' + Error: + type: string + description: Specifies the text of any error encountered collecting attribute data for this item. + HasError: + type: boolean + description: Specifies a value indicating whether an error was encountered collecting attribute data for this item. + x-nullable: false + description: Represents the collected data for a VariableDataRequirement. + VariableDataRequirement: + title: VariableDataRequirement + type: object + properties: + TrackerName: + type: string + description: Specifies the tracker name. + ItemType: + type: string + description: Specifies the item type. + AttributeNames: + type: array + items: + type: string + description: Specifies a list of attribute names. + ItemNameSpecifier: + type: string + description: Specifies the item name. + Options: + type: string + description: Specifies the options. Contains regex details for processoutout command items. + VariableNames: + type: array + items: + type: string + description: Spcifies a list of variable names associated with this requirement. + MissingDataAllowed: + type: boolean + description: Specifies a value indicating whether any rule specifies that missing data is allowed when collecting data for this variable. + x-nullable: false + MaxListItems: + type: integer + description: Specifies a value indicating the maximum number of items to return in a variable when concatenated in a string. + format: int32 + x-nullable: false + ConvertSDDLToReadable: + type: boolean + description: Specifies a value indicating whether convert sddl values to readable SecurityPermissionSet entries. + x-nullable: false + MatchItemsUsing: + type: string + description: Specifies a value indicating how to match item names specified in ItemNameSpecifier. + description: Represents a specification for an item of data to be collected for input to a report rule. + Dictionary_String_Dictionary_String_String__: + title: 'Dictionary>' + type: object + additionalProperties: + $ref: '#/components/schemas/Dictionary_String_String_' + description: 'Dictionary>' + SubmitAgentTaskResult: + title: SubmitAgentTaskResult + required: + - AgentId + - DeviceId + - TaskId + type: object + properties: + AgentId: + type: string + description: Specifies the agent id. + DeviceId: + type: string + description: Specifies the device id. + TaskId: + type: integer + description: Specifies the task id. + format: int32 + x-nullable: false + ResultData: + type: string + description: Specifies the result data. If the task result is a single string it may be specified here. Otherwise specify it in ResultDataItems or RuleItemResults. + ResultDataItems: + type: array + items: + $ref: '#/components/schemas/AgentDataItem' + description: 'Specifies the result data items, when the task result is a list of data items (eg get processes).' + Status: + type: string + description: Specifies the task status. + StatusMessage: + type: string + description: 'Specifies the additional status message, if any.' + ReportResultSummary: + $ref: '#/components/schemas/ReportResultSummary' + RuleItemResults: + $ref: '#/components/schemas/Dictionary_String_List_RuleItemResult__' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Adds task result data for the given agent task, called by the agent.' + AgentDataItem: + title: AgentDataItem + type: object + properties: + Name: + type: string + description: Specifies the variable name. + ItemName: + type: string + description: Specifies the item name. + TrackerType: + type: string + description: Specifies the tracker type. + ItemType: + type: string + description: Specifies the item type. + Error: + type: string + description: Specifies any error encountered collecting data. + Attributes: + $ref: '#/components/schemas/Dictionary_String_String_' + description: An agent data item returned from a tracker. + ReportResultSummary: + title: ReportResultSummary + type: object + properties: + TotalScorePercent: + type: number + description: The total score as a percentage. + format: double + x-nullable: false + SummaryText: + type: string + description: The summary text for the report result. + description: The report result summary. + RuleItemResult: + title: RuleItemResult + type: object + properties: + Error: + type: string + description: Specifies the error. + ExpressionEvaluationTrace: + type: string + description: Specifies the explanation of the evaluation of the rule expression tree. + ExpressionResultExplanation: + type: string + description: Specifies the explanation of the result. + FailuresDescriptionExpanded: + type: string + description: Specifies the failures description with tokens and variable values expanded. + NotRelevant: + type: boolean + description: Specifies a value indicating whether the rule expression is not relevant to current OS. + x-nullable: false + PassesDescriptionExpanded: + type: string + description: Specifies the passes description with tokens and variable values expanded. + RuleFailureReason: + type: string + description: Specifies the rule failure reason. + RuleNumberName: + type: string + description: Specifies the rule number and name for reference. + Score: + type: number + description: Specifies the score. + format: double + x-nullable: false + ShowFailuresDescription: + type: boolean + description: Specifies a value indicating whether to show the failures description. + x-nullable: false + ShowPassesDescription: + type: boolean + description: Specifies a value indicating whether to show the passes description. + x-nullable: false + Variables: + type: array + items: + $ref: '#/components/schemas/VariableResult' + description: Specifies the variables. + description: A result for an individual report rule item. + VariableResult: + title: VariableResult + type: object + properties: + DataExtractionTrace: + type: string + description: Specifies the route taken to arrive at this variable value after any functions etc have been applied. + DataType: + type: string + description: Specifies the data type of the result. + Name: + type: string + description: Specifies the name of the variable for this result. + SourceData: + type: string + description: Specifies tjhe source data. + Values: + type: array + items: + type: string + description: Specifies the list of values for this variable. + description: The variable result used to send a representation of the data values used in a rule long with the results. + List_RuleItemResult_: + title: List + type: array + items: + $ref: '#/components/schemas/RuleItemResult' + Dictionary_String_List_RuleItemResult__: + title: 'Dictionary>' + type: object + additionalProperties: + type: array + items: + $ref: '#/components/schemas/RuleItemResult' + description: 'Dictionary>' + GetCredentials: + title: GetCredentials + type: object + properties: + CredentialsType: + type: string + description: Specifies the credentials type. + Key: + type: string + description: Specifies the key (name) of the required credentials. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Get specific credentials for requested type and key (name). + GetPolicyTemplates: + title: GetPolicyTemplates + type: object + properties: + Name: + type: string + description: Specifies a single policy name (id) to search for. + NameContains: + type: string + description: Specifies the text the name contains. Used to search for partial match if 'Name' not specified. + Names: + type: array + items: + type: string + description: Specifies a list of policy names (ids) to search for. + ReturnXml: + type: boolean + description: Specifies a value indicating whether to return the template xml in the response. Defaults to false. + x-nullable: false + ReturnSignatures: + type: boolean + description: Specifies a value indicating whether to calculate and return the template signatures in the response. Defaults to false. + x-nullable: false + IsActive: + type: boolean + description: Get the Active version of a template + IsLatest: + type: boolean + description: Get the Latest version of a template + IsSystem: + type: boolean + description: Get System supplied templates + HasRules: + type: boolean + description: Get templates with Rules + HasTrackers: + type: boolean + description: Get templates with Trackers + TemplateTrackerTypes: + type: array + items: + type: string + description: Specifies the template's tracker types. + TemplateVersion: + type: string + description: Specifies the template version to get. + UsageTags: + type: array + items: + type: string + description: Specifies the policy usage types to get. + IsTrusted: + type: boolean + description: Policy templates which contains commands that are trusted + NotificationRefId: + type: string + description: Policy templates associated with the supplied notification ref id + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets matching config templates. + GetPolicyTemplateVariables: + title: GetPolicyTemplateVariables + type: object + properties: + PolicyTemplateName: + type: string + description: Specifies the report template name. + ReturnConfigAsXml: + type: boolean + description: 'For any config that needs to be applied, return as XML.' + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to get a list of variable definitions from a named report to be collected by the agent. + GetCredentialsForAgentDevice: + title: GetCredentialsForAgentDevice + type: object + properties: + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to get the names of credentials associated with an agent. + AgentDevice: + title: AgentDevice + type: object + properties: + AgentId: + type: string + description: The agent id for this device. + DeviceId: + type: string + description: The device id for this device. + description: 'The agent device represents an agent device pairing. For example this may be a router that is reported on by an agent with, or it may be an agent reporting on the device it is installed on in which case AgentId and DeviceId will be the same.' + GetDbCredentialForDatabaseAgentDevice: + title: GetDbCredentialForDatabaseAgentDevice + type: object + properties: + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to get the database credentials associated with a database proxied agent. + GroupMemberships: + title: GroupMemberships + type: object + properties: + MemberName: + type: string + description: Specifies the member name to retrieve group memberships for. + MemberType: + type: string + description: Specifies the member type of the member specified by MemberName (AgentDevice or Group). + ExcludeInherited: + type: boolean + description: 'Specifies a value indicating whether to exclude inherited groups. This defaults to false meaning that all groups including those that are parents of thoseexplicitly set are returned, for example if Windows 7 group is a member of Windows group, and a device is explicitly a member of Windows 7the function will return ''Windows, Windows 7''. If ''ExcludeInherited'' is true, only ''Windows 7'' will be returned.' + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'A request to return groups this agent or group is a member of, including parents of parents etc.' + GetAgents: + title: GetAgents + type: object + properties: + ExcludeTotalCount: + type: boolean + description: Specifies a value indicating whether to calculate the total count returned in the GetAgentsResponse.Total + x-nullable: false + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + GetAgentGroupDetails: + type: boolean + description: Specifies a value indicating whether to get agent group details. + x-nullable: false + GetRelatedCredentials: + type: boolean + description: Specifies a value indicating whether to get related credentials. + x-nullable: false + GetRelatedPlannedChanges: + type: boolean + description: Specifies a value indicating whether to get related planned changes. + x-nullable: false + GetRelatedProxyAgents: + type: boolean + description: Specifies a value indicating whether to get related proxy agents. + x-nullable: false + GetRelatedTemplates: + type: boolean + description: Specifies a value indicating whether to get templates applied to the returned agents. + x-nullable: false + IncludeMasterInFilter: + type: boolean + description: Specifies a value indicating whether to include proxy master devices in filters that match a child proxied device but would not otherwise return the proxying master. + x-nullable: false + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to return agents matching the device filter. + DeviceFilter: + title: DeviceFilter + type: object + properties: + LastModifiedDateUtc: + type: string + description: The last time this definition was edited (for stored filters). + format: date-time + Type: + type: string + description: 'Gets or sets the type, inferred from the presence and number of GroupNames and AgentDeviceIds' + GroupMatch: + type: string + description: Gets or sets the GroupMatchType controlling whether associated sought groups in GroupNames are matched as an exact list or a contains operation. + Name: + type: string + description: Gets or sets the filter name. + CanProxy: + type: boolean + description: Gets or sets a value indicating whether the agents sought can proxy connections to other devices. + ExcludeProxiedDevices: + type: boolean + description: Gets or sets a value indicating whether to exclude proxied devices from the result set. + GroupNames: + type: array + items: + type: string + description: Gets or sets the group names. + AgentDeviceIds: + type: array + items: + type: string + description: Gets or sets the agent ids. + AgentDisplayNames: + type: array + items: + type: string + description: Gets or sets the agent display names. + CredentialKeys: + type: array + items: + type: string + description: Gets or sets the credential keys. + Os: + type: string + description: ' Gets or sets the os to search for.' + DiscoveryId: + type: string + description: ' Gets or sets the discovery id to search for.' + DiscoveryTaskId: + type: string + description: ' Gets or sets the discovery task id to search for.' + ProxyAgentIds: + type: array + items: + type: string + description: 'Gets or sets the proxy agent ids. This is a list of the agent id parts only of the agentDeviceId pairs. Specifying this will return all devices which have these agent ids, i.e. are proxied by the given agents.' + TextSearch: + type: string + description: Gets or sets the text search when getting agents from the repository. By default this is a 'StartsWith' search unless TextSearchExactMatch + TextSearchExactMatch: + type: boolean + description: Gets or sets the a value indicating text search when getting agents from the repository + x-nullable: false + AllSelected: + type: boolean + description: 'Gets a value indicating whether all selected, i.e. no GroupNames or AgentDeviceIds have been specified.' + x-nullable: false + OnlineStatus: + type: string + description: Gets or sets the online status of the devices to return. Optional. + OnlineStatuses: + type: array + items: + type: string + x-nullable: false + description: Gets or sets the online statuses of the devices to return. Optional. + description: 'Represents a selected group of devices, by membership of groups, or by specific attributes (name, OS etc). This can be used on a GetEvents call but also on any api call that can be filtered by device, for example report results.' + RegisterAgent: + title: RegisterAgent + type: object + properties: + AgentName: + type: string + CanProxy: + type: boolean + description: Specifies a value indicating whether the agent can proxy connections to other devices. + x-nullable: false + CredentialKey: + type: string + description: Specifies the credential key. Only allowed for proxied devices. + DbConnection: + $ref: '#/components/schemas/DbConnection' + DeviceName: + type: string + description: Specifies the device name. + DeviceType: + type: string + GroupNames: + type: array + items: + type: string + description: Specifies the group names. Only allowed for proxied devices. + HostName: + type: string + description: Specifies the host name. This is the name or IP address used for agentless access to this device by a proxy. + HostType: + type: string + description: Specifies the host type. + MacAddresses: + type: string + description: Specifies the mac addresses. + IPv4: + type: string + description: Specifies the v4 ip address. + IPv6: + type: string + description: Specifies the v6 ip address. + LegacyHubId: + type: string + description: Specifies the legacy hub id. + DiscoveryId: + type: string + description: Specifies the internal discovery-based id. + DiscoveryTaskId: + type: string + description: Specifies the internal discovery task id. + OnlineDetection: + type: string + description: Specifies the method to use when detecting if a proxed device is online + Os: + type: string + description: Specifies the Operating System full description as reported by the device. + KnownOsName: + type: string + description: Specifies the Operating System from the list of known Os names. + OsUserSpecified: + type: string + description: 'Specifies the operating system as entered by the user. This will override the discovered Os in the UI, if specified.' + PollPeriodSeconds: + type: integer + description: Specifies the poll period in seconds. + format: int32 + ProxiedByAgentId: + type: string + description: Specifies the agent id of the proxy agent this device will be proxied by. + Registered: + type: boolean + description: Specifies a value indicating whether registered. + x-nullable: false + BaselineSendEnabled: + type: boolean + description: Specifies that the agent send baseline events flag should be set according to the value specified in the Agent property. + x-nullable: false + UniqueId: + type: string + description: 'Specifies a value uniquely identifying the agent independent of name or agent id from a previous registration. Used to detect a need to re-register when underlying hub store has been emptied, otherwise the autoincrementing agent id counter can result in clashes as already used ids are reissued to different agents.' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Registers the details of an Agent with the system. + DbConnection: + title: DbConnection + type: object + properties: + ConnectionType: + type: string + description: Does the Proxied Agent's db connection rely on a legacy credential or new credential. + DatabasePlatform: + type: string + description: Specifies the database platform for the connection. + TrustedConnection: + type: boolean + description: Is the connection trusted in which case a credential is not required. + x-nullable: false + ConnectionString: + type: string + description: Specifies the connection string used for the database connection. + LegacyConnectionString: + type: string + description: Specifies a legacy connection string if this DbConnection originates from a legacy Db credential. + description: Represents database connection details. + UpdateAgent: + title: UpdateAgent + type: object + properties: + Agent: + $ref: '#/components/schemas/Agent' + CredentialKey: + type: string + description: Specifies the credential key to associate with this agent. e.g ssh credentials. + DbConnection: + $ref: '#/components/schemas/DbConnection' + GroupNames: + type: array + items: + type: string + description: Specifies a list of group names this agent belongs to. + UpdateAgentDeviceName: + type: boolean + description: Specifies that the agent device name should be updated according to the value specified in the Agent property. + x-nullable: false + UpdateAgentHostType: + type: boolean + description: Specifies that the agent host type should be updated according to the value specified in the Agent property. + x-nullable: false + UpdateCredentialKey: + type: boolean + description: Specifies that the agent credential key should be updated according to the value specified. + x-nullable: false + UpdateDbConnectionDetails: + type: boolean + description: Specifies that the agent database connection details should be updated according to the values specified. + x-nullable: false + UpdateDiagnosticModeEnabled: + type: boolean + description: Specifies that the agent diagnostic mode flag should be updated according to the value specified in the Agent property. + x-nullable: false + UpdateEventBlockEnabled: + type: boolean + description: Specifies that the agent events blocked flag should be updated according to the value specified in the Agent property. + x-nullable: false + UpdateGroupNames: + type: boolean + description: Specifies that the agent group names should be updated according to the value specified. + x-nullable: false + UpdateHostName: + type: boolean + description: Specifies that the agent host name should be updated according to the value specified in the Agent property. + x-nullable: false + UpdateIPv4: + type: boolean + description: Specifies that the IPv4 should be updated according to the value specified in the Agent property. + x-nullable: false + UpdateOnlineDetection: + type: boolean + description: Specifies that the agentonline detection mode should be updated according to the value specified in the Agent property. + x-nullable: false + UpdateOsUserSpecified: + type: boolean + description: Specifies that the agent user specified os type should be updated according to the value specified in the Agent property. + x-nullable: false + UpdateBaselineSendEnabled: + type: boolean + description: Specifies that the agent send baseline events flag should be updated according to the value specified in the Agent property. + x-nullable: false + ClearUniqueId: + type: boolean + description: 'Specifies that the agent UniqueId should be cleared, allowing registration by another device of the same name, but different UniqueId.' + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Update an Agent's details. + Agent: + title: Agent + type: object + properties: + ModelVersion: + type: integer + description: Gets the model version. + format: int32 + x-nullable: false + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + Version: + type: string + description: Specifies the agent version. + Name: + type: string + description: Specifies the device display name. + DeviceName: + type: string + description: Specifies the device name. + FullyQualifiedDomainName: + type: string + description: Specifies the fully qualified domain name. + DeviceType: + type: string + HostType: + type: string + description: 'Specifies the host type. This broadly indicates whether the device is windows or unix, or a DB or network device.' + Os: + type: string + description: Specifies the operating system as discovered by the agent. + OsUserSpecified: + type: string + description: 'Specifies the operating system as entered by the user. This will override the discovered Os in the UI, if specified.' + KnownOsName: + type: string + description: Specifes a known OS name from a system defined list. + OsVariant: + type: string + description: Specifies the os variant. This is one of the the system defined settings for the selected 'KnownOsName'. For example '64 bit version + Registered: + type: boolean + description: Specifies a value indicating whether the agent has connected yet to pick up its registration. + x-nullable: false + Deleted: + type: boolean + description: Specifies a value indicating whether the device has been deleted. + x-nullable: false + PollPeriodSeconds: + type: integer + description: Specifies the poll period in seconds. + format: int32 + x-nullable: false + LegacyId: + type: string + description: Specifies the legacy RA id for the agent. + DiscoveryId: + type: string + description: Specifies the internal discovery-based id. + DiscoveryTaskId: + type: string + description: Specifies the internal discovery task id. + DiscoveredName: + type: string + description: Specifies the name as originally assigned by device discovery. If the current DeviceName differs from this value the device has been manually renamed. + HostName: + type: string + description: Specifies the host name. This is the name or IP address used for agentless access to this device. + MacAddresses: + type: string + description: Specifies the physical/MAC addresses. + IPv4: + type: string + description: Specifies the IP v4 address. + IPv6: + type: string + description: Specifies the IP v6 address. + LastPollUtc: + type: string + description: Specifies the last time a poll was received from the agent. + format: date-time + x-nullable: false + NextPollUtc: + type: string + description: Specifies the expected next poll time. + format: date-time + x-nullable: false + MembershipChangeTimeUtc: + type: string + description: Specifies the last time group membership changed. + format: date-time + OnlineStatus: + type: string + description: Specifies the online status. + DiagnosticModeEnabled: + type: boolean + description: Specifies a value indicating whether or not diagnostic mode is enabled for this agent / device (i.e. extra logging). + x-nullable: false + EventBlockEnabled: + type: boolean + description: Specifies a value indicating whether the device is blocked from sending events. + x-nullable: false + BaselineSendEnabled: + type: boolean + description: Specifies a value indicating whether the device is enabled for sending baseline events. + x-nullable: false + OnlineDetection: + type: string + description: Specifies the method to use when detecting if a proxed device is online + PingTimeoutSeconds: + type: integer + description: 'Specifies the ''OnlineDetection'' ping timeout seconds, used with ''CredentialsService.Types.OnlineDetection.Ping''.' + format: int32 + x-nullable: false + TcpConnectPort: + type: integer + description: Specifies the port used for 'OnlineDetection' using 'CredentialsService.Types.OnlineDetection.TcpConnect'. + format: int32 + x-nullable: false + CanProxy: + type: boolean + description: Specifies a value indicating whether the agent can proxy connections to other devices. + x-nullable: false + DbConnection: + $ref: '#/components/schemas/DbConnection' + CredentialsTestStatus: + type: string + description: 'Specifies the status of the last credentials test, if any.' + CredentialsTestMessage: + type: string + description: Specifies the a success or failure message associated with the last credentials test. + UniqueId: + type: string + description: 'Specifies a value uniquely identifying the agent independent of name or agent id. Used to detect a need to re-register when underlying hub store has been emptied, otherwise the auto incrementing agent id counter can result in clashes as already used ids are reissued to different agents.' + IsTestAgent: + type: boolean + x-nullable: false + RecentActivity: + $ref: '#/components/schemas/DeviceActivity' + SkipConfigCheckUntilUtc: + type: string + format: date-time + x-nullable: false + AgentType: + type: string + IsBlockingRegistrationBy: + type: string + PublicKeyStringsInUse: + type: string + description: 'Represents a remote NNT Agent. May be a 1.x Agent, Gen7 Agent or Express Agent or a proxied device.' + SearchAgents: + title: SearchAgents + type: object + properties: + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + MatchText: + type: string + description: Text to search for in the Agents fields. + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to find agents matching the device filter and search criteria. + PreRegisterAgents: + title: PreRegisterAgents + type: object + properties: + Agents: + type: array + items: + $ref: '#/components/schemas/RegisterAgent' + description: A list of agents to pre-register at the hub. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Registers the details of the specified Agents with the system. + GetDeviceConfig: + title: GetDeviceConfig + type: object + properties: + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + AgentDeviceId: + type: string + description: 'Specifies the combined agent and device id, for example 1,1.' + ReturnDocument: + type: boolean + description: Specifies a value indicating whether return to return a device template object in GetDeviceConfigResponse.DeviceTemplate if trueor an xml string in GetDeviceConfigResponse.Xml if false. + x-nullable: false + ReturnDocumentAsPolicyRuleSet: + type: boolean + description: Specifies a value indicating whether return to return a device template rule-set object in GetDeviceConfigResponse.DeviceTemplate if trueor an xml string in GetDeviceConfigResponse.Xml if false. + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Get the tracking configuration template from the merged result of the group configurations for the groups the device is in. + GetDeviceSettings: + title: GetDeviceSettings + type: object + properties: + AgentId: + type: string + description: Specifies the id of the agent. Either AgentId and DeviceId or GroupName must be supplied. + DeviceId: + type: string + description: Specifies the id of the device. Either AgentId and DeviceId or GroupName must be supplied. + GroupName: + type: string + description: Specifies the group name. Either AgentId and DeviceId or GroupName must be supplied. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Gets the device settings for the device or group, based on the global device settings and any group specific overrides.' + GetEvents: + title: GetEvents + type: object + properties: + Comment: + type: string + description: Gets or sets the query comment so that when slow / repeated queries are identified in the database we can trace them back to a specific query in the code more easily + TimeZoneId: + type: string + description: 'Gets or sets the user time zone id. Optional, if supplied the returned Events'' DateTimeLocal property is populated with a calculated equivalent local time based on the event DateTimeUtc.' + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + EventFilter: + $ref: '#/components/schemas/EventFilter' + StartUtc: + type: string + description: ' Gets or sets the start of the period to return events for, null implies all.' + format: date-time + EndUtc: + type: string + description: 'Gets or sets the end of the period to return events for, null implies up to current time.' + format: date-time + StartOffsetSeconds: + type: integer + description: If this is supplied then the StartUtc is going to based on a time this many seconds ago (to allow 'rolling' queries) + format: int32 + EndOffsetSeconds: + type: integer + description: If this is supplied then the EndUtc is going to be based on a time this many seconds ago (to allow 'rolling' queries) + format: int32 + Status: + type: string + description: Only get events of a certain status + TextSearch: + type: string + description: Gets or sets the text search value. + ReturnedEventType: + type: string + description: ' Gets or sets the returned event type.' + EventId: + type: string + description: Gets or sets the specific event id. + ExcludeTotalCount: + type: boolean + description: ' Gets or sets a value indicating whether to calculate the total count returned in the GetEventsResponse.Total' + x-nullable: false + IncludeHistory: + type: boolean + description: Gets or sets a value indicating wether or not to return event history with the events. + x-nullable: false + RulesFromBaselinePolicyName: + type: string + description: Gets or sets a value indicating wether or not to return event history with the events. + ReturnAllEvents: + type: boolean + description: 'Gets or sets a value indicating whether to populate the AllEvents list ' + x-nullable: false + CountTimeMilliseconds: + type: number + description: Gets or sets a value indicating how long to spend calculating a count of results before timing out. + format: double + FormatDiffs: + type: boolean + description: 'Gets or sets a value indicating whether to format the attribute text that contains process output content differences. ' + x-nullable: false + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Retrieves a list of events from the hub service. + EventFilter: + title: EventFilter + type: object + properties: + Version: + type: integer + description: Gets the object version. + format: int32 + x-nullable: false + UseSuppliedEventTypes: + type: boolean + description: The query engine will attempt to derive the correct event types based on your other parameters. Set this to force it to use the EventTypes property value + x-nullable: false + EventIds: + type: array + items: + type: string + description: Gets or sets the event ids. + EventIdsToExclude: + type: array + items: + type: string + description: Gets or sets the event ids to exclude from the query + BaselineTypes: + type: array + items: + type: string + x-nullable: false + description: Gets or sets the baseline types + EventTypes: + type: array + items: + type: string + x-nullable: false + description: Gets or sets the event types. + AuditMessageTypes: + type: array + items: + type: string + x-nullable: false + description: Gets or sets the audit message types of AuditEvent + PlannedChangeStatuses: + type: array + items: + type: string + x-nullable: false + description: Gets or sets the planned change statuses. + PlannedChangeIds: + type: array + items: + type: string + description: Specifies the planned change instance ids. + ReportInstanceIds: + type: array + items: + type: string + description: Specifies the scheduled report instance ids. + ReportSpecIds: + type: array + items: + type: string + description: Specifies the report spec ids. + PlannedChangeManual: + type: boolean + description: Indicates whether to further restrict the event query to events that were either added to the planned change manually or not (i.e. were added by a rule). + TrackerTypeNames: + type: array + items: + type: string + description: Gets or sets the tracker type names. + ItemTypeNames: + type: array + items: + type: string + description: Gets or sets the item type names. + ItemValues: + type: array + items: + $ref: '#/components/schemas/TextMatch' + description: Gets or sets the item values. + AttributeTypeNames: + type: array + items: + type: string + description: ' Gets or sets the attribute type names.' + AttributeValues: + type: array + items: + $ref: '#/components/schemas/TextMatch' + description: Gets or sets the attribute values. + AttributeNamesAndValues: + $ref: '#/components/schemas/Dictionary_String_TextMatch_' + ChangeType: + type: string + description: Gets or sets the device event change type. + ItemName: + type: string + description: Gets or sets the item name (e.g file name etc). + RuleVariableResults: + $ref: '#/components/schemas/Dictionary_String_TextMatch_' + TaskId: + type: integer + description: ' Gets or sets the task id.' + format: int32 + PolicyTemplateNames: + type: array + items: + type: string + description: ' Gets or sets the report policy template names.' + NotificationRefIds: + type: array + items: + type: string + description: Gets or sets the notification ref ids to search for. + ReportScoreRange: + $ref: '#/components/schemas/ScoreRange' + description: Represents a specification limiting the types of events returned from a GetEvents + TextMatch: + title: TextMatch + type: object + properties: + Text: + type: string + description: Gets or sets the text to match using the given Operator + CaseSensitive: + type: boolean + description: ' Gets or sets a value indicating whether the match is case sensitive.' + x-nullable: false + Operator: + type: string + description: Gets or sets the operator. + TextLowerInvariant: + type: string + description: Gets the text as lowercase invariant. + description: 'The event filter text match specifies text to match, together with and operator an case sensitivity setting.' + Dictionary_String_TextMatch_: + title: 'Dictionary' + type: object + additionalProperties: + $ref: '#/components/schemas/TextMatch' + description: 'Dictionary' + ScoreRange: + title: ScoreRange + type: object + properties: + Min: + type: number + format: double + x-nullable: false + Max: + type: number + format: double + x-nullable: false + Operator: + type: string + description: ScoreRange + SubmitAlertEvents: + title: SubmitAlertEvents + type: object + properties: + Events: + type: array + items: + $ref: '#/components/schemas/AlertEvent' + description: Specifies the list of alert events for the hub to process. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds a list of alert events to the system. + AlertEvent: + title: AlertEvent + type: object + properties: + NotificationStatus: + type: string + description: ' Gets or sets the current notification status of the event' + AlertDescription: + type: string + description: ' Gets or sets the alert description.' + Severity: + type: integer + description: Gets or sets the Severity. + format: int32 + x-nullable: false + NotificationType: + type: string + description: Gets or sets the notification type. + NotificationRefIds: + type: array + items: + type: string + description: 'Gets or sets the notification reference ids for the alert event. Used when an event is only relevant to a specific template, to enable notifications to only be sent to users subscribed to events for that group.' + Comment: + type: string + description: Gets or sets the event comment. + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + AgentId: + type: string + description: Specifies the id of the agent. + DeviceId: + type: string + description: Specifies the id of the device. + GroupNames: + type: array + items: + type: string + description: Gets or sets the group names. + DeviceName: + type: string + description: Gets or sets the device name. + Id: + type: string + description: Gets or sets the unique event ID + EventType: + type: string + description: Gets or sets the event type. + DateUtc: + type: string + description: Gets or sets the UTC date and time of the event. + format: date-time + x-nullable: false + DateDevice: + type: string + description: 'Gets or sets the device date and time of the event, based on the event UtcOffsetHours' + format: date-time + x-nullable: false + DateLocal: + type: string + description: 'Gets or sets the local user''s date and time of the event, based on the GetEvents.UserTimeZoneId specified.' + format: date-time + x-nullable: false + Status: + type: string + description: Gets or sets the current status of the event + PlannedChangeStatus: + type: string + description: Gets or sets the planned change status. + PlannedChangeId: + type: string + description: Gets or sets the planned change id + PlannedChangeManual: + type: boolean + description: Gets or sets whether event was added to the planned change manually or via a rule. + x-nullable: false + Origin: + type: string + description: 'Gets or sets the origin of the event (Polling, LiveTracking etc)' + TimeZoneId: + type: string + description: Gets or sets the time zone id. + UtcOffsetHours: + type: number + description: Gets or sets the offset of local time as represented by TimeZoneId and Utc time in hours. + format: double + x-nullable: false + Version: + type: integer + description: Gets or sets the object version. + format: int32 + x-nullable: false + Score: + type: number + description: Gets or sets the score - only used when returning 'ranked' events. + format: double + x-nullable: false + Description: + type: string + description: Gets or sets the event description. + ProcessingTimeMs: + type: number + description: Gets or sets the processing time in ms. + format: double + Url: + type: string + description: Gets a URL of the event to get more details. + ExtraInfo: + type: string + description: 'Gets or sets the extra info. Where the event is an alert notification, this contains information about tracker reconfigurations, this property can be used to hold the data in a more easily parsed form.' + UsedInBaselines: + type: array + items: + $ref: '#/components/schemas/UsedInBaseline' + description: 'Gets or sets the links indicating whether the event has been used to create or amend a rule in a baseline report, and the action taken.' + description: The alert event. + UsedInBaseline: + title: UsedInBaseline + type: object + properties: + NotificationRefId: + type: string + Action: + type: string + User: + type: string + DateUtc: + type: string + format: date-time + x-nullable: false + description: UsedInBaseline + SubmitAlertEventsLimited: + title: SubmitAlertEventsLimited + type: object + properties: + Events: + type: array + items: + $ref: '#/components/schemas/AlertEvent' + description: Specifies the list of alert events for the hub to process. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds a list of alert events to the system. The response can indicate a rate-limiting back off time. + SubmitBaselineEvents: + title: SubmitBaselineEvents + type: object + properties: + Events: + type: array + items: + $ref: '#/components/schemas/BaselineEvent' + description: Specifies the list of baseline events for the hub to process. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds a list of baseline events to the system. + BaselineEvent: + title: BaselineEvent + type: object + properties: + BaselineType: + type: string + description: ' Gets or sets the baseline type, from None (normal device change event), current baseline state event, historical baseline event.' + BaselineReason: + type: string + description: 'Gets or sets the baseline reason. ' + ConfigId: + type: string + description: 'Gets or sets the config id, a string that uniquely identifies the device configuration that generated the event. This id is also supplied with the SubmitAlertEvents reconfigured NotificationType.AgentActivityNotification alert, telling the system that baseline events from that configuration should now be marked as historical.' + ProcessingCompleteTimeUtc: + type: string + description: Gets or sets the processing complete UTC time. + format: date-time + NotificationStatus: + type: string + description: Gets or sets the current notification status of the event + ChangeType: + type: string + description: 'Gets or sets the change type, specifies whether this is a new, changed or deleted event of the given Types.EventType' + AttributeSeparators: + $ref: '#/components/schemas/Dictionary_String_String_' + CurrentAttributes: + $ref: '#/components/schemas/Dictionary_String_String_' + Data: + type: string + description: Gets or sets the event data. + ItemName: + type: string + description: 'Gets or sets the name of the item that this event is about. May be a file path, command, windows update id, database table name etc.' + ItemTypeId: + type: integer + description: Gets or sets the item type id. + format: int32 + x-nullable: false + ItemTypeName: + type: string + description: Gets or sets the item type name. + TrackerTypeId: + type: integer + description: Gets or sets the tracker type id. + format: int32 + x-nullable: false + TrackerTypeName: + type: string + description: Gets or sets the tracker name. + NotificationRefIds: + type: array + items: + type: string + description: Gets or sets the notification reference ids for the baseline event. + Comment: + type: string + description: Gets or sets the event comment. + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + AgentId: + type: string + description: Specifies the id of the agent. + DeviceId: + type: string + description: Specifies the id of the device. + GroupNames: + type: array + items: + type: string + description: Gets or sets the group names. + DeviceName: + type: string + description: Gets or sets the device name. + Id: + type: string + description: Gets or sets the unique event ID + EventType: + type: string + description: Gets or sets the event type. + DateUtc: + type: string + description: Gets or sets the UTC date and time of the event. + format: date-time + x-nullable: false + DateDevice: + type: string + description: 'Gets or sets the device date and time of the event, based on the event UtcOffsetHours' + format: date-time + x-nullable: false + DateLocal: + type: string + description: 'Gets or sets the local user''s date and time of the event, based on the GetEvents.UserTimeZoneId specified.' + format: date-time + x-nullable: false + Status: + type: string + description: Gets or sets the current status of the event + PlannedChangeStatus: + type: string + description: Gets or sets the planned change status. + PlannedChangeId: + type: string + description: Gets or sets the planned change id + PlannedChangeManual: + type: boolean + description: Gets or sets whether event was added to the planned change manually or via a rule. + x-nullable: false + Origin: + type: string + description: 'Gets or sets the origin of the event (Polling, LiveTracking etc)' + TimeZoneId: + type: string + description: Gets or sets the time zone id. + UtcOffsetHours: + type: number + description: Gets or sets the offset of local time as represented by TimeZoneId and Utc time in hours. + format: double + x-nullable: false + Version: + type: integer + description: Gets or sets the object version. + format: int32 + x-nullable: false + Score: + type: number + description: Gets or sets the score - only used when returning 'ranked' events. + format: double + x-nullable: false + Description: + type: string + description: Gets or sets the event description. + ProcessingTimeMs: + type: number + description: Gets or sets the processing time in ms. + format: double + Url: + type: string + description: Gets a URL of the event to get more details. + ExtraInfo: + type: string + description: 'Gets or sets the extra info. Where the event is an alert notification, this contains information about tracker reconfigurations, this property can be used to hold the data in a more easily parsed form.' + UsedInBaselines: + type: array + items: + $ref: '#/components/schemas/UsedInBaseline' + description: 'Gets or sets the links indicating whether the event has been used to create or amend a rule in a baseline report, and the action taken.' + description: The device event. + SubmitBaselineEventsLimited: + title: SubmitBaselineEventsLimited + type: object + properties: + Events: + type: array + items: + $ref: '#/components/schemas/BaselineEvent' + description: Specifies the list of baseline events for the hub to process. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds a list of baseline events to the system. The response can indicate a rate-limiting back off time. + SubmitDeviceEvents: + title: SubmitDeviceEvents + type: object + properties: + Events: + type: array + items: + $ref: '#/components/schemas/DeviceEvent' + description: Specifies the list of device events for the hub to process. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds a list of device change events to the system. + DeviceEvent: + title: DeviceEvent + type: object + properties: + BaselineType: + type: string + description: 'Gets or sets the baseline type, from None (normal device change event), current baseline state event, historical baseline event.' + ProcessingCompleteTimeUtc: + type: string + description: ' Gets or sets the processing complete UTC time.' + format: date-time + NotificationStatus: + type: string + description: Gets or sets the current notification status of the event + ChangeType: + type: string + description: 'Gets or sets the change type, specifies whether this is a new, changed or deleted event of the given Types.EventType' + ChangedAttributes: + type: array + items: + type: string + description: 'Gets or sets the names of the changed attributes, if any.' + AttributeSeparators: + $ref: '#/components/schemas/Dictionary_String_String_' + CurrentAttributes: + $ref: '#/components/schemas/Dictionary_String_String_' + Data: + type: string + description: Gets or sets the event data. + ItemName: + type: string + description: 'Gets or sets the name of the item that this event is about. May be a file path, command, windows update id, database table name etc.' + ItemTypeId: + type: integer + description: Gets or sets the item type id. + format: int32 + x-nullable: false + ItemTypeName: + type: string + description: Gets or sets the item type name. + PreviousAttributes: + $ref: '#/components/schemas/Dictionary_String_String_' + TrackerTypeId: + type: integer + description: Gets or sets the tracker type id. + format: int32 + x-nullable: false + TrackerTypeName: + type: string + description: Gets or sets the tracker name. + NotificationRefIds: + type: array + items: + type: string + description: 'Gets or sets the notification reference ids for the device event. Used when an event is only relevant to a specific template, to enable notifications to only be sent to users subscribed to events for that group.' + TextDifferences: + type: array + items: + $ref: '#/components/schemas/TextDifference' + description: 'List of line text differences, for process output tracker content comparison' + Comment: + type: string + description: Gets or sets the event comment. + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + AgentId: + type: string + description: Specifies the id of the agent. + DeviceId: + type: string + description: Specifies the id of the device. + GroupNames: + type: array + items: + type: string + description: Gets or sets the group names. + DeviceName: + type: string + description: Gets or sets the device name. + Id: + type: string + description: Gets or sets the unique event ID + EventType: + type: string + description: Gets or sets the event type. + DateUtc: + type: string + description: Gets or sets the UTC date and time of the event. + format: date-time + x-nullable: false + DateDevice: + type: string + description: 'Gets or sets the device date and time of the event, based on the event UtcOffsetHours' + format: date-time + x-nullable: false + DateLocal: + type: string + description: 'Gets or sets the local user''s date and time of the event, based on the GetEvents.UserTimeZoneId specified.' + format: date-time + x-nullable: false + Status: + type: string + description: Gets or sets the current status of the event + PlannedChangeStatus: + type: string + description: Gets or sets the planned change status. + PlannedChangeId: + type: string + description: Gets or sets the planned change id + PlannedChangeManual: + type: boolean + description: Gets or sets whether event was added to the planned change manually or via a rule. + x-nullable: false + Origin: + type: string + description: 'Gets or sets the origin of the event (Polling, LiveTracking etc)' + TimeZoneId: + type: string + description: Gets or sets the time zone id. + UtcOffsetHours: + type: number + description: Gets or sets the offset of local time as represented by TimeZoneId and Utc time in hours. + format: double + x-nullable: false + Version: + type: integer + description: Gets or sets the object version. + format: int32 + x-nullable: false + Score: + type: number + description: Gets or sets the score - only used when returning 'ranked' events. + format: double + x-nullable: false + Description: + type: string + description: Gets or sets the event description. + ProcessingTimeMs: + type: number + description: Gets or sets the processing time in ms. + format: double + Url: + type: string + description: Gets a URL of the event to get more details. + ExtraInfo: + type: string + description: 'Gets or sets the extra info. Where the event is an alert notification, this contains information about tracker reconfigurations, this property can be used to hold the data in a more easily parsed form.' + UsedInBaselines: + type: array + items: + $ref: '#/components/schemas/UsedInBaseline' + description: 'Gets or sets the links indicating whether the event has been used to create or amend a rule in a baseline report, and the action taken.' + description: The device event. + TextDifference: + title: TextDifference + type: object + properties: + ExpectedText: + type: string + ActualText: + type: string + description: TextDifference + SubmitDeviceEventsLimited: + title: SubmitDeviceEventsLimited + type: object + properties: + Events: + type: array + items: + $ref: '#/components/schemas/DeviceEvent' + description: Specifies the list of device events for the hub to process. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds a list of device change events to the system. The response can indicate a rate-limiting back off time. + SystemReady: + title: SystemReady + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets whether system is booted and ready for login. + SystemDetails: + title: SystemDetails + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets system version and config settings once logged in. + GetBackgroundTaskStatuses: + title: GetBackgroundTaskStatuses + type: object + properties: + UserName: + type: string + description: 'Specifies a specific user name to retrieve tasks for (Optional, but only Admin users can retrieve tasks for other users or internal system tasks).' + StartDateTimeUtc: + type: string + description: Specifies the start time (in UTC) for a task to be retrieved (Optional). + format: date-time + EndDateTimeUtc: + type: string + description: Specifies the end time (in UTC) for a task to be retrieved (Optional). + format: date-time + Statuses: + type: array + items: + type: string + x-nullable: false + description: Specifies the status of tasks to be retrieved (Optional). + TaskIds: + type: array + items: + type: string + description: Specifies a list of specific task ids to retrieved (Optional). + TaskTypes: + type: array + items: + type: string + description: Specifies a list of specific task types to be retrieved (Optional). + IncludeDependentTasks: + type: boolean + description: Specifies whether to return the tasks that each task depends on in its DependentTasks property (Optional). + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Retrieves a list of background, potentially long-running, tasks the hub has performed and their associated status.' + EventsOnIncomingQueue: + title: EventsOnIncomingQueue + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets the number of events currently in the processing queue. + EventMessageStatus: + title: EventMessageStatus + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Returns the number of internal event notification messages received, processed or failed.' + GetPipelineStatus: + title: GetPipelineStatus + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Gets the pipeline status, returning a dictionary of pipeline components and their current status.' + GetPipelineMetrics: + title: GetPipelineMetrics + type: object + properties: + Interval: + type: string + FromUtc: + type: string + format: date-time + ToUtc: + type: string + format: date-time + PipelineNode: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets system performance metrics. + GetWorkloadStats: + title: GetWorkloadStats + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Returns the pipeline workload. + GetCacheStats: + title: GetCacheStats + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Returns the cache statistics. + GetOpenApi3Yaml: + title: GetOpenApi3Yaml + type: object + description: GetOpenApi3Yaml + GetAvailableReportTypes: + title: GetAvailableReportTypes + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + GetReportTemplate: + title: GetReportTemplate + type: object + properties: + TemplateType: + type: string + RendererType: + type: string + TemplateName: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + GetReportTemplates: + title: GetReportTemplates + type: object + properties: + ReportTemplateType: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + GetScheduledReports: + title: GetScheduledReports + type: object + properties: + Id: + type: string + IdType: + type: string + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + UsageTag: + type: string + IncludeAllUsersReports: + type: boolean + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + UpdateReportTemplate: + title: UpdateReportTemplate + type: object + properties: + TemplateId: + type: string + TemplateType: + type: string + ReportTemplateName: + type: string + ReportTemplateType: + type: string + TemplateVersion: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + UploadReportTemplate: + title: UploadReportTemplate + type: object + properties: + Name: + type: string + description: Specifies the name. + TemplateType: + type: string + description: Specifies the template type. + OverwriteIfExists: + type: boolean + description: Specifies a flag to indicate wether or not to overwrite the report / config if it already exists + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + DeleteCustomReportTemplate: + title: DeleteCustomReportTemplate + required: + - ReportTemplateType + - TemplateName + - TemplateVersion + type: object + properties: + ReportTemplateType: + type: string + description: Gets or sets the ReportTemplateType of the report template to delete. + TemplateName: + type: string + description: Gets or sets the name of the report template to delete. + TemplateVersion: + type: string + description: Gets or sets the version of the report template to delete. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Deletes a report layout template of the specified type and name + DataSpecDeviceMonitoringReport: + title: DataSpecDeviceMonitoringReport + required: + - DateRange + type: object + properties: + ExcludeEvents: + type: boolean + x-nullable: false + ExcludePlannedChanges: + type: boolean + x-nullable: false + ExcludeTrackerDetails: + type: boolean + x-nullable: false + ExcludeReportDetails: + type: boolean + x-nullable: false + DateRange: + $ref: '#/components/schemas/ReportDateRange' + OnlineStatuses: + type: array + items: + type: string + x-nullable: false + description: Gets or sets the online statuses of the devices to return. Optional. + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + Id: + type: string + description: Specifies the Id of the data query specification + Type: + type: string + description: The Type name of the data query specification + IteratorValues: + type: array + items: + type: string + description: 'Used to specify the list of items to report on, for data query specifications that support this. If this is not supplied, SelectionQuery can be used to specify a query to be performed to find the list of ids to report on' + SelectionQuery: + $ref: '#/components/schemas/SelectionQuery' + Groups: + type: array + items: + type: string + description: Specifies the Groups (and implicitly and child groups) to be reported on in the report. + ItemName: + type: string + description: 'Specifies the descriptive name of the result item, for example ''report'', ''planned change'', ''event'' etc.' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to gets the data for a device monitoring report + ReportDateRange: + title: ReportDateRange + type: object + properties: + LastNSeconds: + type: integer + format: int32 + StartUtc: + type: string + format: date-time + EndUtc: + type: string + format: date-time + SnapToWholeUnit: + type: boolean + x-nullable: false + OffsetUnits: + type: integer + format: int32 + x-nullable: false + TimeZoneId: + type: string + description: ReportDateRange + SelectionQuery: + title: SelectionQuery + type: object + properties: + Operator: + type: string + FieldName: + type: string + SearchText: + type: string + description: SelectionQuery + GetRuleResults: + title: GetRuleResults + type: object + properties: + GroupResultsEventId: + type: string + RuleResultStateIds: + type: array + items: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: GetRuleResults + GetComplianceReportSummaryData: + title: GetComplianceReportSummaryData + required: + - ReportItemId + - ReportInstanceId + type: object + properties: + ReportItemId: + type: string + description: Specifies the scheduled report item id. + ReportInstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + IncludeAgentTaskDetails: + type: boolean + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: GetComplianceReportSummaryData + GetCurrentPlannedChanges: + title: GetCurrentPlannedChanges + type: object + properties: + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + PeriodHours: + type: integer + format: int32 + x-nullable: false + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Stats Service + GetComplianceData: + title: GetComplianceData + required: + - ReportItemId + type: object + properties: + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + FillInMissingData: + type: boolean + x-nullable: false + LeftmostInstanceId: + type: string + RightmostInstanceId: + type: string + PagingDirection: + type: string + ReportItemId: + type: string + description: Specifies the scheduled report item id. + StartUtc: + type: string + format: date-time + EndUtc: + type: string + format: date-time + ReportName: + type: string + MaxNumberOfSummaries: + type: integer + format: int32 + x-nullable: false + IncludeAdhocRunsInResults: + type: boolean + x-nullable: false + TimeZoneId: + type: string + IncludeDevicesWithNoResults: + type: boolean + x-nullable: false + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Get report summaries by report, for either individual devices, or as group average.' + GetAvailableComplianceData: + title: GetAvailableComplianceData + type: object + properties: + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + StartUtc: + type: string + format: date-time + EndUtc: + type: string + format: date-time + ReturnDevices: + type: boolean + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Get a list of groups or devices that have report data available for them + GetDeviceActivity: + title: GetDeviceActivity + type: object + properties: + MaxDevicesToReturn: + type: integer + format: int32 + x-nullable: false + IncludeTaskActivity: + type: boolean + x-nullable: false + IncludeDeletedDevices: + type: boolean + x-nullable: false + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets a list of inactive devices matching the filter. + GetEventCounts: + title: GetEventCounts + type: object + properties: + UseCachedCounts: + type: boolean + x-nullable: false + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + TimeZoneId: + type: string + StartUtc: + type: string + format: date-time + EndUtc: + type: string + format: date-time + DateRangeSeconds: + type: integer + format: int32 + x-nullable: false + SummaryWindowSeconds: + type: integer + format: int32 + x-nullable: false + InferDateRangeEndpoints: + type: boolean + x-nullable: false + ReturnAsSingleResult: + type: boolean + x-nullable: false + PlannedChangeStatuses: + type: array + items: + type: string + x-nullable: false + EventTypes: + type: array + items: + type: string + x-nullable: false + PlannedChangeInstanceId: + type: string + TrackerTypeNames: + type: array + items: + type: string + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Gets a summary of event counts for the devices or groups specified by the DeviceFilter, for the specified time period.' + GetNoisyDevices: + title: GetNoisyDevices + type: object + properties: + TopN: + type: integer + format: int32 + x-nullable: false + description: 'Gets a summary of event counts for top N noisiest devices in the specified group, for the specified time period.' + ExecuteReport: + title: ExecuteReport + required: + - ReportItemId + type: object + properties: + ReportItemId: + type: string + description: Specifies the scheduled report item id. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + RenderReportIsCached: + title: RenderReportIsCached + type: object + properties: + RendererType: + type: string + ReportItemId: + type: string + description: Specifies the scheduled report item id. + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + RuleSetResultEventId: + type: string + description: 'For compliance reports only, if the InstanceId and ReportItemId are not available, the id of a previously stored RuleSetResultEvent can be supplied in this parameter.' + Format: + type: string + RenderingOptions: + $ref: '#/components/schemas/RenderingOptionOverrides' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + RenderingOptionOverrides: + title: RenderingOptionOverrides + type: object + properties: + ShowTableOfContents: + type: string + ContainerReportOptions: + $ref: '#/components/schemas/ReportRenderingOptions' + SubReportOptions: + type: array + items: + $ref: '#/components/schemas/ReportRenderingOptions' + description: RenderingOptionOverrides + ReportRenderingOptions: + title: ReportRenderingOptions + type: object + properties: + ReportSpecId: + type: string + CustomIntroParagraph: + type: string + ElementVisibility: + $ref: '#/components/schemas/ReportElementVisibility' + TemplateName: + type: string + TemplateSubType: + type: string + description: ReportRenderingOptions + ReportElementVisibility: + title: ReportElementVisibility + type: object + properties: + ShowCustomIntro: + type: boolean + x-nullable: false + ShowAgents: + type: boolean + x-nullable: false + ShowEvents: + type: boolean + x-nullable: false + ShowComments: + type: boolean + x-nullable: false + ShowQueryParameters: + type: boolean + x-nullable: false + ShowResultDescriptions: + type: boolean + x-nullable: false + ShowChildComplianceReports: + type: string + ChildComplianceReportScore: + type: number + format: double + x-nullable: false + ShowResultsOptions: + type: string + ChildReportIds: + type: array + items: + $ref: '#/components/schemas/ChildIdDisplay' + FieldVisibility: + type: array + items: + $ref: '#/components/schemas/FieldDisplay' + description: ReportElementVisibility + ChildIdDisplay: + title: ChildIdDisplay + type: object + properties: + Text: + type: string + Value: + type: string + description: ChildIdDisplay + FieldDisplay: + title: FieldDisplay + type: object + properties: + IsPrev: + type: boolean + x-nullable: false + Fmt: + type: string + CalculationType: + type: string + ListSeparators: + type: array + items: + type: string + Hdr: + type: string + AttrPrev: + type: string + AttrCurr: + type: string + FPrev: + type: string + FCurr: + type: string + Name: + type: string + description: FieldDisplay + RenderReport: + title: RenderReport + required: + - ReportItemId + - InstanceId + type: object + properties: + RendererType: + type: string + ReportItemId: + type: string + description: Specifies the scheduled report item id. + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + Format: + type: string + RenderingOptions: + $ref: '#/components/schemas/RenderingOptionOverrides' + ReturnAttachment: + type: boolean + x-nullable: false + RuleSetResultEventId: + type: string + description: 'For compliance reports only, if the InstanceId and ReportItemId are not available, the id of a previously stored RuleSetResultEvent can be supplied in this parameter.' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + RenderReportStart: + title: RenderReportStart + required: + - ReportItemId + - InstanceId + type: object + properties: + RendererType: + type: string + ReportItemId: + type: string + description: Specifies the scheduled report item id. + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + Format: + type: string + RenderingOptions: + $ref: '#/components/schemas/RenderingOptionOverrides' + RuleSetResultEventId: + type: string + description: 'For compliance reports only, if the InstanceId and ReportItemId are not available, the id of a previously stored RuleSetResultEvent can be supplied in this parameter.' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + GetScheduledInstanceOutput: + title: GetScheduledInstanceOutput + type: object + properties: + Id: + type: string + ReturnAttachment: + type: boolean + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets a previously generated report output file + DeleteScheduledInstanceOutputs: + title: DeleteScheduledInstanceOutputs + type: object + properties: + Ids: + type: array + items: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Deletes previously generated report output files + DeleteScheduledInstance: + title: DeleteScheduledInstance + required: + - ReportItemId + - InstanceId + type: object + properties: + ReportItemId: + type: string + description: Specifies the scheduled report item id. + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + UpdateScheduledInstanceLifetime: + title: UpdateScheduledInstanceLifetime + required: + - ReportItemId + - InstanceId + type: object + properties: + ReportItemId: + type: string + description: Specifies the scheduled report item id. + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + KeepResultsUntilUtc: + type: string + format: date-time + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + GetScheduledInstanceRendered: + title: GetScheduledInstanceRendered + type: object + properties: + ReportItemId: + type: string + description: Specifies the scheduled report item id. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + AddScheduledReport: + title: AddScheduledReport + required: + - Id + type: object + properties: + Id: + type: string + description: 'The id of the type of report to add, from the list supplied by GetAvailableReportTypes' + IsPublic: + type: boolean + description: Indicates whether the report/query can be seen by everyone + x-nullable: false + IsEditable: + type: boolean + description: 'Indicates whether the report/query can be edited/deleted by everyone. Note, if this is true, IsPublic must also be true' + x-nullable: false + IsHidden: + type: boolean + description: Indicates whether the report/query is visible in the reports list. Used to create temporary items for interactive 'export to csv' functions. + x-nullable: false + AsCopyOf: + type: string + description: Specifies as a copy of an existing the report/query with this Id + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds a new schedulable report of the type specified by the Id parameter + UpdateScheduledReport: + title: UpdateScheduledReport + type: object + properties: + Id: + type: string + ShowTableOfContents: + type: string + description: Specifies the updated setting for when a table of content page is shown. + ContainerReport: + $ref: '#/components/schemas/ReportSpecification' + Reports: + type: array + items: + $ref: '#/components/schemas/ReportSpecification' + description: Specifies the updated definition of the sub reports. + KeepUnscheduledResultsForMinutes: + type: integer + description: 'Specifies how long to keep ''adhoc'' (ie non-scheduled) report results for, in minutes.' + format: int32 + x-nullable: false + KeepScheduledResultsForMinutes: + type: integer + description: 'Specifies how long to keep scheduled report results for, in minutes.' + format: int32 + x-nullable: false + WaitForAdhocResultsMinutes: + type: integer + description: 'Specifies long to wait for a run''s queries to complete, in minutes.' + format: int32 + x-nullable: false + OverrideWaitForResults: + type: boolean + description: Specifies whether to override the default behaviour for scheduled queries of waiting until the next scheduled run and use the value specified by WaitForAdhocResultsMinutes instead. + x-nullable: false + Schedule: + $ref: '#/components/schemas/ReportSchedule' + EmailDelivery: + $ref: '#/components/schemas/ReportEmailDelivery' + IsPublic: + type: boolean + description: Specifies whether the report/query can be seen by everyone. + x-nullable: false + IsEditable: + type: boolean + description: Specifies whether the report/query can be edited by everyone. + x-nullable: false + IsHidden: + type: boolean + description: Specifies whether the report/query can be seen in the UI. + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + ReportSpecification: + title: ReportSpecification + type: object + properties: + ReportTemplateId: + type: string + ReportSpecId: + type: string + DataSpecId: + type: string + DataSpecType: + type: string + DataSpec: + $ref: '#/components/schemas/DataSpecBase' + Iterator: + $ref: '#/components/schemas/IteratorValueSupply' + DisplayName: + type: string + DisplayNameDefault: + type: string + RenderingOptions: + $ref: '#/components/schemas/ReportRenderingOptions' + description: ReportSpecification + DataSpecBase: + title: DataSpecBase + type: object + properties: + Id: + type: string + description: Specifies the Id of the data query specification + Type: + type: string + description: The Type name of the data query specification + IteratorValues: + type: array + items: + type: string + description: 'Used to specify the list of items to report on, for data query specifications that support this. If this is not supplied, SelectionQuery can be used to specify a query to be performed to find the list of ids to report on' + SelectionQuery: + $ref: '#/components/schemas/SelectionQuery' + Groups: + type: array + items: + type: string + description: Specifies the Groups (and implicitly and child groups) to be reported on in the report. + ItemName: + type: string + description: 'Specifies the descriptive name of the result item, for example ''report'', ''planned change'', ''event'' etc.' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: The base class common to all report data query specifications + IteratorValueSupply: + title: IteratorValueSupply + type: object + properties: + IteratorType: + type: string + ValueList: + type: array + items: + type: string + ValuePropertyName: + type: string + description: IteratorValueSupply + ReportSchedule: + title: ReportSchedule + type: object + properties: + DateMinUtc: + type: string + format: date-time + x-nullable: false + DateMaxUtc: + type: string + format: date-time + x-nullable: false + Enabled: + type: boolean + description: Specifies a flag to indicate whether the schedule is enabled + x-nullable: false + EnabledStartUtc: + type: string + format: date-time + x-nullable: false + EnabledEndUtc: + type: string + format: date-time + x-nullable: false + RepeatStartUtc: + type: string + format: date-time + x-nullable: false + RepeatEveryNPeriods: + type: integer + format: int32 + x-nullable: false + PeriodSizeSeconds: + type: integer + format: int32 + x-nullable: false + TimeZone: + type: string + description: Represents the schedule on which to produce and deliver the report. + ReportEmailDelivery: + title: ReportEmailDelivery + type: object + properties: + SendEmail: + type: boolean + description: Specifies a flag to indicate whether to send an email + x-nullable: false + EmailUsers: + type: array + items: + type: string + description: Specifies a list of system user names to send email to + Attachment1Format: + type: string + description: Specifies the format of the first optional formatted report email attachment. + Attachment2Format: + type: string + description: Specifies the format of the second optional formatted report email attachment. + Attachment3Format: + type: string + description: Specifies the format of the third optional formatted report email attachment. + Attachment1TemplateName: + type: string + description: Specifies the template name used for the first optional formatted report email attachment. + Attachment2TemplateName: + type: string + description: Specifies the template name used for the second optional formatted report email attachment. + Attachment3TemplateName: + type: string + description: Specifies the template name used for the third optional formatted report email attachment. + DontSendIfNoResultsReturned: + type: boolean + description: Specifies a flag to indicate whether or not the results should be sent (notified) if no results where returned + x-nullable: false + SuppressResultsLink: + type: boolean + description: Specifies a flag to include suppress the link to the results in notification email? + x-nullable: false + AdditionalEmailAddresses: + type: string + description: Specifies a list of additional email addresses to send the notification to (i.e people that may exist outside the CT system). Semicolon separated. + ZipAttachments: + type: boolean + description: Specifies a flag to include that attachments should be zipped + x-nullable: false + ZipPassword: + type: string + description: Specifies the password for zipfile when ZipAttachments is used + DontSendAttachmentsIfLargerThanKb: + type: integer + description: Specifies a maxmimum allowed size for attachements in kilobytes. Default 0 means no limit. + format: int32 + x-nullable: false + description: ReportEmailDelivery + DeleteScheduledReports: + title: DeleteScheduledReports + type: object + properties: + Ids: + type: array + items: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + GetScheduledInstances: + title: GetScheduledInstances + required: + - ReportItemId + - InstanceId + type: object + properties: + SummaryOnly: + type: boolean + description: Returns only summary information for use in reporting UI page + x-nullable: false + ReportItemId: + type: string + description: Specifies the scheduled report item id. + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Report Service + UploadAgentUpdate: + title: UploadAgentUpdate + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Upload an Agent Update + UpdateHubDetails: + title: UpdateHubDetails + type: object + properties: + AgentDeviceIds: + type: array + items: + type: string + GroupName: + type: string + HubServerUrl: + type: string + HubAgentUsername: + type: string + HubAgentPassword: + type: string + HubAgentNamePrefix: + type: string + HubAgentNameSuffix: + type: string + NewTrustedThumbprint: + type: string + NewTrustedPublicKey: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Update the HUbDetails.xml file for the specified agents / groups + DownloadUpdate: + title: DownloadUpdate + type: object + properties: + VersionRequested: + type: string + description: 'Used when requesting an update file from the hub, specifies the specific version required.' + UpdateType: + type: string + description: 'Specifies the update type to download (e,g RPM, DEB etc).' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Download an update package for the agent. + DeleteAgentUpdate: + title: DeleteAgentUpdate + type: object + properties: + Id: + type: string + description: Specifies the agent update ID to delete. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Deletes the specified Agent update. + GetAgentUpdates: + title: GetAgentUpdates + type: object + properties: + VersionRequested: + type: string + description: Specifies the (optional) version to get details for. + Id: + type: string + description: Specifies the specific agent update ID to get. + UpdateType: + type: string + description: 'Gets or sets the update type (deb, rpm etc)' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Gets a list of Agent updates, by version or specific ID.' + GetAgentSoftwareUpdateScheduleForGroup: + title: GetAgentSoftwareUpdateScheduleForGroup + type: object + properties: + GroupName: + type: string + description: Specifies the group name to remove the schedule for. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets the agent software update schedule for a group. + DeleteAgentSoftwareUpdateScheduleFromGroup: + title: DeleteAgentSoftwareUpdateScheduleFromGroup + type: object + properties: + GroupName: + type: string + description: Specifies the group name to remove the schedule for. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Remove (delete) the agent software update schedule for a group. + UpdateAgentSoftwareUpdateScheduleForGroup: + title: UpdateAgentSoftwareUpdateScheduleForGroup + type: object + properties: + GroupName: + type: string + description: Gets or sets the group name that the update scheduled applies to. + AgentUpdateSchedule: + $ref: '#/components/schemas/GroupAgentUpdateSchedule' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Update the agent software update schedule for a group. + GroupAgentUpdateSchedule: + title: GroupAgentUpdateSchedule + type: object + properties: + UpdateId: + type: string + description: Specifies the Update ID from the AgentSoftwareUpdateService + AgentVersion: + type: string + description: Specifies the version to be downloaded + UpdateType: + type: string + description: Specifies the update type to be downloaded + StartTimeUtc: + type: string + description: Specifies the start date / time for the update to take place + format: date-time + x-nullable: false + EndTimeUtc: + type: string + description: Specifies the end date / time for the update to take place + format: date-time + x-nullable: false + GroupName: + type: string + description: Specifies the group name this update applies to + UpgradeToNetCore: + type: boolean + description: Specifies whether non-netcore agents will be upgraded to a netcore version + x-nullable: false + description: Defines a schedule for a group to receive an agent software update + SetAgentSoftwareUpdateScheduleForGroup: + title: SetAgentSoftwareUpdateScheduleForGroup + type: object + properties: + GroupName: + type: string + description: Specifies the group name to associate this schedule with. + AgentUpdateSchedule: + $ref: '#/components/schemas/GroupAgentUpdateSchedule' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Add (set) an agent update schedule for a specific group. Only one schedule is permitted per group at the current time. + GetSyncServiceConfigItems: + title: GetSyncServiceConfigItems + type: object + properties: + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Retrieves a list of SyncService configuration items. + AddSyncServiceConfigItem: + title: AddSyncServiceConfigItem + required: + - Key + - Value + type: object + properties: + Key: + type: string + description: The configuration key + Value: + type: string + description: The configuration value + Hidden: + type: boolean + description: Indicates whether this configuration value should be stored as a secret + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds a new SyncService configuration item. + UpdateSyncServiceConfigItem: + title: UpdateSyncServiceConfigItem + required: + - Key + - Value + type: object + properties: + Key: + type: string + description: The configuration key + Value: + type: string + description: The configuration value + Hidden: + type: boolean + description: Indicates whether this configuration value should be stored as a secret + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Updates an existing SyncService configuration item. + DeleteSyncServiceConfigItem: + title: DeleteSyncServiceConfigItem + required: + - Key + type: object + properties: + Key: + type: string + description: The configuration key + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Deletes a SyncService configuration item. + GetConfigItems: + title: GetConfigItems + type: object + properties: + Id: + type: string + description: Specifies a specific configuration item to retrieve (Optional). + Key: + type: string + description: Specifies a specific configuration parameter 'Key' to retrieved (Optional). + KeyList: + type: array + items: + type: string + description: Specifies a list of specific configuration parameter 'Keys' to retrieved (Optional). + IncludeHidden: + type: boolean + description: 'Include hidden, ''system'', parameters.' + x-nullable: false + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Retrieves a list of hub configuration parameters. + AddConfigItems: + title: AddConfigItems + type: object + properties: + ConfigItems: + $ref: '#/components/schemas/Dictionary_String_String_' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Add a list of hub configuration parameters. + UpdateConfigItems: + title: UpdateConfigItems + type: object + properties: + ConfigItems: + type: array + items: + $ref: '#/components/schemas/UpdateConfigItem' + description: A list of config items to update. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Update a a list of hub configuration parameters. + UpdateConfigItem: + title: UpdateConfigItem + type: object + properties: + Id: + type: string + description: The specific config value to update (can be used if a multi-value key is being updated or if a key is to be changed). + Key: + type: string + description: The new key value in the case of updating by Id or a the key to search for if updating by key. + Value: + type: string + description: The new value for this config key / id. + Hidden: + type: boolean + description: A boolean indicating whether or not to hide this config item from the UI. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Update a single hub configuration parameter by either ID or Key. + DeleteConfigItem: + title: DeleteConfigItem + type: object + properties: + Id: + type: string + description: Specifies the specific config item to remove. + Key: + type: string + description: 'Specifies the config item key to remove. Note : will remove all instances of config items with the same key.' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Remove a hub configuration parameter by either ID or Key. + AddConfigItem: + title: AddConfigItem + type: object + properties: + Key: + type: string + description: The configuration key you wish to add + Value: + type: string + description: The value of the key + Hidden: + type: boolean + description: A boolean indicating whether or not this is a 'hidden' key (i.e internal not intended for users to change) + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Add a hub configuration parameter by Key. + DateTransmissionTest: + title: DateTransmissionTest + type: object + properties: + DateTime: + type: string + description: The date to send to the hub that will be then sent back as the response to ensure no loss of accuracy occurs + format: date-time + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Echos the specified date/time value to ensure that no serialization issues exist between hub and client. + AddCredentials: + title: AddCredentials + type: object + properties: + Credentials: + $ref: '#/components/schemas/Credentials' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Add credentials for specified type and key. + Credentials: + title: Credentials + type: object + properties: + Version: + type: integer + format: int32 + x-nullable: false + CredentialType: + type: string + description: Specifies the credential type. + LegacyDbCredential: + type: boolean + description: Specifies whether the credential is a legacy db credential. + x-nullable: false + DeviceOnlineDetection: + type: string + Key: + type: string + description: Specifies the key. + PublicKeys: + type: array + items: + type: string + description: Specifies the public keys. + Parameters: + $ref: '#/components/schemas/Dictionary_String_String_' + Prompts: + type: array + items: + type: string + description: Specifies the prompts. + DecryptionErrors: + $ref: '#/components/schemas/Dictionary_String_String_' + LastModifiedDateUtc: + type: string + format: date-time + x-nullable: false + IsTrusted: + type: boolean + x-nullable: false + NotTrustedReason: + type: string + DiscoveryTaskId: + type: integer + format: int32 + x-nullable: false + DiscoveryStatusMessage: + type: string + DiscoveryTaskStatus: + type: string + description: 'Represents some credentials used to connect to a remote service (e.g SSH, database etc).' + UpdateCredentials: + title: UpdateCredentials + type: object + properties: + CredentialsType: + type: string + description: Specifies the original credential type. + Key: + type: string + description: Specifies the original key + Credentials: + $ref: '#/components/schemas/Credentials' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Update credentials for specified type and key. + RemoveCredentials: + title: RemoveCredentials + type: object + properties: + CredentialsType: + type: string + description: Specifies the credentials type. + Key: + type: string + description: Specifies the key. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Remove credentials for specified type and key. + GetCredentialsKeyedByType: + title: GetCredentialsKeyedByType + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Get a list of all the known credentials, keyed by the type.' + GetCredentialsList: + title: GetCredentialsList + type: object + properties: + CredentialType: + type: string + description: Specifies the type of credentials to return + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets a list of all credentials of the specified type. + GetAgentTaskStatuses: + title: GetAgentTaskStatuses + type: object + properties: + Ids: + type: array + items: + type: integer + format: int32 + x-nullable: false + description: Specifies the task ids. + PolicyRunId: + type: integer + description: Specifies the policy run id. + format: int32 + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Requests information about the given tasks'' status. If a PolicyRunId is supplied, the tasks associated with it are returned.' + SubmitAgentTasks: + title: SubmitAgentTasks + type: object + properties: + Tasks: + type: array + items: + $ref: '#/components/schemas/AgentTask' + description: Specifies the list of tasks that will be submitted. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds a list of tasks for the given agent. + AgentTask: + title: AgentTask + type: object + properties: + Id: + type: integer + description: Specifies the task id. + format: int32 + x-nullable: false + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + GroupNames: + type: array + items: + type: string + description: A list of names the agent device was a member of when the task was defined. + AgentTaskType: + type: string + description: Specifies the agent task type. + PolicyTemplateName: + type: string + description: Specifies the policy template name. Only relevant for certain types of report execution tasks for which it preserves a trace of the source policy name the report is based on. + PolicyTemplateSignature: + type: string + description: Specifies the policy template signature. In combination with the 'PolicyTemplateName' this is used by agents that hold a local cache of report definitions to determine whether the cached version is up to date.. + Text: + type: string + description: Specifies the text of the task command. + Command: + type: string + description: Specifies the agent task command - this is an abbreviated form of the Text above with just the command and parameters but no XML + PolicyRunId: + type: integer + description: Specifies run id (a collection of related tasks ids across multiple agent/devices) if party of a scheduled polocy run + format: int32 + x-nullable: false + SendProgressEveryNSeconds: + type: integer + description: Specifies whether task progress updates are sent every N seconds. A value of zero indicates no percentage progress values are sent. + format: int32 + x-nullable: false + Status: + type: string + description: 'Specifies the status, ''in progress'', ''complete'' etc. See ''AgentTaskStatus''.' + StatusMessage: + type: string + description: 'Specifies the additional status message, if any.' + StatusUpdatedUtc: + type: string + description: Specifies the utc time the status of the task was updated. + format: date-time + x-nullable: false + AgentTaskCreationDateUtc: + type: string + description: Specifies the utc time the task was created. + format: date-time + x-nullable: false + ResultData: + type: string + description: Specifies the result data. + StartDate: + type: string + description: Specifies the start date after which this task is active. If null the task will be picked up by the agent immediately. + format: date-time + EndDate: + type: string + description: Specifies the end date after which this task is no longer active. If null the task will be picked up by the agent whenever it calls in for new tasks. + format: date-time + ResultDataItems: + type: array + items: + $ref: '#/components/schemas/AgentDataItem' + description: Specifies the result data items. + ExternalResultDataItemsFileId: + type: string + description: Specifies the external file id (used if the ResultDataItems above exceeds 16mb) + ReplyByUtc: + type: string + description: Specifies the Utc time by which a reply must be received. Mainly used for report tasks which will be expired when the next run is started. Null if no specific reply-by time + format: date-time + ReportItemId: + type: string + description: Specifies the scheduled report item Id that this task is associated with. Only applicable to report execution tasks. + ReportInstanceId: + type: string + description: Specifies the scheduled report instance Id that this task is associated with. Only applicable to report execution tasks. + description: An agent task. + DownloadFileHashBinary: + title: DownloadFileHashBinary + type: object + properties: + ReturnUrl: + type: boolean + description: Specifies a flag that indicates wether or not to return a URL or the file directly + x-nullable: false + HostType: + type: string + description: 'Specifies the host type the file hash binary is required for (e.g Unix, Windows etc)' + OperatingSystem: + type: string + description: Specifies the operating system naame (as defined in KnownOsNames). Optional + Variant: + type: string + description: 'Specifies the operating system / host variant. e.g x64, 10 SPARC etc' + FileId: + type: string + description: Specifies the specific file id + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Download the filehasing utility app for remote monitoring. + GetFileHashBinaries: + title: GetFileHashBinaries + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Retrieves the list of file hash binaries available to download from the hub. + GetPlannedChangeInstanceMembers: + title: GetPlannedChangeInstanceMembers + required: + - InstanceId + type: object + properties: + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets the group and device members of the specified planned change instance. + DeletePlannedChangeInstance: + title: DeletePlannedChangeInstance + required: + - InstanceId + type: object + properties: + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + DeletePlannedChange: + type: boolean + description: Delete the 'parent' planned change also? + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Deletes an instance of a planned change from the system. + DeletePlannedChangeInstanceMember: + title: DeletePlannedChangeInstanceMember + required: + - InstanceId + type: object + properties: + GroupName: + type: string + description: Specifies the group to remove from the planned change. + AgentDeviceId: + type: string + description: Specifies individual device remove from the planned change. + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Removes a group or device from a planned change + AddPlannedChangeInstance: + title: AddPlannedChangeInstance + type: object + properties: + PlannedChangeName: + type: string + description: 'Specifies the planned change definition name. Optional, if not supplied a new empty planned change ruleset is created and returned in the response.' + DisplayName: + type: string + description: Specifies the DisplayName. Required. + Description: + type: string + description: Specifies the description. Required. + AssignedTo: + type: string + description: Specifies the Assigned To Name. + Origin: + type: string + description: 'Specifies the origin of the planned change. Optional, this can be ''Interactive'' for UI created, or the name of an ITSM instance when created by sync service.' + MemberGroups: + type: array + items: + type: string + description: Specifies the groups that are members of the planned change. Optional. + MemberAgentDeviceIds: + type: array + items: + type: string + description: Specifies the devices that are explicit members of the planned change. Optional. + StartTimeUtc: + type: string + description: Specifies the UTC start time of the instance. Optional. + format: date-time + EndTimeUtc: + type: string + description: Specifies the UTC end time of the instance. Optional. + format: date-time + PeriodicityCount: + type: integer + description: Specifies a value indicating the periodicity of the planned change. When PeriodicityCount is greater then zero the planned change is active every PeriodicityCount PeriodicityUnits for PeriodDurationCount PeriodDurationUnits starting from StartTimeUtc. + format: int32 + x-nullable: false + PeriodicityUnit: + type: string + description: Specifies a value indicating the periodicity unit. + PeriodDurationCount: + type: integer + description: Specifies a value indicating the period duration of the planned change. When PeriodicityCount is greater then zero the planned change is active every PeriodicityCount PeriodicityUnits for PeriodDurationCount PeriodDurationUnits starting from StartTimeUtc. + format: int32 + x-nullable: false + PeriodDurationUnit: + type: string + description: Specifies a value indicating the period duration unit. + Disabled: + type: boolean + description: Specifies a value indicating whether to create the planned change instance in a disabled state. + x-nullable: false + DisallowRules: + type: boolean + description: 'Specifies a value indicating whether the planned change is allowed to have rules, or is a just container for manually added events.' + x-nullable: false + UseAttributeRules: + type: boolean + description: 'TODO: How do we deal with this? TEMP used to trigger the new file hash based attribute rule generation. Eventually this will be the norm and this property can be removed.' + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Add a planned change instance. + UpdatePlannedChangeInstance: + title: UpdatePlannedChangeInstance + required: + - InstanceId + type: object + properties: + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + Description: + type: string + description: Specifies the description. Optional. + PlannedChangeName: + type: string + description: Specifies the id (Name) of the ruleset used by this planned change. Optional. + AssignedTo: + type: string + description: Specifies the Assigned To Name. + MemberGroups: + type: array + items: + type: string + description: Specifies the groups that are members of the planned change. Optional. + StartTimeUtc: + type: string + description: Specifies the UTC start time of the instance. Optional. + format: date-time + EndTimeUtc: + type: string + description: Specifies the UTC end time of the instance. Optional. + format: date-time + Started: + type: boolean + description: Specifies a value indicating whether the planned change has been started. Optional. + Ended: + type: boolean + description: Specifies a value indicating whether the planned change has been ended. Optional. + Disabled: + type: boolean + description: Specifies a value indicating whether the planned change instance is disabled. Optional. + DisallowRules: + type: boolean + description: 'Specifies a value indicating whether the planned change is allowed to have rules, or is a just container for manually added events. Optional.' + PeriodicityCount: + type: integer + description: Specifies a value indicating the periodicity of the planned change. When PeriodicityCount is greater then zero the planned change is active every PeriodicityCount PeriodicityUnits for PeriodDurationCount PeriodDurationUnits starting from StartTimeUtc. + format: int32 + PeriodicityUnit: + type: string + description: Specifies a value indicating the periodicity unit. + PeriodDurationCount: + type: integer + description: Specifies a value indicating the period duration of the planned change. When PeriodicityCount is greater then zero the planned change is active every PeriodicityCount PeriodicityUnits for PeriodDurationCount PeriodDurationUnits starting from StartTimeUtc. + format: int32 + PeriodDurationUnit: + type: string + description: Specifies a value indicating the period duration unit. + DisplayName: + type: string + description: Specifies the Display Name. + MemberAgentDeviceIds: + type: array + items: + type: string + description: Specifies the devices that are explicit members of the planned change. Optional. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Update a planned change instance + ClonePlannedChangeInstance: + title: ClonePlannedChangeInstance + required: + - InstanceId + type: object + properties: + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + CloneDefinition: + type: boolean + description: Specifies the whether to clone the associated PlannedChangeDefinition + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Clone a planned change instance. + GetPlannedChangeInstancesNameValue: + title: GetPlannedChangeInstancesNameValue + type: object + properties: + InstanceIds: + type: array + items: + type: string + description: Specifies the instance id. Optional. + MemberGroups: + type: array + items: + type: string + description: Specifies the member groups to filter by. This is a list of groups that are members of the planned changes instances returned. Optional. + MemberAgentDeviceIds: + type: array + items: + type: string + description: Specifies the ids of member devices. + Description: + type: string + description: Specifies the planned change instance description to find. Optional. + PlannedChangeName: + type: string + description: Specifies the planned change definition name to find instances of. Optional. + DisplayName: + type: string + description: Specifies the planned change display name to find instances of. Optional. + DisplayNameContains: + type: string + description: Specifies the planned change instance name fragment to find. Optional. + ExcludeDisabled: + type: boolean + description: 'Specifies a value indicating whether to exclude disabled instances from the list. Optional, defaults to false.' + x-nullable: false + ExcludeOutOfSchedule: + type: boolean + description: 'Specifies a value indicating whether to exclude instances whose schedule is not currently active from the list. Optional, defaults to false.' + x-nullable: false + DisallowRules: + type: boolean + description: Specifies an optional value indicating whether the planned change instances returned are allowed to have rules. + StartDateUtc: + type: string + description: Gets or sets the Date/Time of the start date UTC of the Planned Changes to be returned. + format: date-time + EndDateUtc: + type: string + description: Gets or sets the Date/Time of the end date UTC of the Planned Changes to be returned. + format: date-time + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Gets planned change instances name and id, filtering by name, id or groups that are members.' + AddPlannedChangeInstanceMember: + title: AddPlannedChangeInstanceMember + required: + - InstanceId + type: object + properties: + MemberGroups: + type: array + items: + type: string + description: Specifies names of groups of devices to add to the planned change. + MemberAgentDeviceIds: + type: array + items: + type: string + description: Specifies individual device ids to add to the planned change. + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Add a list of groups to a planned change + AddOrUpdatePlannedChangeInstanceFromEvents: + title: AddOrUpdatePlannedChangeInstanceFromEvents + required: + - InstanceId + type: object + properties: + AllEventsSelected: + type: boolean + description: Indicates that the All Events option has been selected. + x-nullable: false + EventsQuery: + $ref: '#/components/schemas/GetEvents' + Name: + type: string + description: Specifies the name of the 'PlannedChangeDefinition' to create. + UpdateExisting: + type: boolean + description: Specifies the flag indicating whether or not we're updating an existing planned change + x-nullable: false + UseMinimumRules: + type: boolean + description: Specifies a value indicating whether to use the minimum possible number rules to match the items. + x-nullable: false + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + MemberGroups: + type: array + items: + type: string + description: Specifies the groups that are members of the planned change. Optional. + MemberAgentDeviceIds: + type: array + items: + type: string + description: Specifies the devices that are explicit members of the planned change. Optional. + ReconsiderEventsFromUtc: + type: string + description: Specifies the UTC time to reconsider matching events from. If null no events are reprocessed. + format: date-time + RuleBuilderItems: + type: array + items: + $ref: '#/components/schemas/RuleBuilderItem' + description: Specifies the events that make up the initial filter rules of the new 'PlannedChangeInstance'. The matching 'PlannedChangeFilterRuleInferenceOptions' provide details about how the event filter rule is to be constructed. + PreviewOnly: + type: boolean + description: Specifies a value indicating whether to preview the settings for the resulting 'PlannedChangeInstance' or to really created it + x-nullable: false + EndDateUtc: + type: string + description: Specifies the UTC end date for the new PlannedChangeInstance. If this is null the PlannedChangeInstance is open-ended. + format: date-time + Origin: + type: string + description: 'Specifies the origin of the planned change. Optional, this can be ''Interactive'' for UI created, or the name of an ITSM instance when creates by sync service.' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to add a new planned change and planned change instance based on the given events. + RuleBuilderItem: + title: RuleBuilderItem + type: object + properties: + EventType: + type: string + description: Specifies the event type of the events in 'EventIds'. Default if not specified is 'DeviceEvent'. + EventIds: + type: array + items: + type: string + description: Specifies the event ids. + PlannedChangeFilterRuleInferenceOptions: + $ref: '#/components/schemas/PlannedChangeFilterRuleInferenceOptions' + description: Rule Builder containing Events and Planned Change Filter Rule Options + PlannedChangeFilterRuleInferenceOptions: + title: PlannedChangeFilterRuleInferenceOptions + type: object + properties: + FilterByTracker: + type: boolean + description: Specifies a value indicating whether to filter by tracker. + x-nullable: false + FilterByItemType: + type: boolean + description: Specifies a value indicating whether to filter by item type. + x-nullable: false + FilterByItemValue: + type: boolean + description: Specifies a value indicating whether to filter by item value. + x-nullable: false + FilterByAttribute: + type: boolean + description: Specifies a value indicating whether to filter by item attribute. + x-nullable: false + ItemValueTextMatchOperator: + type: string + description: Specifies the item value text match operator. + ItemValueCaseSensitive: + type: boolean + description: Specifies a value indicating whether item value matches are case sensitive. + x-nullable: false + ItemValueToMatch: + type: string + description: Specifies the item value to match. + description: The filter rule inference options specify how to create a planned change filter rule from a Device Event + AddReEvaluationOfPlannedChangeInstanceEvents: + title: AddReEvaluationOfPlannedChangeInstanceEvents + required: + - InstanceId + type: object + properties: + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + EarliestEventTimeUtc: + type: string + description: Specifies the earliest UTC event time. This is the time of earliest events to re-consider for retrospective inclusion in the planned change. + format: date-time + LastEventTimeUtc: + type: string + description: Specifies the latest UTC event time. This is the time of the last events to re-consider for retrospective inclusion in the planned change. + format: date-time + PlannedChangeManual: + type: boolean + description: Indicates whether to further restrict the event query to events that were either added to the planned change manually or not (i.e. were added by a rule) + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to re-evaluate the events associated with the specified planned change. + GetPlannedChangeInstances: + title: GetPlannedChangeInstances + type: object + properties: + InstanceIds: + type: array + items: + type: string + description: Specifies the instance id. Optional. + MemberGroups: + type: array + items: + type: string + description: Specifies the member groups to filter by. This is a list of groups that are members of the planned changes instances returned. Optional. + MemberAgentDeviceIds: + type: array + items: + type: string + description: Specifies the ids of member devices. + Description: + type: string + description: Specifies the planned change instance description to find. Optional. + PlannedChangeName: + type: string + description: Specifies the planned change definition name to find instances of. Optional. + DisplayName: + type: string + description: Specifies the planned change display name to find instances of. Optional. + DisplayNameContains: + type: string + description: Specifies the planned change instance name fragment to find. Optional. + ExcludeDisabled: + type: boolean + description: 'Specifies a value indicating whether to exclude disabled instances from the list. Optional, defaults to false.' + x-nullable: false + ExcludeOutOfSchedule: + type: boolean + description: 'Specifies a value indicating whether to exclude instances whose schedule is not currently active from the list. Optional, defaults to false.' + x-nullable: false + DisallowRules: + type: boolean + description: Specifies an optional value indicating whether the planned change instances returned are allowed to have rules. + OmitPlannedChangeDefinitions: + type: boolean + description: 'Specifies an optional value indicating whether to omit returning the PlannedChangeDefinition on the returned PlannedChangeInstance, useful if you only want a list of instances without the potentially large definitions embedded.' + x-nullable: false + OmitExceptKeyValue: + type: boolean + x-nullable: false + StartDateUtc: + type: string + description: Gets or sets the Date/Time of the start date UTC of the Planned Changes to be returned. + format: date-time + EndDateUtc: + type: string + description: Gets or sets the Date/Time of the end date UTC of the Planned Changes to be returned. + format: date-time + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Gets planned change instances, filtering by name, id or groups that are members.' + AddPlannedChange: + title: AddPlannedChange + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + Name: + type: string + description: Specifies the internally identifying name. + DisplayName: + type: string + description: Specifies the display name. + Description: + type: string + description: Specifies the description text. + Origin: + type: string + description: 'Specifies the origin of the planned change ruleset. Optional, this can be ''Interactive'' for UI created, or the name of an ITSM instance when creates by sync service.' + CreationDateUtc: + type: string + description: Specifies the UTC creation date of the planned change. + format: date-time + x-nullable: false + LastModifiedDateUtc: + type: string + description: Specifies the UTC last modified date of the planned change. + format: date-time + x-nullable: false + DisallowRules: + type: boolean + description: 'Specifies a value indicating whether the planned change is allowed to have rules, or is a just container for manually added events.' + x-nullable: false + Rules: + $ref: '#/components/schemas/Dictionary_String_PlannedChangeRule_' + RuleCombinationOperator: + type: string + description: Specifies the rule combination operator. If this is And it means an event must satisfy all the'Rules'. + description: Add a planned change definition. + PlannedChangeRule: + title: PlannedChangeRule + type: object + properties: + RuleType: + type: string + description: Specifies the rule type. + Id: + type: string + description: Specifies the rule id. Unique within the context of the 'PlannedChange'. + Name: + type: string + description: Specifies the name. Optional. + Order: + type: integer + description: Specifies the order id governing order of evaluation of the rules. + format: int32 + x-nullable: false + TrackerTypeName: + type: string + description: Specifies the tracker type name. + ItemTypeName: + type: string + description: Specifies the item type name. + NameMatchText: + type: string + description: Specifies the name match text. + NameMatchOperator: + type: string + description: Specifies the name match operator. + NameMatchCaseSensitive: + type: boolean + description: Specifies a value indicating whether the name match is case sensitive. + x-nullable: false + NameMatchTextLowered: + type: string + description: Specifies the 'NameMatchText' in lowered case. + NameMatchTextUsingCaseSensitivity: + type: string + description: Gets the name match text using case sensitivity. + Description: + type: string + description: Gets the description. + ListFilterAttribute: + type: string + description: 'When the RuleType is ListFilter, specifies the name of the attribute used as the source for comparison with the List' + ListFilterSeparator: + type: string + description: Gets or sets the list filter separators. + List: + type: array + items: + type: string + description: 'When the RuleType is a ListFilter, specifies the list of List Filter Attribute values used as the source for comparison when the rule is evaluated.' + description: Represents a rule specifying a requirement that an event be of a particular type. + Dictionary_String_PlannedChangeRule_: + title: 'Dictionary' + type: object + additionalProperties: + $ref: '#/components/schemas/PlannedChangeRule' + description: 'Dictionary' + UploadPlannedChange: + title: UploadPlannedChange + type: object + properties: + OverwriteIfExists: + type: boolean + description: Specifies a flag to indicate wether or not to overwrite the planned change ruleset if it already exists + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Upload a planned change ruleset json file + DownloadPlannedChange: + title: DownloadPlannedChange + type: object + properties: + Id: + type: string + description: Specifies the planned change rule set id + IncludeAttributeRuleList: + type: boolean + description: Specifies whether to return the List property for attribute list rules. Defaults to false. + x-nullable: false + IncludeAttributeRuleText: + type: boolean + description: Specifies whether to return the list in the MatchText property for attribute list rules. Defaults to true. + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Download a planned change ruleset json file + UpdatePlannedChange: + title: UpdatePlannedChange + type: object + properties: + Name: + type: string + description: Specifies the internal Name identifying the planned change. This cannot be updated. + DisplayName: + type: string + description: Specifies the display name. + Description: + type: string + description: Specifies the description text. + RuleCombinationOperator: + type: string + description: Specifies the rule combination operator. If this is And it means an event must satisfy all the 'PlannedChangeDefinition.Rules'. + DisallowRules: + type: boolean + description: 'Specifies a value indicating whether the planned change is allowed to have rules, or is a just container for manually added events.' + Rules: + $ref: '#/components/schemas/Dictionary_String_PlannedChangeRule_' + Origin: + type: string + description: 'Specifies the origin of the planned change update. Optional, this can be ''Interactive'' for UI created, or the name of an ITSM instance when updated by sync service.' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Update a planned change definition + ClonePlannedChange: + title: ClonePlannedChange + type: object + properties: + Name: + type: string + description: Specifies the internal Name identifying the planned change to clone. This cannot be updated. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Clone a planned change definition. + AnalyzePlannedChange: + title: AnalyzePlannedChange + type: object + properties: + Name: + type: string + description: Specifies the planned change Name. This cannot be updated. + ReduceRuleIds: + type: array + items: + type: string + description: Specifies the list of rule ids to be automatically reduced to the minimum set to catch at least the same events. For example two exact name matches of files in the same directory will be reduced to one rule that matches any file in the directory. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Create rule reduction plans, which can be used to simplify rulesets associated with the specified planned change.' + ApplyPlannedChangePlan: + title: ApplyPlannedChangePlan + type: object + properties: + Name: + type: string + description: Specifies the planned change Name. This cannot be updated. + RuleIdsToRemove: + type: array + items: + type: string + description: Specifies the rule ids to remove. + RuleReductionPlan: + $ref: '#/components/schemas/RuleReductionPlan2' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Apply rule reduction plans to the specified planned change, simplifying the associated rulesets.' + RuleReductionPlan2: + title: RuleReductionPlan2 + type: object + properties: + Count: + type: integer + description: Gets or sets the count. + format: int32 + x-nullable: false + Rules: + type: array + items: + $ref: '#/components/schemas/PlannedChangeRule' + description: Gets or sets the Planned Change rules. + description: Rule Reduction Plan containing Planned Change Rules + UpdatePlannedChangeRule: + title: UpdatePlannedChangeRule + type: object + properties: + PlannedChangeName: + type: string + Rule: + $ref: '#/components/schemas/PlannedChangeRule' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Updates a rule in a planned change + UpdatePlannedChangeRules: + title: UpdatePlannedChangeRules + type: object + properties: + PlannedChangeName: + type: string + description: Specifies the planned change definition name. + Rules: + $ref: '#/components/schemas/Dictionary_String_PlannedChangeRule_' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Updates the entire rule set in a planned change + DeletePlannedChangeRule: + title: DeletePlannedChangeRule + type: object + properties: + PlannedChangeName: + type: string + description: Specifies the planned change definition name. + Id: + type: string + description: Specifies the rule id. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Removes a rule from a planned change + DeletePlannedChange: + title: DeletePlannedChange + type: object + properties: + Name: + type: string + description: Specifies the planned change ruleset definition name to remove. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Delete a planned change ruleset definition from the system. + AddPlannedChangeRule: + title: AddPlannedChangeRule + type: object + properties: + PlannedChangeName: + type: string + description: Specifies the name of the planned change to which the new rule will be added. + Rule: + $ref: '#/components/schemas/PlannedChangeRule' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Add a rule to a planned change + GetPlannedChanges: + title: GetPlannedChanges + type: object + properties: + Name: + type: string + description: Specifies the planned change definition name to find. + DisplayName: + type: string + description: Specifies the planned change display name to find. + DisplayNameContains: + type: string + description: Specifies the partial planned change display name to find. + DisallowRules: + type: boolean + description: Specifies an optional value indicating whether the planned changes returned are allowed to have rules. + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Gets a list of planned change ruleset definitions, filtered by name or id.' + ParseCommands: + title: ParseCommands + type: object + properties: + CommandLines: + type: array + items: + type: string + description: Specifies the command line + CheckGlobalWhiteList: + type: boolean + x-nullable: false + ParserNames: + type: array + items: + type: string + ReportTemplateName: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Attempts to parse the supplied commandline, returning a list of disallowed command fragments on failure.' + CreateWhitelistedCommandComponent: + title: CreateWhitelistedCommandComponent + type: object + properties: + ComponentType: + type: string + Value: + type: string + Language: + type: string + Comment: + type: string + IsTrusted: + type: boolean + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Attempts to whitelist the supplied command component. + GetWhitelistedCommandComponent: + title: GetWhitelistedCommandComponent + type: object + properties: + Value: + type: string + ComponentType: + type: string + Language: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets the whitelisted command component. + GetAllWhitelistedCommandComponents: + title: GetAllWhitelistedCommandComponents + type: object + properties: + ValueSearchText: + type: string + ComponentTypes: + type: array + items: + type: string + x-nullable: false + LanguageNames: + type: array + items: + type: string + TemplateNames: + type: array + items: + type: string + IncludeUntrustedOnly: + type: boolean + x-nullable: false + ExcludeUntrusted: + type: boolean + x-nullable: false + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Attempts to get all the whitelisted command components. + UpdateWhitelistedCommandComponent: + title: UpdateWhitelistedCommandComponent + type: object + properties: + Id: + type: string + Value: + type: string + Language: + type: string + Comment: + type: string + IsTrusted: + type: boolean + TrustChangeReason: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Attempts to update the supplied command component by id. + UpdateWhitelistedCommandComponents: + title: UpdateWhitelistedCommandComponents + type: object + properties: + Ids: + $ref: '#/components/schemas/IReadOnlyCollection_String_' + IsTrusted: + type: boolean + x-nullable: false + TrustChangeReason: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Attempts to bulk update the whitelisted command component with the supplied ids. + IReadOnlyCollection_String_: + title: IReadOnlyCollection`1 + type: object + description: IReadOnlyCollection + AddTemplatesToCommandComponent: + title: AddTemplatesToCommandComponent + type: object + properties: + TemplateNames: + type: array + items: + type: string + CommandComponentId: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds the given template(s) to a command component. + RemoveTemplatesFromCommandComponent: + title: RemoveTemplatesFromCommandComponent + type: object + properties: + TemplateNames: + type: array + items: + type: string + CommandComponentId: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Attempts to remove the given template(s) from a command component. + GetAllCommandComponentTemplates: + title: GetAllCommandComponentTemplates + type: object + properties: + CommandComponentId: + type: string + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets all templates of a command component. + GetAllCommandComponentsTemplates: + title: GetAllCommandComponentsTemplates + type: object + properties: + CommandComponentIds: + $ref: '#/components/schemas/IReadOnlyCollection_String_' + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets all templates of multiple command components. + SetAllTemplatesOfCommandComponent: + title: SetAllTemplatesOfCommandComponent + type: object + properties: + TemplateNames: + type: array + items: + type: string + CommandComponentId: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Attempts to set the given template(s) to a command component, clearing old templates if they exist.' + GetCloudTemplateCreationStatus: + title: GetCloudTemplateCreationStatus + type: object + properties: + ProspectiveName: + type: string + description: Specifies the prospective name of a Cloud System so that a check can be made to determine if any of the components already exist + ReportSpecId: + type: string + description: Specifies the id of the ReportSpecification representing this scheduled cloud report + IncludeIfHidden: + type: boolean + description: Whether or not the report associated with the ReportSpecification id will get found if it's in a hidden state + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Provide a ProspectiveName for the Cloud System or a ReportSpecId to identify the associated cloud report but never both. Gets the state of progress in the creation of a new cloud report policy. For example it may be only partially configured and require the addition of credentials before it can be run. + SetupPolicyTemplate: + title: SetupPolicyTemplate + type: object + properties: + PolicyTemplateName: + type: string + description: Specifies the policy template name + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Ensures that the specified baseline template has the required source and members groups and related scheduled compliance report configured. + GetPolicyTemplateCreationStatus: + title: GetPolicyTemplateCreationStatus + type: object + properties: + PolicyTemplateName: + type: string + description: Specifies the policy template name to query + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets the state of progress in the creation of a new policy. For example it may be only partially configured and require the addition of rules before it can be applied to devices. + AddPolicyTemplate: + title: AddPolicyTemplate + type: object + properties: + Template: + $ref: '#/components/schemas/PolicyTemplateRuleSet' + UsageTags: + type: array + items: + type: string + description: 'Specifies the policy usages type to store on the Template e.g. Baseline, Tracking etc...' + ChangeComment: + type: string + description: Specifies a short description of the change for auditing purposes. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds a device config template. + PolicyTemplateRuleSet: + title: PolicyTemplateRuleSet + type: object + properties: + RuleSetName: + type: string + RuleSetVersion: + type: string + RuleSetEdited: + type: string + Summary: + type: string + Variables: + type: array + items: + $ref: '#/components/schemas/InputVariableType' + Section: + type: array + items: + $ref: '#/components/schemas/SectionType' + AutoNumber: + type: boolean + x-nullable: false + Version: + type: integer + description: Gets the version. + format: int32 + x-nullable: false + Config: + $ref: '#/components/schemas/DeviceConfiguration' + Name: + type: string + description: Specifies the name. + DisplayName: + type: string + description: Specifies the display name. + UpdatedDateUtc: + type: string + description: Specifies the UTC date the template was updated. + format: date-time + x-nullable: false + UsageTags: + $ref: '#/components/schemas/UsageTagsType' + Audit: + $ref: '#/components/schemas/AuditType' + description: Represents a named policy tracking configuration and rule-set template. + InputVariableType: + title: InputVariableType + type: object + properties: + Item: + $ref: '#/components/schemas/BaseValueType' + DataExtraction: + $ref: '#/components/schemas/DataExtractionType' + PostProcessing: + $ref: '#/components/schemas/PostProcessingType' + Name: + type: string + Description: + type: string + DataType: + type: string + DataItemsUsed: + type: string + description: InputVariableType + BaseValueType: + title: BaseValueType + type: object + description: BaseValueType + DataExtractionType: + title: DataExtractionType + type: object + properties: + Regex: + $ref: '#/components/schemas/RegexType' + description: DataExtractionType + RegexType: + title: RegexType + type: object + properties: + IgnoreCase: + type: boolean + x-nullable: false + Value: + type: string + description: RegexType + PostProcessingType: + title: PostProcessingType + type: object + properties: + RegexReplace: + $ref: '#/components/schemas/RegexType' + RegexReplacements: + $ref: '#/components/schemas/PostProcessingTypeRegexReplacements' + TokenReplacements: + $ref: '#/components/schemas/PostProcessingTypeTokenReplacements' + MissingValueReplacement: + $ref: '#/components/schemas/PostProcessingTypeMissingValueReplacement' + ConvertSDDLToReadable: + type: boolean + x-nullable: false + TrimValue: + type: boolean + x-nullable: false + RemoveEmptyValues: + type: boolean + x-nullable: false + RemoveChars: + type: string + ListSeparator: + type: string + ChangeCase: + type: string + ChangeCaseSpecified: + type: boolean + x-nullable: false + description: PostProcessingType + PostProcessingTypeRegexReplacements: + title: PostProcessingTypeRegexReplacements + type: object + properties: + Replace: + type: array + items: + $ref: '#/components/schemas/PostProcessingTypeRegexReplacementsReplace' + description: PostProcessingTypeRegexReplacements + PostProcessingTypeRegexReplacementsReplace: + title: PostProcessingTypeRegexReplacementsReplace + type: object + properties: + From: + type: string + To: + type: string + description: PostProcessingTypeRegexReplacementsReplace + PostProcessingTypeTokenReplacements: + title: PostProcessingTypeTokenReplacements + type: object + properties: + TokenNames: + type: string + description: PostProcessingTypeTokenReplacements + PostProcessingTypeMissingValueReplacement: + title: PostProcessingTypeMissingValueReplacement + type: object + properties: + Substitute: + type: string + description: PostProcessingTypeMissingValueReplacement + SectionType: + title: SectionType + type: object + properties: + TextPara: + type: array + items: + $ref: '#/components/schemas/TextParaType' + Category: + type: array + items: + $ref: '#/components/schemas/SectionTypeCategory' + Name: + type: string + Number: + type: string + description: SectionType + TextParaType: + title: TextParaType + type: object + properties: + Icon: + type: string + Title: + type: string + Value: + type: string + description: TextParaType + SectionTypeCategory: + title: SectionTypeCategory + type: object + properties: + TextPara: + type: array + items: + $ref: '#/components/schemas/TextParaType' + SubCategory: + type: array + items: + $ref: '#/components/schemas/SectionTypeCategorySubCategory' + Name: + type: string + Number: + type: string + description: SectionTypeCategory + SectionTypeCategorySubCategory: + title: SectionTypeCategorySubCategory + type: object + properties: + TextPara: + type: array + items: + $ref: '#/components/schemas/TextParaType' + Rule: + type: array + items: + $ref: '#/components/schemas/RuleType' + Name: + type: string + Number: + type: string + description: SectionTypeCategorySubCategory + RuleType: + title: RuleType + type: object + properties: + Description: + type: string + InputVariableRef: + type: array + items: + type: string + InputVariableSource: + type: array + items: + $ref: '#/components/schemas/RuleTypeInputVariableSource' + InputVariable: + type: array + items: + $ref: '#/components/schemas/InputVariableType' + RuleExpression: + type: array + items: + $ref: '#/components/schemas/RuleExpressionType' + ResultText: + $ref: '#/components/schemas/RuleTypeResultText' + Number: + type: string + Name: + type: string + NoExpansionOfEnvironmentVariables: + type: boolean + x-nullable: false + RuleExpressionPassesRequired: + type: string + ScoreType: + type: integer + format: int32 + x-nullable: false + Severity: + type: string + description: RuleType + RuleTypeInputVariableSource: + title: RuleTypeInputVariableSource + type: object + properties: + Name: + type: string + Value: + type: string + description: RuleTypeInputVariableSource + RuleExpressionType: + title: RuleExpressionType + type: object + properties: + UsageTags: + $ref: '#/components/schemas/UsageTagsType' + Rule: + type: string + ShowFailuresExpression: + type: string + FailuresExpression: + type: string + FailuresExpressionMaxChars: + type: integer + format: int32 + x-nullable: false + ShowPassesExpression: + type: string + PassesExpression: + type: string + PassesExpressionMaxChars: + type: integer + format: int32 + x-nullable: false + AllowMissingDataInNamedVariables: + type: string + description: RuleExpressionType + UsageTagsType: + title: UsageTagsType + type: object + properties: + UsageTag: + type: array + items: + type: string + x-nullable: false + description: UsageTagsType + RuleTypeResultText: + title: RuleTypeResultText + type: object + properties: + GeneralPreamble: + type: string + ShowGeneralPreamble: + type: string + FailuresSeparator: + type: string + FailuresPreamble: + type: string + ShowFailuresPreamble: + type: string + PassesSeparator: + type: string + NewlineToken: + type: string + PassesPreamble: + type: string + ShowPassesPreamble: + type: string + EndSummary: + type: string + ShowEndSummary: + type: string + GeneralPreambleExpanded: + type: string + PassesPreambleExpanded: + type: string + FailuresPreambleExpanded: + type: string + description: RuleTypeResultText + DeviceConfiguration: + title: DeviceConfiguration + type: object + properties: + Version: + type: integer + description: Gets the version. + format: int32 + x-nullable: false + FilePathMatches: + type: array + items: + $ref: '#/components/schemas/FilePathMatch' + description: Specifies the file path matches. + RegistryPathMatches: + type: array + items: + $ref: '#/components/schemas/RegistryPathMatch' + description: Specifies the registry path matches. + Name: + type: string + description: Specifies the name. This is usually set to the same name as its parent 'DeviceTemplate'. + RegistryTrackerChangesFilters: + type: array + items: + $ref: '#/components/schemas/RegistryTrackerChangesFilter' + description: Gets or sets the registry tracker changes filters + FileTrackerChangesFilters: + type: array + items: + $ref: '#/components/schemas/FileTrackerChangesFilter' + description: Gets or sets the file tracker changes filters. + FileSystemTracker: + $ref: '#/components/schemas/FileSystemTracker' + DatabaseTracker: + $ref: '#/components/schemas/DatabaseTracker' + RegistryTracker: + $ref: '#/components/schemas/RegistryTracker' + ProcessTracker: + $ref: '#/components/schemas/ProcessTracker' + InstalledSoftwareTracker: + $ref: '#/components/schemas/InstalledSoftwareTracker' + SecurityPolicyTracker: + $ref: '#/components/schemas/SecurityPolicyTracker' + ProcessOutputTracker: + $ref: '#/components/schemas/ProcessOutputTracker' + FileContentTracker: + $ref: '#/components/schemas/FileContentTracker' + WindowsAccountTracker: + $ref: '#/components/schemas/WindowsAccountTracker' + NetworkPortTracker: + $ref: '#/components/schemas/NetworkPortTracker' + SplunkTracker: + $ref: '#/components/schemas/SplunkTracker' + AgentTracker: + $ref: '#/components/schemas/AgentTracker' + NotificationRefId: + type: string + description: 'Specifies a value indicating the default NotificationRefId for the template, used for future trackers' + description: The device tracker configuration applied to a device via a Device Template + FilePathMatch: + title: FilePathMatch + type: object + properties: + Name: + type: string + description: Gets or sets the name. + Description: + type: string + description: Gets or sets the description. + FolderMatchType: + type: string + description: Gets or sets the type of the folder match. + FolderMatchExpression: + type: string + description: Gets or sets the folder match expression. + FileMatchType: + type: string + description: Gets or sets the type of the file match. + FileMatchExpression: + type: string + description: Gets or sets the file match expression. + RecursionLevel: + type: integer + description: 'Specifies the level of recursion into subfolders. Zero means none, ie tracking this folder only, one means one level down etc.' + format: int32 + x-nullable: false + SkipRootFolder: + type: boolean + description: Gets or sets a value indicating whether the skip root folder. + x-nullable: false + IsSystem: + type: boolean + description: 'Specifies a value indicating whether this is a system item, or local to the template.' + x-nullable: false + description: The file path match represents the path match specifications for a file. + RegistryPathMatch: + title: RegistryPathMatch + type: object + properties: + Name: + type: string + description: Gets or sets the name of the Registry Path Match. + Description: + type: string + description: Gets or sets the description of the Registry Path Match. + KeyMatchType: + type: string + description: Gets or sets the type of the key match. + KeyMatchExpression: + type: string + description: Gets or sets the key match expression. + ValueMatchType: + type: string + description: Gets or sets the type of the value match. + ValueMatchExpression: + type: string + description: Gets or sets the value match expression. + RecursionLevel: + type: integer + description: Gets or sets the recursion level. + format: int32 + x-nullable: false + SkipRootKey: + type: boolean + description: Gets or sets a value indicating whether to skip the root key. + x-nullable: false + IsSystem: + type: boolean + description: 'Specifies a value indicating whether this is a system item, or local to the template.' + x-nullable: false + description: The registry path match represents the path match specifications for a registry key and values. + RegistryTrackerChangesFilter: + title: RegistryTrackerChangesFilter + type: object + properties: + Name: + type: string + description: Specifies the name of the group of filter settings. + Description: + type: string + description: Specifies the description of the group of filter settings. + WatchRegKey: + type: boolean + description: Specifies a value indicating whether to report changes to registry keys. + x-nullable: false + DataValue: + type: boolean + description: Specifies a value indicating whether to report changes to registry key values. + x-nullable: false + DataType: + type: boolean + description: Specifies a value indicating whether to report changes to registry key data types. + x-nullable: false + Security: + type: boolean + description: Specifies a value indicating whether to report changes to security descriptor. + x-nullable: false + IsSystem: + type: boolean + description: 'Specifies a value indicating whether this is a system item, or local to the template.' + x-nullable: false + description: The registry tracker changes filter represents the types of changes to registry keys and values to be monitored. + FileTrackerChangesFilter: + title: FileTrackerChangesFilter + type: object + properties: + Name: + type: string + description: Specifies the name of the group of filter settings. + Description: + type: string + description: Specifies the description of the group of filter settings. + WatchDirectories: + type: boolean + description: Specifies a value indicating whether to report changes to directories. + x-nullable: false + WatchFiles: + type: boolean + description: Specifies a value indicating whether to report changes to files. + x-nullable: false + Created: + type: boolean + description: Specifies a value indicating whether to report changes to created date and time. + x-nullable: false + Length: + type: boolean + description: Specifies a value indicating whether to report changes to file length (ignored for directories). + x-nullable: false + DataStreams: + type: boolean + description: Specifies a value indicating whether to report changes to datastreams. + x-nullable: false + LastAccess: + type: boolean + description: Specifies a value indicating whether to report changes to last access date and time. + x-nullable: false + LastWrite: + type: boolean + description: Specifies a value indicating whether to report changes to last write date and time. + x-nullable: false + FileName: + type: boolean + description: Specifies a value indicating whether to report changes to file names. + x-nullable: false + DirectoryName: + type: boolean + description: Specifies a value indicating whether to report changes to directory names. + x-nullable: false + Attributes: + type: boolean + description: 'Specifies a value indicating whether to report changes to file attributes (readonly, archive, hidden etc).' + x-nullable: false + Security: + type: boolean + description: Specifies a value indicating whether to report changes to security descriptor. + x-nullable: false + Content: + type: boolean + description: Specifies a value indicating whether to report changes to file content. + x-nullable: false + IsSystem: + type: boolean + description: 'Specifies a value indicating whether this is a system item, or local to the template.' + x-nullable: false + All: + type: boolean + description: Gets or sets a value indicating whether to use all filters + x-nullable: false + description: The file tracker changes filter represents the types of changes to files and folders to be monitored. + FileSystemTracker: + title: FileSystemTracker + type: object + properties: + Schedule: + $ref: '#/components/schemas/TrackerSchedule' + Name: + type: string + description: Gets or sets the name of the File System Tracker. + Description: + type: string + description: ' Gets or sets the description of the File System Tracker.' + FolderDetails: + type: array + items: + $ref: '#/components/schemas/FolderDetail' + description: Gets or sets the folder details. + FolderExcludes: + type: array + items: + $ref: '#/components/schemas/FolderExclude' + description: Specifies the folder excludes. + TrackingStyle: + type: string + description: Gets or sets the tracking style. + SendBaselineData: + type: boolean + description: Gets or sets a value indicating whether the send baseline data. + x-nullable: false + description: The file system tracker specifies file tracker settings in a Device Configuration + TrackerSchedule: + title: TrackerSchedule + type: object + properties: + StartDateUtc: + type: string + description: Gets or sets the start date UTC. + format: date-time + PeriodMinutes: + type: integer + description: Gets or sets the period minutes. + format: int32 + x-nullable: false + Description: + type: string + description: Gets the Tracker Schedule description. + description: The tracker schedule specifies tracker schedule in a Device Configuration + FolderDetail: + title: FolderDetail + type: object + properties: + CompareExcludingNotificationRefId: + $ref: '#/components/schemas/IEqualityComparer_FolderDetail_' + FilterName: + type: string + description: 'Specifies the filter name. If this is set and ''FileTrackerChangesFilter'' is not set, the FilterName is assumed to be a reference to a system defined match. If FileTrackerChangesFilter is set and FilterName not set, the FileTrackerChangesFilter is assumed to be specific to this FolderDetail and will be stored with a system created unique name.' + Hashing: + type: string + description: Gets or sets the hashing. + TrackingStyle: + type: string + description: Gets or sets the tracking style. + Path: + type: string + description: ' Gets or sets the full pathname of the file.' + PathMatchName: + type: string + description: 'Specifies the path match name. If this is set and ''FilePathMatch'' is not set, the PathMatchName is assumed to be a reference to a system defined match. If FilePathMatch is set and PathMatchName not set, the FilePathMatch is assumed to be specific to this FolderDetail and will be stored with a system created unique name.' + FilePathMatch: + $ref: '#/components/schemas/FilePathMatch' + IsSystemDefinedPathMatch: + type: boolean + description: Specifies a value indicating whether the 'FilePathMatch' is system defined. + x-nullable: false + FileTrackerChangesFilter: + $ref: '#/components/schemas/FileTrackerChangesFilter' + IsSystemDefinedChangesFilter: + type: boolean + description: Specifies a value indicating whether is system defined changes filter. + x-nullable: false + NotificationRefId: + type: array + items: + type: string + description: Specifies a value indicating the template(s) the tracked entity was present in + description: The folder detail specifies details of a folder to track in a Device Configuration + IEqualityComparer_FolderDetail_: + title: IEqualityComparer`1 + type: object + description: IEqualityComparer + FolderExclude: + title: FolderExclude + type: object + properties: + Path: + type: string + description: 'Gets or sets the full pathname of the file. ' + PathMatchName: + type: string + description: 'Specifiesthe path match name. If this is set and ''FilePathMatch'' is not set, the PathMatchName is assumed to be a reference to a system defined match. If FilePathMatch is set and PathMatchName not set, the FilePathMatch is assumed to be specific to this FolderDetail and will be stored with a system created unique name.' + FilePathMatch: + $ref: '#/components/schemas/FilePathMatch' + IsSystemDefinedPathMatch: + type: boolean + description: Specifies a value indicating whether the 'FilePathMatch' is system defined. + x-nullable: false + description: A folder exclude. + DatabaseTracker: + title: DatabaseTracker + type: object + properties: + Schedule: + $ref: '#/components/schemas/TrackerSchedule' + Name: + type: string + description: Gets or sets the Database Tracker name. + Description: + type: string + description: Gets or sets the description. + TrackingStyle: + type: string + description: Gets or sets the tracking style. + SendBaselineData: + type: boolean + description: Gets or sets a value indicating whether to send baseline data. + x-nullable: false + TrackUserAccounts: + type: boolean + description: Gets or sets a value indicating whether to track user accounts. + x-nullable: false + TrackUserRoles: + type: boolean + description: Gets or sets a value indicating whether to track user roles. + x-nullable: false + TrackSchemas: + type: boolean + description: Gets or sets a value indicating whether to track schemas. + x-nullable: false + DatabasePlatform: + type: string + description: Gets or sets the database platform. + Instances: + type: array + items: + $ref: '#/components/schemas/DatabaseInstanceTracked' + description: Gets or sets the database instances to be tracked. + description: The database tracker specifies database settings in a Device Configuration + DatabaseInstanceTracked: + title: DatabaseInstanceTracked + type: object + properties: + DatabasePlatform: + type: string + description: Specifies the database platform. + CredentialsKey: + type: string + description: Specifies the credentials key. + VersionNumber: + type: number + description: Specifies the database platform version number. + format: float + x-nullable: false + IgnoreCase: + type: boolean + description: Specifies a value indicating whether to ignore case in object names etc. + x-nullable: false + Databases: + type: array + items: + $ref: '#/components/schemas/DatabaseTracked' + description: Gets the databases. + Name: + type: string + description: Specifies the Name. This is a name to use in the user interface and doesn't necessarily need to match the server or instance name as these are typically held in the data provided via the 'CredentialsKey' lookup. + NotificationRefId: + type: array + items: + type: string + description: Specifies a value indicating the template(s) the tracked entity was present in + description: Describes the tracking options on a specific database instance on a single server. + DatabaseTracked: + title: DatabaseTracked + type: object + properties: + Name: + type: string + description: Gets or sets the database tracker name. + Instance: + $ref: '#/components/schemas/DatabaseInstanceTracked' + TableMatches: + type: array + items: + $ref: '#/components/schemas/InclusionItemMatch' + description: '>Gets or sets the table matches.' + UserMatches: + type: array + items: + $ref: '#/components/schemas/InclusionItemMatch' + description: Gets or sets the user matches. + ConfigItemMatches: + type: array + items: + $ref: '#/components/schemas/InclusionItemMatch' + description: Gets or sets the configuration item matches. + ViewMatches: + type: array + items: + $ref: '#/components/schemas/InclusionItemMatch' + description: Gets or sets the view matches. + TriggerMatches: + type: array + items: + $ref: '#/components/schemas/InclusionItemMatch' + description: Gets or sets the trigger matches. + ProcedureMatches: + type: array + items: + $ref: '#/components/schemas/InclusionItemMatch' + description: Gets or sets the procedure matches. + AuditOptionMatches: + type: array + items: + $ref: '#/components/schemas/InclusionItemMatch' + description: Gets or sets the audit option matches. + description: Specifies the database tracker settings. + InclusionItemMatch: + title: InclusionItemMatch + type: object + properties: + IncludedIfMatches: + type: boolean + description: summary + x-nullable: false + ItemMatchPattern: + type: string + description: Gets or sets the item match pattern. + ItemMatchType: + type: string + description: Gets or sets the type of the item match. + CaseSensitive: + type: boolean + description: Gets or sets a value indicating whether the match is case sensitive. + x-nullable: false + description: summary + RegistryTracker: + title: RegistryTracker + type: object + properties: + Schedule: + $ref: '#/components/schemas/TrackerSchedule' + Name: + type: string + description: Gets or sets the Registry Tracker name. + Description: + type: string + description: Gets or sets the Registry Tracker description. + TrackingStyle: + type: string + description: Gets or sets the tracking style. + RegKeyDetails: + type: array + items: + $ref: '#/components/schemas/RegKeyDetail' + description: Gets or sets the reg key details. + RegKeyExcludes: + type: array + items: + $ref: '#/components/schemas/RegKeyExclude' + description: Specifies the folder excludes. + SendBaselineData: + type: boolean + description: Gets or sets a value indicating whether to send baseline data. + x-nullable: false + description: The registry tracker specifies registry tracker settings in a DeviceConfiguration. + RegKeyDetail: + title: RegKeyDetail + type: object + properties: + CompareExcludingNotificationRefId: + $ref: '#/components/schemas/IEqualityComparer_RegKeyDetail_' + FilterName: + type: string + description: 'Specifies the filter name. If this is set and ''FileTrackerChangesFilter'' is not set, the FilterName is assumed to be a reference to a system defined match. If FileTrackerChangesFilter is set and FilterName not set, the FileTrackerChangesFilter is assumed to be specific to this FolderDetail and will be stored with a system created unique name.' + Path: + type: string + description: Gets or sets the path. + PathMatchName: + type: string + description: 'Specifies the path match name. If this is set and ''RegistryPathMatch'' is not set, the PathMatchName is assumed to be a reference to a system defined match. If RegistryPathMatch is set and PathMatchName not set, the RegistryPathMatch is assumed to be specific to this RegKeyDetail and will be stored with a system created unique name.' + RegistryPathMatch: + $ref: '#/components/schemas/RegistryPathMatch' + IsSystemDefinedPathMatch: + type: boolean + description: Specifies a value indicating whether the 'RegistryPathMatch' is system defined. + x-nullable: false + RegistryTrackerChangesFilter: + $ref: '#/components/schemas/RegistryTrackerChangesFilter' + IsSystemDefinedChangesFilter: + type: boolean + description: Specifies a value indicating whether is system defined changes filter. + x-nullable: false + NotificationRefId: + type: array + items: + type: string + description: Specifies a value indicating the template(s) the tracked entity was present in + description: The Reg Key detail specfies details of a Reg Key to track in a Device Configuration + IEqualityComparer_RegKeyDetail_: + title: IEqualityComparer`1 + type: object + description: IEqualityComparer + RegKeyExclude: + title: RegKeyExclude + type: object + properties: + Path: + type: string + description: Gets or sets the path. + PathMatchName: + type: string + description: 'Specifies the path match name. If this is set and ''RegistryPathMatch'' is not set, the PathMatchName is assumed to be a reference to a system defined match. If RegistryPathMatch is set and PathMatchName not set, the RegistryPathMatch is assumed to be specific to this RegKeyExclude and will be stored with a system created unique name.' + RegistryPathMatch: + $ref: '#/components/schemas/RegistryPathMatch' + IsSystemDefinedPathMatch: + type: boolean + description: Specifies a value indicating whether the 'RegistryPathMatch' is system defined. + x-nullable: false + description: summary + ProcessTracker: + title: ProcessTracker + type: object + properties: + Schedule: + $ref: '#/components/schemas/TrackerSchedule' + LogWhiteListedActivity: + type: boolean + description: Gets or sets a value indicating whether to log white listed activity. + x-nullable: false + ReportUnCategorised: + type: boolean + description: Gets or sets a value indicating whether to report uncategorised Processes + x-nullable: false + ReportChanges: + type: boolean + description: Specifies a value indicating whether to report process and service start-stop change events. Setting this true means the tracker will alert on every process and service start and stop event. + x-nullable: false + Processes: + type: array + items: + $ref: '#/components/schemas/Process' + description: Gets or sets a list of processes. + Services: + type: array + items: + $ref: '#/components/schemas/Service' + description: Gets or sets a list of services. + TrackingStyle: + type: string + description: Gets or sets the tracking style. + SendBaselineData: + type: boolean + description: Gets or sets a value indicating whether to send baseline data. + x-nullable: false + NotificationRefId: + type: array + items: + type: string + description: Specifies a value indicating the template(s) the tracked entity was present in + description: Tracker for Processes + Process: + title: Process + type: object + properties: + CompareExcludingNotificationRefId: + $ref: '#/components/schemas/IEqualityComparer_Process_' + Name: + type: string + description: Gets or sets the Process name. + Category: + type: string + description: Gets or sets the category. + NotificationRefId: + type: array + items: + type: string + description: Specifies a value indicating the template(s) the tracked entity was present in + description: ' Represents an expected process state as tracked by the Process Tracker' + IEqualityComparer_Process_: + title: IEqualityComparer`1 + type: object + description: IEqualityComparer + Service: + title: Service + type: object + properties: + CompareExcludingNotificationRefId: + $ref: '#/components/schemas/IEqualityComparer_Service_' + Name: + type: string + description: Gets or sets the Service name. + State: + type: string + description: Gets or sets the Service's state. + StartMode: + type: string + description: Gets or sets the start mode. + Caption: + type: string + description: Gets or sets the caption. + NotificationRefId: + type: array + items: + type: string + description: Specifies a value indicating the template(s) the tracked entity was present in + description: Represents an expected service state as tracked by the Process Tracker + IEqualityComparer_Service_: + title: IEqualityComparer`1 + type: object + description: IEqualityComparer + InstalledSoftwareTracker: + title: InstalledSoftwareTracker + type: object + properties: + Schedule: + $ref: '#/components/schemas/TrackerSchedule' + TrackingStyle: + type: string + description: Gets or sets the tracking style. + SendBaselineData: + type: boolean + description: '>Gets or sets a value indicating whether to send baseline data.' + x-nullable: false + NotificationRefId: + type: array + items: + type: string + description: Specifies a value indicating the template(s) the tracked entity was present in + description: Tracker for Installed Software + SecurityPolicyTracker: + title: SecurityPolicyTracker + type: object + properties: + Schedule: + $ref: '#/components/schemas/TrackerSchedule' + TrackingStyle: + type: string + description: Gets or sets the tracking style. + SendBaselineData: + type: boolean + description: Gets or sets a value indicating whether to send baseline data. + x-nullable: false + NotificationRefId: + type: array + items: + type: string + description: Specifies a value indicating the template(s) the tracked entity was present in + description: Tracker for Security Policies + ProcessOutputTracker: + title: ProcessOutputTracker + type: object + properties: + Schedule: + $ref: '#/components/schemas/TrackerSchedule' + ProcessOutput: + type: array + items: + $ref: '#/components/schemas/ProcessOutput' + description: Gets or sets the process output. + TrackingStyle: + type: string + description: Gets or sets the tracking style. + SendBaselineData: + type: boolean + description: Gets or sets a value indicating whether to send baseline data + x-nullable: false + description: Tracker for Process Output + ProcessOutput: + title: ProcessOutput + type: object + properties: + CompareExcludingNotificationRefId: + $ref: '#/components/schemas/IEqualityComparer_ProcessOutput_' + Name: + type: string + description: Gets or sets the Process Output name. + CommandLine: + type: string + description: Gets or sets the command line. + CommandLineScript: + type: string + description: 'Gets or sets the multi-line command script, when CommandType is PowerShellScript.' + CommandType: + type: string + description: Gets or sets the type of the command. + RegularExpression: + type: string + description: Gets or sets the regular expression. + RegularExpressionIgnoreCase: + type: boolean + description: Gets or sets a value indicating whether a regular expression will ignore case + x-nullable: false + NotificationRefId: + type: array + items: + type: string + description: Specifies a value indicating the template(s) the tracked entity was present in + description: Represents a process output as tracked by the Process Output Tracker + IEqualityComparer_ProcessOutput_: + title: IEqualityComparer`1 + type: object + description: IEqualityComparer + FileContentTracker: + title: FileContentTracker + type: object + properties: + Schedule: + $ref: '#/components/schemas/TrackerSchedule' + Name: + type: string + description: Gets or sets the name + Description: + type: string + description: Gets or sets the description. + Files: + type: array + items: + $ref: '#/components/schemas/File' + description: Gets or sets the files. + TrackingStyle: + type: string + description: Gets or sets the tracking style. + SendBaselineData: + type: boolean + description: 'Gets or sets a value indicating whether the send baseline data. ' + x-nullable: false + description: he file content tracker specifies file content settings in a Device Configuration + File: + title: File + type: object + properties: + CompareExcludingNotificationRefId: + $ref: '#/components/schemas/IEqualityComparer_File_' + RegularExpressionIgnoreCase: + type: boolean + description: Specifies a value indicating whether the regular expression should ignore case. + x-nullable: false + RegularExpression: + type: string + description: Specifies the regular expression. Optional. + Path: + type: string + description: Specifies the path to the file to be tracked. + Name: + type: string + description: 'Specifies the name. Identifies the meaning of the file, e.g. ''web application configuration file'', or where a ''RegularExpression'' is specified this name can be used to identify the part of the file that is being extracted. E.g. ''Apache release version''.' + NotificationRefId: + type: array + items: + type: string + description: Specifies a value indicating the template(s) the tracked entity was present in + description: ' Represents a file tracked by the File Content Tracker' + IEqualityComparer_File_: + title: IEqualityComparer`1 + type: object + description: IEqualityComparer + WindowsAccountTracker: + title: WindowsAccountTracker + type: object + properties: + Schedule: + $ref: '#/components/schemas/TrackerSchedule' + TrackingStyle: + type: string + description: Gets or sets the tracking style. + TrackDomainControllerAccounts: + type: boolean + description: Gets or sets a value indicating whether to track domain controller accounts. + x-nullable: false + SendBaselineData: + type: boolean + description: Gets or sets a value indicating whether to send baseline data. + x-nullable: false + NotificationRefId: + type: array + items: + type: string + description: Specifies a value indicating the template(s) the tracked entity was present in + description: Tracker for Windows Accounts + NetworkPortTracker: + title: NetworkPortTracker + type: object + properties: + Schedule: + $ref: '#/components/schemas/TrackerSchedule' + Description: + type: string + description: Gets or sets the description for the network port tracker. + PortIncludes: + type: array + items: + $ref: '#/components/schemas/PortRangeDetail' + description: Specifies the port include ranges. + PortExcludes: + type: array + items: + $ref: '#/components/schemas/PortRangeDetail' + description: Specifies the port exclude ranges. + TrackingStyle: + type: string + description: Gets or sets the tracking style. + SendBaselineData: + type: boolean + description: Gets or sets a value indicating whether to send baseline data. + x-nullable: false + description: The network ports tracker specifies port tracker settings in a Device Configuration + PortRangeDetail: + title: PortRangeDetail + type: object + properties: + CompareExcludingNotificationRefId: + $ref: '#/components/schemas/IEqualityComparer_PortRangeDetail_' + Start: + type: integer + description: Specifies the port range start. + format: int32 + x-nullable: false + End: + type: integer + description: Specifies the port range end. + format: int32 + x-nullable: false + Description: + type: string + description: Specifies the description. + Protocols: + type: string + description: Specifies the protocols. + NotificationRefId: + type: array + items: + type: string + description: Specifies a value indicating the template(s) the tracked entity was present in + description: The port range detail specfies details of a port range to track or exclude in a Device Configuration + IEqualityComparer_PortRangeDetail_: + title: IEqualityComparer`1 + type: object + description: IEqualityComparer + SplunkTracker: + title: SplunkTracker + type: object + properties: + Schedule: + $ref: '#/components/schemas/TrackerSchedule' + SplunkQuery: + type: array + items: + $ref: '#/components/schemas/SplunkQuery' + description: Gets or sets the search queries. + TrackingStyle: + type: string + description: Gets or sets the tracking style. + SendBaselineData: + type: boolean + description: Gets or sets a value indicating whether to send baseline data + x-nullable: false + description: Tracker for Splunk integration + SplunkQuery: + title: SplunkQuery + type: object + properties: + Name: + type: string + description: Gets or sets the Splunk name. + SearchQuery: + type: string + description: Gets or sets the Splunk Search Query. + NotificationRefId: + type: array + items: + type: string + description: Specifies a value indicating the template(s) the tracked entity was present in + CompareExcludingNotificationRefId: + $ref: '#/components/schemas/IEqualityComparer_SplunkQuery_' + description: Represents a Splunk Query as tracked by the Splunk Tracker + IEqualityComparer_SplunkQuery_: + title: IEqualityComparer`1 + type: object + description: IEqualityComparer + AgentTracker: + title: AgentTracker + type: object + properties: + Schedule: + $ref: '#/components/schemas/TrackerSchedule' + TrackingStyle: + type: string + description: Gets or sets the tracking style. + SendBaselineData: + type: boolean + description: Gets or sets a value indicating whether to send baseline data. + x-nullable: false + description: The agent tracker returns the current state of the agent. + AuditType: + title: AuditType + type: object + properties: + Edit: + type: array + items: + $ref: '#/components/schemas/EditType' + description: AuditType + EditType: + title: EditType + type: object + properties: + Change: + type: array + items: + $ref: '#/components/schemas/ChangeType' + UserName: + type: string + Date: + type: string + format: date-time + x-nullable: false + NewVersion: + type: string + Comment: + type: string + description: EditType + ChangeType: + title: ChangeType + type: object + properties: + Type: + type: string + Item: + type: string + Detail: + type: string + Value: + type: string + description: ChangeType + GetMostRecentPolicyResults: + title: GetMostRecentPolicyResults + type: object + properties: + UsageTag: + type: string + description: Restricts the results returned to compliance policies marked with the specified UsageTagsApplicable. + GroupName: + type: string + description: Specifies the group name. + ExcludePoliciesWithNoDevices: + type: boolean + description: Restricts the results returned to policies run on groups containing at least one device. + x-nullable: false + ExcludePoliciesNotSetup: + type: boolean + description: Baselines only - excludes policies not yet fully setup from the results. + x-nullable: false + ExcludePoliciesWithNoResults: + type: boolean + description: Baselines only - excludes policies with no results in the time period from the results. + x-nullable: false + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets the most recent policy run results for each matching policy in the time range. + AddPolicyTemplateRules: + title: AddPolicyTemplateRules + type: object + properties: + Name: + type: string + description: Specifies the policy template name to add rules to + AddDeviceInformationRule: + type: boolean + description: Specifies whether to add the device information section at the start of the report + x-nullable: false + ChangeComment: + type: string + description: Specifies a short description of the change for auditing purposes. + PreviewChanges: + type: boolean + description: Specifies if the rule changes should only be previewed and not saved to the template. + x-nullable: false + ProposedChanges: + type: array + items: + $ref: '#/components/schemas/ProposedPolicyChange' + StartUtc: + type: string + description: 'Gets or sets the start of the period to return events for, null implies all.' + format: date-time + ApplyProcessPortRange: + type: boolean + x-nullable: false + RuleOptions: + type: array + items: + $ref: '#/components/schemas/RuleBuilderOptions' + description: Specifies any Rule Builder Options. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Add a rules to a baseline policy based on events + ProposedPolicyChange: + title: ProposedPolicyChange + type: object + properties: + ChangeType: + type: string + EventFilter: + $ref: '#/components/schemas/EventFilter' + Id: + type: string + description: Specifies the rule result id to base the new rule on. + MissingValuePasses: + type: boolean + description: Specifies if the generated rule will pass if the associated data item is empty e.g. software not installed or file missing. + x-nullable: false + ExtendExistingRule: + type: boolean + description: Specifies if the rule should be extended or replaced. + x-nullable: false + AddNoOthersRule: + type: boolean + description: Specifies if a No Others rule is added + x-nullable: false + PortProcEphemeralRange: + type: boolean + description: 'Specifies if true, that only ports in the ephemeral range opened by known processes are allowed' + x-nullable: false + NoOthersRuleTrackerName: + type: string + description: Specifies the tracker name associated with a No Others Rule + NoOthersRuleTrackerItemType: + type: string + description: Specifies the tracker type associated with a No Others Rule + description: ProposedPolicyChange + RuleBuilderOptions: + title: RuleBuilderOptions + type: object + properties: + TrackerTypeName: + type: string + ItemTypeName: + type: string + AttributeTypeNames: + type: array + items: + type: string + OneAttributePerRule: + type: boolean + x-nullable: false + OneValuePerRule: + type: boolean + x-nullable: false + ExtendExistingRule: + type: boolean + x-nullable: false + RulePassExpression: + type: string + RuleFailureExpression: + type: string + AllowMissingDataInVariable: + type: boolean + x-nullable: false + RuleName: + type: string + MissingValuePasses: + type: boolean + x-nullable: false + DataExtractionRegex: + type: string + CaseInsensitiveRule: + type: boolean + x-nullable: false + ScoreType: + type: integer + format: int32 + x-nullable: false + Severity: + type: string + NetworkPortRangeStart: + type: integer + format: int32 + x-nullable: false + NetworkPortRangeEnd: + type: integer + format: int32 + x-nullable: false + UseProcessPortRange: + type: boolean + x-nullable: false + Name: + type: string + IgnoreMissingValuePassesForIsApplicable: + type: boolean + x-nullable: false + description: RuleBuilderOptions + AddPolicyTemplateXml: + title: AddPolicyTemplateXml + type: object + properties: + Name: + type: string + description: Specifies the name. + Xml: + type: string + description: Specifies the xml. + PassMark: + type: number + description: Specifies the pass mark. Only relevant for 'TemplateType' of 'PolicyTemplateType.ComplianceReport'. + format: double + x-nullable: false + AsCopyOf: + type: string + description: Specifies as a copy of an existing template named this + CopyTemplateValues: + type: boolean + description: 'Specifies a copy of an existing template should only copy the tracking information, not the values' + x-nullable: false + AsCopyOfVersion: + type: string + description: Specifies version to copy when using AsCopyOf + AdditionalUsageTags: + type: array + items: + type: string + x-nullable: false + description: 'Specifies extra UsageTagsApplicable to record against the template, in addition to those specified in the Xml' + OverwriteIfExists: + type: boolean + description: Specifies a flag to indicate whether or not not overwrite the report / config if it already exists + x-nullable: false + ExternalDataFileId: + type: string + description: Specifies an external file id if the XML is not provided 'in line' + IsSystem: + type: boolean + description: Specifies a flag to indicate whether or not the template is part of the standard system set or a customized version + x-nullable: false + IsUiUpload: + type: boolean + description: Specifies a flag to indicate whether or not the template is has been uploaded from the UI + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds a device policy template to the system. The specified template should be supplied as Xml. + DeletePolicyTemplate: + title: DeletePolicyTemplate + type: object + properties: + Name: + type: string + description: Specifies the policy template name to delete + TemplateVersion: + type: string + description: 'Specifies the policy template version to delete. Optional, if not supplied all versions of the template are removed.' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Deletes a device policy template from the system. The specified template can be either config or a compliance report template. + UploadPolicyTemplate: + title: UploadPolicyTemplate + type: object + properties: + Name: + type: string + description: Specifies the name. + PassMark: + type: number + description: Specifies the pass mark. Only relevant for 'TemplateType' of 'PolicyTemplateType.ComplianceReport'. + format: double + x-nullable: false + OverwriteIfExists: + type: boolean + description: Specifies a flag to indicate whether or not to overwrite the report / config if it already exists + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Upload a policy template file + GetPolicyTemplateAsFile: + title: GetPolicyTemplateAsFile + type: object + properties: + Name: + type: string + description: Specifies the templatem name to retrieve. + AgentDeviceId: + type: string + description: Specifies the agent device id to get the current combined template for. Note either this or the 'Name' should be specified. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Returns a policy template as an xml file in the Http Response stream. + GetAgentProcesses: + title: GetAgentProcesses + type: object + properties: + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Get the list of running processes from a specified agent / device.Used to enable 'white-listing' if existing processes from a running agent when building device config. + StartAgentTracker: + title: StartAgentTracker + type: object + properties: + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + AgentDeviceId: + type: string + description: Specifies the agent id the tracker will be started on. Alternative to AgentDevice. + TrackerName: + type: string + description: Specifies the tracker to be started + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Ask an agent to start a specified tracker. + GetAgentServices: + title: GetAgentServices + type: object + properties: + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Get the list of running Services from a specified agent/device. Used to enable 'white - listing' if existing Service from a running agent when building device config. + SetActivePolicyTemplate: + title: SetActivePolicyTemplate + type: object + properties: + TemplateName: + type: string + description: Specifies the template name. + ActiveVersion: + type: string + description: Specifies the version of the template to make active. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Sets a specific version of a named policy template as the active one. + UpdatePolicyTemplates: + title: UpdatePolicyTemplates + type: object + properties: + Name: + type: string + description: Specifies the name (id) to search for. + NameContains: + type: string + description: Specifies the text the name contains. Used to search for partial match if 'Name' not specified. + ReturnXml: + type: boolean + description: Specifies a value indicating whether to return the template xml in the response. Defaults to false. + x-nullable: false + ReturnSignatures: + type: boolean + description: Specifies a value indicating whether to calculate and return the template signatures in the response. Defaults to false. + x-nullable: false + IsActive: + type: boolean + description: Get the Active version of a template + IsLatest: + type: boolean + description: Get the Latest version of a template + HasRules: + type: boolean + description: Get templates with Rules + HasTrackers: + type: boolean + description: Get templates with Trackers + TemplateTrackerTypes: + type: array + items: + type: string + description: Specifies the template's tracker types. + TemplateVersion: + type: string + description: Specifies the template version to get. + UsageTags: + type: array + items: + type: string + description: Specifies the policy usage types to get. + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Update matching config templates. + GetDeviceConfigTemplate: + title: GetDeviceConfigTemplate + type: object + properties: + Name: + type: string + description: Specifies the template name. + IncludeSystemFilters: + type: boolean + description: Specifies a value indicating whether to include system defined filters and path match definitions. + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets a named device config template. + GetDeviceConfigTemplateNames: + title: GetDeviceConfigTemplateNames + type: object + properties: + TrackersContained: + type: array + items: + type: string + description: Specifies the trackers contained. Optional. If specified this filters the returned list of template names to include only those containing the named trackers (eg 'processtracker'). + AgentDeviceIds: + type: array + items: + type: string + description: 'Specifies the agent devices. Optional. If specified this filters the returned list of template names to include only those currently applied to ALL the listed devices due to their group memberships, i.e. an intersection of group membership sets.' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Gets a list of device tracking template names, optionally filtering by trackers contained (e.g. find templates with a process tracker).' + AddDeviceConfigProcessRules: + title: AddDeviceConfigProcessRules + type: object + properties: + DeviceTemplateName: + type: string + description: The name of the device tracking configuration template + Rules: + type: array + items: + $ref: '#/components/schemas/Process' + description: A list of all the Rules + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds white/grey/black listing to process rules in the specified device tracking configuration template. + GetGroupPolicy: + title: GetGroupPolicy + type: object + properties: + GroupName: + type: string + description: Specifies the group name. Optional. + GroupNames: + type: array + items: + type: string + description: Specifies the group names. Optional. + PolicyTemplateName: + type: string + description: Specifies the policy template name. Optional. + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Get the configured config policy template for the specified group or by individual template name. + GetGroupPolicyConfigNames: + title: GetGroupPolicyConfigNames + type: object + properties: + GroupNames: + type: array + items: + type: string + description: Specifies the list of group names to get the config for + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Get the configured config policy template names for the specified groups. + AddGroupPolicy: + title: AddGroupPolicy + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + VersionString: + type: string + GroupName: + type: string + description: Specifies the group name. + GroupDisplayName: + type: string + description: Specifies the group display name. + PolicyTemplateName: + type: string + description: Specifies the policy template name. + PolicyTemplateDisplayName: + type: string + description: Specifies the policy template display name. + IsTrusted: + type: boolean + description: Specifies if policy template contains trusted commands. + description: Adds a config template to a group. + DeleteGroupPolicy: + title: DeleteGroupPolicy + type: object + properties: + GroupName: + type: string + description: Specifies the group name to delete the policy from. + PolicyTemplateName: + type: string + description: Specifies the policy template name to remove from the group. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Removes a config template from a group. + ReParentDevices: + title: ReParentDevices + type: object + properties: + Devices: + type: array + items: + type: string + description: A list of agent device IDs to be re-parented. + AgentDeviceId: + type: string + description: The agent device id to re-parent the devices to. + MigrateEvents: + type: boolean + description: A boolean that controls wether to migrate any 'old' events to the new agent device id combination. + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Re-parents the given devices to the specified Agent. + ExportAgents: + title: ExportAgents + type: object + properties: + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + ExportFormat: + type: string + description: Specifies the export format + ReportTitle: + type: string + description: Specifies the title for the report + TimeZoneId: + type: string + description: Specifies the timezone id to do the export in + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Export a list of agent details. + GetAgentsRanked: + title: GetAgentsRanked + type: object + properties: + EventCountsDateUtc: + type: string + format: date-time + x-nullable: false + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + GetAgentGroupDetails: + type: boolean + description: Specifies a value indicating whether to get agent group details. + x-nullable: false + GetRelatedCredentials: + type: boolean + description: Specifies a value indicating whether to get related credentials. + x-nullable: false + GetRelatedPlannedChanges: + type: boolean + description: Specifies a value indicating whether to get related planned changes. + x-nullable: false + GetRelatedTemplates: + type: boolean + description: Specifies a value indicating whether to get templates applied to the returned agents. + x-nullable: false + IncludeMasterInFilter: + type: boolean + description: Specifies a value indicating whether to include proxy master devices in filters that match a child proxied device but would not otherwise return the proxying master. + x-nullable: false + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to return agents matching the device filter. + GroupMembers: + title: GroupMembers + type: object + properties: + GroupName: + type: string + description: The name of the group to query. + MemberType: + type: string + description: Specifies the member type to return (AgentDevice or Group). + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to return group members matching the criteria. + GetGroups: + title: GetGroups + type: object + properties: + Name: + type: string + description: The internal name of the group to find. + DisplayName: + type: string + description: The display name of the group to find. + DisplayNameContains: + type: string + description: A fragment of the display name in the groups to find. + UserName: + type: string + description: The alternative user name to retrieve groups for. Note that the returned list will also be filtered by the visibility of groups the authenticated user has. + MemberOf: + type: array + items: + type: string + description: 'The groups of which the returned groups must be a member. If null, members of any group can be returned, if an empty list only groups which are members of no groups (i.e. have no parent) are returned.' + OnlyGroupsWithUpdate: + type: boolean + description: Gets or sets the a flag indicating whether to only return groups with an agent update scheduled. + x-nullable: false + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to return groups matching the criteria. + GetGroupsTree: + title: GetGroupsTree + type: object + description: Gets a tree structure representing the groups hierarchy. + DeleteGroup: + title: DeleteGroup + type: object + properties: + Name: + type: string + description: Gets or sets the Group Matching Name. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Represents a request to delete a group matching the criteria. + AddGroup: + title: AddGroup + required: + - GroupType + type: object + properties: + ParentGroupName: + type: string + description: Optionally specifies a parent group for the new group. If this is not supplied the group is automatically added as a child of the root 'All Devices' group unless NoParent is set + DisplayName: + type: string + description: Specifies the display name of the new group + GroupType: + enum: + - None + - UserContainer + - DeviceContainer + - GroupContainer + type: int + description: Specifies the type of members allowed in the new group. Can be a combination of the allowed values + format: int32 + IsSystem: + type: boolean + description: Specifies a flag indicating if this is a 'system' group or not + x-nullable: false + Members: + type: array + items: + type: string + description: Specifies the list of ids of 'child group' members of the new group + RiskScore: + type: string + description: Specifies the risk score of the group. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds a new Group definition. + UpdateGroup: + title: UpdateGroup + required: + - Name + type: object + properties: + Name: + type: string + description: Specifies the name of the group to update + DisplayName: + type: string + description: Specifies the new display name of the group + Members: + type: array + items: + type: string + description: Specifies the list of 'child group' members + RiskScore: + type: string + description: Specifies the risk score of the group + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Updates a Group definition. + DeleteDevices: + title: DeleteDevices + type: object + properties: + AgentDeviceIds: + type: array + items: + type: string + description: 'The agent device ids to delete from their current groups, moving them to the Deleted group.' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Represents a request to delete devices matching the criteria. Note that when a device is deleted it is moved to the Deleted group and is no longer included in the licensed device count. + GetOverdueDevices: + title: GetOverdueDevices + required: + - OfflineSeconds + type: object + properties: + OfflineSeconds: + type: integer + description: Specifies the number of seconds the offline device must have been offline for. + format: int32 + x-nullable: false + MemberOfGroups: + type: array + items: + type: string + description: Specifies optional list of groups the devices must be a member of. + NotMemberOfGroups: + type: array + items: + type: string + description: Specifies optional list of groups the devices must not be a member of. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets devices that have not polled in for the specified amount of time. + DeleteDevicePermanently: + title: DeleteDevicePermanently + type: object + properties: + AgentId: + type: string + description: Specifies the id of the agent. + DeviceId: + type: string + description: Specifies the id of the device. + GroupName: + type: string + description: Specifies the group name. + Response: + type: string + description: The response to a previously issued challenge for this request. Without this the call will return a challenge for which the response must be supplied on a subsequently call. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Delete the specified Agent from the system. On first call the system will issue a challenge which must be answered and the response supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + ReRegisterDevice: + title: ReRegisterDevice + type: object + properties: + AgentDeviceIds: + type: array + items: + type: string + description: Specifies the list of combined agent and device ids. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Represents a request to re-register a list of previously deleted devices matching the criteria. + DeleteGroupMembersPermanently: + title: DeleteGroupMembersPermanently + type: object + properties: + GroupName: + type: string + description: Specifies the group name. + Response: + type: string + description: The response to a previously issued challenge for this request. Without this the call will return a challenge for which the response must be supplied on a subsequently call. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Delete all the specified group members from the system. On first call the system will issue a challenge which must be answered and the response supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + AddDeviceFilter: + title: AddDeviceFilter + type: object + properties: + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Represents a request to add a DeviceFilter. + UpdateDeviceFilter: + title: UpdateDeviceFilter + type: object + properties: + Name: + type: string + description: Specifies the name of the device filter to update. + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Represents a request to update a DeviceFilter matching the given id. + PromoteDeviceFilter: + title: PromoteDeviceFilter + type: object + properties: + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Represents a request to bring the named filter to the head of the list, or to create it at the head of the list if it doesn''t exist.' + DeleteDeviceFilter: + title: DeleteDeviceFilter + type: object + properties: + Name: + type: string + description: Specifies the name of the device filter to delete. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Represents a request to delete a DeviceFilter matching the criteria. + GetDeviceFilters: + title: GetDeviceFilters + type: object + properties: + NameContains: + type: string + description: Specifies text to search for in the filter Name + Name: + type: string + description: Specifies an exact filter Name to search for + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Returns a paged list of DeviceFilter definitions matching the optional name criteria. + AddGroupMembers: + title: AddGroupMembers + type: object + properties: + GroupName: + type: string + description: The internal name/id of the group to add to. + Groups: + type: array + items: + type: string + description: The names of groups to add to the parent. + Agents: + type: array + items: + $ref: '#/components/schemas/Agent' + description: The Agents to add to the parent. + AgentDeviceIds: + type: array + items: + type: string + description: The AgentDeviceIds of agents to add to the parent. Used as an alternative to Agents property. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to add the specified Groups and Agents group members to the named group. + DeleteGroupMembers: + title: DeleteGroupMembers + type: object + properties: + GroupName: + type: string + description: The name of the parent group to remove from. + Groups: + type: array + items: + type: string + description: The names of groups to remove from the parent. + AgentDeviceIds: + type: array + items: + type: string + description: The agent device ids to remove from the parent. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to remove group or device members from the named group. + GetDeviceOnlineStatus: + title: GetDeviceOnlineStatus + type: object + properties: + AgentId: + type: string + description: Specifies the id of the agent. + DeviceId: + type: string + description: Specifies the id of the device. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets an indication of the device's online/offline status + UpdateDeviceSettings: + title: UpdateDeviceSettings + type: object + properties: + AgentId: + type: string + description: Specifies the id of the agent. Either AgentId and DeviceId or GroupName must be supplied. + DeviceId: + type: string + description: Specifies the id of the device. Either AgentId and DeviceId or GroupName must be supplied. + FileLiveTrackingRequiresBaselineCompletion: + type: boolean + description: Specifies whether a full baseline must be completed before live file tracking can be started. Optional + GroupName: + type: string + description: Specifies the group name. Either AgentId and DeviceId or GroupName must be supplied. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Gets the device settings for the device, based on the global device settings and any device specific overrides.' + AddCredentialsToAgentDevice: + title: AddCredentialsToAgentDevice + type: object + properties: + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + CredentialsKey: + type: string + description: Specifies the credentials key. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to associate named credentials with an agent. + RemoveCredentialsFromAgentDevice: + title: RemoveCredentialsFromAgentDevice + type: object + properties: + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + CredentialKey: + type: string + description: Specifies the credential key. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to remove named credentials from an agent. + SetAgentDeviceName: + title: SetAgentDeviceName + type: object + properties: + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + DeviceName: + type: string + description: Specifies the device name. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to update the display name of an agent. + SetAgentHostType: + title: SetAgentHostType + type: object + properties: + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + HostType: + type: string + description: Specifies the device type. + description: A request to update the host type of an agent. + TestAgentCredentials: + title: TestAgentCredentials + type: object + properties: + AgentDeviceId: + type: string + description: Specifies the agent device id whose credentials are to be tested. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Ask an agent to test the credentials for a device it is proxying. + GetIpBlocking: + title: GetIpBlocking + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets details of ip addresses that have been blocked. + AddIpBlocking: + title: AddIpBlocking + type: object + properties: + IpAddress: + type: string + description: Gets or sets the ip address. + ExpiresUtc: + type: string + description: Gets or sets the expiry date time in UTC. + format: date-time + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds manual blocking of a specified ip address until a specified time. + DeleteIpBlocking: + title: DeleteIpBlocking + type: object + properties: + IpAddress: + type: string + description: Gets or sets the ip address to remove blocking from. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Removes blocking of a specified ip address. + DiscoverDevices: + title: DiscoverDevices + type: object + properties: + DiscoveredDeviceType: + type: string + DiscoveryAgentId: + type: string + MasterAgentId: + type: string + CredentialsKey: + type: string + MergeBehaviour: + type: integer + format: int32 + GroupNameToAssignTo: + type: string + AllowedIpRange: + type: string + MatchAccuracy: + type: integer + format: int32 + x-nullable: false + AssignToGroups: + type: boolean + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Discovers devices to be added as proxied devices to a master device. + SubmitDiscoveredDevices: + title: SubmitDiscoveredDevices + type: object + properties: + TaskId: + type: integer + format: int32 + x-nullable: false + MasterAgentDevice: + $ref: '#/components/schemas/AgentDevice' + DiscoveredDevices: + type: array + items: + $ref: '#/components/schemas/DiscoveredDevice' + MergeBehaviour: + type: integer + format: int32 + GroupNameToAssignTo: + type: string + CredentialsKey: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Submits discovered devices as a response to a DiscoverDevices request. + DiscoveredDevice: + title: DiscoveredDevice + type: object + properties: + DiscoveredDeviceType: + type: string + Name: + type: string + IPv4: + type: string + Id: + type: string + MetaData: + $ref: '#/components/schemas/Dictionary_String_String_' + OsUserSpecified: + type: string + KnownOsName: + type: string + HostType: + type: string + GroupNames: + type: array + items: + type: string + description: DiscoveredDevice + AcknowledgeEvents: + title: AcknowledgeEvents + type: object + properties: + EventIds: + type: array + items: + type: string + description: Specifies the event ids to update. + PlannedChangeId: + type: string + description: Specifies the planned change instance id to acknowledge these events under. + NewStatus: + type: string + description: Specifies the new status for the alert events. + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + EventFilter: + $ref: '#/components/schemas/EventFilter' + StartUtc: + type: string + description: 'Gets or sets the start of the period to return events for, null implies all.' + format: date-time + EndUtc: + type: string + description: 'Gets or sets the end of the period to return events for, null implies up to current time.' + format: date-time + TextSearch: + type: string + description: Gets or sets the text search value. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Acknowledge a list of events as 'planned'. + ResubmitEvents: + title: ResubmitEvents + type: object + properties: + GetEvents: + $ref: '#/components/schemas/GetEvents' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Re-submit the specified events (i.e for re-consideration by the pipeline re: planned changes).' + GetEventHistory: + title: GetEventHistory + type: object + properties: + EventId: + type: string + description: Specifies the specific event id to retrieve history for. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Get the event history for one specific event. + GetEventDeviceGroups: + title: GetEventDeviceGroups + type: object + properties: + EventIds: + type: array + items: + type: string + description: ' Gets or sets the event ids.' + Intersection: + type: boolean + description: ' Gets or sets a value indicating whether the returned set of groups is the intersection of the event''s device memberships, if true, or the union. If intersection, only the groups of which all devices are a member are returned.' + x-nullable: false + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + EventFilter: + $ref: '#/components/schemas/EventFilter' + StartUtc: + type: string + description: 'Gets or sets the start of the period to return events for, null implies all.' + format: date-time + EndUtc: + type: string + description: 'Gets or sets the end of the period to return events for, null implies up to current time.' + format: date-time + TextSearch: + type: string + description: Gets or sets the text search value. + GroupFindMode: + type: string + description: Gets or sets how the returned group list is built. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Gets the list of groups that the devices associated with the given events are members of. If Intersection is true, only the groups of which all devices are a member are returned. This function is used to determine the possible groups to associate a new planned change with, such that the events will be covered by it.' + SetCommentForEvents: + title: SetCommentForEvents + type: object + properties: + GetEvents: + $ref: '#/components/schemas/GetEvents' + Comment: + type: string + description: The comment + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Set comments for events + GetInventory: + title: GetInventory + type: object + properties: + Ids: + type: array + items: + type: string + CpeMatchStatuses: + type: array + items: + type: string + x-nullable: false + CpeName: + type: string + CpeNames: + type: array + items: + type: string + OnlyReturnItemsWithGoodMatchCves: + type: boolean + x-nullable: false + OnlyReturnItemsWithRelatedCves: + type: boolean + x-nullable: false + VulnerabilityFilter: + $ref: '#/components/schemas/VulnerabilityFilter' + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Retrieves a list of inventory items from the hub service. + VulnerabilityFilter: + title: VulnerabilityFilter + type: object + properties: + CveIds: + type: array + items: + type: string + VulnerabilitySeveritiesV3: + type: array + items: + type: string + description: Specifies the V3 severity levels to search for. + VulnerabilitySeveritiesV2: + type: array + items: + type: string + description: Specifies the V2 severity levels to search for. + V2AccessVector: + type: array + items: + type: string + V3AttackVector: + type: array + items: + type: string + V2AccessComplexity: + type: array + items: + type: string + V3AttackComplexity: + type: array + items: + type: string + V2Authentication: + type: array + items: + type: string + V3PrivilegesRequired: + type: array + items: + type: string + V2AvailabilityImpact: + type: array + items: + type: string + V3AvailabilityImpact: + type: array + items: + type: string + ShowIgnored: + type: boolean + description: Specifies whether to include excluded/suppressed Cves in the response. + x-nullable: false + ShowOnlyIgnored: + type: boolean + description: Specifies whether to *only* include excluded/suppressed Cves in the response. + x-nullable: false + ShowAtHighestRiskLevel: + type: boolean + x-nullable: false + description: VulnerabilityFilter + GetAgentInventoryItemsGrouped: + title: GetAgentInventoryItemsGrouped + type: object + properties: + Ids: + type: array + items: + type: string + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Retrieves a list of agent inventory items grouped by their inventory item ids from the hub service. + GetAgentInventoryAgentsDetail: + title: GetAgentInventoryAgentsDetail + type: object + properties: + InventoryItemId: + type: string + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Retrieves a list of agents with a specific inventory item id from the hub service. + GetVulnerabilityOverview: + title: GetVulnerabilityOverview + type: object + properties: + CheckPipelineCounts: + type: boolean + x-nullable: false + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + StartDateUtc: + type: string + description: Specifies the Utc start date from which the vulnerability changes are retrieved. + format: date-time + x-nullable: false + ShowIgnored: + type: boolean + description: Specifies whether to include excluded/suppressed Cves in the overview statistics. + x-nullable: false + GetStatus: + type: boolean + description: Get the vulnerability scanner status as well + x-nullable: false + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to return the vulnerability overview matching the device filter. + GetVulnerability: + title: GetVulnerability + type: object + properties: + CheckPipelineCounts: + type: boolean + x-nullable: false + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + VulnerabilityFilter: + $ref: '#/components/schemas/VulnerabilityFilter' + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to return the vulnerabilities in an estate matching the device and vulnerability filters. + GetSoftwareVulnerability: + title: GetSoftwareVulnerability + type: object + properties: + CheckPipelineCounts: + type: boolean + x-nullable: false + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + StartDateUtc: + type: string + description: Specifies the Utc start date from which the vulnerability changes are retrieved. + format: date-time + x-nullable: false + VulnerabilityFilter: + $ref: '#/components/schemas/VulnerabilityFilter' + IncludeAllSoftware: + type: boolean + x-nullable: false + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to return the software vulnerability matching the device filter. + MarkInventoryItemsRequiringUpdate: + title: MarkInventoryItemsRequiringUpdate + type: object + properties: + CpeNames: + type: array + items: + type: string + InventoryItems: + type: array + items: + $ref: '#/components/schemas/InventoryItem' + InventoryItemIds: + type: array + items: + type: string + ClearExistingCpeCveData: + type: boolean + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Marks an inventory item a requiring an update / refresh. + InventoryItem: + title: InventoryItem + type: object + properties: + Id: + type: string + Version: + type: integer + format: int32 + x-nullable: false + ItemVendor: + type: string + ItemName: + type: string + ItemVersion: + type: string + Comment: + type: string + ChangeHistory: + type: array + items: + $ref: '#/components/schemas/InventoryHistory' + IsDeleted: + type: boolean + x-nullable: false + CpeMatchStatus: + type: string + GoodMatchCpeDetail: + $ref: '#/components/schemas/CpeDetail' + RelatedCpeList: + type: array + items: + $ref: '#/components/schemas/CpeDetail' + Cpe23DisplayName: + type: string + LastModifiedDateUtc: + type: string + format: date-time + x-nullable: false + CveNotificationStatus: + type: string + IsOperatingSystemItem: + type: boolean + x-nullable: false + ExtraInfo: + type: string + description: InventoryItem + InventoryHistory: + title: InventoryHistory + type: object + properties: + Code: + type: string + TimeUtc: + type: string + format: date-time + x-nullable: false + User: + type: string + Comment: + type: string + description: InventoryHistory + CpeDetail: + title: CpeDetail + type: object + properties: + MatchStrength: + type: number + format: float + x-nullable: false + CpeName: + type: string + Vendor: + type: string + Product: + type: string + Title: + type: string + CveSummaries: + type: array + items: + $ref: '#/components/schemas/CveSummary' + description: CpeDetail + CveSummary: + title: CveSummary + type: object + properties: + Version: + type: integer + format: int32 + x-nullable: false + ChangeHistory: + type: array + items: + $ref: '#/components/schemas/CveHistory' + IgnoredUntilDateUtc: + type: string + format: date-time + x-nullable: false + IsIgnored: + type: boolean + x-nullable: false + CveId: + type: string + CpeName: + type: string + V3Severity: + type: string + V2Severity: + type: string + CveChangeDateUtc: + type: string + format: date-time + x-nullable: false + CveDescription: + type: string + NvdDetailsLink: + type: string + V2BaseScore: + type: number + format: float + x-nullable: false + V3BaseScore: + type: number + format: float + x-nullable: false + description: CveSummary + CveHistory: + title: CveHistory + type: object + properties: + Code: + type: string + TimeUtc: + type: string + format: date-time + x-nullable: false + User: + type: string + Comment: + type: string + description: CveHistory + GetSoftwareVulnerabilityDetail: + title: GetSoftwareVulnerabilityDetail + type: object + properties: + ReturnFullCveData: + type: boolean + x-nullable: false + SoftwareId: + type: string + description: Specifies the software item to search for. + CpeName: + type: string + description: Specifies the CPE Name to search for. + VulnerabilityFilter: + $ref: '#/components/schemas/VulnerabilityFilter' + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to return the software vulnerability matching the device filter. + GetDeviceVulnerability: + title: GetDeviceVulnerability + type: object + properties: + CheckPipelineCounts: + type: boolean + x-nullable: false + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + StartDateUtc: + type: string + description: Specifies the Utc start date from which the vulnerability changes are retrieved. + format: date-time + x-nullable: false + VulnerabilityFilter: + $ref: '#/components/schemas/VulnerabilityFilter' + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to return the device vulnerability matching the device filter. + GetDeviceVulnerabilityDetail: + title: GetDeviceVulnerabilityDetail + type: object + properties: + AgentDeviceId: + type: string + description: Specifies the agents to search for by id or group membership. + VulnerabilityFilter: + $ref: '#/components/schemas/VulnerabilityFilter' + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to return the device vulnerability matching the device filter. + GetCvesForRelatedCpes: + title: GetCvesForRelatedCpes + type: object + properties: + CpeName: + type: string + InventoryItemId: + type: string + MaxItemsToReturn: + type: integer + format: int32 + x-nullable: false + ReturnFullCveData: + type: boolean + x-nullable: false + VulnerabilityFilter: + $ref: '#/components/schemas/VulnerabilityFilter' + description: Get a list of CVEs that are related to the specified CPE but not directly (e.g previous versions etc) + GetVulnerableDeviceDetail: + title: GetVulnerableDeviceDetail + type: object + properties: + CveId: + type: string + description: Specifies the cve to search for vulnerable devices. + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to return the vulnerable devices matching the CVE. + IgnoreCveItem: + title: IgnoreCveItem + type: object + properties: + CveIds: + type: array + items: + type: string + IgnoreUntilUtc: + type: string + format: date-time + CancelIgnore: + type: boolean + x-nullable: false + Comment: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to ignore one or more Cves until a given data. + GetVulnerabilityScanStatus: + title: GetVulnerabilityScanStatus + type: object + properties: + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: A request to return the software vulnerability scan status. + GetAllLog4NetConfigItems: + title: GetAllLog4NetConfigItems + type: object + description: Retrieves a list of log4net logger configurations + AddLog4NetConfigItem: + title: AddLog4NetConfigItem + type: object + properties: + LoggerName: + type: string + LogLevel: + type: string + description: AddLog4NetConfigItem + UpdateLog4NetConfigItem: + title: UpdateLog4NetConfigItem + type: object + properties: + Id: + type: string + LoggerName: + type: string + LogLevel: + type: string + description: UpdateLog4NetConfigItem + DeleteLog4NetConfigItem: + title: DeleteLog4NetConfigItem + type: object + properties: + Id: + type: string + description: DeleteLog4NetConfigItem + GetLog4NetConfigItems: + title: GetLog4NetConfigItems + type: object + properties: + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Retrieves a list of log4net logger configurations with pagination support. + GetReportDescription: + title: GetReportDescription + type: object + properties: + ReportName: + type: string + ConvertToHtml: + type: boolean + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Returns a description for the specified report. + GetReportChangeDetails: + title: GetReportChangeDetails + type: object + properties: + ReportIdFrom: + type: string + ReportIdTo: + type: string + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + RuleSetResultEventIdFrom: + type: string + RuleSetResultEventIdTo: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Get a list of differences between two reports runs. + GetReportData: + title: GetReportData + type: object + properties: + ReportId: + type: string + CountOnly: + type: boolean + description: A value indicating whether to return a count of results only. + x-nullable: false + Sort: + $ref: '#/components/schemas/Dictionary_String_String_' + Skip: + type: integer + description: The offset into the result set to start at. + format: int32 + Take: + type: integer + description: The limit number of rows to return. + format: int32 + GenericFilters: + type: array + items: + $ref: '#/components/schemas/PagingQueryFilter' + description: The list of generic filtering options. These are typically sent from a UI control such as Kendo Grid. + GenericFilterLogic: + type: string + description: The generic filter logic. This indicates how filters specified in GenericFilters are to be combined. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Gets report results for the specified agent, device or task id.' + GetAvailableReports: + title: GetAvailableReports + type: object + properties: + DeviceFilter: + $ref: '#/components/schemas/DeviceFilter' + StartDateUtc: + type: string + description: Specifies a start date to search from. + format: date-time + EndDateUtc: + type: string + description: Specifies a start date to search up to. + format: date-time + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: ' Gets a list of available reports for a specified group or agent.' + GetUserDashboard: + title: GetUserDashboard + type: object + properties: + Id: + type: string + description: The identifier of the dashboard to get. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets the user dashboard widget layout. + GetUserDashboardByName: + title: GetUserDashboardByName + type: object + properties: + Name: + type: string + description: The name of the dashboard to get. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets the user dashboard widget layout by name. + SaveUserDashboard: + title: SaveUserDashboard + type: object + properties: + Id: + type: string + description: 'The identifier of the dashboard to get. If not supplied a new record is created, else existing is updated.' + Name: + type: string + description: The name of the dashboard. + Widgets: + type: array + items: + $ref: '#/components/schemas/DashboardWidgetSpec' + description: The widgets. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Stores the user dashboard widget layout. + DashboardWidgetSpec: + title: DashboardWidgetSpec + type: object + properties: + Title: + type: string + description: The widget title. + Description: + type: string + description: The widget description. + id: + type: string + description: The widget identifier. + dashdata: + $ref: '#/components/schemas/DashData' + x: + type: integer + description: The x-coordinate of the widget. + format: int32 + x-nullable: false + y: + type: integer + description: The y-coordinate of the widget. + format: int32 + x-nullable: false + width: + type: integer + description: The width of the widget. + format: int32 + x-nullable: false + height: + type: integer + description: The height of the widget. + format: int32 + x-nullable: false + description: Details of a dashboard widget in the UI. + DashData: + title: DashData + type: object + properties: + type: + type: string + description: The type of dashboard widget. + groupId: + type: string + description: The group identifier of the widget data. + groupName: + type: string + description: The group display name of the widget data. + tmpl: + type: string + description: The templated title of the widget instance. + timePeriods: + type: integer + description: The number of time periods of the widget data. + format: int32 + x-nullable: false + timePeriodSizeSeconds: + type: integer + description: 'The time period size of the widget data, in seconds.' + format: int32 + x-nullable: false + eventTypes: + type: array + items: + type: string + description: The event types of the widget data. + trackerTypes: + type: array + items: + type: string + description: The tracker types of the widget data. + vulnerabilityChartType: + type: string + vulnerabilityChartText: + type: string + description: Data associated with the specific type of dashboard widget in the UI. + DeleteUserDashboard: + title: DeleteUserDashboard + type: object + properties: + Id: + type: string + description: The identifier of the dashboard to delete. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Deletes the user dashboard widget layout. + GetUserSettings: + title: GetUserSettings + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets the user settings and selections. + SaveUserSettings: + title: SaveUserSettings + type: object + properties: + DashboardId: + type: string + description: The user's default dashboard identifier. + ThemeId: + type: string + description: The user's default theme identifier. + HideWelcomePopup: + type: boolean + description: Indicates whether the user has opted to skip the welcome wizard. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Stores the user settings and selections. + GetDashboardWidgets: + title: GetDashboardWidgets + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets the dashboard widgets. + InvalidateEventCounts: + title: InvalidateEventCounts + type: object + properties: + GroupId: + type: string + PeriodIds: + type: array + items: + type: integer + format: int64 + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Represents a request to invalidate the eventcount stats for a group for a specific set of periods. + TestSmtpConnection: + title: TestSmtpConnection + type: object + properties: + Host: + type: string + Port: + type: integer + format: int32 + x-nullable: false + User: + type: string + Password: + type: string + NoPasswordSupplied: + type: boolean + x-nullable: false + UseSsl: + type: boolean + x-nullable: false + FromEmail: + type: string + RecipientEmail: + type: string + ToUser: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Tests the specified SMTP details. + TestFastConnection: + title: TestFastConnection + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Tests the configured Fast service can be contacted. + TestFastCustomerConnection: + title: TestFastCustomerConnection + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Tests the configured Fast service can be contacted using customer credentials. + TestSyslogConnection: + title: TestSyslogConnection + type: object + properties: + Host: + type: string + Port: + type: integer + format: int32 + x-nullable: false + Protocol: + type: string + SyslogVersion: + type: string + LogglyToken: + type: string + MessagePrefix: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Tests the specified SysLog details. + TestServiceNowConnection: + title: TestServiceNowConnection + type: object + properties: + Host: + type: string + User: + type: string + Password: + type: string + NoPasswordSupplied: + type: boolean + x-nullable: false + IncidentCaller: + type: string + IncidentChannel: + type: string + IncidentLocation: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Tests the specified ServiceNow details. + TestAuditorConnection: + title: TestAuditorConnection + type: object + properties: + Host: + type: string + Port: + type: integer + format: int32 + x-nullable: false + Protocol: + type: string + Route: + type: string + User: + type: string + Password: + type: string + NoPasswordSupplied: + type: boolean + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Tests the specified Auditor details. + GetPipelineNodeList: + title: GetPipelineNodeList + type: object + properties: + FromUtc: + type: string + format: date-time + ToUtc: + type: string + format: date-time + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets a list of pipeline node names. + AddUser: + title: AddUser + type: object + properties: + UserDetails: + $ref: '#/components/schemas/UserDetails' + Password: + type: string + SkipCheck: + type: boolean + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Add a user. + UserDetails: + title: UserDetails + type: object + properties: + LastLogonAttemptUtc: + type: string + format: date-time + ChangePasswordByUtc: + type: string + format: date-time + Version: + type: integer + format: int32 + x-nullable: false + Id: + type: integer + format: int32 + x-nullable: false + UserName: + type: string + DateFormats: + $ref: '#/components/schemas/UserDateFormats' + Locked: + type: boolean + x-nullable: false + FirstName: + type: string + SecondName: + type: string + Email: + type: string + Roles: + type: array + items: + type: string + Permissions: + type: array + items: + type: string + Groups: + type: array + items: + type: string + NotificationGroups: + type: array + items: + $ref: '#/components/schemas/GroupAlert' + TimeZoneId: + type: string + TwoFactorRequired: + type: boolean + x-nullable: false + IsInternal: + type: boolean + x-nullable: false + IsADUser: + type: boolean + x-nullable: false + IsOAuthUser: + type: boolean + x-nullable: false + IsSSOUser: + type: boolean + x-nullable: false + GeneratedPassword: + type: string + description: UserDetails + UserDateFormats: + title: UserDateFormats + required: + - Name + - LongDateTimeFormatNet + - ShortDateTimeFormatNet + - LongDateTimeFormatJs + - ShortDateTimeFormatJs + type: object + properties: + Name: + type: string + description: Gets or sets the name for the group of date settings. + LongDateTimeFormatNet: + type: string + description: Gets or sets the long date time format for .net. + ShortDateTimeFormatNet: + type: string + description: Gets or sets the short date time format for .net. + LongDateTimeFormatJs: + type: string + description: Gets or sets the long date time format for js. + ShortDateTimeFormatJs: + type: string + description: Gets or sets the short date time format for js. + description: Specifies the user date format strings both for use in backend .NET code and front end Javascript kendo equivalents. + GroupAlert: + title: GroupAlert + type: object + properties: + Version: + type: integer + format: int32 + x-nullable: false + Id: + type: string + GroupName: + type: string + GroupDisplayName: + type: string + NotificationTypes: + type: array + items: + type: string + x-nullable: false + NotificationMethod: + type: string + UserName: + type: string + description: The details of how an alert is raised for a group. + GetUserTwoFactorStatus: + title: GetUserTwoFactorStatus + type: object + properties: + UserName: + type: string + Password: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Represents a pre-authentication request to query the user's Two-factor authentication status. Counts as a sign-in attempt. + ElevateUserTwoFactorStatus: + title: ElevateUserTwoFactorStatus + type: object + properties: + OneTimePassword: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Represents a post-authentication request to elevate the user's Two-factor authentication status. Counts as a sign-in attempt. + ValidateUserPassword: + title: ValidateUserPassword + type: object + properties: + UserName: + type: string + CurrentPassword: + type: string + Password: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Validates a user password. + DeleteUser: + title: DeleteUser + type: object + properties: + UserName: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Delete a user. + GetUser: + title: GetUser + type: object + properties: + UserName: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Get a user's details. + UpdateUser: + title: UpdateUser + type: object + properties: + UserDetails: + $ref: '#/components/schemas/UserDetails' + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Updates stored user details. Note that UserManage permissions are required to manage any user other than the caller. + UpdateUserPassword: + title: UpdateUserPassword + type: object + properties: + UserName: + type: string + CurrentPassword: + type: string + Password: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Updates stored user password. CurrentPassword property should contain the password of the user attempting to make the change. Note that UserManage permissions are required to manage any user password other than caller's. + ResetUser: + title: ResetUser + type: object + properties: + UserName: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Resets a user. Note that UserManage permissions are required to manage any user other than the caller. + ResetUserPassword: + title: ResetUserPassword + type: object + properties: + UserName: + type: string + NewPassword: + type: string + PreviewToken: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Resets a user password. Note that this operation is intended to manage any user other than the caller. + PreviewResetUserPassword: + title: PreviewResetUserPassword + type: object + properties: + UserName: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Generates a reset password for preview without applying it. Pass the returned PreviewToken to resetPassword to apply it. + ResetUser2fa: + title: ResetUser2fa + type: object + properties: + UserName: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Resets a user's 2FA . Note that UserManage permissions are required to manage any user other than the caller. + ExportUserNotifications: + title: ExportUserNotifications + type: object + properties: + UserNames: + type: array + items: + type: string + ExportFormat: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Export users and the notifications they are configured to receive + GetTimeZoneIds: + title: GetTimeZoneIds + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets a list of possible time zone names. + UserHasChangedPassword: + title: UserHasChangedPassword + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Has the current user changed their password from any system assigned one? + AddGroupAlertToUser: + title: AddGroupAlertToUser + type: object + properties: + UserName: + type: string + GroupName: + type: string + NotificationTypes: + type: array + items: + type: string + x-nullable: false + NotificationMethod: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Add a group alert to a user. + DeleteGroupAlertFromUser: + title: DeleteGroupAlertFromUser + type: object + properties: + UserName: + type: string + description: Specifies the user name to delete group alerts / notifications for. + Id: + type: string + description: Specifies the specific alert / notification to remove. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Remove a group notification from a user + UpdateGroupAlertForUser: + title: UpdateGroupAlertForUser + type: object + properties: + UserName: + type: string + Id: + type: string + GroupName: + type: string + NotificationTypes: + type: array + items: + type: string + x-nullable: false + NotificationMethod: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Update a group notification from a user + GetGroupAlertsForGroup: + title: GetGroupAlertsForGroup + type: object + properties: + GroupName: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Get the configured notifications for the specified group. + GetUserList: + title: GetUserList + type: object + properties: + ExportFormat: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Get a list of user names. + ResetAdminPassword: + title: ResetAdminPassword + type: object + properties: + AdminName: + type: string + OrganizationId: + type: integer + format: int32 + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Resets the admin (or named account) password, returning a new temporary password in the response. Can only be called from the local hub console.' + GetUserRoles: + title: GetUserRoles + type: object + properties: + RoleName: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Get a list of user roles defined in the system. + GetPermissions: + title: GetPermissions + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Gets a list of permissions names defined in the system. + AddUserRole: + title: AddUserRole + required: + - DisplayName + - ReadOnly + type: object + properties: + Name: + type: string + description: Specifies the unique internal name for the role. If this is not supplied the DisplayName is used. + DisplayName: + type: string + description: Specifies the display name for the role. + ExternalName: + type: string + description: Specifies the role name in an external identity provider that corresponds to this role. + Permissions: + type: array + items: + type: string + description: Specifies the list of names of permissions associated with the role. + ReadOnly: + type: boolean + description: 'Specifies whether the role is read only, or can be edited.' + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Adds a custom user role + UpdateUserRole: + title: UpdateUserRole + required: + - Name + - DisplayName + - Permissions + type: object + properties: + Name: + type: string + description: Specifies the unique internal name for the role. + DisplayName: + type: string + description: Specifies the display name for the role. + ExternalName: + type: string + description: Specifies the role name in an external identity provider that corresponds to this role. + Permissions: + type: array + items: + type: string + description: Specifies the list of names of permissions associated with the role. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Update a user role + CloneUserRole: + title: CloneUserRole + type: object + properties: + NewRoleName: + type: string + ExistingRoleName: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Clone an existing user role. + DeleteUserRole: + title: DeleteUserRole + required: + - Name + type: object + properties: + Name: + type: string + description: Specifies the internal name of the role to delete. + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Delete a user role. + GetLicenseInfo: + title: GetLicenseInfo + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: Represents a request to get an Organization's license info. + UpdateOrganization: + title: UpdateOrganization + type: object + properties: + License: + type: string + description: Specifies the license. + AllowInvalidLicense: + type: boolean + description: Specifies a value indicating whether to allow an invalid license in the License. + x-nullable: false + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Represents a request to update an Organization, used to set the license.' + HasRoleOrPermission: + title: HasRoleOrPermission + type: object + properties: + UserName: + type: string + Roles: + type: array + items: + type: string + Permissions: + type: array + items: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Checks whether the caller, or the named user if supplied, has the specified roles and permissions.' + GetRolesAndPermissions: + title: GetRolesAndPermissions + type: object + properties: + UserName: + type: string + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + description: 'Gets roles and permissions for the caller, or the named user if supplied.' + Authenticate: + title: Authenticate + type: object + properties: + provider: + type: string + description: 'AuthProvider, e.g. credentials' + UserName: + type: string + Password: + type: string + RememberMe: + type: boolean + AccessToken: + type: string + AccessTokenSecret: + type: string + ReturnUrl: + type: string + ErrorView: + type: string + Meta: + $ref: '#/components/schemas/Dictionary_String_String_' + description: Sign In + GetAccessToken: + title: GetAccessToken + type: object + properties: + RefreshToken: + type: string + Meta: + $ref: '#/components/schemas/Dictionary_String_String_' + description: GetAccessToken + GetAgentPollResponse: + title: GetAgentPollResponse + required: + - Version + type: object + properties: + AgentId: + type: string + description: 'Specifies the agent id. Note: this the agent id excluding the device id.' + DeviceListChangedAtUtc: + type: string + description: Indicates whether the proxied device list has changed since the last poll. + format: date-time + DeviceConfigDateUtc: + $ref: '#/components/schemas/Dictionary_String_Nullable_DateTime__' + Tasks: + type: array + items: + $ref: '#/components/schemas/AgentTask' + description: Returns a list of AgentTasks for all the devices the agent manages. + DiagnosticModeEnabled: + type: boolean + description: Indicates whether additional diagnostics are enabled for this agent. + x-nullable: false + HubCurrentTimeUtc: + type: string + description: 'Indicates the current server time to return to the agent so it can compare with its own and raise a time difference alert. Optional, only returned on initial connect.' + format: date-time + DeviceSettings: + $ref: '#/components/schemas/DeviceSettings' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for GetAgentPoll + Dictionary_String_Nullable_DateTime__: + title: 'Dictionary>' + type: object + additionalProperties: + type: string + format: date-time + description: 'Dictionary>' + DeviceSettings: + title: DeviceSettings + type: object + properties: + SymlinkFollowCount: + type: integer + description: Specifies a value indicating how many nested symlinks a file tracker should follow. + format: int32 + x-nullable: false + SymlinkFollowCountIsInherited: + type: boolean + description: Indicates whether the property is inherited from a setting on a parent group. + x-nullable: false + RequestCompressionType: + type: string + AgentDeviceId: + type: string + description: 'Specifies the combined agent and device id, for example 1,1. Either AgentId and DeviceId or GroupName must be supplied.' + DiffContextLines: + type: integer + description: Number of context lines in a text difference comparison + format: int32 + x-nullable: false + SysDigArgumentAdditions: + type: string + description: Additional SysDig command arguments applied on SysDig start + GroupName: + type: string + description: Specifies the group name. Either AgentId and DeviceId or GroupName must be supplied. + FileLiveTrackingRequiresBaselineCompletion: + type: boolean + description: Specifies whether a full baseline must be completed before live file tracking can be started. + x-nullable: false + FileLiveTrackingRequiresBaselineCompletionIsInherited: + type: boolean + description: Indicates whether the property is inherited from a setting on a parent group. + x-nullable: false + PerformancePercentage: + type: integer + description: 'The performance percentage is the percentage of its maximum performance that the agent will use, for example at 100 (100%) the agent will complete polls in the shortest possible time, at the expense of utilisation of local cpu and disk resources. At 0% the agent will have the least impact on the tracked system.' + format: int32 + x-nullable: false + PerformancePercentageIsInherited: + type: boolean + description: Indicates whether the property is inherited from a setting on a parent group. + x-nullable: false + PlannedChangeWindowPaddingSeconds: + type: integer + description: The planned change window padding in seconds. This is the amount of time prior to the start and end of a planned change that tracker polls are started. + format: int32 + x-nullable: false + PlannedChangeWindowPaddingSecondsIsInherited: + type: boolean + description: Indicates whether the property is inherited from a setting on a parent group. + x-nullable: false + PollPeriodSeconds: + type: integer + description: 'The poll period / frequency for this device / group, in seconds.' + format: int32 + x-nullable: false + PollGracePeriodSeconds: + type: integer + description: The maximum number of seconds by which an agent can be overdue its poll without being marked as offline. + format: int32 + x-nullable: false + EventSenderBatchSize: + type: integer + description: The maximum number of events sent to the hub by the agent in one submission. + format: int32 + x-nullable: false + EventSenderSleepTimeMs: + type: integer + description: The number of milliseconds to wait after each batch of events are sent to the hub. + format: int32 + x-nullable: false + Lineage: + type: array + items: + type: string + description: The list of groups the DeviceSettings have been inherited from + CommandTimeoutSeconds: + type: integer + description: The number of seconds to wait for a process-output command executed by the agent tracking process to complete. + format: int32 + x-nullable: false + CommandTimeoutSecondsIsInherited: + type: boolean + x-nullable: false + FileTrackerFilePollLimit: + type: integer + description: The number of files a device file system tracker poll will be limited to before terminating the poll + format: int32 + x-nullable: false + description: 'The device settings represents the device specific options such as customised local ui password details, and tracker performance settings.' + GetAgentTasksResponse: + title: GetAgentTasksResponse + required: + - Version + type: object + properties: + Tasks: + type: array + items: + $ref: '#/components/schemas/AgentTask' + description: Specifies the current list of tasks for the agent. + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for GetAgentTasks + SubmitAgentTaskResultStreamResponse: + title: SubmitAgentTaskResultStreamResponse + required: + - StoredId + - Version + type: object + properties: + StoredId: + type: string + description: The id of the stored stream + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for SubmitAgentTaskResultsStream. + GetPolicyTemplatesResponse: + title: GetPolicyTemplatesResponse + required: + - Version + type: object + properties: + Templates: + type: array + items: + $ref: '#/components/schemas/PolicyTemplateSummary' + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Response to a request for matching config templates. + PolicyTemplateSummary: + title: PolicyTemplateSummary + type: object + properties: + Version: + type: integer + description: Gets the service model version. + format: int32 + x-nullable: false + VersionString: + type: string + description: Gets the version as a string. + AvailableVersion: + type: string + description: Gets the newest available version. + FileId: + type: string + description: Gets or sets the file identifier. + UpgradeInfo: + type: string + description: Gets or sets the upgrade information. + IsSystem: + type: boolean + description: Gets or sets a value indicating whether this instance is system. + x-nullable: false + IsActive: + type: boolean + description: Gets or sets a value indicating whether this instance is active. + x-nullable: false + IsLatest: + type: boolean + description: Gets or sets a value indicating whether this instance is latest. + x-nullable: false + HasRules: + type: boolean + description: Gets or sets a value indicating whether this instance has rules. + x-nullable: false + Name: + type: string + description: Specifies the name. + DisplayName: + type: string + description: Specifies the display name. + FileName: + type: string + description: Specifies the template file name. + Xml: + type: string + description: Specifies the template config xml. + UpdatedDateUtc: + type: string + description: Specifies the last UTC date any part of the template was updated. + format: date-time + x-nullable: false + UpdatedConfigDateUtc: + type: string + description: Specifies the last UTC date the tracking configuration part of the template was updated. + format: date-time + x-nullable: false + PassMark: + type: number + description: Specifies the default pass mark associated with compliance report TemplateType. + format: double + x-nullable: false + Trackers: + type: array + items: + type: string + description: 'Specifies the names of the trackers configured in this template, if it is a ''PolicyTemplateType.DeviceConfig''.' + NotificationRefId: + type: string + description: Specifies the tracker's notification ref id. + UsageTags: + type: array + items: + type: string + description: Specifies the names of the usage tag categories specified in this template'. + TemplateSignature: + type: string + description: Specifies the signature of the template. + IsTrusted: + type: boolean + description: Does the template contain trusted commands. + ValidationStatus: + type: string + description: 'A named policy template summary. Policy templates can be of any of the types specified by PolicyTemplateType, for example DeviceConfig, ComplianceReport or RegistrationReport. PolicyTemplates are a DTO used to add any policy template to the system based on its xml. To add an agent tracker configuration based on specific tracker DTO objects use DeviceTemplate.' + GetPolicyTemplateVariablesResponse: + title: GetPolicyTemplateVariablesResponse + required: + - Version + type: object + properties: + PolicyTemplateName: + type: string + DataRequirements: + type: array + items: + $ref: '#/components/schemas/VariableDataRequirement' + TemplateSignature: + type: string + DeviceTemplate: + $ref: '#/components/schemas/DeviceTemplate' + TemplateConfigXml: + type: string + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The list of variable definitions from a named report to be collected by the agent. + DeviceTemplate: + title: DeviceTemplate + type: object + properties: + Version: + type: integer + description: Gets the version. + format: int32 + x-nullable: false + Config: + $ref: '#/components/schemas/DeviceConfiguration' + Name: + type: string + description: Specifies the name. + DisplayName: + type: string + description: Specifies the display name. + UpdatedDateUtc: + type: string + description: Specifies the UTC date the template was updated. + format: date-time + x-nullable: false + description: Represents a named device tracking configuration template only (no rule-set). + List_String_: + title: List + type: array + items: + type: string + GetAgentsResponse: + title: GetAgentsResponse + required: + - Version + type: object + properties: + AgentCredentials: + type: array + items: + $ref: '#/components/schemas/AgentCredential' + description: Specifies a list of agent device -> credentials. + AgentGroups: + type: array + items: + $ref: '#/components/schemas/AgentGroups' + description: Specifies a list of agent device -> group memberships. + AgentPlannedChangeStatuses: + type: array + items: + $ref: '#/components/schemas/AgentPlannedChangeInstanceStatus' + description: Specifies a list of agent device -> planned change statuses (returned here to make subsequent calls unnecessary in UI - the data is all stored in the same object in the repository so no signficant cost in getting it out) + Agents: + type: array + items: + $ref: '#/components/schemas/Agent' + description: Specifies the agents matching the 'GetAgents' request. + AgentTemplates: + type: array + items: + $ref: '#/components/schemas/AgentTemplates' + description: Specifies agent device -> templates + RelatedProxyAgents: + type: array + items: + $ref: '#/components/schemas/Agent' + description: 'Specifies the related proxy agents. These are the agents that proxy the devices listed in ''Agents'', if any.' + ResultsGeneratedAtUtc: + type: string + description: Specifies time the results were generated at in utc. + format: date-time + x-nullable: false + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for GetAgents + AgentCredential: + title: AgentCredential + type: object + properties: + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + Credentials: + type: array + items: + type: string + description: The list of credentials 'keys' (names) associated with the agent device id. + CredentialsTestStatus: + type: string + description: 'Specifies the status of the last credentials test, if any.' + CredentialsTestMessage: + type: string + description: Specifies the a success or failure message associated with the last credentials test. + description: Represents and agent device (by it's ID) and a list of credentials associated with it. + AgentGroups: + title: AgentGroups + type: object + properties: + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + MemberOf: + type: array + items: + type: string + description: The list of groups the agent device is a member of. + description: Represents an agent device (by it's ID) and a list of groups it is a member of. + AgentPlannedChangeInstanceStatus: + title: AgentPlannedChangeInstanceStatus + type: object + properties: + Name: + type: string + description: Specifies the planned change name. + NameCombined: + type: string + description: Gets the planned change name plus the description if the description is different from the name. + Description: + type: string + description: Specifies the planned change description. + InstanceId: + type: string + description: Specifies the planned change instance id. + Active: + type: boolean + x-nullable: false + TempTestProp: + type: string + description: AgentPlannedChangeInstanceStatus + AgentTemplates: + title: AgentTemplates + type: object + properties: + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + ConfigTemplates: + type: array + items: + type: string + description: A list of template names associated with the agent device. + description: Represents a list of config templates for an Agent Device + SearchAgentsResponse: + title: SearchAgentsResponse + required: + - Version + type: object + properties: + Agents: + type: array + items: + $ref: '#/components/schemas/Agent' + description: Specifies the agents matching the 'SearchAgents' request. + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for SearchAgents + PreRegisterAgentsResponse: + title: PreRegisterAgentsResponse + type: object + properties: + Agents: + type: array + items: + $ref: '#/components/schemas/Agent' + description: A list of agents that have been pre-registered. + description: The response object for PreRegisterAgents + GetDeviceConfigResponse: + title: GetDeviceConfigResponse + required: + - Version + type: object + properties: + DeviceTemplate: + $ref: '#/components/schemas/DeviceTemplate' + PolicyRuleSet: + $ref: '#/components/schemas/PolicyTemplateRuleSet' + Xml: + type: string + description: 'Specifies the xml. Only one of DeviceTemplate, PolicyRuleSet or Xml string can be returned.' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Represents the tracking configuration template from the merged result of the group configurations for the groups the device is in. + GetDeviceSettingsResponse: + title: GetDeviceSettingsResponse + required: + - Version + type: object + properties: + DeviceSettings: + type: array + items: + $ref: '#/components/schemas/DeviceSettings' + description: 'The device settings for the specified group or device, or if an AgentId alone was specified, a list of the DeviceSetting for each device proxied by the agent.' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: 'Represents the device specific options such as customised local ui password details, and tracker performance settings.' + GetEventsResponse: + title: GetEventsResponse + required: + - Version + type: object + properties: + Events: + type: array + items: + $ref: '#/components/schemas/Event' + description: Gets or sets the events. + DeviceEvents: + type: array + items: + $ref: '#/components/schemas/DeviceEvent' + description: Gets or sets the device events. + AuditEvents: + type: array + items: + $ref: '#/components/schemas/AuditEvent' + description: Gets or sets the audit events. + BaselineEvents: + type: array + items: + $ref: '#/components/schemas/BaselineEvent' + description: Gets or sets the baseline events. + AlertEvents: + type: array + items: + $ref: '#/components/schemas/AlertEvent' + description: Gets or sets the alert events. + DataResultsEvents: + type: array + items: + $ref: '#/components/schemas/DataResultsEvent' + description: Gets or sets the data results events. + AllEvents: + type: array + items: + $ref: '#/components/schemas/Event' + description: Gets or sets all events. + PlannedChanges: + $ref: '#/components/schemas/Dictionary_String_String_' + Rules: + $ref: '#/components/schemas/Dictionary_String_String_' + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The Events response. + Event: + title: Event + type: object + properties: + Comment: + type: string + description: Gets or sets the event comment. + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + AgentId: + type: string + description: Specifies the id of the agent. + DeviceId: + type: string + description: Specifies the id of the device. + GroupNames: + type: array + items: + type: string + description: Gets or sets the group names. + DeviceName: + type: string + description: Gets or sets the device name. + Id: + type: string + description: Gets or sets the unique event ID + EventType: + type: string + description: Gets or sets the event type. + DateUtc: + type: string + description: Gets or sets the UTC date and time of the event. + format: date-time + x-nullable: false + DateDevice: + type: string + description: 'Gets or sets the device date and time of the event, based on the event UtcOffsetHours' + format: date-time + x-nullable: false + DateLocal: + type: string + description: 'Gets or sets the local user''s date and time of the event, based on the GetEvents.UserTimeZoneId specified.' + format: date-time + x-nullable: false + Status: + type: string + description: Gets or sets the current status of the event + PlannedChangeStatus: + type: string + description: Gets or sets the planned change status. + PlannedChangeId: + type: string + description: Gets or sets the planned change id + PlannedChangeManual: + type: boolean + description: Gets or sets whether event was added to the planned change manually or via a rule. + x-nullable: false + Origin: + type: string + description: 'Gets or sets the origin of the event (Polling, LiveTracking etc)' + TimeZoneId: + type: string + description: Gets or sets the time zone id. + UtcOffsetHours: + type: number + description: Gets or sets the offset of local time as represented by TimeZoneId and Utc time in hours. + format: double + x-nullable: false + Version: + type: integer + description: Gets or sets the object version. + format: int32 + x-nullable: false + Score: + type: number + description: Gets or sets the score - only used when returning 'ranked' events. + format: double + x-nullable: false + Description: + type: string + description: Gets or sets the event description. + ProcessingTimeMs: + type: number + description: Gets or sets the processing time in ms. + format: double + Url: + type: string + description: Gets a URL of the event to get more details. + ExtraInfo: + type: string + description: 'Gets or sets the extra info. Where the event is an alert notification, this contains information about tracker reconfigurations, this property can be used to hold the data in a more easily parsed form.' + UsedInBaselines: + type: array + items: + $ref: '#/components/schemas/UsedInBaseline' + description: 'Gets or sets the links indicating whether the event has been used to create or amend a rule in a baseline report, and the action taken.' + description: A base class for any Event raised throughout the once it enters the NNT system and is being processed + AuditEvent: + title: AuditEvent + type: object + properties: + NotificationStatus: + type: string + description: Gets or sets the current notification status of the event + AuditMessageType: + type: string + description: Gets or sets the audit message type. + Grantor: + type: string + description: Gets or sets the grantor. + Grantee: + type: string + description: Gets or sets the grantee. + Action: + type: string + description: Gets or sets the audit action. + LicensedDayUtc: + type: string + description: Gets or sets the date that a licensed device day audit message relates to. + format: date-time + Comment: + type: string + description: Gets or sets the event comment. + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + AgentId: + type: string + description: Specifies the id of the agent. + DeviceId: + type: string + description: Specifies the id of the device. + GroupNames: + type: array + items: + type: string + description: Gets or sets the group names. + DeviceName: + type: string + description: Gets or sets the device name. + Id: + type: string + description: Gets or sets the unique event ID + EventType: + type: string + description: Gets or sets the event type. + DateUtc: + type: string + description: Gets or sets the UTC date and time of the event. + format: date-time + x-nullable: false + DateDevice: + type: string + description: 'Gets or sets the device date and time of the event, based on the event UtcOffsetHours' + format: date-time + x-nullable: false + DateLocal: + type: string + description: 'Gets or sets the local user''s date and time of the event, based on the GetEvents.UserTimeZoneId specified.' + format: date-time + x-nullable: false + Status: + type: string + description: Gets or sets the current status of the event + PlannedChangeStatus: + type: string + description: Gets or sets the planned change status. + PlannedChangeId: + type: string + description: Gets or sets the planned change id + PlannedChangeManual: + type: boolean + description: Gets or sets whether event was added to the planned change manually or via a rule. + x-nullable: false + Origin: + type: string + description: 'Gets or sets the origin of the event (Polling, LiveTracking etc)' + TimeZoneId: + type: string + description: Gets or sets the time zone id. + UtcOffsetHours: + type: number + description: Gets or sets the offset of local time as represented by TimeZoneId and Utc time in hours. + format: double + x-nullable: false + Version: + type: integer + description: Gets or sets the object version. + format: int32 + x-nullable: false + Score: + type: number + description: Gets or sets the score - only used when returning 'ranked' events. + format: double + x-nullable: false + Description: + type: string + description: Gets or sets the event description. + ProcessingTimeMs: + type: number + description: Gets or sets the processing time in ms. + format: double + Url: + type: string + description: Gets a URL of the event to get more details. + ExtraInfo: + type: string + description: 'Gets or sets the extra info. Where the event is an alert notification, this contains information about tracker reconfigurations, this property can be used to hold the data in a more easily parsed form.' + UsedInBaselines: + type: array + items: + $ref: '#/components/schemas/UsedInBaseline' + description: 'Gets or sets the links indicating whether the event has been used to create or amend a rule in a baseline report, and the action taken.' + description: The audit event. + DataResultsEvent: + title: DataResultsEvent + type: object + properties: + DataItems: + type: array + items: + $ref: '#/components/schemas/AgentDataItem' + description: Gets or sets the agent data items + Comment: + type: string + description: Gets or sets the event comment. + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + AgentId: + type: string + description: Specifies the id of the agent. + DeviceId: + type: string + description: Specifies the id of the device. + GroupNames: + type: array + items: + type: string + description: Gets or sets the group names. + DeviceName: + type: string + description: Gets or sets the device name. + Id: + type: string + description: Gets or sets the unique event ID + EventType: + type: string + description: Gets or sets the event type. + DateUtc: + type: string + description: Gets or sets the UTC date and time of the event. + format: date-time + x-nullable: false + DateDevice: + type: string + description: 'Gets or sets the device date and time of the event, based on the event UtcOffsetHours' + format: date-time + x-nullable: false + DateLocal: + type: string + description: 'Gets or sets the local user''s date and time of the event, based on the GetEvents.UserTimeZoneId specified.' + format: date-time + x-nullable: false + Status: + type: string + description: Gets or sets the current status of the event + PlannedChangeStatus: + type: string + description: Gets or sets the planned change status. + PlannedChangeId: + type: string + description: Gets or sets the planned change id + PlannedChangeManual: + type: boolean + description: Gets or sets whether event was added to the planned change manually or via a rule. + x-nullable: false + Origin: + type: string + description: 'Gets or sets the origin of the event (Polling, LiveTracking etc)' + TimeZoneId: + type: string + description: Gets or sets the time zone id. + UtcOffsetHours: + type: number + description: Gets or sets the offset of local time as represented by TimeZoneId and Utc time in hours. + format: double + x-nullable: false + Version: + type: integer + description: Gets or sets the object version. + format: int32 + x-nullable: false + Score: + type: number + description: Gets or sets the score - only used when returning 'ranked' events. + format: double + x-nullable: false + Description: + type: string + description: Gets or sets the event description. + ProcessingTimeMs: + type: number + description: Gets or sets the processing time in ms. + format: double + Url: + type: string + description: Gets a URL of the event to get more details. + ExtraInfo: + type: string + description: 'Gets or sets the extra info. Where the event is an alert notification, this contains information about tracker reconfigurations, this property can be used to hold the data in a more easily parsed form.' + UsedInBaselines: + type: array + items: + $ref: '#/components/schemas/UsedInBaseline' + description: 'Gets or sets the links indicating whether the event has been used to create or amend a rule in a baseline report, and the action taken.' + description: Represents an event containing agent response data (e.g to a 'get processes' request) + SubmitAlertEventsLimitedResponse: + title: SubmitAlertEventsLimitedResponse + required: + - Version + type: object + properties: + BackOffSeconds: + type: integer + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: SubmitAlertEventsLimitedResponse + SubmitBaselineEventsLimitedResponse: + title: SubmitBaselineEventsLimitedResponse + required: + - Version + type: object + properties: + BackOffSeconds: + type: integer + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: SubmitBaselineEventsLimitedResponse + SubmitDeviceEventsLimitedResponse: + title: SubmitDeviceEventsLimitedResponse + required: + - Version + type: object + properties: + BackOffSeconds: + type: integer + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: SubmitDeviceEventsLimitedResponse + SystemReadyResponse: + title: SystemReadyResponse + required: + - Version + type: object + properties: + IsReady: + type: boolean + description: Specifies whether system is booted and ready for login. + x-nullable: false + MicrosoftGraphAuthEnabled: + type: boolean + description: Specifies whether Microsoft Graph (Azure AD) authentication is available for login. + x-nullable: false + OktaAuthEnabled: + type: boolean + description: Specifies whether Okta authentication is available for login. + x-nullable: false + Auth0AuthEnabled: + type: boolean + description: Specifies whether Auth0 authentication is available for login. + x-nullable: false + SiteMinderAuthEnabled: + type: boolean + description: Specifies whether Broadcom SiteMinder authentication is available for login. + x-nullable: false + StatusMessage: + type: string + description: Specifies a status message if IsReady is false. + RetryLogin: + type: boolean + description: Specifies whether the caller should retry their login due to a system restart + x-nullable: false + PrimaryAuthProvider: + type: string + description: Specifies the preferred authentication provider. + HideCredentialsUi: + type: boolean + description: Specifies whether interactive credentials Ui should be shown for user authentication. + x-nullable: false + SSOHeaderName: + type: string + description: Specifies the name of the optional header containing SSO authentication information. + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Indicates if system is booted and ready for login. + SystemDetailsResponse: + title: SystemDetailsResponse + type: object + properties: + SessionTimeout: + type: integer + description: 'Specifies the length of time after which a session should timeout, expressed in minutes.' + format: int32 + x-nullable: false + SessionTimeoutWarning: + type: integer + description: 'Specifies the length of time a session timeout warning should be available, expressed in seconds.' + format: int32 + x-nullable: false + LicenseDaysRemaining: + type: integer + description: Specifies the length of time in days until the current license expires. + format: int32 + x-nullable: false + Version: + type: string + description: Specifies the system version. + Notifications: + type: array + items: + $ref: '#/components/schemas/SystemDetailNotification' + description: Specifies zero or more informational messages about the system. + WorkerStatuses: + type: array + items: + $ref: '#/components/schemas/WorkerStatus' + description: Specifies the list of statuses about constituent parts of the system. + description: System version and config settings. + SystemDetailNotification: + title: SystemDetailNotification + type: object + properties: + NotificationType: + type: string + Title: + type: string + Message: + type: string + description: SystemDetailNotification + WorkerStatus: + title: WorkerStatus + type: object + properties: + Name: + type: string + Version: + type: string + ConfigSource: + type: string + ClrVersion: + type: string + HostName: + type: string + BackgroundTaskThreads: + type: integer + format: int32 + x-nullable: false + EventProcessorThreads: + type: integer + format: int32 + x-nullable: false + NotificationProcessorThreads: + type: integer + format: int32 + x-nullable: false + BulkNotificationProcessingThreads: + type: integer + format: int32 + x-nullable: false + EventQueueThreads: + type: integer + format: int32 + x-nullable: false + DeviceOfflineThreads: + type: integer + format: int32 + x-nullable: false + OutdatedConfigWatcherThreads: + type: integer + format: int32 + x-nullable: false + BackgroundTaskTypes: + type: array + items: + type: string + Role: + type: string + Environment: + type: string + HostType: + type: string + description: WorkerStatus + BackgroundTaskDetails: + title: BackgroundTaskDetails + type: object + properties: + Id: + type: string + Status: + type: string + TaskType: + type: string + TaskTypeName: + type: string + PercentComplete: + type: number + format: float + x-nullable: false + Message: + type: string + TaskCreatedDateTimeUtc: + type: string + format: date-time + x-nullable: false + SubmittedDateTimeUtc: + type: string + format: date-time + x-nullable: false + StartedDateTimeUtc: + type: string + format: date-time + x-nullable: false + EndDateTimeUtc: + type: string + format: date-time + x-nullable: false + ExpirationDateTimeUtc: + type: string + format: date-time + x-nullable: false + TimeOnQueueMs: + type: integer + format: int32 + x-nullable: false + ProcessingTimeMs: + type: integer + format: int32 + x-nullable: false + UserName: + type: string + DependentTasks: + type: array + items: + $ref: '#/components/schemas/BackgroundTaskDetails' + ExternalFileId: + type: string + WaitingCheckIntervalSec: + type: integer + format: int32 + x-nullable: false + RecheckDependenciesIntervalSec: + type: integer + format: int32 + x-nullable: false + description: BackgroundTaskDetails + List_BackgroundTaskDetails_: + title: List + type: array + items: + $ref: '#/components/schemas/BackgroundTaskDetails' + Dictionary_String_ComponentStatus_: + title: 'Dictionary' + type: object + additionalProperties: + enum: + - Unknown + - Starting + - Up + - Stopping + - Down + - Busy + - Fault + - RequiresUpgrade + type: string + description: 'Dictionary' + PerformanceSnapshot: + title: PerformanceSnapshot + type: object + properties: + Version: + type: integer + format: int32 + x-nullable: false + Id: + type: string + PipelineNode: + type: string + SnapshotTimeUtc: + type: string + format: date-time + x-nullable: false + PerformanceData: + type: array + items: + $ref: '#/components/schemas/PerformanceItem' + WorkloadStats: + $ref: '#/components/schemas/Dictionary_String_Double_' + ComponentStatuses: + $ref: '#/components/schemas/Dictionary_String_ComponentStatus_' + description: A system performance metric consisting of a list of values for a PipelineItem. + PerformanceItem: + title: PerformanceItem + type: object + properties: + Version: + type: integer + format: int32 + x-nullable: false + PipelineItem: + type: string + PipelineItemName: + type: string + MetricName: + type: string + Value: + type: number + format: double + x-nullable: false + UnitDescription: + type: string + description: PerformanceItem + Dictionary_String_Double_: + title: 'Dictionary' + type: object + additionalProperties: + type: number + format: double + x-nullable: false + description: 'Dictionary' + List_PerformanceSnapshot_: + title: List + type: array + items: + $ref: '#/components/schemas/PerformanceSnapshot' + GetCacheStatsResponse: + title: GetCacheStatsResponse + required: + - Version + type: object + properties: + GroupCounts: + type: array + items: + $ref: '#/components/schemas/GroupStats' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The cache statistics. + GroupStats: + title: GroupStats + type: object + properties: + Name: + type: string + QueriedMembers: + type: integer + format: int32 + x-nullable: false + CachedMembers: + type: integer + format: int32 + x-nullable: false + Message: + type: string + description: GroupStats + GetAvailableReportTypesResponse: + title: GetAvailableReportTypesResponse + required: + - Version + type: object + properties: + Items: + type: array + items: + $ref: '#/components/schemas/AvailableReportType' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: GetAvailableReportTypesResponse + AvailableReportType: + title: AvailableReportType + type: object + properties: + Name: + type: string + Id: + type: string + description: AvailableReportType + GetReportTemplatesResponse: + title: GetReportTemplatesResponse + required: + - Version + type: object + properties: + Items: + type: array + items: + $ref: '#/components/schemas/ReportTemplateInfo' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: GetReportTemplatesResponse + ReportTemplateInfo: + title: ReportTemplateInfo + type: object + properties: + ReportTemplateType: + type: string + ReportTemplateSubType: + type: string + ReportTemplateName: + type: string + ReportTemplateFileName: + type: string + Version: + type: string + UpgradeInfo: + type: string + IsArchived: + type: boolean + x-nullable: false + IsSystem: + type: boolean + x-nullable: false + IsActive: + type: boolean + x-nullable: false + IsLatest: + type: boolean + x-nullable: false + ReportChangedDateUtc: + type: string + format: date-time + x-nullable: false + description: ReportTemplateInfo + GetScheduledReportsResponse: + title: GetScheduledReportsResponse + required: + - Version + type: object + properties: + Items: + type: array + items: + $ref: '#/components/schemas/ScheduledReportItem' + description: The returned list of the reports affected + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: 'The response to requests to add, query or update scheduled reports, listing the new states of the reports affected' + ScheduledReportItem: + title: ScheduledReportItem + type: object + properties: + Id: + type: string + description: The unique id of the ScheduledReportItem + Schedule: + $ref: '#/components/schemas/ReportSchedule' + TypeId: + type: string + UserName: + type: string + IsPublic: + type: boolean + x-nullable: false + IsEditable: + type: boolean + x-nullable: false + IsHidden: + type: boolean + description: Indicates whether the report/query is visible in the reports list. Used to create temporary items for interactive 'export to csv' functions. + x-nullable: false + UserCreated: + type: boolean + x-nullable: false + CreatedUtc: + type: string + format: date-time + x-nullable: false + LastModifiedUtc: + type: string + format: date-time + LastRunUtc: + type: string + format: date-time + NextRunUtc: + type: string + format: date-time + StateChangeToken: + type: string + ScheduleRunDueByUtc: + type: string + format: date-time + Reports: + type: array + items: + $ref: '#/components/schemas/ReportSpecification' + ShowTableOfContents: + type: string + description: Specifies the settings controlling when the ContainerReport with table of contents is shown. + ContainerReport: + $ref: '#/components/schemas/ReportSpecification' + EmailDelivery: + $ref: '#/components/schemas/ReportEmailDelivery' + KeepUnscheduledResultsForMinutes: + type: integer + description: 'Specifies how long to keep ''adhoc'' (ie non-scheduled) report results for, in minutes.' + format: int32 + x-nullable: false + KeepScheduledResultsForMinutes: + type: integer + description: 'Specifies how long to keep scheduled report results for, in minutes.' + format: int32 + x-nullable: false + ScheduledState: + type: string + Summary: + type: string + description: Specifies a text summary of schedule and email settings. + WaitForAdhocResultsMinutes: + type: integer + description: 'Specifies long to wait for a run''s queries to complete, in minutes.' + format: int32 + x-nullable: false + OverrideWaitForResults: + type: boolean + description: Specifies whether to override the default behaviour for scheduled queries of waiting until the next scheduled run and use the value specified by WaitForAdhocResultsMinutes instead. + x-nullable: false + description: Represents the settings necessary to produce query data for a specific type of report. It is effectively a 'saved query' with options to produce and deliver a report or data export on a schedule. + UpdateReportTemplateResponse: + title: UpdateReportTemplateResponse + required: + - Version + type: object + properties: + FileId: + type: string + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: UpdateReportTemplateResponse + DataSpecDeviceMonitoringReportResponse: + title: DataSpecDeviceMonitoringReportResponse + required: + - Version + type: object + properties: + ReportMetadata: + type: array + items: + $ref: '#/components/schemas/ReportMetadata' + description: Specifies the list of available reports. + Device: + $ref: '#/components/schemas/DeviceReportDetail' + Id: + type: string + description: The id of the report results + ReportTitle: + type: string + description: The report title + Summary: + type: array + items: + $ref: '#/components/schemas/SummaryItem' + description: 'A list of key value pairs indicating the settings that produced the report, including query parameters and report metadata' + HasNoResults: + type: boolean + description: 'Indicates whether the report has no results. This is report specific, eg for a events and planned changes reports it means no events in the time period, for a compliance report run it means there were no devices to report on in the specified group etc.' + x-nullable: false + ItemName: + type: string + description: 'Specifies the descriptive name of the result item, for example ''report'', ''planned change'', ''event'' etc.' + ErrorMessage: + type: string + description: Specifies the descriptive error message for a failed report. + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The returned data for populating a device monitoring report + ReportMetadata: + title: ReportMetadata + required: + - ReportItemId + - ReportInstanceId + type: object + properties: + AgentDeviceId: + type: string + description: 'Specifies the combined agent and device id, for example 1,1.' + DeviceName: + type: string + description: Specifies the device name. + ReportName: + type: string + description: Specifies the report name. + ReportId: + type: string + description: Specifies the report task id. + ReportItemId: + type: string + description: Specifies the scheduled report item id. + ReportInstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + ReportSpecId: + type: string + description: Specifies the scheduled settings id within the ScheduledReportItem.Reports list. + DateUtc: + type: string + description: Specifies the creation date of the report. + format: date-time + x-nullable: false + DateTz: + type: string + description: Specifies the creation date of the report as a timezone formatted string. + ReportScore: + type: number + description: Specifies the report result score. + format: double + x-nullable: false + LastReportScore: + type: number + description: Specifies the report result score from the previous run if any. + format: double + x-nullable: false + GroupAverageScore: + type: number + description: Specifies the group average score from all the devices in the run. + format: double + x-nullable: false + Pass: + type: boolean + description: Specifies whether the report score was considered a pass. + x-nullable: false + Status: + type: string + description: Specifies the report status. + LastStatus: + type: string + description: Specifies the last report status. + AdHoc: + type: boolean + description: Indicating wether or not this report was an 'ad-hoc' run (vs being scheduled). + x-nullable: false + ErrorMessage: + type: string + description: Specifies the report error message if any. + DeviceStatusMessage: + type: string + description: 'Specifies the report status message for the device, if any.' + Id: + type: string + InstanceType: + type: string + RangeType: + type: string + TimeZone: + type: string + UserName: + type: string + RunTimeUtc: + type: string + format: date-time + x-nullable: false + ExpiresAtUtc: + type: string + format: date-time + x-nullable: false + ScheduledReportItem: + $ref: '#/components/schemas/ScheduledReportItem' + QueryDtos: + type: array + items: + $ref: '#/components/schemas/QueryReadyDto' + QueryTaskId: + type: string + QueryTaskStatus: + type: string + StatusMessage: + type: string + ResultsSummaries: + type: array + items: + $ref: '#/components/schemas/ResultsSummary' + description: ReportMetadata + QueryReadyDto: + title: QueryReadyDto + type: object + properties: + DataSpecDto: + $ref: '#/components/schemas/DataSpecBase' + IteratorValue: + type: string + DataSpecId: + type: string + description: QueryReadyDto + ResultsSummary: + title: ResultsSummary + type: object + properties: + ReportSpecId: + type: string + ItemName: + type: string + Message: + type: string + Percentage: + type: string + Total: + type: integer + format: int32 + x-nullable: false + Complete: + type: integer + format: int32 + x-nullable: false + Errored: + type: integer + format: int32 + x-nullable: false + CalculatedStartUtc: + type: string + format: date-time + CalculatedEndUtc: + type: string + format: date-time + description: ResultsSummary + DeviceReportDetail: + title: DeviceReportDetail + type: object + properties: + TotalEvents: + type: integer + description: Gets the total events in the period. + format: int32 + x-nullable: false + ModelVersion: + type: integer + description: Gets the model version. + format: int32 + x-nullable: false + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + AgentDeviceId: + type: string + description: Specifies the string unique id for the agent device. + Version: + type: string + description: Specifies the agent version. + Name: + type: string + description: Specifies the device display name. + DeviceName: + type: string + description: Specifies the device name. + FullyQualifiedDomainName: + type: string + description: Specifies the fully qualified domain name. + HostType: + type: string + description: 'Specifies the host type. This broadly indicates whether the device is windows or unix, or a DB or network device.' + AgentType: + type: string + description: 'Specifies the agent type. This indicates the agents runtime technology, based on AgentType enumeration, where available for the agent (old agents don''t supply it)' + Os: + type: string + description: Specifies the operating system as discovered by the agent. + OsUserSpecified: + type: string + description: 'Specifies the operating system as entered by the user. This will override the discovered Os in the UI, if specified.' + KnownOsName: + type: string + description: 'Specifies the known os name. This is the new OS name from the system defined list, it is either auto-mapped from the Agent''s discovered Os setting or selected by the user at the point of adding a proxied device.' + OsVariant: + type: string + description: Specifies the os variant. This is one of the the system defined settings for the selected 'KnownOsName'. For example it might be '64 bit version' etc.. + Registered: + type: boolean + description: Specifies a value indicating whether the agent has connected yet to pick up its registration. + x-nullable: false + Deleted: + type: boolean + description: Specifies a value indicating whether the device has been deleted. + x-nullable: false + PollPeriodSeconds: + type: integer + description: Specifies the poll period in seconds. + format: int32 + x-nullable: false + HostName: + type: string + description: Specifies the host name. This is the name or IP address used for agentless access to this device. + IPv4: + type: string + description: Specifies the IP v4 address. + IPv6: + type: string + description: Specifies the IP v6 address. + LastPollUtc: + type: string + description: Specifies the last time a poll was received from the agent. + format: date-time + x-nullable: false + NextPollUtc: + type: string + description: Specifies the expected next poll time. + format: date-time + x-nullable: false + MembershipChangeTimeUtc: + type: string + description: Specifies the last time group membership etc was changed. + format: date-time + OnlineStatus: + type: string + description: Specifies the online status. + DiagnosticModeEnabled: + type: boolean + description: Specifies a value indicating whether or not diagnostic mode is enabled for this agent / device (i.e. extra logging). + x-nullable: false + OnlineDetection: + type: string + description: Specifies the method to use when detecting if a proxied device is online + PingTimeoutSeconds: + type: integer + description: 'Specifies the ''OnlineDetection'' ping timeout seconds, used with ''CredentialsService.Types.OnlineDetection.Ping''.' + format: int32 + x-nullable: false + TcpConnectPort: + type: integer + description: Specifies the port used for 'OnlineDetection' using 'CredentialsService.Types.OnlineDetection.TcpConnect'. + format: int32 + x-nullable: false + CanProxy: + type: boolean + description: Specifies a value indicating whether the agent can proxy connections to other devices. + x-nullable: false + UniqueId: + type: string + description: 'Specifies a value uniquely identifying the agent independent of name or agent id. Used to detect a need to re-register when underlying hub store has been emptied, otherwise the auto incrementing agent id counter can result in clashes as already used ids are reissued to different agents.' + IsProxied: + type: boolean + description: Specifies a value indicating whether connection to the device is proxied by another device. + x-nullable: false + ReportedConfigDateUtc: + type: string + format: date-time + ExpectedConfigDateUtc: + type: string + format: date-time + x-nullable: false + Online: + type: boolean + description: Specifies whether the agent is currently online + x-nullable: false + LastPollTime: + type: string + description: Specifies a formatted text version of LastPollUtc. + Templates: + type: array + items: + $ref: '#/components/schemas/PolicyTemplateDetails' + description: Specifies the list of tracking templates the agent is configured with. TODO how does this differ from DeviceConfigNames? + TrackerDetails: + type: array + items: + $ref: '#/components/schemas/TrackerDetails' + description: Specifies the list of trackers and schedules the agent is configured to run + NotificationDetails: + type: array + items: + $ref: '#/components/schemas/NotificationDetails' + description: Specifies the list of notification types and groups configured for the agent + TrackerConfigDetails: + type: array + items: + $ref: '#/components/schemas/TrackerConfigDetails' + description: Specifies the list of configured tracker settings for each tracker + OperatingSystem: + type: string + description: Specifies the operating system as discovered by the agent. + TotalEventsPercent: + type: number + description: Specifies the total events associated with this device as a percentage of the overall. + format: double + x-nullable: false + RelatedProxyDeviceName: + type: string + description: Specifies the proxied device name. + ProxyAgentDevice: + $ref: '#/components/schemas/AgentDevice' + AgentCredentials: + type: array + items: + $ref: '#/components/schemas/NameValuePair' + description: 'Specifies the list of agent credentials, used by this agent to connect to other proxied devices.' + DbConnection: + $ref: '#/components/schemas/DbConnection' + CredentialsTestStatus: + type: string + description: 'Specifies the status of the last credentials test, if any.' + CredentialsTestMessage: + type: string + description: Specifies the a success or failure message associated with the last credentials test. + AgentPlannedChangeStatuses: + type: array + items: + $ref: '#/components/schemas/AgentPlannedChangeInstanceStatus' + description: Specifies the details of the planned changes the agent is a member of + DeviceConfigNames: + $ref: '#/components/schemas/Dictionary_String_List_PolicyTemplateDetails__' + DeviceGroupDetails: + type: array + items: + $ref: '#/components/schemas/NameValuePair' + description: Specifies the list of groups the agent is a member of + Events: + type: array + items: + $ref: '#/components/schemas/DeviceEventCountsSummary' + description: Specifies the list of counts of event types for the agent + DeviceGroupTemplates: + type: array + items: + $ref: '#/components/schemas/PolicyTemplateDetails' + description: Specifies the list of compliance reports the agent is a member of due to group membership + EventBlockEnabled: + type: boolean + description: Specifies a value indicating whether the device is blocked from sending events. + x-nullable: false + BaselineSendEnabled: + type: boolean + description: Specifies a value indicating whether the device is enabled for sending baseline events. + x-nullable: false + IsBlockingRegistrationBy: + type: string + description: Specifies a value indicating the UniqueId of the agent that is trying to 'take-over' this registration. + description: Represents agent properties in form suitable for reporting + PolicyTemplateDetails: + title: PolicyTemplateDetails + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + VersionString: + type: string + GroupName: + type: string + description: Specifies the group name. + GroupDisplayName: + type: string + description: Specifies the group display name. + PolicyTemplateName: + type: string + description: Specifies the policy template name. + PolicyTemplateDisplayName: + type: string + description: Specifies the policy template display name. + IsTrusted: + type: boolean + description: Specifies if policy template contains trusted commands. + description: The group policy template associated with a group + TrackerDetails: + title: TrackerDetails + type: object + properties: + TrackerName: + type: string + DisplayName: + type: string + Description: + type: string + description: TrackerDetails + NotificationDetails: + title: NotificationDetails + type: object + properties: + GroupName: + type: string + GroupDisplayName: + type: string + NotificationTypes: + type: string + NotificationMethod: + type: string + description: NotificationDetails + TrackerConfigDetails: + title: TrackerConfigDetails + type: object + properties: + TrackerName: + type: string + ConfigurationItem: + type: string + Description: + type: string + description: TrackerConfigDetails + NameValuePair: + title: NameValuePair + type: object + properties: + Id: + type: string + DisplayName: + type: string + description: NameValuePair + List_PolicyTemplateDetails_: + title: List + type: array + items: + $ref: '#/components/schemas/PolicyTemplateDetails' + Dictionary_String_List_PolicyTemplateDetails__: + title: 'Dictionary>' + type: object + additionalProperties: + type: array + items: + $ref: '#/components/schemas/PolicyTemplateDetails' + description: 'Dictionary>' + DeviceEventCountsSummary: + title: DeviceEventCountsSummary + type: object + properties: + Version: + type: integer + format: int32 + x-nullable: false + PeriodStartUtc: + type: string + format: date-time + x-nullable: false + PeriodEndUtc: + type: string + format: date-time + x-nullable: false + PeriodMidPointUtc: + type: string + format: date-time + x-nullable: false + PlannedChanges: + type: integer + format: int32 + x-nullable: false + UnPlannedChanges: + type: integer + format: int32 + x-nullable: false + AlertPlannedChanges: + type: integer + format: int32 + x-nullable: false + AlertUnPlannedChanges: + type: integer + format: int32 + x-nullable: false + Errors: + type: integer + format: int32 + x-nullable: false + DeviceEventCount: + type: integer + format: int32 + x-nullable: false + AlertEventCount: + type: integer + format: int32 + x-nullable: false + ErrorEventCount: + type: integer + format: int32 + x-nullable: false + AuditEventCount: + type: integer + format: int32 + x-nullable: false + RuleSetResultEventCount: + type: integer + format: int32 + x-nullable: false + RuleResultEventCount: + type: integer + format: int32 + x-nullable: false + DataResultsEventCount: + type: integer + format: int32 + x-nullable: false + DataItemEventCount: + type: integer + format: int32 + x-nullable: false + ScheduledPolicyResultEventCount: + type: integer + format: int32 + x-nullable: false + RuleSetScoreEventCount: + type: integer + format: int32 + x-nullable: false + CommsEventCount: + type: integer + format: int32 + x-nullable: false + BaselineEventCount: + type: integer + format: int32 + x-nullable: false + GroupReportResultEventCount: + type: integer + format: int32 + x-nullable: false + PeriodStartTz: + type: string + format: date-time + x-nullable: false + PeriodEndTz: + type: string + format: date-time + x-nullable: false + PeriodMidPointTz: + type: string + format: date-time + x-nullable: false + PeriodStart: + type: integer + format: int64 + x-nullable: false + PeriodEnd: + type: integer + format: int64 + x-nullable: false + StartDateTimeTextTz: + type: string + EndDateTimeTextTz: + type: string + MidPointDateTimeTz: + type: string + DateTimeFormat: + type: string + description: DeviceEventCountsSummary + SummaryItem: + title: SummaryItem + type: object + properties: + ItemName: + type: string + ItemValue: + type: string + description: SummaryItem + GetRuleResultsResponse: + title: GetRuleResultsResponse + required: + - Version + type: object + properties: + Items: + type: array + items: + $ref: '#/components/schemas/RuleResultState' + description: The returned list of the reports affected + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: GetRuleResultsResponse + RuleResultState: + title: RuleResultState + type: object + properties: + Id: + type: string + GroupResultEventId: + type: string + RuleId: + type: string + Score: + type: number + format: double + x-nullable: false + ScoreWeight: + type: integer + format: int32 + x-nullable: false + Title: + type: string + Detail: + type: string + Attributes: + $ref: '#/components/schemas/Dictionary_String_List_String__' + UsedInBaseline: + $ref: '#/components/schemas/UsedInBaseline' + AgentDeviceIds: + type: array + items: + type: string + DeviceCount: + type: integer + format: int32 + x-nullable: false + ItemName: + type: string + DataHash: + type: string + TrackerTypeName: + type: string + ItemTypeName: + type: string + TextDifferences: + type: array + items: + $ref: '#/components/schemas/TextDifference' + description: RuleResultState + Dictionary_String_List_String__: + title: 'Dictionary>' + type: object + additionalProperties: + type: array + items: + type: string + description: 'Dictionary>' + ComplianceReportSummaryResponse: + title: ComplianceReportSummaryResponse + required: + - Version + type: object + properties: + GroupName: + type: string + GroupDisplayName: + type: string + ReportTemplateName: + type: string + ReportVersion: + type: string + GroupPerformance: + type: array + items: + $ref: '#/components/schemas/DataPoint' + ReportRunTimesOutAtUtc: + type: string + format: date-time + x-nullable: false + AverageScore: + type: number + format: double + x-nullable: false + LastAverageScore: + type: number + format: double + x-nullable: false + LastRunTimeUtc: + type: string + format: date-time + x-nullable: false + LastRunTimeTextUtc: + type: string + ReportRunTimeTextUtc: + type: string + DeviceCount: + type: integer + format: int32 + x-nullable: false + LastDeviceCount: + type: integer + format: int32 + x-nullable: false + AgentTaskDetails: + type: array + items: + $ref: '#/components/schemas/AgentTaskDetails' + ReportItemId: + type: string + description: Specifies the scheduled report item id. + ReportInstanceId: + type: string + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: ComplianceReportSummaryResponse + DataPoint: + title: DataPoint + type: object + properties: + Category: + type: string + Value: + type: string + description: DataPoint + AgentTaskDetails: + title: AgentTaskDetails + type: object + properties: + AgentTaskId: + type: integer + format: int32 + x-nullable: false + AgentDeviceId: + type: string + DeviceName: + type: string + AgentTaskStatus: + type: string + LastAgentTaskStatus: + type: string + AgentTaskStatusMessage: + type: string + TaskScore: + type: number + format: double + x-nullable: false + LastTaskScore: + type: number + format: double + x-nullable: false + TaskScoreDelta: + type: number + format: double + x-nullable: false + IsNew: + type: boolean + x-nullable: false + description: AgentTaskDetails + GetCurrentPlannedChangesResponse: + title: GetCurrentPlannedChangesResponse + required: + - Version + type: object + properties: + PlannedChanges: + type: array + items: + $ref: '#/components/schemas/PlannedChangeSummary' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: GetCurrentPlannedChangesResponse + PlannedChangeSummary: + title: PlannedChangeSummary + type: object + properties: + Version: + type: integer + description: This indicates the service model version the embedded Dto complies with. + format: int32 + x-nullable: false + Name: + type: string + PlannedChangeId: + type: string + Closure: + type: string + DevicesInPlannedChange: + type: integer + format: int32 + x-nullable: false + StartTimeUtc: + type: string + format: date-time + EndTimeUtc: + type: string + format: date-time + GroupsInPlannedChange: + type: integer + format: int32 + x-nullable: false + description: PlannedChangeSummary + GetComplianceDataResponse: + title: GetComplianceDataResponse + required: + - Version + type: object + properties: + ReportSummaries: + type: array + items: + $ref: '#/components/schemas/ReportSummary' + ComplianceHeaders: + type: array + items: + $ref: '#/components/schemas/ComplianceHeader' + OlderDataAvailable: + type: boolean + x-nullable: false + NewerDataAvailable: + type: boolean + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: 'Compliance data by report, for either individual devices, or as group average.' + ReportSummary: + title: ReportSummary + type: object + properties: + Version: + type: integer + format: int32 + x-nullable: false + GroupOrDeviceName: + type: string + GroupName: + type: string + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + ReportName: + type: string + ReportId: + type: string + DevicesInReport: + type: integer + format: int32 + x-nullable: false + ReportScores: + type: array + items: + $ref: '#/components/schemas/ReportScore' + LatestPercentageScore: + type: number + format: double + x-nullable: false + PreviousPercentageScore: + type: number + format: double + LatestDateUtc: + type: string + format: date-time + x-nullable: false + LatestIsImprovement: + type: integer + format: int32 + x-nullable: false + description: ReportSummary + ReportScore: + title: ReportScore + required: + - ReportItemId + - ReportInstanceId + type: object + properties: + Version: + type: integer + format: int32 + x-nullable: false + DateUtc: + type: string + format: date-time + x-nullable: false + PercentageScore: + type: number + format: double + x-nullable: false + DevicesMissingFromScore: + type: integer + format: int32 + x-nullable: false + DevicesAchievingPassMark: + type: integer + format: int32 + x-nullable: false + PassMark: + type: number + format: double + x-nullable: false + ErrorMessage: + type: string + ReportItemId: + type: string + description: Specifies the scheduled report item id. + ReportInstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + TaskId: + type: integer + format: int32 + x-nullable: false + description: ReportScore + ComplianceHeader: + title: ComplianceHeader + type: object + properties: + Name: + type: string + RunDate: + type: string + format: date-time + x-nullable: false + RunDateUtc: + type: string + format: date-time + x-nullable: false + ReportInstanceId: + type: string + description: ComplianceHeader + GetAvailableComplianceDataResponse: + title: GetAvailableComplianceDataResponse + required: + - Version + type: object + properties: + AvailableComplianceReports: + $ref: '#/components/schemas/Dictionary_String_List_ComplianceReportRun__' + AvailableComplianceDetails: + type: array + items: + $ref: '#/components/schemas/ComplianceReportRunDetails' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: GetAvailableComplianceDataResponse + ComplianceReportRun: + title: ComplianceReportRun + required: + - ReportItemId + type: object + properties: + GroupDisplayName: + type: string + GroupName: + type: string + ReportName: + type: string + ReportItemId: + type: string + description: Specifies the scheduled report item id. + description: ComplianceReportRun + List_ComplianceReportRun_: + title: List + type: array + items: + $ref: '#/components/schemas/ComplianceReportRun' + Dictionary_String_List_ComplianceReportRun__: + title: 'Dictionary>' + type: object + additionalProperties: + type: array + items: + $ref: '#/components/schemas/ComplianceReportRun' + description: 'Dictionary>' + ComplianceReportRunDetails: + title: ComplianceReportRunDetails + type: object + properties: + GroupOrDeviceName: + type: string + GroupName: + type: string + ReportName: + type: string + ReportItemId: + type: string + DevicesInReport: + type: integer + format: int32 + x-nullable: false + Devices: + type: array + items: + type: string + AveragePercentageScore: + type: number + format: double + x-nullable: false + LatestPercentageScore: + type: number + format: double + x-nullable: false + PreviousPercentageScore: + type: number + format: double + LatestDateUtc: + type: string + format: date-time + x-nullable: false + LatestIsImprovement: + type: integer + format: int32 + x-nullable: false + ReportType: + type: string + description: ComplianceReportRunDetails + GetDeviceActivityResponse: + title: GetDeviceActivityResponse + required: + - Version + type: object + properties: + TotalDevices: + type: integer + format: int32 + x-nullable: false + TotalDevicesActiveInPeriod: + type: integer + format: int32 + x-nullable: false + TotalDevicesInActiveInPeriod: + type: integer + format: int32 + x-nullable: false + TotalDevicesAwaitingConnectionInPeriod: + type: integer + format: int32 + x-nullable: false + TotalDevicesReceivedNewConfig: + type: integer + format: int32 + x-nullable: false + TotalDevicesProcessingNewConfig: + type: integer + format: int32 + x-nullable: false + TotalDevicesAwaitingNewConfig: + type: integer + format: int32 + x-nullable: false + InactiveDeviceActivitySummaries: + type: array + items: + $ref: '#/components/schemas/DeviceActivitySummary' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Represents the list of devices matching the request criteria that have been inactive in the specified period. + DeviceActivitySummary: + title: DeviceActivitySummary + type: object + properties: + Version: + type: integer + format: int32 + x-nullable: false + Name: + type: string + AgentDeviceId: + type: string + Deleted: + type: boolean + x-nullable: false + OnlineStatus: + type: string + description: Specifies the online status. + LastContactTimeUtc: + type: string + format: date-time + NextPollTimeUtc: + type: string + format: date-time + LastContactTimeMinutesAgo: + type: integer + format: int32 + x-nullable: false + Description: + type: string + description: DeviceActivitySummary + GetEventCountsResponse: + title: GetEventCountsResponse + required: + - Version + type: object + properties: + DeviceOrGroupName: + type: string + DeviceOrGroupId: + type: string + Events: + type: array + items: + $ref: '#/components/schemas/EventCountsSummary' + StartUtc: + type: string + format: date-time + x-nullable: false + EndUtc: + type: string + format: date-time + x-nullable: false + PlannedTotal: + type: integer + format: int32 + x-nullable: false + UnplannedTotal: + type: integer + format: int32 + x-nullable: false + AlertPlannedTotal: + type: integer + format: int32 + x-nullable: false + AlertUnplannedTotal: + type: integer + format: int32 + x-nullable: false + ErrorTotal: + type: integer + format: int32 + x-nullable: false + TotalEvents: + type: integer + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: 'Represents a summary of event counts for the devices or groups specified by the DeviceFilter, for the specified time period.' + EventCountsSummary: + title: EventCountsSummary + type: object + properties: + Version: + type: integer + format: int32 + x-nullable: false + PeriodStartUtc: + type: string + format: date-time + x-nullable: false + PeriodEndUtc: + type: string + format: date-time + x-nullable: false + PeriodMidPointUtc: + type: string + format: date-time + x-nullable: false + PlannedChanges: + type: integer + format: int32 + x-nullable: false + UnPlannedChanges: + type: integer + format: int32 + x-nullable: false + AlertPlannedChanges: + type: integer + format: int32 + x-nullable: false + AlertUnPlannedChanges: + type: integer + format: int32 + x-nullable: false + Errors: + type: integer + format: int32 + x-nullable: false + EventCounts: + $ref: '#/components/schemas/Dictionary_EventType_Int32_' + PeriodStartTz: + type: string + format: date-time + x-nullable: false + PeriodEndTz: + type: string + format: date-time + x-nullable: false + PeriodMidPointTz: + type: string + format: date-time + x-nullable: false + PeriodStart: + type: integer + format: int64 + x-nullable: false + PeriodEnd: + type: integer + format: int64 + x-nullable: false + description: EventCountsSummary + Dictionary_EventType_Int32_: + title: 'Dictionary' + type: object + additionalProperties: + type: integer + format: int32 + x-nullable: false + description: 'Dictionary' + List_GetEventCountsResponse_: + title: List + type: array + items: + $ref: '#/components/schemas/GetEventCountsResponse' + ExecuteReportResponse: + title: ExecuteReportResponse + required: + - Version + type: object + properties: + Instance: + $ref: '#/components/schemas/ScheduledInstance' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: ExecuteReportResponse + ScheduledInstance: + title: ScheduledInstance + type: object + properties: + Id: + type: string + InstanceType: + type: string + RangeType: + type: string + TimeZone: + type: string + UserName: + type: string + RunTimeUtc: + type: string + format: date-time + x-nullable: false + ExpiresAtUtc: + type: string + format: date-time + x-nullable: false + ScheduledReportItem: + $ref: '#/components/schemas/ScheduledReportItem' + QueryDtos: + type: array + items: + $ref: '#/components/schemas/QueryReadyDto' + QueryTaskId: + type: string + QueryTaskStatus: + type: string + StatusMessage: + type: string + ResultsSummaries: + type: array + items: + $ref: '#/components/schemas/ResultsSummary' + description: ScheduledInstance + GetScheduledInstancesResponse: + title: GetScheduledInstancesResponse + required: + - Version + type: object + properties: + Items: + type: array + items: + $ref: '#/components/schemas/ScheduledInstance' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: GetScheduledInstancesResponse + GetScheduledInstanceRenderedResponse: + title: GetScheduledInstanceRenderedResponse + required: + - Version + type: object + properties: + Items: + type: array + items: + $ref: '#/components/schemas/ScheduledInstanceRendered' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: GetScheduledInstanceRenderedResponse + ScheduledInstanceRendered: + title: ScheduledInstanceRendered + type: object + properties: + Id: + type: string + Name: + type: string + CreatedUtc: + type: string + format: date-time + x-nullable: false + ExpiryUtc: + type: string + format: date-time + x-nullable: false + SizeBytes: + type: integer + format: int64 + x-nullable: false + ReportSpecId: + type: string + ReportInstanceId: + type: string + description: 'Represents the previously rendered output, for example a pdf file, for a specific report run.' + AgentSoftwareUpdate: + title: AgentSoftwareUpdate + type: object + properties: + Id: + type: string + description: Specifies the update ID + UpdateType: + type: string + description: 'Specifies the agent software update type (deb, rpm etc)' + ZipFileName: + type: string + description: Specifies the zip file name + Version: + type: string + description: Specifies the version contained in this update + UploadDate: + type: string + description: Specifies the date it was uploaded into the hub + format: date-time + x-nullable: false + UploadedBy: + type: string + description: Specifies who uploaded the file + ZipFileHash: + type: string + description: Specifies the hash of the zip file + InstallFilename: + type: string + description: Specifies the install filename that represents the gen 7 update file contained within the main update zip file for the agent to execute when processing an update using the command it is given. + description: Represents an individual software update + List_AgentSoftwareUpdate_: + title: List + type: array + items: + $ref: '#/components/schemas/AgentSoftwareUpdate' + List_GroupAgentUpdateSchedule_: + title: List + type: array + items: + $ref: '#/components/schemas/GroupAgentUpdateSchedule' + GetSyncServiceConfigItemsResponse: + title: GetSyncServiceConfigItemsResponse + required: + - Version + type: object + properties: + ConfigurationValues: + type: array + items: + $ref: '#/components/schemas/AzureAppConfigValue' + description: The list of SyncService configuration items + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Response for retrieving SyncService configuration items + AzureAppConfigValue: + title: AzureAppConfigValue + type: object + properties: + Key: + type: string + description: The configuration key (without prefix) + Value: + type: string + description: The configuration value + Hidden: + type: boolean + description: Indicates whether this configuration value is stored as a secret + x-nullable: false + description: Represents a configuration value from SyncService + AddSyncServiceConfigItemResponse: + title: AddSyncServiceConfigItemResponse + required: + - Version + type: object + properties: + ConfigurationValue: + $ref: '#/components/schemas/AzureAppConfigValue' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Response for adding a SyncService configuration item + GetConfigItemsResponse: + title: GetConfigItemsResponse + required: + - Version + type: object + properties: + ConfigItems: + type: array + items: + $ref: '#/components/schemas/ConfigItem' + description: Specifies the configuration + DecryptionErrorOccured: + type: boolean + description: Specifies a boolean indicating whether a decryption error occured during the retrieval of a config item(s) + x-nullable: false + DecryptionErrorMessage: + type: string + description: Specifies the decryption error message should a decryption error have occured + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Describes the hub configuration parameters. + ConfigItem: + title: ConfigItem + type: object + properties: + Version: + type: integer + description: The HUB version that sent this object. + format: int32 + x-nullable: false + Id: + type: string + description: The unique id of this configuration item. + Key: + type: string + description: The configuration key. + Value: + type: string + description: The configuration value. + LastUpdatedUtc: + type: string + description: The configuration last updated date time UTC. + format: date-time + x-nullable: false + description: Represents an individual configuration item. + NewId: + title: NewId + type: object + properties: + Id: + type: string + description: The id of the new item created. + description: The id of the new item created. + Dictionary_String_NewId_: + title: 'Dictionary' + type: object + additionalProperties: + $ref: '#/components/schemas/NewId' + description: 'Dictionary' + AddConfigItemResponse: + title: AddConfigItemResponse + required: + - Version + type: object + properties: + ConfigItems: + type: array + items: + $ref: '#/components/schemas/ConfigItem' + description: A list of configuration items that where added. + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response delivered after adding a new config key / value. + Dictionary_CredentialType_List_String__: + title: 'Dictionary>' + type: object + additionalProperties: + type: array + items: + type: string + description: 'Dictionary>' + List_Credentials_: + title: List + type: array + items: + $ref: '#/components/schemas/Credentials' + GetAgentTaskStatusesResponse: + title: GetAgentTaskStatusesResponse + required: + - Version + type: object + properties: + Statuses: + type: array + items: + $ref: '#/components/schemas/AgentTaskStatus' + description: Specifies the statuses. + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for GetAgentTaskStatuses + AgentTaskStatus: + title: AgentTaskStatus + type: object + properties: + Id: + type: integer + description: The unique task id. + format: int32 + x-nullable: false + AgentId: + type: string + description: Specifies the agent id. + DeviceId: + type: string + description: Specifies the device id. + DeviceName: + type: string + description: Specifies the device name. + HostName: + type: string + description: Specifies the host name. This is the name or IP address used for agentless access to this device. + Description: + type: string + description: Specifies the task description. + PolicyTemplateName: + type: string + description: Specifies the policy template name. Only relevant for certain types of report execution tasks for which it preserves a trace of the source policy name the report is based on. + Status: + type: string + description: Specifies the status. + StatusMessage: + type: string + description: Specifies the status message. + Processed: + type: boolean + description: Specifies whether the task has been processed. + x-nullable: false + TaskExpirationUtc: + type: string + description: Specifies the task expiry time after which its results will be discarded. + format: date-time + x-nullable: false + ErrorText: + type: string + description: Specifies error message if the task has failed. + UpdatedUtc: + type: string + description: Specifies the UTC date and time the task was last updated. + format: date-time + x-nullable: false + description: ' Represents the status of a task.' + SubmitAgentTasksResponse: + title: SubmitAgentTasksResponse + required: + - Version + type: object + properties: + Tasks: + type: array + items: + $ref: '#/components/schemas/AgentTask' + description: Specifies the list of tasks that were submitted. + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for SubmitAgentTasks. + FileHashBinary: + title: FileHashBinary + type: object + properties: + Id: + type: string + description: Specifies the unique id for this file hash binary. + FileName: + type: string + description: Specifies the file name for this fie hash binary. + HostType: + type: string + description: 'Specifies the host type (Windows, Unix etc) associated with this file hash binary.' + OperatingSystem: + type: string + description: Specifies the operating system associated with this file hash binary. + Variant: + type: string + description: 'Specifies the variant (X64, i386 etc) associated with this file hash binary.' + description: Describes a file hash binary. + List_FileHashBinary_: + title: List + type: array + items: + $ref: '#/components/schemas/FileHashBinary' + GetPlannedChangeInstanceMembersResponse: + title: GetPlannedChangeInstanceMembersResponse + required: + - InstanceId + - Version + type: object + properties: + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + MemberGroups: + type: array + items: + type: string + description: Specifies the member groups. + MemberDevices: + type: array + items: + $ref: '#/components/schemas/PlannedChangeInstanceDeviceMember' + description: Specifies the member devices. + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: GetPlannedChangeInstanceMembersResponse + PlannedChangeInstanceDeviceMember: + title: PlannedChangeInstanceDeviceMember + type: object + properties: + AgentDeviceId: + type: string + description: Gets or sets the agent device identifier. + Name: + type: string + description: Gets or sets the name. + description: Device that is a Member of a Planned Change Instance. + GetPlannedChangesInstancesResponse: + title: GetPlannedChangesInstancesResponse + required: + - Version + type: object + properties: + PlannedChangeInstances: + type: array + items: + $ref: '#/components/schemas/PlannedChangeInstance' + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: 'Describes planned change instances, filtered by name, id or groups that are members.' + PlannedChangeInstance: + title: PlannedChangeInstance + required: + - InstanceId + type: object + properties: + Version: + type: integer + description: Gets the version + format: int32 + x-nullable: false + Disabled: + type: boolean + description: Specifies a value indicating whether the instance is currently disabled. This will prevent it being used by the EventCorrelationProcessor and also prevent it being shown in the UI as an option for adding events + x-nullable: false + DisallowRules: + type: boolean + description: 'Specifies a value indicating whether the underlying planned change is allowed to have rules, or is a just container for manually added events.' + x-nullable: false + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + DisplayName: + type: string + description: Specifies the Display Name. + PlannedChangeName: + type: string + description: Specifies the planned change definition name. + PlannedChangeDisplayName: + type: string + description: Specifies the planned change definition's display name. + PlannedChange: + $ref: '#/components/schemas/PlannedChangeDefinition' + Description: + type: string + description: Specifies the description. + Origin: + type: string + description: 'Specifies the origin of the planned change. Optional, this can be ''Interactive'' for UI created, or the name of an ITSM instance when creates by sync service.' + StartTimeUtc: + type: string + description: Specifies the UTC start time of the instance. + format: date-time + x-nullable: false + EndTimeUtc: + type: string + description: Specifies the UTC end time of the instance. + format: date-time + x-nullable: false + Started: + type: boolean + description: Specifies a value indicating whether the planned change has been started. This indicates that actions taken when the planned change is entered for the first time have been performed. + x-nullable: false + Ended: + type: boolean + description: Specifies a value indicating whether the planned change has been ended. This indicates that actions taken when the planned change is exited for the first time have been performed. + x-nullable: false + UseAttributeRules: + type: boolean + description: Used to trigger the new file hash based attribute rule generation. Eventually this will be the norm and this property can be removed. + x-nullable: false + MemberGroups: + type: array + items: + type: string + description: Specifies the names of member groups. + GroupLookup: + type: array + items: + $ref: '#/components/schemas/MemberDetail' + description: Gets or sets the group lookup. + AgentDeviceLookup: + type: array + items: + $ref: '#/components/schemas/MemberDetail' + description: Gets or sets the agent device lookup. + MemberAgentDeviceIds: + type: array + items: + type: string + description: Specifies the ids of member devices. + MemberGroupsWithInherit: + type: array + items: + type: string + description: Specifies the member groups including child groups of explicitly specified groups. + AssignedTo: + type: string + description: Specifies the Assigned To Name. + PeriodicityCount: + type: integer + description: Specifies a value indicating the periodicity of the planned change. When PeriodicityCount is greater then zero the planned change is active every PeriodicityCount PeriodicityUnits for PeriodDurationCount PeriodDurationUnits starting from StartTimeUtc. + format: int32 + x-nullable: false + PeriodicityUnit: + type: string + description: Specifies a value indicating the periodicity unit. + PeriodDurationCount: + type: integer + description: Specifies a value indicating the period duration of the planned change. When PeriodicityCount is greater then zero the planned change is active every PeriodicityCount PeriodicityUnits for PeriodDurationCount PeriodDurationUnits starting from StartTimeUtc. + format: int32 + x-nullable: false + PeriodDurationUnit: + type: string + description: Specifies a value indicating the period duration unit. + CreationDateUtc: + type: string + description: Specifies a the creation date in UTC. + format: date-time + x-nullable: false + LastModifiedDateUtc: + type: string + description: Specifies a the last modified date in UTC. + format: date-time + x-nullable: false + description: A planned change instance represents a planned change active in a specific time period for a set of devices. + PlannedChangeDefinition: + title: PlannedChangeDefinition + type: object + properties: + Version: + type: integer + description: 'Specifies the request version. If specified, this indicates the service model version the request complies with.' + format: int32 + x-nullable: false + Name: + type: string + description: Specifies the internally identifying name. + DisplayName: + type: string + description: Specifies the display name. + Description: + type: string + description: Specifies the description text. + Origin: + type: string + description: 'Specifies the origin of the planned change ruleset. Optional, this can be ''Interactive'' for UI created, or the name of an ITSM instance when creates by sync service.' + CreationDateUtc: + type: string + description: Specifies the UTC creation date of the planned change. + format: date-time + x-nullable: false + LastModifiedDateUtc: + type: string + description: Specifies the UTC last modified date of the planned change. + format: date-time + x-nullable: false + DisallowRules: + type: boolean + description: 'Specifies a value indicating whether the planned change is allowed to have rules, or is a just container for manually added events.' + x-nullable: false + Rules: + $ref: '#/components/schemas/Dictionary_String_PlannedChangeRule_' + RuleCombinationOperator: + type: string + description: Specifies the rule combination operator. If this is And it means an event must satisfy all the'Rules'. + description: A named Planned Change definition. + MemberDetail: + title: MemberDetail + type: object + properties: + Id: + type: string + description: Gets and Sets the Member Detail Id + Name: + type: string + description: Gets or sets the name. + description: summary + GetPlannedChangeInstancesNameValueResponse: + title: GetPlannedChangeInstancesNameValueResponse + required: + - Version + type: object + properties: + PlannedChangeInstances: + type: array + items: + $ref: '#/components/schemas/PlannedChangeInstanceNameValue' + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: 'Describes planned change instances, filtered by name, id or groups that are members.' + PlannedChangeInstanceNameValue: + title: PlannedChangeInstanceNameValue + required: + - InstanceId + type: object + properties: + InstanceId: + type: string + description: Specifies the id for a specific ScheduledInstance of a ScheduledReportItem report. + DisplayName: + type: string + description: Specifies the Display Name. + description: Represents the Display Name and Id of a planned change only. + AddOrUpdatePlannedChangeInstanceFromEventsResponse: + title: AddOrUpdatePlannedChangeInstanceFromEventsResponse + type: object + properties: + IsPreview: + type: boolean + description: 'Specifies a value indicating whether the values returned on this object are a preview, or have really been created, ''AddPlannedChangeInstanceFromEvents.PreviewOnly''.' + x-nullable: false + PlannedChange: + $ref: '#/components/schemas/PlannedChangeDefinition' + PlannedChangeInstance: + $ref: '#/components/schemas/PlannedChangeInstance' + description: AddOrUpdatePlannedChangeInstanceFromEventsResponse + GetPlannedChangesResponse: + title: GetPlannedChangesResponse + required: + - Version + type: object + properties: + PlannedChanges: + type: array + items: + $ref: '#/components/schemas/PlannedChangeDefinition' + description: Specifies the planned changes. + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Specifies returned a planned change definitions. + AnalyzePlannedChangeResponse: + title: AnalyzePlannedChangeResponse + required: + - Version + type: object + properties: + RuleIdsReplaced: + type: array + items: + type: string + RuleReductionPlans: + type: array + items: + $ref: '#/components/schemas/RuleReductionPlan2' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: AnalyzePlannedChangeResponse + ParseCommandResponse: + title: ParseCommandResponse + type: object + properties: + Success: + type: boolean + x-nullable: false + ErrorMessage: + type: string + Summaries: + type: array + items: + $ref: '#/components/schemas/ParserResultSummary' + SpecificLanguageDetail: + type: string + OriginalCommandLineText: + type: string + description: ParseCommandResponse + ParserResultSummary: + title: ParserResultSummary + type: object + properties: + Name: + type: string + Results: + type: array + items: + $ref: '#/components/schemas/ParserResults' + Successful: + type: boolean + x-nullable: false + FailureMessage: + type: string + SortedCommandElements: + type: array + items: + $ref: '#/components/schemas/CommandElement' + description: ParserResultSummary + ParserResults: + title: ParserResults + type: object + properties: + ParserName: + type: string + FailureElementType: + type: string + FailureElement: + $ref: '#/components/schemas/CommandElement' + Message: + type: string + Keyword: + $ref: '#/components/schemas/CommandElement' + VariableAssignments: + type: array + items: + $ref: '#/components/schemas/CommandElement' + FileOutputRedirects: + type: array + items: + $ref: '#/components/schemas/CommandElement' + description: ParserResults + CommandElement: + title: CommandElement + type: object + properties: + ElementText: + type: string + LineNumber: + type: integer + format: int32 + x-nullable: false + ColumnStartIndex: + type: integer + format: int32 + x-nullable: false + ColumnEndIndex: + type: integer + format: int32 + x-nullable: false + CommandElementType: + type: string + FailureElementType: + type: string + ExistsInWhitelist: + type: boolean + x-nullable: false + FailureMessage: + type: string + description: CommandElement + WhitelistCommandComponentResponse: + title: WhitelistCommandComponentResponse + required: + - Version + type: object + properties: + Success: + type: boolean + x-nullable: false + ErrorMessage: + type: string + CommandComponents: + $ref: '#/components/schemas/IReadOnlyCollection_WhitelistedCommandComponent_' + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The paging response base. + IReadOnlyCollection_WhitelistedCommandComponent_: + title: IReadOnlyCollection`1 + type: object + description: IReadOnlyCollection + CommandComponentTemplateResponse: + title: CommandComponentTemplateResponse + required: + - Version + type: object + properties: + Success: + type: boolean + x-nullable: false + ErrorMessage: + type: string + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: CommandComponentTemplateResponse + GetAllCommandComponentTemplatesResponse: + title: GetAllCommandComponentTemplatesResponse + required: + - Version + type: object + properties: + Success: + type: boolean + x-nullable: false + ErrorMessage: + type: string + TemplateNames: + $ref: '#/components/schemas/IReadOnlyCollection_String_' + CommandComponentId: + type: string + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The paging response base. + GetAllCommandComponentsTemplatesResponse: + title: GetAllCommandComponentsTemplatesResponse + required: + - Version + type: object + properties: + Success: + type: boolean + x-nullable: false + ErrorMessage: + type: string + TemplateNames: + $ref: '#/components/schemas/IReadOnlyCollection_String_' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: GetAllCommandComponentsTemplatesResponse + GetCloudTemplateCreationStatusResponse: + title: GetCloudTemplateCreationStatusResponse + required: + - Version + type: object + properties: + CloudSystemName: + type: string + DefaultMasterAgentDeviceId: + type: string + DefaultMasterAgentName: + type: string + ActualMasterAgentDeviceId: + type: string + ActualMasterAgentName: + type: string + ActualMasterAgentOnline: + type: boolean + x-nullable: false + RootGroupName: + type: string + RootGroupDisplayName: + type: string + CloudSystemGroupName: + type: string + CloudSystemGroupDisplayName: + type: string + CloudSystemGroupExists: + type: boolean + x-nullable: false + CloudSystemGroupMembersCount: + type: integer + format: int32 + x-nullable: false + CloudSystemAgentDeviceId: + type: string + CloudSystemAgentExists: + type: boolean + x-nullable: false + CloudSystemAgentOnline: + type: boolean + x-nullable: false + CloudSystemCredentialKey: + type: string + CloudSystemCredentialExists: + type: boolean + x-nullable: false + CloudSystemCredentialTestStatus: + type: string + CloudSystemCredentialTestResult: + type: string + PolicyTemplateName: + type: string + ReportSpecId: + type: string + PolicyDeleted: + type: boolean + x-nullable: false + PolicyIsTrusted: + type: boolean + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: GetCloudTemplateCreationStatusResponse + SetupPolicyTemplateResponse: + title: SetupPolicyTemplateResponse + required: + - Version + type: object + properties: + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: SetupPolicyTemplateResponse + GetPolicyTemplateCreationStatusResponse: + title: GetPolicyTemplateCreationStatusResponse + required: + - Version + type: object + properties: + PolicyTemplateName: + type: string + RootGroupName: + type: string + RootGroupDisplayName: + type: string + SourceGroupName: + type: string + SourceGroupDisplayName: + type: string + SourceGroupExists: + type: boolean + x-nullable: false + SourceGroupHasPolicyTemplate: + type: boolean + x-nullable: false + SourceGroupMembersCount: + type: integer + format: int32 + x-nullable: false + SourceGroupConfigDateUtc: + type: string + format: date-time + x-nullable: false + MembersGroupName: + type: string + MembersGroupDisplayName: + type: string + MembersGroupExists: + type: boolean + x-nullable: false + MembersGroupMembersCount: + type: integer + format: int32 + x-nullable: false + RulesConfigured: + type: integer + format: int32 + x-nullable: false + TrackersConfigured: + type: integer + format: int32 + x-nullable: false + TrackerNames: + type: array + items: + type: string + SourceAgentDeviceId: + type: string + SourceAgentName: + type: string + SourceAgentHasConfig: + type: boolean + x-nullable: false + SourceAgentIsBaselineSource: + type: boolean + x-nullable: false + SourceAgentHasBaselined: + type: boolean + x-nullable: false + MemberAgentDeviceId: + type: string + MemberAgentName: + type: string + ReportSpecId: + type: string + NotificationRefId: + type: string + HasBaselineEverRun: + type: boolean + x-nullable: false + PolicyDeleted: + type: boolean + x-nullable: false + PolicyIsTrusted: + type: boolean + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: GetPolicyTemplateCreationStatusResponse + GetMostRecentPolicyResultsResponse: + title: GetMostRecentPolicyResultsResponse + required: + - Version + type: object + properties: + Results: + type: array + items: + $ref: '#/components/schemas/PolicyRunDetail' + ComplianceDistribution: + type: array + items: + $ref: '#/components/schemas/ChartDataPoint' + GroupRiskDistribution: + type: array + items: + $ref: '#/components/schemas/ChartDataPoint' + GroupName: + type: string + GroupDisplayName: + type: string + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Response to a request for matching config templates. + PolicyRunDetail: + title: PolicyRunDetail + type: object + properties: + GroupDisplayName: + type: string + description: Specifies the group display name associated with the result + PolicyTemplateName: + type: string + PolicyVersion: + type: string + RunDateUtc: + type: string + format: date-time + x-nullable: false + GroupName: + type: string + description: Specifies the group id associated with the result + FirstAgentDeviceId: + type: string + description: Specifies the first agent in the group + TimeLineDefaultStartUtc: + type: string + description: The suggested default start date for viewing results of this policy run + format: date-time + x-nullable: false + TimeLineDefaultEndUtc: + type: string + description: The suggested default end date for viewing results of this policy run + format: date-time + x-nullable: false + NotificationRefIds: + type: array + items: + type: string + description: Gets or sets the notification reference ids for the policy. + NotificationStatus: + type: string + AverageScore: + type: number + format: double + x-nullable: false + LastAverageScore: + type: number + format: double + x-nullable: false + PassMark: + type: number + format: double + x-nullable: false + DevicesCurrentlyInGroup: + type: integer + format: int32 + x-nullable: false + DeviceTotal: + type: integer + format: int32 + x-nullable: false + DevicesPassed: + type: integer + format: int32 + x-nullable: false + DevicesFailed: + type: integer + format: int32 + x-nullable: false + DevicesNotRun: + type: integer + format: int32 + x-nullable: false + ScoreDistribution: + type: array + items: + $ref: '#/components/schemas/ScoreBand' + DevicesImproved: + type: integer + format: int32 + x-nullable: false + DevicesSame: + type: integer + format: int32 + x-nullable: false + DevicesDeteriorated: + type: integer + format: int32 + x-nullable: false + ReportInstanceId: + type: string + LastPassMark: + type: number + format: double + x-nullable: false + LastDeviceTotal: + type: integer + format: int32 + x-nullable: false + LastDevicesPassed: + type: integer + format: int32 + x-nullable: false + LastDevicesFailed: + type: integer + format: int32 + x-nullable: false + LastDevicesNotRun: + type: integer + format: int32 + x-nullable: false + LastPolicyTemplateName: + type: string + LastPolicyVersion: + type: string + LastDateUtc: + type: string + format: date-time + LastRunDateUtc: + type: string + format: date-time + LastReportInstanceId: + type: string + Risk: + type: string + RiskScore: + type: string + NumericRiskScore: + type: integer + format: int32 + x-nullable: false + Compliant: + type: boolean + x-nullable: false + SetupComplete: + type: boolean + x-nullable: false + SetupMessage: + type: string + ReportSpecId: + type: string + HasRunData: + type: boolean + x-nullable: false + description: Represents the results of applying a policy report to a group of devices + ScoreBand: + title: ScoreBand + type: object + properties: + Lower: + type: number + format: double + x-nullable: false + Upper: + type: number + format: double + x-nullable: false + DeviceCount: + type: integer + format: int32 + x-nullable: false + description: ScoreBand + ChartDataPoint: + title: ChartDataPoint + type: object + properties: + Category: + type: string + Value: + type: string + description: ChartDataPoint + AddPolicyTemplateRulesResponse: + title: AddPolicyTemplateRulesResponse + required: + - Version + type: object + properties: + ActionsTaken: + type: array + items: + type: string + FailureHint: + type: string + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: AddPolicyTemplateRulesResponse + AddPolicyTemplateResponse: + title: AddPolicyTemplateResponse + type: object + properties: + PreviousVersion: + type: string + Version: + type: string + WasUploaded: + type: boolean + x-nullable: false + IsActive: + type: boolean + x-nullable: false + IsSystem: + type: boolean + x-nullable: false + IsTrusted: + type: boolean + x-nullable: false + Message: + type: string + description: Response to adding a device policy template to the system. + UploadPolicyTemplateResponse: + title: UploadPolicyTemplateResponse + required: + - Version + type: object + properties: + AddPolicyTemplateResponses: + type: array + items: + $ref: '#/components/schemas/AddPolicyTemplateResponse' + description: Specifies a the list of policy template summaries that were created from the uploaded files. + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: UploadPolicyTemplateResponse + GetAgentProcessesResponse: + title: GetAgentProcessesResponse + required: + - Version + type: object + properties: + TaskId: + type: integer + format: int32 + x-nullable: false + Message: + type: string + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Describes the list of running processes on a device. + StartAgentTrackerResponse: + title: StartAgentTrackerResponse + required: + - Version + type: object + properties: + TaskId: + type: integer + format: int32 + x-nullable: false + Message: + type: string + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: StartAgentTrackerResponse + GetAgentServicesResponse: + title: GetAgentServicesResponse + required: + - Version + type: object + properties: + TaskId: + type: integer + format: int32 + x-nullable: false + Message: + type: string + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Describes the list of running services on a device. + GetGroupPolicyResponse: + title: GetGroupPolicyResponse + required: + - Version + type: object + properties: + Templates: + type: array + items: + $ref: '#/components/schemas/PolicyTemplateDetails' + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response to the request for configured policy templates on the group. + AddGroupPolicyResponse: + title: AddGroupPolicyResponse + required: + - Version + type: object + properties: + Templates: + type: array + items: + $ref: '#/components/schemas/PolicyTemplateDetails' + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response to the request to add a configured policy template to the group. + GetAgentsRankedResponse: + title: GetAgentsRankedResponse + required: + - Version + type: object + properties: + AgentCredentials: + type: array + items: + $ref: '#/components/schemas/AgentCredential' + description: Specifies a list of agent device -> credentials. + AgentGroups: + type: array + items: + $ref: '#/components/schemas/AgentGroups' + description: Specifies a list of agent device -> group memberships. + GroupsLookup: + type: array + items: + $ref: '#/components/schemas/KeyValuePair_String_String_' + description: Specifies a lookup list of group key -> display name. + TemplatesLookup: + type: array + items: + $ref: '#/components/schemas/KeyValuePair_String_String_' + description: Specifies a lookup list of template key -> display name. + AgentPlannedChangeStatuses: + type: array + items: + $ref: '#/components/schemas/AgentPlannedChangeInstanceStatus' + description: Specifies a list of agent device -> planned change statuses (returned here to make subsequent calls unnecessary in UI - the data is all stored in the same object in the repository so no signficant cost in getting it out) + Agents: + type: array + items: + $ref: '#/components/schemas/DeviceReportDetail' + description: Specifies the agents matching the 'GetAgents' request. + AgentTemplates: + type: array + items: + $ref: '#/components/schemas/AgentTemplates' + description: Specifies agent device -> templates + RelatedProxyAgents: + type: array + items: + $ref: '#/components/schemas/Agent' + description: 'Specifies the related proxy agents. These are the agents that proxy the devices listed in ''Agents'', if any.' + ResultsGeneratedAtUtc: + type: string + description: Specifies time the results were generated at in utc. + format: date-time + x-nullable: false + StatsPeriod: + type: integer + description: Specifies the id of the stats period the device event counts were retrieved from. + format: int64 + x-nullable: false + StatsPeriodStartUtc: + type: string + description: Specifies the Utc start date of the stats period the device event counts were retrieved from. + format: date-time + x-nullable: false + StatsPeriodEndUtc: + type: string + description: Specifies the Utc end date of the stats period the device event counts were retrieved from. + format: date-time + x-nullable: false + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response objeect for GetAgentsRanked + KeyValuePair_String_String_: + title: 'KeyValuePair' + type: object + properties: + Key: + type: string + Value: + type: string + description: 'KeyValuePair' + GroupMembersResponse: + title: GroupMembersResponse + required: + - Version + type: object + properties: + GroupMembers: + type: array + items: + $ref: '#/components/schemas/GroupMember' + description: Specifies the group members. + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response to group members request. + GroupMember: + title: GroupMember + type: object + properties: + Version: + type: integer + description: Gets the version. + format: int32 + x-nullable: false + GroupName: + type: string + description: Gets or sets the name of the group. + MemberType: + type: string + description: Specifies the member type of the member specified by MemberName (AgentDevice or Group). + MemberName: + type: string + description: Gets or sets the member name. Note that when this is an Agent Device the Member Name is the encoded Agent:Device pair. + GroupRiskScore: + type: string + description: Specifies the risk score of the group. + description: A group member. + GetGroupsResponse: + title: GetGroupsResponse + required: + - Version + type: object + properties: + Groups: + type: array + items: + $ref: '#/components/schemas/Group' + description: The list of returned groups. + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response to a get groups request. + Group: + title: Group + type: object + properties: + Version: + type: integer + description: Gets the version. + format: int32 + x-nullable: false + Name: + type: string + description: Gets or sets the Group name. + DisplayName: + type: string + description: Gets or sets the Group's display name. + GroupType: + type: integer + description: Gets or sets the type of the group. + format: int32 + AgentUpdateSchedule: + $ref: '#/components/schemas/GroupAgentUpdateSchedule' + DeviceSettings: + $ref: '#/components/schemas/DeviceSettingsPartial' + IsSystem: + type: boolean + description: summary + x-nullable: false + Members: + type: array + items: + type: string + description: The group names that are members of this group. + Templates: + type: array + items: + $ref: '#/components/schemas/ScheduledPolicyTemplate' + description: ' Gets or sets the Group''s policy templates.' + RiskScore: + type: string + description: Specifies the risk score of the group. + NotifyUsers: + type: array + items: + type: string + description: Gets or sets the list of users to notify. + LastActivityTimeUtc: + type: string + description: 'Gets or sets the last activity utc time, this is the time the groups templates of memberships were last changed.' + format: date-time + x-nullable: false + MemberOf: + type: array + items: + type: string + description: Parent groups of this group. + LastConfigRelatedChangeDateUtc: + type: string + format: date-time + x-nullable: false + description: A group. + DeviceSettingsPartial: + title: DeviceSettingsPartial + type: object + properties: + FileLiveTrackingRequiresBaselineCompletion: + type: boolean + description: Gets or sets the file live tracking requires baseline completion flag. + description: 'The partial device settings represents the device specific options such as customised local ui password details, and tracker performance settings stored on a specific group. The Device Settings for a specific device are derived from a set of these.' + ScheduledPolicyTemplate: + title: ScheduledPolicyTemplate + type: object + properties: + GroupName: + type: string + description: Specifies the group name. + StartTimeUtc: + type: string + description: Specifies the UTC start time of the schedule. + format: date-time + x-nullable: false + EndTimeUtc: + type: string + description: Specifies the UTC end time of the schedule. + format: date-time + x-nullable: false + PeriodicityMinutes: + type: integer + description: Specifies the periodicity of execution of a compliance report in minutes. + format: int32 + x-nullable: false + PolicyTemplateName: + type: string + description: Specifies the policy template name. + NextRunTimeUtc: + type: string + description: Specifies the next run time utc. + format: date-time + LastRunTimeUtc: + type: string + description: Specifies the last run time utc. + format: date-time + CurrentResultEventId: + type: string + description: Specifies the current result event id. + LastResultEventId: + type: string + description: Specifies the last result event id. + WaitForCompletionUntilUtc: + type: string + description: 'Specifies the utc time to wait until, for completion of the current set of tasks.' + format: date-time + Status: + type: string + description: Specifies the status. + TaskIds: + type: array + items: + type: integer + format: int32 + x-nullable: false + description: Specifies the task ids. + AbandonTasksOnTimeout: + type: boolean + description: Specifies a value indicating whether to abandon unfinished tasks on on scheduled policy timeout. + x-nullable: false + PassMark: + type: number + description: Specifies the default pass mark associated with compliance report TemplateType. + format: double + x-nullable: false + PolicyRunId: + type: integer + description: Specifies the policy run id associated with the last run of the report etc. This id is also stored on the relevant tasks. + format: int32 + description: The scheduled policy template associated with a group and run on a schedule. This is a DTO used to return detailed information about a scheduled policy on a group. + GetGroupsTreeResponse: + title: GetGroupsTreeResponse + required: + - Groups + type: object + properties: + Groups: + type: array + items: + $ref: '#/components/schemas/GroupTreeItem' + description: The list of top level groups + description: A returned tree structure representing the groups hierarchy. + GroupTreeItem: + title: GroupTreeItem + type: object + properties: + DisplayName: + type: string + description: Gets or sets the display name of the Group Tree Item. + IsSystem: + type: boolean + description: Gets or sets a value indicating whether this object is system. + x-nullable: false + ParentCount: + type: integer + description: Gets or sets a value indicating the number of parent groups this group is a child of. + format: int32 + x-nullable: false + Name: + type: string + description: Gets or sets the group tree item name. + Groups: + type: array + items: + $ref: '#/components/schemas/GroupTreeItem' + description: Gets or sets the list of GroupTreeItems. + RiskScore: + type: string + description: Specifies the risk score of the group. + description: A group tree item. + AddGroupResponse: + title: AddGroupResponse + required: + - Version + type: object + properties: + Name: + type: string + description: The name of the new group + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Represents a response to adding a new group + GetOverdueDevicesResponse: + title: GetOverdueDevicesResponse + required: + - Version + type: object + properties: + Devices: + type: array + items: + type: string + description: The devices that have not polled in for the specified amount of time. + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Lists devices that have not polled in for the specified amount of time. + DeleteDevicePermanentlyResponse: + title: DeleteDevicePermanentlyResponse + required: + - Version + type: object + properties: + Challenge: + type: string + description: The response to a previously issued challenge for this request. Without this the call will return a challenge for which the response must be supplied on a subsequently call. + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: 'The response to a request to delete a specified Agent from the system. On first call the system will issue a challenge which must be responded to and supplied on a repetition of the initial request. Contact NNT Support, supplying the text of the challenge, in order be be issued with an authorising response code.' + GetDeviceFiltersResponse: + title: GetDeviceFiltersResponse + required: + - Version + type: object + properties: + DeviceFilters: + type: List + items: + $ref: '#/components/schemas/DeviceFilter' + description: Contains the list of zero or more DeviceFilter definitions matching the request criteria + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response to a get defvice filters request. + TestAgentCredentialsResponse: + title: TestAgentCredentialsResponse + required: + - Version + type: object + properties: + TaskId: + type: integer + format: int32 + x-nullable: false + Message: + type: string + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: TestAgentCredentialsResponse + IpAddressBlockingStatus: + title: IpAddressBlockingStatus + type: object + properties: + IpAddress: + type: string + description: Gets or sets the IP address. + BlockedDueTo: + type: string + description: Gets or sets the reason the ip address is blocked. IpAddressActivityType.NotBlocked means not blocked. + ExpiresUtc: + type: string + description: Gets or sets the Date/Time UTC when the status expires. + format: date-time + x-nullable: false + Count: + type: integer + description: Gets or sets the count. + format: int32 + x-nullable: false + UserName: + type: string + description: 'Gets or sets the name of the user. ' + description: 'The ip address blocking status represents the reason why an ipaddress is blocked, based on analysis of the stored blocking details.' + List_IpAddressBlockingStatus_: + title: List + type: array + items: + $ref: '#/components/schemas/IpAddressBlockingStatus' + DiscoverDevicesResponse: + title: DiscoverDevicesResponse + required: + - Version + type: object + properties: + TaskId: + type: integer + format: int32 + x-nullable: false + DiscoveredDeviceType: + type: string + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: DiscoverDevicesResponse + GetEventHistoryResponse: + title: GetEventHistoryResponse + required: + - Version + type: object + properties: + EventId: + type: string + description: Specifies the event id. + HistoryItems: + type: array + items: + $ref: '#/components/schemas/HistoryItem' + description: A list of history items associated with this event. + Total: + type: integer + description: Gets or sets the number of history items + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Describes an event's history. + HistoryItem: + title: HistoryItem + type: object + properties: + DateUtc: + type: string + description: Specifies the date (UTC) the action took place. + format: date-time + x-nullable: false + Message: + type: string + description: Specifies the action that took palce at the specified time. + description: Describes a specific item of event history. + GetEventDeviceGroupsResponse: + title: GetEventDeviceGroupsResponse + required: + - Version + type: object + properties: + GroupNames: + type: array + items: + type: string + description: Gets or sets the group names. + AgentDeviceIds: + type: array + items: + type: string + description: Gets or sets the agent device ids. + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Represents the list of groups that the devices associated with the given events are members of. + GetInventoryResponse: + title: GetInventoryResponse + required: + - Version + type: object + properties: + Items: + type: array + items: + $ref: '#/components/schemas/InventoryItem' + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The paging response base. + GetAgentInventoryItemsGroupedResponse: + title: GetAgentInventoryItemsGroupedResponse + required: + - Version + type: object + properties: + Items: + type: array + items: + $ref: '#/components/schemas/AgentInventoryItemGrouped' + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The paging response base. + AgentInventoryItemGrouped: + title: AgentInventoryItemGrouped + type: object + properties: + Id: + type: string + Version: + type: integer + format: int32 + x-nullable: false + InventoryItemName: + type: string + InventoryItemVersion: + type: string + InventoryItemCpeMatchStatus: + type: string + InventoryItemCpeName: + type: string + AgentsTotal: + type: integer + format: int32 + x-nullable: false + IsOperatingSystemItem: + type: boolean + x-nullable: false + description: AgentInventoryItemGrouped + GetAgentInventoryAgentsDetailResponse: + title: GetAgentInventoryAgentsDetailResponse + required: + - Version + type: object + properties: + Items: + type: array + items: + $ref: '#/components/schemas/AgentDetail' + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The paging response base. + AgentDetail: + title: AgentDetail + type: object + properties: + AgentDeviceId: + type: string + DeviceName: + type: string + AgentVersion: + type: string + description: AgentDetail + GetVulnerabilityOverviewResponse: + title: GetVulnerabilityOverviewResponse + required: + - Version + type: object + properties: + SoftwareVulnerabilityScoresV3: + $ref: '#/components/schemas/Dictionary_String_Double_' + SoftwareVulnerabilityScoresV2: + $ref: '#/components/schemas/Dictionary_String_Double_' + DeviceVulnerabilityScoresV3: + $ref: '#/components/schemas/Dictionary_String_Double_' + VulnerabilityScoresV2: + $ref: '#/components/schemas/Dictionary_String_Double_' + VulnerabilityScoresV3: + $ref: '#/components/schemas/Dictionary_String_Double_' + DeviceVulnerabilityScoresV2: + $ref: '#/components/schemas/Dictionary_String_Double_' + CveChanges: + type: array + items: + $ref: '#/components/schemas/CveSummary' + description: Specifies a list of recent CVE Changes. + HighRiskSoftwareItems: + type: array + items: + $ref: '#/components/schemas/SoftwareItem' + description: 'Specifies a list of high risk software items. A software item is considered high risk if it has a known cve of critical or high V3 severity, or high V2 severity' + IgnoredCves: + type: array + items: + $ref: '#/components/schemas/CveSummary' + description: Specifies a list of ignored CVE. + Status: + $ref: '#/components/schemas/GetVulnerabilityScanStatusResponse' + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for GetVulnerabilityOverview + SoftwareItem: + title: SoftwareItem + type: object + properties: + SoftwareId: + type: string + SoftwareName: + type: string + SoftwareVersion: + type: string + CpeName: + type: string + MatchStatus: + type: string + GoodMatchCpeSummary: + $ref: '#/components/schemas/CpeSummary' + RelatedCpeSummaries: + type: array + items: + $ref: '#/components/schemas/CpeSummary' + VulnerabilityCount: + type: integer + format: int32 + x-nullable: false + description: SoftwareItem + CpeSummary: + title: CpeSummary + type: object + properties: + MatchStrength: + type: number + format: float + x-nullable: false + CpeName: + type: string + CveSummaries: + type: array + items: + $ref: '#/components/schemas/CveSummary' + description: CpeSummary + GetVulnerabilityScanStatusResponse: + title: GetVulnerabilityScanStatusResponse + required: + - Version + type: object + properties: + InventoryItemsInQueue: + type: integer + format: int32 + x-nullable: false + InventoryItemMatchStatusCounts: + $ref: '#/components/schemas/Dictionary_String_Int32_' + Message: + type: string + AllQuiet: + type: boolean + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for GetVulnerabilityStatus + Dictionary_String_Int32_: + title: 'Dictionary' + type: object + additionalProperties: + type: integer + format: int32 + x-nullable: false + description: 'Dictionary' + GetVulnerabilityResponse: + title: GetVulnerabilityResponse + required: + - Version + type: object + properties: + CveItems: + type: array + items: + $ref: '#/components/schemas/CveItem' + description: Specifies a list of CVEs. + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for GetVulnerability + CveItem: + title: CveItem + type: object + properties: + CveMatchStatus: + type: string + IsDeleted: + type: boolean + x-nullable: false + BaseMetricV2: + $ref: '#/components/schemas/BaseMetricV2Definition' + BaseMetricV3: + $ref: '#/components/schemas/BaseMetricV3Definition' + ReferenceData: + type: array + items: + $ref: '#/components/schemas/CveReferenceData' + Version: + type: integer + format: int32 + x-nullable: false + ChangeHistory: + type: array + items: + $ref: '#/components/schemas/CveHistory' + IgnoredUntilDateUtc: + type: string + format: date-time + x-nullable: false + IsIgnored: + type: boolean + x-nullable: false + CveId: + type: string + CpeName: + type: string + V3Severity: + type: string + V2Severity: + type: string + CveChangeDateUtc: + type: string + format: date-time + x-nullable: false + CveDescription: + type: string + NvdDetailsLink: + type: string + V2BaseScore: + type: number + format: float + x-nullable: false + V3BaseScore: + type: number + format: float + x-nullable: false + description: CveItem + BaseMetricV2Definition: + title: BaseMetricV2Definition + type: object + properties: + CvssV2: + $ref: '#/components/schemas/CvssVersionV2' + Severity: + type: string + ExploitabilityScore: + type: number + format: double + ImpactScore: + type: number + format: double + AcInsufficientInfo: + type: boolean + x-nullable: false + ObtainAllPrivilege: + type: boolean + x-nullable: false + ObtainUserPrivilege: + type: boolean + x-nullable: false + ObtainOtherPrivilege: + type: boolean + x-nullable: false + UserInteractionRequired: + type: boolean + x-nullable: false + description: BaseMetricV2Definition + CvssVersionV2: + title: CvssVersionV2 + type: object + properties: + Version: + type: string + VectorString: + type: string + AccessVector: + type: string + AccessComplexity: + type: string + Authentication: + type: string + ConfidentialityImpact: + type: string + IntegrityImpact: + type: string + AvailabilityImpact: + type: string + BaseScore: + type: number + format: double + Exploitability: + type: string + RemediationLevel: + type: string + ReportConfidence: + type: string + TemporalScore: + type: number + format: double + CollateralDamagePotential: + type: string + TargetDistribution: + type: string + ConfidentialityRequirement: + type: string + IntegrityRequirement: + type: string + EnvironmentalScore: + type: number + format: double + description: CvssVersionV2 + BaseMetricV3Definition: + title: BaseMetricV3Definition + type: object + properties: + CvssV3: + $ref: '#/components/schemas/CvssVersionV3x' + ExploitabilityScore: + type: number + format: double + ImpactScore: + type: number + format: double + description: BaseMetricV3Definition + CvssVersionV3x: + title: CvssVersionV3x + type: object + properties: + Version: + type: string + VectorString: + type: string + AttackVector: + type: string + AttackComplexity: + type: string + PrivilegesRequired: + type: string + UserInteraction: + type: string + Scope: + type: string + ConfidentialityImpact: + type: string + IntegrityImpact: + type: string + AvailabilityImpact: + type: string + BaseScore: + type: number + format: double + BaseSeverity: + type: string + ExploitCodeMaturity: + type: string + RemediationLevel: + type: string + ReportConfidence: + type: string + TemporalScore: + type: number + format: double + TemporalSeverity: + type: string + ConfidentialityRequirement: + type: string + IntegrityRequirement: + type: string + AvailabilityRequirement: + type: string + ModifiedAttackVector: + type: string + ModifiedAttackComplexity: + type: string + ModifiedPrivilegesRequired: + type: string + ModifiedUserInteraction: + type: string + ModifiedScope: + type: string + ModifiedConfidentialityImpact: + type: string + ModifiedIntegrityImpact: + type: string + ModifiedAvailabilityImpact: + type: string + EnvironmentalScore: + type: number + format: double + EnvironmentalSeverity: + type: string + description: CvssVersionV3x + CveReferenceData: + title: CveReferenceData + type: object + properties: + Url: + type: string + Name: + type: string + RefSource: + type: string + Tags: + type: array + items: + type: string + description: CveReferenceData + GetSoftwareVulnerabilityResponse: + title: GetSoftwareVulnerabilityResponse + required: + - Version + type: object + properties: + SoftwareItems: + type: array + items: + $ref: '#/components/schemas/SoftwareItem' + description: Specifies a list of recent CVE Changes. + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for GetSoftwareVulnerability + GetSoftwareVulnerabilityDetailResponse: + title: GetSoftwareVulnerabilityDetailResponse + required: + - Version + type: object + properties: + CvesList: + type: array + items: + $ref: '#/components/schemas/CveItem' + description: Specifies a list of recent CVE Changes. + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for GetSoftwareVulnerabilityDetail + GetDeviceVulnerabilityResponse: + title: GetDeviceVulnerabilityResponse + required: + - Version + type: object + properties: + VulnerableDevices: + type: array + items: + $ref: '#/components/schemas/VulnerableDevice' + description: Specifies a list of recent CVE Changes. + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for GetDeviceVulnerability + VulnerableDevice: + title: VulnerableDevice + type: object + properties: + DeviceName: + type: string + VulnerableSoftwareCount: + type: integer + format: int32 + x-nullable: false + VulnerabilityCount: + type: integer + format: int32 + x-nullable: false + AgentDeviceId: + type: string + description: VulnerableDevice + GetDeviceVulnerabilityDetailResponse: + title: GetDeviceVulnerabilityDetailResponse + required: + - Version + type: object + properties: + CvesList: + type: array + items: + $ref: '#/components/schemas/CveItem' + description: Specifies a list of recent CVE Changes. + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for GetDeviceVulnerabilityDetail + GetCvesForRelatedCpesResponse: + title: GetCvesForRelatedCpesResponse + required: + - Version + type: object + properties: + CvesList: + type: array + items: + $ref: '#/components/schemas/CveItem' + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for GetCvesForRelatedCpes + GetVulnerableDeviceDetailResponse: + title: GetVulnerableDeviceDetailResponse + required: + - Version + type: object + properties: + VulnerableDevices: + type: array + items: + $ref: '#/components/schemas/Agent' + description: Specifies a list of vulnerable devices. + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response object for GetDeviceVulnerabilityDetail + GetAllLog4NetConfigItemsResponse: + title: GetAllLog4NetConfigItemsResponse + type: object + properties: + LoggerConfigs: + type: array + items: + $ref: '#/components/schemas/Log4NetLoggerConfig' + description: The list of log4net logger configurations + description: Response for getting log4net configuration items + Log4NetLoggerConfig: + title: Log4NetLoggerConfig + type: object + properties: + Id: + type: string + LoggerName: + type: string + LogLevel: + type: string + description: Log4NetLoggerConfig + AddLog4NetConfigItemResponse: + title: AddLog4NetConfigItemResponse + type: object + properties: + Success: + type: boolean + x-nullable: false + LoggerConfig: + $ref: '#/components/schemas/Log4NetLoggerConfig' + description: AddLog4NetConfigItemResponse + UpdateLog4NetConfigItemResponse: + title: UpdateLog4NetConfigItemResponse + type: object + properties: + Success: + type: boolean + x-nullable: false + LoggerConfig: + $ref: '#/components/schemas/Log4NetLoggerConfig' + description: UpdateLog4NetConfigItemResponse + DeleteLog4NetConfigItemResponse: + title: DeleteLog4NetConfigItemResponse + type: object + properties: + Success: + type: boolean + x-nullable: false + description: DeleteLog4NetConfigItemResponse + GetLog4NetConfigItemsResponse: + title: GetLog4NetConfigItemsResponse + required: + - Version + type: object + properties: + LoggerConfigs: + type: array + items: + $ref: '#/components/schemas/Log4NetLoggerConfig' + description: The list of log4net logger configurations + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Response for getting log4net configuration items with pagination support + ResponseStatus: + title: ResponseStatus + type: object + properties: + ErrorCode: + type: string + Message: + type: string + StackTrace: + type: string + Errors: + type: array + items: + $ref: '#/components/schemas/ResponseError' + Meta: + $ref: '#/components/schemas/Dictionary_String_String_' + description: ResponseStatus + ResponseError: + title: ResponseError + type: object + properties: + ErrorCode: + type: string + FieldName: + type: string + Message: + type: string + Meta: + $ref: '#/components/schemas/Dictionary_String_String_' + description: ResponseError + ReportChangeDetail: + title: ReportChangeDetail + type: object + properties: + RuleTitle: + type: string + DidPass: + type: boolean + x-nullable: false + DoesPass: + type: boolean + x-nullable: false + ChangeReason: + type: string + description: Specifies the changes between two report runs on an individual rule basis. + List_ReportChangeDetail_: + title: List + type: array + items: + $ref: '#/components/schemas/ReportChangeDetail' + GetReportDataResponse: + title: GetReportDataResponse + required: + - Version + type: object + properties: + ReportId: + type: string + ReportData: + type: array + items: + $ref: '#/components/schemas/ReportRuleResult' + ReportName: + type: string + ReportSummary: + type: string + ReportScore: + type: number + format: double + x-nullable: false + RunDateUtc: + type: string + format: date-time + x-nullable: false + AgentDevice: + $ref: '#/components/schemas/AgentDevice' + DeviceName: + type: string + DisaggregationEnabled: + type: boolean + x-nullable: false + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: A returned list of report results for displaying in a grid. + ReportRuleResult: + title: ReportRuleResult + type: object + properties: + SectionTitle: + type: string + CategoryTitle: + type: string + SubCategoryTitle: + type: string + RuleNumber: + type: string + RuleTitle: + type: string + IsExcluded: + type: boolean + x-nullable: false + Score: + type: number + format: double + x-nullable: false + RulePasses: + type: boolean + x-nullable: false + ResultDetail: + type: string + RuleDescription: + type: string + TextDifferences: + type: array + items: + $ref: '#/components/schemas/TextDifference' + DiffPlainTextExpected: + type: string + DiffPlainTextActual: + type: string + SectionTextTitle: + type: string + SectionText: + type: string + SectionTextIcon: + type: string + CategoryTextTitle: + type: string + CategoryText: + type: string + CategoryTextIcon: + type: string + SubCategoryTextTitle: + type: string + SubCategoryText: + type: string + SubCategoryTextIcon: + type: string + ScoreType: + type: integer + format: int32 + x-nullable: false + Severity: + type: string + description: ReportRuleResult + GetAvailableReportsResponse: + title: GetAvailableReportsResponse + required: + - Version + type: object + properties: + ReportMetadata: + type: array + items: + $ref: '#/components/schemas/ReportMetadata' + description: Specifies the list of available reports. + Total: + type: integer + description: The total number of rows in the result set. + format: int64 + x-nullable: false + Returned: + type: integer + description: The number of rows returned. + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Describes the available reports for the specified devices. + DashboardLayout: + title: DashboardLayout + type: object + properties: + Id: + type: string + description: The identifier of the dashboard. + Name: + type: string + description: The name of the dashboard. + IsSystem: + type: boolean + description: Indicates whether the dashboard is system-defined. + x-nullable: false + Widgets: + type: array + items: + $ref: '#/components/schemas/DashboardWidgetSpec' + description: The widgets. + description: Details of a specific dashboard layout. + SaveUserDashboardResponse: + title: SaveUserDashboardResponse + type: object + properties: + Id: + type: string + description: The identifier of the dashboard. + description: Response to the SaveUserDashboard request. + GetUserSettingsResponse: + title: GetUserSettingsResponse + type: object + properties: + HasChangedPassword: + type: boolean + description: Has the current user changed their password from any system assigned one? + x-nullable: false + DashboardId: + type: string + description: The user's default dashboard identifier. + DashboardsAvailable: + type: array + items: + $ref: '#/components/schemas/DashboardSummary' + description: The custom and system dashboards available to the user. + ThemesAvailable: + type: array + items: + $ref: '#/components/schemas/ThemeSummary' + description: The system themes available to the user. + ThemeId: + type: string + description: The user's theme identifier. + TimeZoneId: + type: string + description: The user's time zone identifier. + DateFormats: + $ref: '#/components/schemas/UserDateFormats' + HideWelcomePopup: + type: boolean + description: Indicates whether the user has opted to skip the welcome wizard. + x-nullable: false + description: Response to the GetUserSettings request. + DashboardSummary: + title: DashboardSummary + type: object + properties: + Id: + type: string + description: The identifier of the dashboard. + Name: + type: string + description: The name of the dashboard. + IsSystem: + type: boolean + description: Indicates whether the dashboard is system-defined. + x-nullable: false + IsPublic: + type: boolean + description: Indicates whether the dashboard is visible to all users. + x-nullable: false + Order: + type: integer + description: The order in which the dashboard should be presented in a list. + format: int32 + x-nullable: false + description: Represents a dashboard for presentation in a list. + ThemeSummary: + title: ThemeSummary + type: object + properties: + Id: + type: string + description: The identifier of the theme. + Name: + type: string + description: The name of the theme. + Css: + type: array + items: + type: string + description: The theme-specific stylesheets required. + description: Details of a specific system theme. + GetDashboardWidgetsResponse: + title: GetDashboardWidgetsResponse + type: object + properties: + Widgets: + type: array + items: + $ref: '#/components/schemas/DashboardWidgetSpec' + description: The widgets. + description: Response to the GetDashboardWidgets request. + GetUserTwoFactorStatusResponse: + title: GetUserTwoFactorStatusResponse + required: + - Version + type: object + properties: + ChangePasswordByUtc: + type: string + format: date-time + SetupCode: + type: string + SetupImageUrl: + type: string + TwoFactorRequired: + type: boolean + x-nullable: false + TwoFactorRegistration: + type: string + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: Response to the GetUserTwoFactorStatus request. + AuthenticateResponse: + title: AuthenticateResponse + type: object + properties: + UserId: + type: string + SessionId: + type: string + UserName: + type: string + DisplayName: + type: string + ReferrerUrl: + type: string + BearerToken: + type: string + RefreshToken: + type: string + RefreshTokenExpiry: + type: string + format: date-time + ProfileUrl: + type: string + Roles: + type: array + items: + type: string + Permissions: + type: array + items: + type: string + AuthProvider: + type: string + ResponseStatus: + $ref: '#/components/schemas/ResponseStatus' + Meta: + $ref: '#/components/schemas/Dictionary_String_String_' + description: AuthenticateResponse + ResetUserPasswordResponse: + title: ResetUserPasswordResponse + required: + - Version + type: object + properties: + Password: + type: string + ChangeByDateUtc: + type: string + format: date-time + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: ResetUserPasswordResponse + PreviewResetUserPasswordResponse: + title: PreviewResetUserPasswordResponse + required: + - Version + type: object + properties: + Password: + type: string + PreviewToken: + type: string + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: PreviewResetUserPasswordResponse + TimeZoneDetail: + title: TimeZoneDetail + type: object + properties: + Id: + type: string + CountryCode: + type: string + description: A time zone name and id. + List_TimeZoneDetail_: + title: List + type: array + items: + $ref: '#/components/schemas/TimeZoneDetail' + List_GroupAlert_: + title: List + type: array + items: + $ref: '#/components/schemas/GroupAlert' + List_UserDetails_: + title: List + type: array + items: + $ref: '#/components/schemas/UserDetails' + GetUserRolesResponse: + title: GetUserRolesResponse + required: + - Version + type: object + properties: + Roles: + type: array + items: + $ref: '#/components/schemas/UserRole' + Total: + type: integer + format: int64 + x-nullable: false + Returned: + type: integer + format: int32 + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: GetUserRolesResponse + UserRole: + title: UserRole + required: + - Name + - DisplayName + - Permissions + - ReadOnly + type: object + properties: + Name: + type: string + description: Specifies the unique internal name for the role. + DisplayName: + type: string + description: Specifies the display name for the role. + ExternalName: + type: string + description: Specifies the role name in an external identity provider that corresponds to this role. + Permissions: + type: array + items: + type: string + description: Specifies the list of names of permissions associated with the role. + ReadOnly: + type: boolean + description: 'Specifies whether the role is read only, or can be edited.' + x-nullable: false + description: UserRole + AddUserRoleResponse: + title: AddUserRoleResponse + required: + - Version + type: object + properties: + Roles: + type: array + items: + $ref: '#/components/schemas/UserRole' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: AddUserRoleResponse + UpdateUserRoleResponse: + title: UpdateUserRoleResponse + required: + - Version + type: object + properties: + Roles: + type: array + items: + $ref: '#/components/schemas/UserRole' + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: UpdateUserRoleResponse + GetLicenseInfoResponse: + title: GetLicenseInfoResponse + required: + - Version + type: object + properties: + Description: + type: string + description: Gets or sets the description. + Details: + type: string + description: Gets or sets the license details. + LicensedDevices: + type: integer + description: Gets or sets the licensed devices. + format: int32 + x-nullable: false + LicensingType: + type: string + description: Gets or sets the type of the licensing. + Valid: + type: boolean + description: Gets or sets a value indicating whether the license info is valid. + x-nullable: false + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The response to a request to get an Organization's license info. + GetRolesAndPermissionsResponse: + title: GetRolesAndPermissionsResponse + required: + - Version + type: object + properties: + UserName: + type: string + OrganisationName: + type: string + Roles: + type: array + items: + type: string + Permissions: + type: array + items: + type: string + Flags: + type: array + items: + type: string + Features: + $ref: '#/components/schemas/Dictionary_String_String_' + HasValidLicense: + type: boolean + x-nullable: false + TimeZoneId: + type: string + TwoFactorEnabled: + type: boolean + x-nullable: false + TwoFactorRegistration: + type: string + Version: + type: integer + description: Specifies the response version. This indicates the service model version the response complies with. + format: int32 + x-nullable: false + description: The roles and permissions for the user. + GetAccessTokenResponse: + title: GetAccessTokenResponse + type: object + properties: + AccessToken: + type: string + Meta: + $ref: '#/components/schemas/Dictionary_String_String_' + ResponseStatus: + $ref: '#/components/schemas/ResponseStatus' + description: GetAccessTokenResponse + parameters: + Accept: + name: Accept + in: header + description: Accept Header + required: true + schema: + enum: + - application/json + type: string + securitySchemes: + Bearer: + type: apiKey + name: Authorization + in: header +tags: + - name: acknowledgeEvents + - name: addDeviceConfigProcessRules + - name: agentInventoryAgentsDetail + - name: agentInventoryGrouped + - name: agentProcesses + - name: agents + - name: agentServices + - name: agentSoftwareUpdateSchedules + - name: agentsRanked + - name: agentUpdates + - name: alertEvents + - name: auth + - name: availableReports + - name: baselineEvents + - name: cloudTemplate + - name: command + - name: commandParser + - name: configItem + - name: configItems + - name: credential + - name: credentials + - name: credentialsKeyedByType + - name: dashboard + - name: device + - name: deviceConfig + - name: deviceConfigTemplate + - name: deviceConfigTemplateNames + - name: deviceCredentials + - name: deviceDbCredentials + - name: deviceEvents + - name: deviceFilter + - name: deviceFilters + - name: deviceHostType + - name: deviceName + - name: deviceOnlineStatus + - name: devicePolicyTemplate + - name: devices + - name: deviceSettings + - name: discoverDevices + - name: discoveredDevices + - name: downloadAgentUpdate + - name: downloadFileHash + - name: downloadFileHashById + - name: event + - name: eventDeviceGroups + - name: events + - name: exportAgents + - name: exportUserNotifications + - name: getFileHashBinaries + - name: group + - name: groupAlerts + - name: groupMembers + - name: groupMemberships + - name: groupPolicy + - name: groupPolicyNames + - name: groups + - name: groupsTree + - name: inventory + - name: ipBlocking + - name: licenseInfo + - name: log4netConfigs + - name: misc + - name: openapi3.yaml + - name: organization + - name: permissions + - name: pipelineNodes + - name: plannedChangeInstances + - name: plannedChangeRule + - name: plannedChanges + - name: policyRecent + - name: policyTemplate + - name: policyTemplateAsFile + - name: policyTemplates + - name: policyTemplateVariables + - name: reParentDevices + - name: reportData + - name: reportDescription + - name: reportDifferences + - name: reportExecute + - name: reportRender + - name: reportRenderIsCached + - name: reportRenderStart + - name: reports + - name: resetAdminPassword + - name: resubmitEvents + - name: setCommentsForEvents + - name: startAgentTracker + - name: stats + - name: status + - name: submitAgentTaskResult + - name: submitAgentTaskResultData + - name: submitAgentTaskResultStream + - name: syncServiceConfigItems + - name: testAgentCredentials + - name: testAuditorConnection + - name: testFastConnection + - name: testFastCustomerConnection + - name: testServiceNowConnection + - name: testSmtpConnection + - name: testSyslogConnection + - name: timezones + - name: updatehubdetails + - name: uploadAgentUpdate + - name: uploadPolicyTemplate + - name: userDashboard + - name: userHasChangedPassword + - name: userRoles + - name: userRolesPermisions + - name: userRolesPermissions + - name: users + - name: userSettings + - name: vulnerabilityscanstatus \ No newline at end of file From 92de5d94526c8ec9747ea272537edb9a5af19c9c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 27 Apr 2026 22:03:29 +0000 Subject: [PATCH 09/23] fix(vale): auto-fix substitutions and removals --- docs/changetracker/8.1/integration/api/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changetracker/8.1/integration/api/overview.md b/docs/changetracker/8.1/integration/api/overview.md index 5e29c09ebd..6af6e2143f 100644 --- a/docs/changetracker/8.1/integration/api/overview.md +++ b/docs/changetracker/8.1/integration/api/overview.md @@ -70,4 +70,4 @@ $requestBody = @{ $result = Invoke-RestMethod -Method Post -ContentType application/json -Uri $uri -WebSession $myWebSession -Body $requestBody ``` -For more detailed information about each API endpoint, please refer to the specific API documentation pages linked above. +For more detailed information about each API endpoint, refer to the specific API documentation pages linked above. From fa453f879af0f6e7115220c0603b39d702090a8e Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:04:13 +0000 Subject: [PATCH 10/23] fix(vale): auto-fix rewrites (AI-assisted) --- docs/changetracker/8.1/integration/api/overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/changetracker/8.1/integration/api/overview.md b/docs/changetracker/8.1/integration/api/overview.md index 6af6e2143f..3a9a40bf07 100644 --- a/docs/changetracker/8.1/integration/api/overview.md +++ b/docs/changetracker/8.1/integration/api/overview.md @@ -22,9 +22,9 @@ The raw OpenAPI 3.0 spec (YAML) is also available for download or import into to The following commonly-used API endpoints are documented in detail: -- [Agents](/docs/changetracker/8.1/integration/api/agents.md) – Pull data on agent statuses, configurations, and group memberships using the agentsRanked endpoint. This API allows you to retrieve detailed information about all agents in your environment, including their group memberships and applied tracking templates. +- [Agents](/docs/changetracker/8.1/integration/api/agents.md) – Pull data on agent statuses, configurations, and group memberships using the agentsRanked endpoint. Use this API to retrieve detailed information about all agents in your environment, including their group memberships and applied tracking templates. -- [Register Agents](/docs/changetracker/8.1/integration/api/register-agents.md) – Normally used by agents to register with the Hub, but this API allows you to register proxied devices to be accessed through a proxy agent. +- [Register Agents](/docs/changetracker/8.1/integration/api/register-agents.md) – Normally used by agents to register with the Hub, but you can use this API to register proxied devices to be accessed through a proxy agent. - [Credentials](/docs/changetracker/8.1/integration/api/credentials.md) – Manage authentication credentials used by ChangeTracker to connect to various systems and services. This API provides endpoints for creating, retrieving, updating, and deleting credentials for different credential types including Shell, Database, FTP, Cloud, ESX, ITSM, and Splunk. From 7f32b5bec4b6d286a440170195732a593f4a78e4 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:05:41 +0000 Subject: [PATCH 11/23] fix(dale): auto-fix documentation issues (AI-assisted) Co-Authored-By: Claude Sonnet 4.6 --- docs/changetracker/8.1/integration/api/overview.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/changetracker/8.1/integration/api/overview.md b/docs/changetracker/8.1/integration/api/overview.md index 3a9a40bf07..1e7ed15a73 100644 --- a/docs/changetracker/8.1/integration/api/overview.md +++ b/docs/changetracker/8.1/integration/api/overview.md @@ -14,7 +14,7 @@ All API endpoints require authentication. See [Authentication](/docs/changetrack ## API Reference -For a complete interactive reference of all Hub API endpoints, see the [ChangeTracker Hub API Reference](/docs/changetracker/8_1/integration/api/api-reference). The reference is generated directly from the OpenAPI 3.0 spec served by the Hub and covers all available endpoints with request/response schemas. +For a complete interactive reference of all Hub API endpoints, see the [ChangeTracker Hub API Reference](/docs/changetracker/8_1/integration/api/api-reference). The Hub generates this reference directly from its OpenAPI 3.0 spec, covering all available endpoints with request/response schemas. The raw OpenAPI 3.0 spec (YAML) is also available for download or import into tools like Postman and Insomnia. @@ -44,7 +44,7 @@ When working with the ChangeTracker API, consider the following best practices: ## Example Usage -Below is a simple example of how to use the API with PowerShell: +The following example shows how to use the API with PowerShell: ```powershell # Set up a session variable for the Admin user @@ -70,4 +70,4 @@ $requestBody = @{ $result = Invoke-RestMethod -Method Post -ContentType application/json -Uri $uri -WebSession $myWebSession -Body $requestBody ``` -For more detailed information about each API endpoint, refer to the specific API documentation pages linked above. +For more information about each endpoint, refer to the specific API documentation pages in the [Available Endpoints](#available-endpoints) section. From 1dba920d2c10952202b329db14f367a3e9c3a097 Mon Sep 17 00:00:00 2001 From: Jean Perez Date: Mon, 27 Apr 2026 18:11:20 -0400 Subject: [PATCH 12/23] fix(changetracker): correct API spec title and version to Hub 8.1 --- static/openapi/changetracker-hub-8.1.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/openapi/changetracker-hub-8.1.yaml b/static/openapi/changetracker-hub-8.1.yaml index 1d8380417e..5734bcbee5 100644 --- a/static/openapi/changetracker-hub-8.1.yaml +++ b/static/openapi/changetracker-hub-8.1.yaml @@ -1,7 +1,7 @@ openapi: 3.0.1 info: - title: ChangeTracker - version: '1.0' + title: ChangeTracker Hub + version: '8.1' servers: - url: https://localhost:5001/api paths: From 004409f01145e488ee68a86daabb6d6b021d73dc Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:12:47 +0000 Subject: [PATCH 13/23] fix(vale): auto-fix rewrites (AI-assisted) --- docs/changetracker/8.1/integration/api/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changetracker/8.1/integration/api/overview.md b/docs/changetracker/8.1/integration/api/overview.md index 1e7ed15a73..a3506ecc49 100644 --- a/docs/changetracker/8.1/integration/api/overview.md +++ b/docs/changetracker/8.1/integration/api/overview.md @@ -70,4 +70,4 @@ $requestBody = @{ $result = Invoke-RestMethod -Method Post -ContentType application/json -Uri $uri -WebSession $myWebSession -Body $requestBody ``` -For more information about each endpoint, refer to the specific API documentation pages in the [Available Endpoints](#available-endpoints) section. +Each endpoint's request parameters, authentication requirements, and usage examples are covered in the [Available Endpoints](#available-endpoints) section. From 809af37fe78f49084328a64b3d9f221554d196d2 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:14:23 +0000 Subject: [PATCH 14/23] fix(dale): auto-fix documentation issues (AI-assisted) --- docs/changetracker/8.1/integration/api/overview.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/changetracker/8.1/integration/api/overview.md b/docs/changetracker/8.1/integration/api/overview.md index a3506ecc49..74514f78ae 100644 --- a/docs/changetracker/8.1/integration/api/overview.md +++ b/docs/changetracker/8.1/integration/api/overview.md @@ -6,7 +6,7 @@ sidebar_position: 20 # API -Netwrix Change Tracker provides a comprehensive REST API that allows customers to integrate with the platform programmatically. This is particularly useful for customers who run multiple instances of Netwrix Change Tracker in multiple regions, as they can use the API to pull data from each instance and build global reports containing data from all instances. +Netwrix Change Tracker provides a comprehensive REST API that allows customers to integrate with the platform programmatically. This is particularly useful for customers who run multiple instances of Netwrix Change Tracker in multiple regions, as they can use the API to pull data from each instance and build global reports across all instances. ## Authentication @@ -20,17 +20,17 @@ The raw OpenAPI 3.0 spec (YAML) is also available for download or import into to ## Available Endpoints -The following commonly-used API endpoints are documented in detail: +This section documents the following commonly-used API endpoints in detail: - [Agents](/docs/changetracker/8.1/integration/api/agents.md) – Pull data on agent statuses, configurations, and group memberships using the agentsRanked endpoint. Use this API to retrieve detailed information about all agents in your environment, including their group memberships and applied tracking templates. -- [Register Agents](/docs/changetracker/8.1/integration/api/register-agents.md) – Normally used by agents to register with the Hub, but you can use this API to register proxied devices to be accessed through a proxy agent. +- [Register Agents](/docs/changetracker/8.1/integration/api/register-agents.md) – Agents normally use this endpoint to register with the Hub, but you can also use this API to register proxied devices through a proxy agent. -- [Credentials](/docs/changetracker/8.1/integration/api/credentials.md) – Manage authentication credentials used by ChangeTracker to connect to various systems and services. This API provides endpoints for creating, retrieving, updating, and deleting credentials for different credential types including Shell, Database, FTP, Cloud, ESX, ITSM, and Splunk. +- [Credentials](/docs/changetracker/8.1/integration/api/credentials.md) – Manage authentication credentials that ChangeTracker uses to connect to various systems and services. This API provides endpoints for creating, retrieving, updating, and deleting credentials for different credential types including Shell, Database, FTP, Cloud, ESX, ITSM, and Splunk. ## API Usage Best Practices -When working with the ChangeTracker API, consider the following best practices: +Follow these best practices when using the ChangeTracker API: 1. **Rate Limiting**: Implement appropriate rate limiting in your applications to avoid overwhelming the API. @@ -70,4 +70,4 @@ $requestBody = @{ $result = Invoke-RestMethod -Method Post -ContentType application/json -Uri $uri -WebSession $myWebSession -Body $requestBody ``` -Each endpoint's request parameters, authentication requirements, and usage examples are covered in the [Available Endpoints](#available-endpoints) section. +The [Available Endpoints](#available-endpoints) section covers each endpoint's request parameters, authentication requirements, and usage examples. From 65142e7ee968eeaf27c5d9791b4fb5faff17e9a8 Mon Sep 17 00:00:00 2001 From: Jean Perez Date: Mon, 27 Apr 2026 18:26:29 -0400 Subject: [PATCH 15/23] fix(changetracker): revert unintended edits to pre-existing overview content --- .../8.1/integration/api/overview.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/changetracker/8.1/integration/api/overview.md b/docs/changetracker/8.1/integration/api/overview.md index 74514f78ae..0cd936d944 100644 --- a/docs/changetracker/8.1/integration/api/overview.md +++ b/docs/changetracker/8.1/integration/api/overview.md @@ -6,7 +6,7 @@ sidebar_position: 20 # API -Netwrix Change Tracker provides a comprehensive REST API that allows customers to integrate with the platform programmatically. This is particularly useful for customers who run multiple instances of Netwrix Change Tracker in multiple regions, as they can use the API to pull data from each instance and build global reports across all instances. +Netwrix Change Tracker provides a comprehensive REST API that allows customers to integrate with the platform programmatically. This is particularly useful for customers who run multiple instances of Netwrix Change Tracker in multiple regions, as they can use the API to pull data from each instance and build global reports containing data from all instances. ## Authentication @@ -16,21 +16,21 @@ All API endpoints require authentication. See [Authentication](/docs/changetrack For a complete interactive reference of all Hub API endpoints, see the [ChangeTracker Hub API Reference](/docs/changetracker/8_1/integration/api/api-reference). The Hub generates this reference directly from its OpenAPI 3.0 spec, covering all available endpoints with request/response schemas. -The raw OpenAPI 3.0 spec (YAML) is also available for download or import into tools like Postman and Insomnia. +The raw OpenAPI 3.0 spec (YAML) is also available for download. ## Available Endpoints -This section documents the following commonly-used API endpoints in detail: +The following API endpoints are available in Netwrix Change Tracker: -- [Agents](/docs/changetracker/8.1/integration/api/agents.md) – Pull data on agent statuses, configurations, and group memberships using the agentsRanked endpoint. Use this API to retrieve detailed information about all agents in your environment, including their group memberships and applied tracking templates. +- [Agents](/docs/changetracker/8.1/integration/api/agents.md) – Pull data on agent statuses, configurations, and group memberships using the agentsRanked endpoint. This API allows you to retrieve detailed information about all agents in your environment, including their group memberships and applied tracking templates. -- [Register Agents](/docs/changetracker/8.1/integration/api/register-agents.md) – Agents normally use this endpoint to register with the Hub, but you can also use this API to register proxied devices through a proxy agent. +- [Register Agents](/docs/changetracker/8.1/integration/api/register-agents.md) – Normally used by agents to register with the Hub, but this API allows you to register proxied devices to be accessed through a proxy agent. -- [Credentials](/docs/changetracker/8.1/integration/api/credentials.md) – Manage authentication credentials that ChangeTracker uses to connect to various systems and services. This API provides endpoints for creating, retrieving, updating, and deleting credentials for different credential types including Shell, Database, FTP, Cloud, ESX, ITSM, and Splunk. +- [Credentials](/docs/changetracker/8.1/integration/api/credentials.md) – Manage authentication credentials used by ChangeTracker to connect to various systems and services. This API provides endpoints for creating, retrieving, updating, and deleting credentials for different credential types including Shell, Database, FTP, Cloud, ESX, ITSM, and Splunk. ## API Usage Best Practices -Follow these best practices when using the ChangeTracker API: +When working with the ChangeTracker API, consider the following best practices: 1. **Rate Limiting**: Implement appropriate rate limiting in your applications to avoid overwhelming the API. @@ -44,7 +44,7 @@ Follow these best practices when using the ChangeTracker API: ## Example Usage -The following example shows how to use the API with PowerShell: +Below is a simple example of how to use the API with PowerShell: ```powershell # Set up a session variable for the Admin user @@ -70,4 +70,4 @@ $requestBody = @{ $result = Invoke-RestMethod -Method Post -ContentType application/json -Uri $uri -WebSession $myWebSession -Body $requestBody ``` -The [Available Endpoints](#available-endpoints) section covers each endpoint's request parameters, authentication requirements, and usage examples. +For more detailed information about each API endpoint, please refer to the specific API documentation pages linked above. From ae6a1d4aa4ff7440aa225b7beb3d57fc87390f2a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 27 Apr 2026 22:27:31 +0000 Subject: [PATCH 16/23] fix(vale): auto-fix substitutions and removals --- docs/changetracker/8.1/integration/api/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changetracker/8.1/integration/api/overview.md b/docs/changetracker/8.1/integration/api/overview.md index 0cd936d944..45a730f645 100644 --- a/docs/changetracker/8.1/integration/api/overview.md +++ b/docs/changetracker/8.1/integration/api/overview.md @@ -70,4 +70,4 @@ $requestBody = @{ $result = Invoke-RestMethod -Method Post -ContentType application/json -Uri $uri -WebSession $myWebSession -Body $requestBody ``` -For more detailed information about each API endpoint, please refer to the specific API documentation pages linked above. +For more detailed information about each API endpoint, refer to the specific API documentation pages linked above. From 55c6c144072607084d7039ec2546180ea6b1867d Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:28:08 +0000 Subject: [PATCH 17/23] fix(vale): auto-fix rewrites (AI-assisted) --- docs/changetracker/8.1/integration/api/overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/changetracker/8.1/integration/api/overview.md b/docs/changetracker/8.1/integration/api/overview.md index 45a730f645..a179b89c0e 100644 --- a/docs/changetracker/8.1/integration/api/overview.md +++ b/docs/changetracker/8.1/integration/api/overview.md @@ -22,9 +22,9 @@ The raw OpenAPI 3.0 spec (YAML) is also available for download. The following API endpoints are available in Netwrix Change Tracker: -- [Agents](/docs/changetracker/8.1/integration/api/agents.md) – Pull data on agent statuses, configurations, and group memberships using the agentsRanked endpoint. This API allows you to retrieve detailed information about all agents in your environment, including their group memberships and applied tracking templates. +- [Agents](/docs/changetracker/8.1/integration/api/agents.md) – Pull data on agent statuses, configurations, and group memberships using the agentsRanked endpoint. Use this API to retrieve detailed information about all agents in your environment, including their group memberships and applied tracking templates. -- [Register Agents](/docs/changetracker/8.1/integration/api/register-agents.md) – Normally used by agents to register with the Hub, but this API allows you to register proxied devices to be accessed through a proxy agent. +- [Register Agents](/docs/changetracker/8.1/integration/api/register-agents.md) – Normally used by agents to register with the Hub, but you can also use this API to register proxied devices to be accessed through a proxy agent. - [Credentials](/docs/changetracker/8.1/integration/api/credentials.md) – Manage authentication credentials used by ChangeTracker to connect to various systems and services. This API provides endpoints for creating, retrieving, updating, and deleting credentials for different credential types including Shell, Database, FTP, Cloud, ESX, ITSM, and Splunk. From a65b37cd700f6855f523bac532ffef4148a63cca Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:29:40 +0000 Subject: [PATCH 18/23] fix(dale): auto-fix documentation issues (AI-assisted) --- docs/changetracker/8.1/integration/api/overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/changetracker/8.1/integration/api/overview.md b/docs/changetracker/8.1/integration/api/overview.md index a179b89c0e..4533a00615 100644 --- a/docs/changetracker/8.1/integration/api/overview.md +++ b/docs/changetracker/8.1/integration/api/overview.md @@ -44,7 +44,7 @@ When working with the ChangeTracker API, consider the following best practices: ## Example Usage -Below is a simple example of how to use the API with PowerShell: +The following example shows how to use the API with PowerShell: ```powershell # Set up a session variable for the Admin user @@ -70,4 +70,4 @@ $requestBody = @{ $result = Invoke-RestMethod -Method Post -ContentType application/json -Uri $uri -WebSession $myWebSession -Body $requestBody ``` -For more detailed information about each API endpoint, refer to the specific API documentation pages linked above. +For more information about each API endpoint, refer to the API documentation pages listed in the Available Endpoints section. From 77d1d0aea71d7cc9446c71b45a71d3ea9c35158e Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:34:27 +0000 Subject: [PATCH 19/23] docs(changetracker): fix API reference link and Hub terminology in overview MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix broken link destination: /api-reference → /reference - Fix product name in link text: ChangeTracker Hub → Netwrix Change Tracker Hub - Introduce Netwrix Change Tracker Hub with definition on first mention - Add download link for the raw OpenAPI 3.0 spec Co-Authored-By: Claude --- docs/changetracker/8.1/integration/api/overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/changetracker/8.1/integration/api/overview.md b/docs/changetracker/8.1/integration/api/overview.md index 4533a00615..efb18bde51 100644 --- a/docs/changetracker/8.1/integration/api/overview.md +++ b/docs/changetracker/8.1/integration/api/overview.md @@ -14,9 +14,9 @@ All API endpoints require authentication. See [Authentication](/docs/changetrack ## API Reference -For a complete interactive reference of all Hub API endpoints, see the [ChangeTracker Hub API Reference](/docs/changetracker/8_1/integration/api/api-reference). The Hub generates this reference directly from its OpenAPI 3.0 spec, covering all available endpoints with request/response schemas. +For a complete interactive reference of all Netwrix Change Tracker Hub API endpoints, see the [Netwrix Change Tracker Hub API Reference](/docs/changetracker/8_1/integration/api/reference). The Netwrix Change Tracker Hub (the central management server) generates this reference directly from its OpenAPI 3.0 spec, covering all available endpoints with request/response schemas. -The raw OpenAPI 3.0 spec (YAML) is also available for download. +The raw OpenAPI 3.0 spec (YAML) is also [available for download](/openapi/changetracker-hub-8.1.yaml). ## Available Endpoints From 024be9d6b9bce57cb94f26ac2324795ada176c0e Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:35:47 +0000 Subject: [PATCH 20/23] fix(vale): auto-fix rewrites (AI-assisted) --- docs/changetracker/8.1/integration/api/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changetracker/8.1/integration/api/overview.md b/docs/changetracker/8.1/integration/api/overview.md index efb18bde51..2195b65972 100644 --- a/docs/changetracker/8.1/integration/api/overview.md +++ b/docs/changetracker/8.1/integration/api/overview.md @@ -70,4 +70,4 @@ $requestBody = @{ $result = Invoke-RestMethod -Method Post -ContentType application/json -Uri $uri -WebSession $myWebSession -Body $requestBody ``` -For more information about each API endpoint, refer to the API documentation pages listed in the Available Endpoints section. +See the [Available Endpoints](#available-endpoints) section for documentation pages covering each API endpoint. From fde5121a765aae208a213602356d7617735cf536 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 22:38:06 +0000 Subject: [PATCH 21/23] fix(dale): auto-fix documentation issues (AI-assisted) Co-Authored-By: Claude Sonnet 4.6 --- docs/changetracker/8.1/integration/api/overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/changetracker/8.1/integration/api/overview.md b/docs/changetracker/8.1/integration/api/overview.md index 2195b65972..fa70d44917 100644 --- a/docs/changetracker/8.1/integration/api/overview.md +++ b/docs/changetracker/8.1/integration/api/overview.md @@ -24,9 +24,9 @@ The following API endpoints are available in Netwrix Change Tracker: - [Agents](/docs/changetracker/8.1/integration/api/agents.md) – Pull data on agent statuses, configurations, and group memberships using the agentsRanked endpoint. Use this API to retrieve detailed information about all agents in your environment, including their group memberships and applied tracking templates. -- [Register Agents](/docs/changetracker/8.1/integration/api/register-agents.md) – Normally used by agents to register with the Hub, but you can also use this API to register proxied devices to be accessed through a proxy agent. +- [Register Agents](/docs/changetracker/8.1/integration/api/register-agents.md) – Agents normally use this API to register with the Hub, but you can also use it to register proxied devices accessed through a proxy agent. -- [Credentials](/docs/changetracker/8.1/integration/api/credentials.md) – Manage authentication credentials used by ChangeTracker to connect to various systems and services. This API provides endpoints for creating, retrieving, updating, and deleting credentials for different credential types including Shell, Database, FTP, Cloud, ESX, ITSM, and Splunk. +- [Credentials](/docs/changetracker/8.1/integration/api/credentials.md) – Manage authentication credentials that ChangeTracker uses to connect to various systems and services. This API provides endpoints for creating, retrieving, updating, and deleting credentials for different credential types including Shell, Database, FTP, Cloud, ESX, ITSM, and Splunk. ## API Usage Best Practices From 4559d8f10ab58c1ea9b09b26d0ee91d7ec2c3008 Mon Sep 17 00:00:00 2001 From: bturlea <88200662+bturlea@users.noreply.github.com> Date: Tue, 28 Apr 2026 10:35:59 +0300 Subject: [PATCH 22/23] Delete docs/endpointprotector/admin/API Logs/installation.md Delete Installation document --- .../admin/API Logs/installation.md | 379 ------------------ 1 file changed, 379 deletions(-) delete mode 100644 docs/endpointprotector/admin/API Logs/installation.md diff --git a/docs/endpointprotector/admin/API Logs/installation.md b/docs/endpointprotector/admin/API Logs/installation.md deleted file mode 100644 index cc01d129ba..0000000000 --- a/docs/endpointprotector/admin/API Logs/installation.md +++ /dev/null @@ -1,379 +0,0 @@ ---- -title: "Logs REST API Installation" -description: "Full installation and configuration reference for the EPP Logs REST API on nginx" -sidebar_position: 30 ---- - -# Logs REST API Installation - -This page covers the installation and configuration of the EPP Logs REST API on an Endpoint Protector server running nginx. - -## Prerequisites - -- Endpoint Protector server with nginx and PHP-FPM running -- PHP 5.6+ with the following extensions: `mysqli`, `json`, `session` -- Propel ORM configured and operational (part of the standard EPP installation) -- MySQL database with the EPP schema loaded -- SSH/root access to the EPP server - -## File deployment - -The API files are located under `sieratool/webservice/api/`. On a standard EPP server, the application root is `/var/www/EPPServer/`. - -**Step 1 –** Ensure the following directory structure exists on the server: - -``` -/var/www/EPPServer/sieratool/webservice/api/ -├── .htaccess -├── index.php -├── lib/ -│ ├── ApiAuth.php -│ ├── ApiResponse.php -│ ├── ApiRouter.php -│ └── BaseController.php -└── controllers/ - ├── AdOperationController.php - ├── AlertController.php - ├── AuthLogController.php - ├── ContentFilteringController.php - ├── DataRestController.php - ├── DeviceControlController.php - ├── DiscoveryController.php - ├── EasyLockController.php - ├── EventLogController.php - ├── ExportLogController.php - ├── MobileManagementController.php - ├── ScimLogController.php - ├── SiemLogController.php - ├── SystemAlertController.php - └── TransferLimitController.php -``` - -**Step 2 –** Set file ownership and permissions: - -```bash -chown -R www-data:www-data /var/www/EPPServer/sieratool/webservice/api/ -chmod -R 750 /var/www/EPPServer/sieratool/webservice/api/ -``` - -## Nginx configuration - -EPP uses nginx as its web server with FastCGI (PHP-FPM) for PHP processing. The main nginx site configuration is at: - -``` -/etc/nginx/sites-enabled/epp.nginx.conf -``` - -The configuration template is maintained at: - -``` -/var/www/EPPServer/appliance/resources/templates/nginx/sites-enabled/epp.nginx.conf.template -``` - -### Add the API location block - -Add the following location block to the nginx server configuration. Place it **before** the generic PHP location block (`location ~ "^(.+\.php)($|/)"`) and after the existing `/ws` blocks. - -**Step 1 –** Open the nginx config: - -```bash -vi /etc/nginx/sites-enabled/epp.nginx.conf -``` - -**Step 2 –** Add the following block after the SCIM API block (`location ^~ /scim/`) and before the Kerberos comment block: - -```nginx -# EPP Logs REST API -location ^~ /api/logs/ { - alias /var/www/EPPServer/sieratool/webservice/api/; - - location ~ ^/api/logs/(.*)$ { - include fastcgi_epp_params; - fastcgi_param SCRIPT_FILENAME /var/www/EPPServer/sieratool/webservice/api/index.php; - fastcgi_param SCRIPT_NAME /api/logs/index.php; - fastcgi_param REQUEST_URI $request_uri; - fastcgi_param PATH_INFO $uri; - - fastcgi_buffer_size 64k; - fastcgi_buffers 8 64k; - fastcgi_busy_buffers_size 128k; - } -} -``` - -### Complete configuration context - -The following shows where the API block fits relative to existing blocks: - -```nginx -# Existing webservice blocks -location /ws { - if ($ssl_client_verify != SUCCESS) { return 401; } - alias /var/www/EPPServer/sieratool/webservice; -} - -location ~ ^/ws/(.+\.php)$ { - if ($ssl_client_verify != SUCCESS) { return 401; } - alias /var/www/EPPServer/sieratool/webservice/$1; - include fastcgi_epp_params; -} - -# SCIM API (existing) -location ^~ /scim/ { - include fastcgi_epp_params; - fastcgi_param SCRIPT_FILENAME /var/www/EPPServer/sieratool/scim/public/index.php; -} - -# EPP Logs REST API — ADD HERE -location ^~ /api/logs/ { - alias /var/www/EPPServer/sieratool/webservice/api/; - - location ~ ^/api/logs/(.*)$ { - include fastcgi_epp_params; - fastcgi_param SCRIPT_FILENAME /var/www/EPPServer/sieratool/webservice/api/index.php; - fastcgi_param SCRIPT_NAME /api/logs/index.php; - fastcgi_param REQUEST_URI $request_uri; - fastcgi_param PATH_INFO $uri; - fastcgi_buffer_size 64k; - fastcgi_buffers 8 64k; - fastcgi_busy_buffers_size 128k; - } -} - -# Generic PHP handler — MUST come after the API block -location ~ "^(.+\.php)($|/)" { - fastcgi_split_path_info ^(.+\.php)(.*)$; - include fastcgi_epp_params; -} -``` - -### Update the nginx template (for persistence) - -The nginx config is regenerated from templates during certain EPP operations. To ensure the API configuration persists, also add the same location block to the template files: - -```bash -vi /var/www/EPPServer/appliance/resources/templates/nginx/sites-enabled/epp.nginx.conf.template -vi /var/www/EPPServer/appliance/resources/templates/nginx/sites-enabled/epp.nginx.conf.crc.template -``` - -### Test and reload nginx - -```bash -nginx -t -/etc/init.d/nginx reload -``` - -Expected output from `nginx -t`: - -``` -nginx: the configuration file /etc/nginx/nginx.conf syntax is ok -nginx: configuration file /etc/nginx/nginx.conf test is successful -``` - -## Database setup - -**Step 1 –** Create the `api_key` table: - -```bash -mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp < /dev/stdin <<'SQL' -CREATE TABLE IF NOT EXISTS `api_key` ( - `id` INTEGER NOT NULL AUTO_INCREMENT, - `user_id` INTEGER NOT NULL, - `api_key` VARCHAR(128) NOT NULL, - `name` VARCHAR(256), - `is_active` INTEGER NOT NULL DEFAULT 1, - `created_at` DATETIME, - `last_used_at` DATETIME, - PRIMARY KEY (`id`), - UNIQUE KEY `api_key_unique` (`api_key`), - INDEX `api_key_user_id` (`user_id`), - CONSTRAINT `api_key_FK_1` - FOREIGN KEY (`user_id`) - REFERENCES `sf_guard_user` (`id`) - ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -SQL -``` - -:::note -The database name may vary. Check it in `/var/www/EPPServer/sieratool/config/databases.yml`. -::: - -## Authentication setup - -**Step 1 –** Generate a random API key: - -```bash -API_KEY=$(openssl rand -hex 32) -echo "Generated API key: ${API_KEY}" -``` - -**Step 2 –** Find the user ID for the admin user: - -```bash -mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ - "SELECT id, username FROM sf_guard_user WHERE is_active = 1;" -``` - -**Step 3 –** Insert the API key (replace `USER_ID` with the actual user ID): - -```bash -mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ - "INSERT INTO api_key (user_id, api_key, name, is_active, created_at) - VALUES (USER_ID, '${API_KEY}', 'REST API Key', 1, NOW());" -``` - -**Manage API keys** - -```bash -# List all API keys -mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ - "SELECT ak.id, gu.username, ak.name, ak.api_key, ak.is_active, ak.created_at - FROM api_key ak JOIN sf_guard_user gu ON ak.user_id = gu.id;" - -# Deactivate a key -mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ - "UPDATE api_key SET is_active = 0 WHERE id = KEY_ID;" - -# Delete a key -mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ - "DELETE FROM api_key WHERE id = KEY_ID;" -``` - -## Verification - -**Step 1 –** Test nginx is serving the API: - -```bash -curl -s -k \ - -H "X-Api-Key: YOUR_API_KEY" \ - https://localhost/api/logs/endpoints | python -m json.tool -``` - -Expected response: - -```json -{ - "success": true, - "data": { - "api_name": "EPP Logs REST API", - "version": "1.0", - "endpoints": [ - { "method": "GET", "path": "/api/logs/endpoints" }, - { "method": "GET", "path": "/api/logs/event-logs" } - ] - } -} -``` - -**Step 2 –** Test authentication failure (no key): - -```bash -curl -s -k https://localhost/api/logs/endpoints | python -m json.tool -``` - -Expected response: - -```json -{ - "success": false, - "error": { - "code": 401, - "message": "Missing API key. Provide via X-Api-Key header or api_key query parameter." - } -} -``` - -**Step 3 –** Test a data endpoint: - -```bash -curl -s -k \ - -H "X-Api-Key: YOUR_API_KEY" \ - "https://localhost/api/logs/event-logs?per_page=5" | python -m json.tool -``` - -## Troubleshooting - -**API returns 404** - -The nginx location block is missing or in the wrong position. - -1. Verify the block is present: `grep -n "api/logs" /etc/nginx/sites-enabled/epp.nginx.conf` -2. Ensure the block is placed before the generic PHP handler. -3. Test and reload: `nginx -t && /etc/init.d/nginx reload` - -**API returns 502 Bad Gateway** - -PHP-FPM is not running or not listening on the expected socket. - -1. Check PHP-FPM status: `service php5.6-fpm status` -2. Verify FastCGI is listening: `netstat -tlnp | grep 9000` -3. Check PHP-FPM error log: `tail -50 /var/log/php-fpm.log` - -**API returns 500 with database errors** - -Propel or database connection issue. - -1. Verify database credentials in `/var/www/EPPServer/sieratool/config/databases.yml` -2. Test connectivity: `mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e "SELECT 1;"` -3. Check PHP error log: `tail -100 /var/log/nginx/error.log` - -**API returns 401 for a valid API key** - -The `api_key` table does not exist or the key is deactivated. - -1. Verify the table exists: `mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e "SHOW TABLES LIKE 'api_key';"` -2. If missing, create it using the SQL in the [Database setup](#database-setup) section. -3. Verify the key is active: check `is_active = 1` and the linked user is active in `sf_guard_user`. - -**Changes lost after EPP update** - -The nginx config was regenerated from templates without the API block. - -1. Re-add the location block to `/etc/nginx/sites-enabled/epp.nginx.conf`. -2. Add the block to both template files (see [Update the nginx template](#update-the-nginx-template-for-persistence)). -3. Reload nginx: `/etc/init.d/nginx reload` - -**Slow responses on large tables** - -1. Use date filtering: `?start_date=2025-01-01&end_date=2025-01-31` -2. Reduce page size: `?per_page=20` -3. Use specific filters: `?machine_id=42&event_id=5` -4. Verify MySQL indexes: `SHOW INDEX FROM cf_log;` - -**FastCGI buffer warnings in nginx error log** - -Increase buffer sizes in the API location block: - -```nginx -fastcgi_buffer_size 128k; -fastcgi_buffers 16 128k; -fastcgi_busy_buffers_size 256k; -``` - -## Security considerations - -- **Remove any dev API keys** before deploying to production. Search for `TODO: REMOVE` in `lib/ApiAuth.php` to locate all lines that need to be removed. -- **HTTPS only** — The API is served over HTTPS via the existing EPP SSL configuration. Never expose it over plain HTTP. -- **API key rotation** — Regularly rotate API keys by creating new keys and deactivating old ones. -- **Network access** — Consider restricting API access by source IP using nginx `allow`/`deny` directives: - -```nginx -location ^~ /api/logs/ { - allow 10.0.0.0/8; - allow 192.168.0.0/16; - deny all; - # ... rest of config -} -``` - -- **Logging** — To enable access logging for the API, add an `access_log` directive: - -```nginx -location ^~ /api/logs/ { - access_log /var/log/nginx/api_access.log; - # ... rest of config -} -``` - -- **Read-only** — The API supports only GET requests. No data modification is possible through the API. From c80b814885b07e6ee0d64b644d75c6f30ec4551f Mon Sep 17 00:00:00 2001 From: bturlea <88200662+bturlea@users.noreply.github.com> Date: Tue, 28 Apr 2026 10:40:23 +0300 Subject: [PATCH 23/23] Delete docs/endpointprotector/admin/API Logs/logsrestapisetup.md delete Setup file --- .../admin/API Logs/logsrestapisetup.md | 177 ------------------ 1 file changed, 177 deletions(-) delete mode 100644 docs/endpointprotector/admin/API Logs/logsrestapisetup.md diff --git a/docs/endpointprotector/admin/API Logs/logsrestapisetup.md b/docs/endpointprotector/admin/API Logs/logsrestapisetup.md deleted file mode 100644 index 3a45dea80a..0000000000 --- a/docs/endpointprotector/admin/API Logs/logsrestapisetup.md +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: "Logs REST API Setup" -description: "Enable the Logs REST API and create API keys on the Endpoint Protector server" -sidebar_position: 20 ---- - -# Logs REST API Setup - -## Overview - -This page is for Endpoint Protector administrators who need to: - -- Make the Logs REST API reachable at `https:///api/logs/` -- Create and manage API keys for external integrations - -:::warning -This is an advanced procedure. It requires SSH/root access to the Endpoint Protector server and involves editing server configuration and running SQL commands. - -If you are not comfortable with these steps, contact Netwrix Support for assistance. -::: - -## Prerequisites - -- Endpoint Protector server with nginx and PHP-FPM running -- SSH/root access -- A working database connection to the Endpoint Protector MySQL database - -## Step 1 — Enable nginx routing for /api/logs/ - -**Step 1 –** SSH into the Endpoint Protector server. - -**Step 2 –** Open the nginx config: - -```bash -vi /etc/nginx/sites-enabled/epp.nginx.conf -``` - -**Step 3 –** Add the Logs REST API location block before the generic PHP handler and after existing web service blocks: - -```nginx -# EPP Logs REST API -location ^~ /api/logs/ { - alias /var/www/EPPServer/sieratool/webservice/api/; - - location ~ ^/api/logs/(.*)$ { - include fastcgi_epp_params; - fastcgi_param SCRIPT_FILENAME /var/www/EPPServer/sieratool/webservice/api/index.php; - fastcgi_param SCRIPT_NAME /api/logs/index.php; - fastcgi_param REQUEST_URI $request_uri; - fastcgi_param PATH_INFO $uri; - - fastcgi_buffer_size 64k; - fastcgi_buffers 8 64k; - fastcgi_busy_buffers_size 128k; - } -} -``` - -**Step 4 –** Validate and reload nginx: - -```bash -nginx -t && /etc/init.d/nginx reload -``` - -:::note -Some Endpoint Protector operations regenerate the nginx configuration from templates. To persist this change across updates, also add the same block to the nginx template files. See the Logs REST API Installation document for details. -::: - -## Step 2 — Create the api_key table (if missing) - -The Logs REST API uses a database table to store API keys. Run: - -```bash -mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp < /dev/stdin <<'SQL' -CREATE TABLE IF NOT EXISTS `api_key` ( - `id` INTEGER NOT NULL AUTO_INCREMENT, - `user_id` INTEGER NOT NULL, - `api_key` VARCHAR(128) NOT NULL, - `name` VARCHAR(256), - `is_active` INTEGER NOT NULL DEFAULT 1, - `created_at` DATETIME, - `last_used_at` DATETIME, - PRIMARY KEY (`id`), - UNIQUE KEY `api_key_unique` (`api_key`), - INDEX `api_key_user_id` (`user_id`), - CONSTRAINT `api_key_FK_1` - FOREIGN KEY (`user_id`) - REFERENCES `sf_guard_user` (`id`) - ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -SQL -``` - -:::info -If your database name is not `epp`, check it in: `/var/www/EPPServer/sieratool/config/databases.yml` -::: - -## Step 3 — Create an API key for an existing admin user - -**Step 1 –** Generate a random API key: - -```bash -openssl rand -hex 32 -``` - -**Step 2 –** List active users and identify the admin user ID: - -```bash -mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ - "SELECT id, username FROM sf_guard_user WHERE is_active = 1;" -``` - -**Step 3 –** Insert the API key (replace `USER_ID` and `API_KEY_VALUE`): - -```bash -mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ - "INSERT INTO api_key (user_id, api_key, name, is_active, created_at) - VALUES (USER_ID, 'API_KEY_VALUE', 'Logs REST API Key', 1, NOW());" -``` - -## Step 4 — Test the API - -```bash -curl -s \ - -H "X-Api-Key: YOUR_API_KEY" \ - "https://localhost/api/logs/endpoints" -``` - -## Step 5 — Key management operations - -**List API keys** - -```bash -mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ - "SELECT ak.id, gu.username, ak.name, ak.api_key, ak.is_active, ak.created_at - FROM api_key ak - JOIN sf_guard_user gu ON ak.user_id = gu.id;" -``` - -**Deactivate an API key** - -```bash -mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ - "UPDATE api_key SET is_active = 0 WHERE id = KEY_ID;" -``` - -**Delete an API key** - -```bash -mysql -u root -p$(cat /var/www/EPPServer/.epp_db_pass) epp -e \ - "DELETE FROM api_key WHERE id = KEY_ID;" -``` - -## Security recommendations - -- Keep the API HTTPS-only. -- Rotate API keys regularly. -- Consider restricting access by IP at the nginx level using `allow` / `deny` directives. -- Consider enabling a dedicated nginx access log for `/api/logs/`. - -:::warning -Never expose development-only authentication bypasses on production servers. If your build includes any hardcoded or bypass API keys for testing, remove them before production rollout. -::: - -## Troubleshooting - -**All endpoints return 404** - -Verify the nginx location block exists and is placed before the generic PHP handler. Run `nginx -t` and reload nginx. - -**502 Bad Gateway** - -Verify PHP-FPM is running and reachable by nginx. - -**401 Unauthorized (even with a valid key)** - -Verify the `api_key` table exists. Verify the API key is active (`is_active = 1`) and the linked user is active.